Микроконтроллеры и среды программирования, что выбрать

Контроллеры, драйверы, датчики, управляющие устройства.
Аватара пользователя
Rafiq
Мастер
Сообщения: 1053
Зарегистрирован: 28 сен 2012, 18:11
Репутация: 6
Откуда: Tatarstan Respublikası, Yar Çallı şəhəre
Контактная информация:

Re: Микроконтроллеры и среды программирования, что выбрать

Сообщение Rafiq »

UAVpilot писал(а):Ну как-же? Почти в каждой программе - таблица векторов прерываний. :)
Внутренняя реализация, после обработки препроцессором, несомненно такая.
Но я то просто пишу

Код: Выделить всё

ISR(TIMER0_OVF_vect)
{
  ...
  return;
}
Хотя конечно это уже нельзя назвать чистым C :) но когда я говорил про чистый С, имел ввиду не С++, т.е. отсутствие объектно-ориентированных расширений языка.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Микроконтроллеры и среды программирования, что выбрать

Сообщение Serg »

Rafiq писал(а):Но я то просто пишу
а остальное "дописывает" препроцессор и компилятор. :)
Вот ты просто начинаешь писать программу с функции main(), а кто эту функцию вызывает на испольнение, святой дух чтоли? :)
Rafiq писал(а):Хотя конечно это уже нельзя назвать чистым C :) но когда я говорил про чистый С, имел ввиду не С++, т.е. отсутствие объектно-ориентированных расширений языка.
Что есть чистый C? Я например могу писать объектноориентированные программы на обычном C (библиотеки X11 тому пример), а могу писать программы на C++ не применяя объектов/классов. :)

Язык C - это своего рода макроассемблер высокого уровня. И относится к нему надо именно как к ассемблеру, т.е. с аналогичными преосторожностями, ибо на С что напишешь, то и получишь.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
Rafiq
Мастер
Сообщения: 1053
Зарегистрирован: 28 сен 2012, 18:11
Репутация: 6
Откуда: Tatarstan Respublikası, Yar Çallı şəhəre
Контактная информация:

Re: Микроконтроллеры и среды программирования, что выбрать

Сообщение Rafiq »

UAVpilot писал(а):
Rafiq писал(а):Но я то просто пишу
а остальное "дописывает" препроцессор и компилятор. :)
Вот ты просто начинаешь писать программу с функции main(), а кто эту функцию вызывает на испольнение, святой дух чтоли? :)

Что есть чистый C? Я например могу писать объектноориентированные программы на обычном C (библиотеки X11 тому пример), а могу писать программы на C++ не применяя объектов/классов. :)

Язык C - это своего рода макроассемблер высокого уровня. И относится к нему надо именно как к ассемблеру, т.е. с аналогичными преосторожностями, ибо на С что напишешь, то и получишь.
Понятное дело, что в общем случае ОС должна загрузить в память исполняемый файл, да и в нем первым вызывается код зависящий от платформы, который встраивается в исполняемый файл линкером, и в конце этого кода есть вызов

Код: Выделить всё

exit(main(int argc, char* argv[]))
Но как я и сказал, мне как прикладному программисту важно то, что пишу я, а что там добавит к моему коду препроцессор или линкер, или каким образом загрузчик размещает мою программу в памяти и передает ей управление, меня в подавляющем большинстве случаев не интересует. И даже когда я пишу модуль ядра, меня интересует интерфейс с ядром, а не то, что реально делает система, когда я даю команду insmod. Мне важно знать только то, что при этом будет вызвана функция init() моего модуля.

Я не спорю, и на простом C можно писать ОО программы, но лучше все таки делать это на С++, который скрывает реализацию. Но поскольку родные библиотеки X11 написаны на C, тут уж деваться некуда. Точно так же и на C++ можно вообще не использовать классы, ведь функция main() не обязана быть методом класса, как это есть в Java или C#.

Насчет предосторожностей согласен.

P.S. На втором курсе у нас был Ассемблер, и это казалось круто - на самом же деле, даже для AVR я пишу на C Так проще. Да и библиотек готовых полно, кои я юзаю при первой возможности (ломает тратить время на изобретение велосипеда, да еще и баги в этом велосипеде отлавливать), повторное использование кода - великая вещь. Как думаешь, много ли было бы написано программ, скажем, для IBM PC, если бы каждому программисту в каждой своей программе приходилось бы иметь дело с регистрами видеоадаптера или контроллера гибких/жестких дисков? :D :D Но для контроллеров знать Ассемблер нужно для понимания архитектуры проца, да и низкоуровневая оптимизация может потребоваться.

P.P.S. В принципе, и под Виндой и под Юниксами можно писать на Асме, и это ненамного сложнее, чем на C, поскольку все сводится в конечном итоге к таким же как и в С вызовам API, но все же Асм тут - просто изврат :)
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Микроконтроллеры и среды программирования, что выбрать

Сообщение Serg »

Rafiq писал(а):Но как я и сказал, мне как прикладному программисту важно то, что пишу я, а что там добавит к моему коду препроцессор или линкер, или каким образом загрузчик размещает мою программу в памяти и передает ей управление, меня в подавляющем большинстве случаев не интересует.
А вот и зря! Особенно если пишешь на C/C++. Я не зря сказал, что на C/C++ что напишешь то и получишь - они практически никак не контролируют те-же треобразования типов. Например можешь сказать к чему приведёт такой код?

Код: Выделить всё

unsigned int a = 5 - 10;
А есть ещё и платформозависимые фишки. На досуге можешь попробовать собрать тот-же LinuxCNC с помощью gcc версии 4.7.0 или выше...
Кстати, при написании программ для STM32 есть потенциальная возможность так написать код, что словишь ошибку при исполнении кода который исполняется до вызова твоей main()
Rafiq писал(а):P.S. На втором курсе у нас был Ассемблер, и это казалось круто
Это собственно про что? Я где-то агитировал писать на Ассемблере? :)
Разве что могу сказать, что для того, чтобы понимать архитектуру знать Ассемблер совершенно не обазательно. а вот чтобы писать на нём программы (как собственно и на C) архитектуру знать желательно.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
Rafiq
Мастер
Сообщения: 1053
Зарегистрирован: 28 сен 2012, 18:11
Репутация: 6
Откуда: Tatarstan Respublikası, Yar Çallı şəhəre
Контактная информация:

Re: Микроконтроллеры и среды программирования, что выбрать

Сообщение Rafiq »

UAVpilot писал(а):Например можешь сказать к чему приведёт такой код?

Код: Выделить всё

unsigned int a = 5 - 10;
Кстати, при написании программ для STM32 есть потенциальная возможность так написать код, что словишь ошибку при исполнении кода который исполняется до вызова твоей main()

Разве что могу сказать, что для того, чтобы понимать архитектуру знать Ассемблер совершенно не обазательно. а вот чтобы писать на нём программы (как собственно и на C) архитектуру знать желательно.
Да, на этом можно наколоться, но я не припоминаю, чтобы накалывался, хотя возможно и было изредка :)

А вот это уже интересно, примерчик в студию, как можно так сделать. Но если это характерно только для STM, то это баг именно средств разработки для STM, или архитектуры самого STM.

А разве система команд и режимы адресации не неотъемлемая часть архитектуры вычислительной системы? А ее то как раз удобно изучать на Ассеблере, все таки символические обозначения человеку как то понятней, чем соответствующие HEX и тем более бинарные коды :)
Аватара пользователя
Rafiq
Мастер
Сообщения: 1053
Зарегистрирован: 28 сен 2012, 18:11
Репутация: 6
Откуда: Tatarstan Respublikası, Yar Çallı şəhəre
Контактная информация:

Re: Микроконтроллеры и среды программирования, что выбрать

Сообщение Rafiq »

Я так понял, STM при одинаковой функциональности, быстродействию и объему памяти получается существенно дешевле, чем AVR? Если да, хотелось бы знать, почему - ну и посоветуйте плз аналог ATMega8 - если у них вообще есть такие мелкие :)
Аватара пользователя
Rafiq
Мастер
Сообщения: 1053
Зарегистрирован: 28 сен 2012, 18:11
Репутация: 6
Откуда: Tatarstan Respublikası, Yar Çallı şəhəre
Контактная информация:

Re: Микроконтроллеры и среды программирования, что выбрать

Сообщение Rafiq »

STM32F103 конечно вкусная штучка - всего за стольник на ebay :)
http://www.ebay.com/itm/1PCS-STM32F103C ... 3a7409a609
Хотя и избыточная для моих задач :) Но очень нравится встроенный RTC и USB :) Куда теперь девать 7 оставшихся у меня Атмег8 и DS1307? :D
Аватара пользователя
Rafiq
Мастер
Сообщения: 1053
Зарегистрирован: 28 сен 2012, 18:11
Репутация: 6
Откуда: Tatarstan Respublikası, Yar Çallı şəhəre
Контактная информация:

Re: Микроконтроллеры и среды программирования, что выбрать

Сообщение Rafiq »

Еще мне интересно, а под Юниксом, юзая gcc, собрать свою прогу вместе с CoOS можно?
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2858
Откуда: Тюмень
Контактная информация:

Re: Микроконтроллеры и среды программирования, что выбрать

Сообщение Сергей Саныч »

Rafiq писал(а):STM32F103 конечно вкусная штучка - всего за стольник на ebay
Как ни странно, не только там за стольник
http://www.elitan.ru/price/index.php?se ... 6&deley=-1
Вообще, складывается впечатление, что STM на российском рынке откровенно демпингует.
Чудес не бывает. Бывают фокусы.
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
Сообщения: 11730
Зарегистрирован: 26 июл 2012, 00:10
Репутация: 4703
Настоящее имя: Михаил Львович
Откуда: Новоуральск
Контактная информация:

Re: Микроконтроллеры и среды программирования, что выбрать

Сообщение michael-yurov »

Rafiq писал(а):STM32F103 конечно вкусная штучка - всего за стольник на ebay
Я недавно купил в ближайшем магазине STM32F100C4T6B по 54 руб.
А если бы взял 50 штук - было бы по 40 руб, или еще дешевле, если бы взял 250: http://www.promelec.ru/catalog/1/11/177 ... 06/#140106
Serg-tmn писал(а):Вообще, складывается впечатление, что STM на российском рынке откровенно демпингует.
Вот и меня это тоже пугает... И отладочные платы дешевле себестоимости: http://cnc-club.ru/forum/viewtopic.php?f=41&t=3069

А когда покупал микроконтроллеры и обвязку к ним, оказалось, что стабилизаторы на 3,3 В по цене почти, как микроконтроллеры :wik:
А я их не глядя купил пару десятков.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Микроконтроллеры и среды программирования, что выбрать

Сообщение Serg »

Rafiq писал(а):А вот это уже интересно, примерчик в студию, как можно так сделать. Но если это характерно только для STM, то это баг именно средств разработки для STM, или архитектуры самого STM.
Это не баг, а фича. Она применяется во многих SDK для поименования регистров.
Rafiq писал(а):А разве система команд и режимы адресации не неотъемлемая часть архитектуры вычислительной системы?
Неотъемлемая. Но как я говорил архитектур архитектур не так уж и много: CISC, RISC, MISC, ну и ещё RISC делится на два варианта по организации памяти (остальные комбинации фактически не имеют практического применения). И все ассемблеры в пределах архитектуры похожи.
Rafiq писал(а):А ее то как раз удобно изучать на Ассеблере, все таки символические обозначения человеку как то понятней, чем соответствующие HEX и тем более бинарные коды :)
Что ты понимаешь под архитектурой МК? Если то, что я написал чуть выше, то например мне это по сути не интересно - это вместо меня хорошо знает компилятор C. :)
А если ты назывешь так набор перефирии МК (порты, таймеры, ...), то это можно неплохо изучать и с помощью C. :)
Rafiq писал(а):Я так понял, STM при одинаковой функциональности, быстродействию и объему памяти получается существенно дешевле, чем AVR? Если да, хотелось бы знать, почему - ну и посоветуйте плз аналог ATMega8 - если у них вообще есть такие мелкие :)
Потому что обычно почему-то сравнивают МК очень разных классов, например STM32 и ATMega8, но попробуйте сравнить с 32-битными AVR. А цена на МК сейчас по сути больше зависит от стоимости металла для выводов, чем от производительности.
Rafiq писал(а):Еще мне интересно, а под Юниксом, юзая gcc, собрать свою прогу вместе с CoOS можно?
Можно. По сути CoOS - это набор библиотек (большей частью от stm) и IDE на основе Eclipse.
У меня на домашнем компе практически юзабельный вариант получился, только при отладке приходится несколько лишних телодвижений делать.
Rafiq писал(а):Хотя и избыточная для моих задач :) Но очень нравится встроенный RTC и USB :) Куда теперь девать 7 оставшихся у меня Атмег8 и DS1307? :D
В некоторых случаях бывает проще применить какой-нибудь мелкий PIC или AVR, чем навешивать буфера для получения 5-вольтовых входов/выходов.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Ответить

Вернуться в «Электроника»