Qubc
@Qubc
Ненавижу полисемию.

Изучение С для программирования микроконтроллеров?

Всем привет.
Хочу начать изучать чистый С для того, чтобы потом изучать ARM архитектуру. Нашел вот такой пост, Программирование на микроконтроллере STM32 под Cortex M3, подборка ссылок на литература по арм, но, мне кажется, это все бесполезно, если не знаешь сам язык. Различаются ли направления по изучению С для мк или программ высокого уровня?
Или, если я вот так классный, хочу погрузиться в арм, для начала можно взять любой популярный самоучитель по С ? Искусство схемотехники, вообще схемотехника, с этим всё понятно. А вот с языком не совсем...
  • Вопрос задан
  • 2081 просмотр
Пригласить эксперта
Ответы на вопрос 5
@Mirn
Внимание: Всё что пишу, пишу про голое железо или простые RTOS (стм32 и тд)

Это программирование делится на три части:
1. Это железо! С железом проблем нет, читаем мануал, используем рекомендуемую производителем железа библиотеку по работе с железом получаем гарантированный результат. Трудно будет только по началу. Но это опыт наживной и относительно лёгкий.

2. Реалтайм и инженерное мастерство и инженерный опыт: Часто проги под МК работать будут в реальном времени налету, ждать никто не будет. Дважды измеренная величина всегда будет отличаться, произойти может что угодно и в какой угодно последовательности. Клоки и тактовая плавает. Количество переданных и принятых данных всегда будет разное даже по одному и тому же уарту. Всё это должна учитывать ТВОЯ программа и не падать при любом раскладе. Как видишь программа будет иметь дело с гораздо большим количеством случайностей чем при программировании в вебе/ПК и повторяемости событий почти не будет. И надо быть чуточку инженером и знать что у всего с чем работаешь есть отклонения и шум в результатах, особенно аналоговых и АЦП.

3. Это программирование на Си как обычном языке. Тут всё просто и понятно, мануалов море - выбирай по вкусу и цвету.

4. ОБЩЕЕ АЛГОРИТМИЧЕСКОЕ ПРОГРАММИРОВАНИЕ. Неважно что это железо но алгоритм оптимально но не слишком перфекционистки. Ты должен реализовать и язык тебе тут не поможет, он не связан с алгоритмом и наборов удобных библиотек гораздо меньше чем под ПК и веб.

5. НЕ УЧИ АССЕМБЛЕР. не углубляйся в схемотехнику, достаточно будет уровня уверенного ардуинщика. Ассемблер сейчас нужен не для написания программ а вылизывания отлично сделанной проги которая уже продаётся но нужно выжать ещё 5-10% быстродействия, ТОЛЬКО ТОГДА. Всё остальное делается либо конфигами либо LD файлом линкера. Дебри схемотехники тоже не нужны, главное понимание как и почему это работает, без всяких четырёх полюсников и глубоких анализов фазовых задержек.
Ответ написан
leahch
@leahch
3D специалист. Dолго, Dорого, Dерьмово.
Не очень различаются, для введения в язык С начните с книжки Керниган и Ритчи, диалект языка конечно немного устарел, но все основы представлены.
Основной упор делайте на работу с указателями, структурами и битовыми операциями.
Для обращения к регистрам устройства (процессора и периферии), обычно используется следующая конструкция:
....
volatile u_int32 *my_cool_register = 0xFFFEBEEF; /* адрес 32-разрядного регистра, ключевое слово volatile */
my_cool_register  |= 0x2; /* взвести второй бит */ 
....

Ну и у Cortex-M3 есть адресное пространство, где все БИТЫ доступны по отдельным адресам, часто это очень удобно.

PS. Да, используйте библиотеки от поставщика, там много уже сделано в виде макросов (про это в книжке) и библиотек.
Ответ написан
Комментировать
@lamazavr
программирование контроллеров отличается работой с периферийными устройствами.
если кратко то нужно писать/читать память в нужном порядке
начните с мигания диодом, дисплея, шима, уарта и т.п. дальше станет понятно куда двигаться
Ответ написан
Комментировать
@beduin01
Советую посмотреть https://github.com/redox-os/redox в плане ознакомления с современными языками программирования на предмете написания ОС
Ответ написан
Комментировать
@iv_k
Для изучения языка достаточно K&R + туториалы и экзамплы к среде разработки.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы