Перейти к содержанию
    

helicopter

Участник
  • Постов

    7
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный
  1. Всем доброго времени суток. Возникла проблема с тем, чтобы виртуальный последовательный порт (CDC device) имет правильный серийный номер являясь при этом частью USB Composite device. Заполняю структуру g_pStringDescriptors static const unsigned char * const g_pStringDescriptors[] = { g_pLangDescriptor, g_pManufacturerString, g_pProductString, g_pSerialNumberString }; Указатель на неё вставляю в структуры g_sCompDevice и g_psCDCDevice. Подключаю устройтсво к компьтеру с виндой. В device manager появляются два устройства - USB Composite device и виртуальный последовательный порт, но у USB Composite device серийный номер такой, как был указан в g_pStringDescriptors, а вот CDC device напрочь игнорирует эту структуру. Если же убрать композитное устройство и сделать CDC-device самостоятельным, то структура g_pStringDescriptors перестаёт игнорироваться и все параметры из неё видны операционной системе. Вопрос: как добиться того, чтобы у CDC-устройства, находящегося в составе композитного USB-устройства операционка видела указанный в прошивке серийник ?
  2. Embedded lua ?

    Ничего себе частота у аврки :D А если без шуток, то были ли какие-то особенности конфигурации ? Или стандартная виртуальная машина + модули для выозва Си-функций и всё ? Интересная штука. Си-подобный синтаксис и малое потребление ресурсов очень привлекают, но, насколько я понял, оно не поддерживает структуры ? Без поддержки структур довольно грустно, т.к. надо будет работать с Си-функциями, принимающими/возвращающими структуры.
  3. Embedded lua ?

    Нужно встроить в контроллер поддержку исполнения скриптов, загружаемых извне. Почитав в интернете про ECMAScript/tcl/lua/Forth решил, что lua будет наиболее подходящим вариантом. Кроме того - для lua был обнаружен вот такой сайт http://www.eluaproject.net/, где указаны требования 64к RAM и 128/256 Flash в зависимости от того - поддерживаются ли числа с плавающей точкой. Правда этот проект подразумевает установку на контроллер виртуальной машины lua и, в дальнейшем, программирование контроллера уже на lua. Для чего там делаются обёртки для всех функций работы с периферией. Мне же нужно только поддерживать вызов некоторых C-функций конткроллера. На том же сайте написано, что eLua может требовать 10 кб RAM в минимальной конфигурации, "но при этом вы не сможете сделать ничего больше, чем поморгать светодиодом" (ц). Отсюда вопрос - пробовал ли кто встраивать lua в ARM и сколько ресурсов при этом требует только виртуальная машина без всяких обёрток для доступа к периферии ? Контроллер lm3s5r31 48кб RAM/256 кб FLASH, поэтому полный вариант eLua точно не подходит. А вот сколько потребует голая виртуальная машина - я не нашёл.
  4. Scifi, большое спасибо. Замена initialize by copy на initialize manually with packing=none решило проблему.
  5. Может существует способ как-то заставить его укладывать данные в память по человечески ? В скрипте линкера указать или ещё как-нибудь ? Кажется нашёл: http://en.wikipedia.org/wiki/PackBits Вопрос: "Можно ли это как-то отключить ?", - остаётся в силе. Если у кого-то есть готовая реализация на си, тоже буду благодарен.
  6. Спасибо, но к сожалению я не нашёл там функцию __iar_packbits_init3. P.S. В первом сообщении опечатался, где "(т.е. по выравненному адресу)" - я хотел написать: "т.е. по невыравненному адресу". Потому этот факт меня сильно удивил.
  7. Нужно написать полностью собственную первичную инициализацию вместо __iar_program_start. Попытался сделать это, как делал в GCC - .bss от начала до конца забивается нулями, а .data_init (flash) копируется в .data (sram). Тут обнаружилась первая странность - данные в .data_init начинаются не с начала секции, а с __section_begin(".data_init") + 1 байт. (т.е. по выравненному адресу). Сдвиг начального адреса на этот один байт ситуацию улучшил, но не полностью. Большая часть данных теперь инициализировалась нормально, но в некоторых структурах (связанных с usb) оказался какой-то жуткий мусор, в результате чего прошивка стала падать в из прерывания usb в FaultISR из-за обращения по несуществующему адресу. Пытался дизассемблировать встроенную иаровскую инициализацию, но там в части копирования данных какая-то жесть. Разобраться полностью сходу не удалось. Может кто уже сталкивался ? По какому принципу у IAR уложены данные в память ? Контроллер LM3S5R31
×
×
  • Создать...