Июл 27 2010

Отладка прибора

Read more »

Июл 15 2010

C и C++

Что можно в С, но нельзя в С++?

Отсюда: http://publib.boulder.ibm.com/infocenter/comphelp/v8v101/index.jsp?topic=/com.ibm.xlcpp8a.doc/language/ref/param_decl.htm

С: The user-defined type can also be defined within the parameter declaration.

 С++: The user-defined type can not be defined within the parameter declaration.

void print(struct X { int i; } x);   // legal in C
void print(struct X { int i; } x);   // error in C++

Июл 15 2010

Конфигурация памяти в IAR

Проект, написанный на С++ в IAR под микроконтролер LPC2368 (ядро ARM7TDMI), не заработал после перекомпиляции под LPC1768 (ядро Cortex M3). Предпринятые исследования показали, что программа падает на совершенно невинной строке:

AddControl(new usBmpButton(110, 9, 17, 18, 10, BTN_FORWARD, MSG_BTN_FORWARD));

то есть, как нетрудно догадаться, именно на операции выделения памяти new.

Дальнейшее изучение проблемы привело к файлам конфигурации, хранящимся в папке config проекта. В файле LPC1768_Flash.icf есть строка:

define symbol __ICFEDIT_size_heap__     = 0x400;

то есть на «кучу» (динамически распределяемую память) отводится всего лишь 1 кбайт памяти! В старом проекте в аналогичном файле было указано значение 0x6000, т.е. 24 кбайта! После изменения значения программа заработала.

Следует отметить также, что необдуманное применение динамически распределяемой памяти в встраиваемых системах чревато фрагментацией памяти и, как следствие, прекращенем работы программы. Но это уже другая тема.

Июл 09 2010

IAR, Cortex M3 и C++

При перетаскивании проекта с LPC2368 (ядро ARM7TDMI) на LPC1768, который является pin-to-pin совместимым с LPC2368, но на ядре Cortex M3, столкнулся со следующими проблемами и особенностями:

Read more »

Июл 03 2010

Платы нового прибора

Сборка из двух плат будет устанавливаться в корпус прибора.

Платы содержат: микроконтроллер, 4 канала ЦАП, 4 канала АЦП (24 бит), с контролем обрыва цепей датчиков, 6 дискретных переключающих выходов,  силовые ключи управления ТЭНами. порты USB, RS-232, RS-485, возмжность установки интерфейса Ethernet. Все аналоговые и дискретные входы и выходы имеют гальваническую развязку друг от друга и от микроконтроллера. 

Платы по отдельности:

нижняя, с АЦП, дискретными выходами и силовыми ключами — http://32bit.me/?p=452

верхняя, с ЦАП имикроконтроллером — http://32bit.me/?p=444

К верхней плате подключается дисплей (монохромный графический 128х64) и клавиатура — http://32bit.me/?p=457

Под катом ещё фотки.

Read more »