All streams
Search
Write a publication
Pull to refresh
86
0
Влад @lorc

Embedded разработчик

Send message
компилятор, который был под рукой (Keil C) даже const char *s=«ABCD»; запихивает в секцию .data (эта та, где память RW). Что бы он гарантировано запихнул в секцию .conststring (она у меня хранится натурально в ROM)
Вот тогда точно вылезут фокусы с интернированием строк. Более того, тогда надо и спрашивать про различие const в C и С++. Там ведь тоже не всё так просто.
упс. Следует читать «там же не const char, однако
ммм… сработает? Там же const char, однако.
Что мне помешает сделать так:

char* word1 = “Hello”;
char* word2 = “Hello”;

word1[2] = 'x';

if( word1 == word2 )
printf(“equal”);
else
printf(“not equal”);

?
Или мы говорим о шибко умных компиляторах?
Да, это я наверное опишу в следующей практической статье.
Ну AVRки (вы же о них?) разве что паять удобно (ибо бывают в больших корпусах). А в остальном — разницы между серией AT91SAM и AVR в плане разводки и сборки — немного. Единственное, что у ARM множество входов питания. И часть ножек — системные, они должны быть подтянуты к земле или питанию.
Если покупать демо-плату — то разницы вообще нет, ибо там уже всё разведено и припаяно.
Где купить в розницу — не подскажу, ибо мы процессоры покупаем тысячами сразу :)
Ну насколько я знаю — стереть прошивку совсем и залить что-то своё можно всегда. Защиты обычно не дают скачивать/изменять существующую прошивку.
Разбирать и изучать — это к сожалению единственный способ.
Но самое поганое не это. Некоторые производители жлобятся выкладывать подробные даташиты по своим продуктам в открытый доступ.
Хотя, думаю в дешевых китайских нетбуках стоят такие же дешевые комплектующие, документации по которым вагон :)
Ну там можно ожидать Линукс, я думаю :)
Или WinCE.
Для таких ARM-ов, Линукс — вполне себе хорошее решение, насколько мне кажется. Во всяком случае там уже есть все драйвера и много софта.
Если уж очень хочется своё, то можно взять бесплатную realtime os, даташиты на процессор, всю периферию что стоит в ноуте, и писать, писать, писать :)
Только сначала надо будет получить доступ к памяти программ. Самый популярный способ — через JTAG, если производитель ноута не предоставит каких-нить стандартных способов перешивки.
Хм, вижу ARMv7 намного совершенней в этом плане, чем ARMv5.

Вложенные прерывания в ARM7TDMI организовать можно, но вручную: в общем обработчике прерываний сохраняем адрес возврата на стеке, разрешаем прерывания, вызываем настоящий обработчик. Что бы сделать стек прерываний небольшим — можно выполнять настоящий обработчик в основном режиме работы, там стек обычно большой.
Затем, если придет более высокоприоритетное прерывание (за этим следит AIC) — оно сможет выполнится точно таким же образом.
Ух ты, буду знать. Спасибо :)
А как настроить стеки в других режимах?
Эм… насколько я понял из документации — он инициализируется точно так же.
Всё же кто-то должен прописать вектора обработчиков, инициализировать стеки и память. При желании это наверное можно сделать на C… Но выглядеть будет странно :)
Кстати, надо будет попробовать, спасибо за идею :)
А вообще вся периферия ARM7TDMI тоже инициализируеися на C.
В этой статье я просто описывал, что надо сделать, что бы C заработал.

Кстати да. Я вот не могу понять, почему народ носится с Arduino, если можно купить демо-плату и получить как минимум те же возможности, а обычно — намного больше.
Arduino конечно проще, да. Но с KIT'ами поставляется документация и примеры. Разобраться в них — не сильно сложнее. А сделать можно больше интересных вещей
Ну процессор стартует с адреса 0x0. Что там находится — зависит уже от производителя и конфигурации процессора. Там может быть как bootrom, так и flash, можно туда замапить и RAM. Например, AT91SAM7X512 поддерживает все три варианта: изначально туда мапится bootrom, после перепрошивки мапится Flash, а с помощью Мemmory Controller можно замапить туда RAM (например что бы менять адреса обработчиков исключений в рантайме).
Код действительно повторяет startup.s, Но мне однажды пришлось очень хорошо разобраться, как этот код работает. Думаю, будет интересно не мне одному.
Действительно, если есть внешняя память, то сначала надо инициализировать источник тактовой частоты и внешнюю память. Он этим обычно занимается загрузчик.
Считайте, что я описал пример самого простого загрузчика, которому хватит внутренней SRAM
если я правильно понял — u-boot грузит только линукс. А у нас монолитная прошивка с real-time ядром, которая в общем может и сама стартовать, без загрузчика. Загрузчик по большому счету нужен только для обновления прошивки.
Свой самописный протокол, который ползает от одного проекта к другому.
вот о java к сожалению ничего не расскажу. Так вышло, никогда не работал с ней. В тех камнях, что мы используем просто негде развернуться с ней.
Ну я уже решил, что следующая статья будет про самое начало — как АРМ запускается. И как его запустить. С одной стороны — это довольно хардкорно, с другой стороны — если более менее заниматься такими штуками, то это надо знать.
А какие термины были непонятны? Постараюсь в следующий раз более подробно расписать.
Ну как бы ARM7 (в отличие от ARM9, например) — тот же микроконтроллер, вещь в себе. Правда побольше и помощнее :)
Насчет производителей… почему-то обычно выбирают Philips (серия LPC). Но мы остановились на атмеловских. В сущности разница небольшая, как мне кажется.
Про «писать и отлаживать»- я постараюсь написать развернуто позже.

Information

Rating
5,320-th
Location
Украина
Date of birth
Registered
Activity