Jump to content

    

SMRM

Участник
  • Content Count

    20
  • Joined

  • Last visited

Community Reputation

0 Обычный

About SMRM

  • Rank
    Участник

Recent Profile Visitors

1393 profile views
  1. В Iar 8 поменяли DLib_Threads, поэтому не компилятся старые проекты с uCos-iii где использовался TLS. Может кто разбирался с этой проблемой и что-то подскажет. Может есть пример файла os_tls.c для uCos-II или III работающий с IAR 8.x.
  2. Цитата(k155la3 @ Aug 26 2016, 14:57) Тики тикают ? Проверьте не на отладчике, а аппаратно, методом ногодрыга. Неполиткорректный вопрос. Почему uCOS, а не scmRTOS или FreeRTOS ? Извините, что не сразу ответил. Тики тикают. Вопрос решить удалось. Были мои ошибки связанные с оформлением прерываний. Но в целом пока проект не запустил, возникло много других моментов. Почему uCOS. Да просто получилось исторически так, что ранее ее использовал для проектов на ARM и все устраивало. Для MSP430 давно уже применяю scmRTOS(правда так как началось это уже очень давно, то еще версию V2.03) и тоже было нормально. Находил пару багов, исправлял и все работало. Но сейчас решил применить опыт работы с ARM (STL:vectore, list, map, string) в MSP430, ну и понадобилось защищать heap для библиотечных элементов. Для ARM делал это через TLS, а для scmRTOS писал простой диспетчер и всю динамику делал через него. Но библиотечные элементы через мой диспетчер прогонять очень неудобно, вот и решил поменять ОС. Правда, как сейчас вижу, возникает много вопросов, в особенности с размером требуемого ОЗУ для heap и с тем что DLIB IAR-MSP430 не поддерживает подсчет размера используемой кучи. Недавно увидел, что с scmRTOS можно прикрутить аллокатор, в частности bget. Может кто имеет опыт этого, например, сколько потребуется ОЗУ, и ляжет все это для MSP430F5437A. Может есть какие-то другие решения потоковой защиты библиотечных элементов Heap, которые можно применить с контроллерами у которых ограничен ресурс ОЗУ. Использование MSP430F5437A обусловлено требованием малого потребления. Устройство в моем старом проекте в основном режиме потребляет 30мкА.
  3. В проекте на MSP430F5437a пытаюсь применить uCOS-III. По старту OS в OSStart(&os_err) - заполняются TCB - вроде все правильно. Затем начинается вызов самих тасков в порядке приоритета. Сначала вызывается первый task - все нормально. Затем первый task в pend, переходим на второй. И здесь проблема в schedulere. Вместо перехода на следующий похоже возвращаемся на старую точку. Вот код: OSCtxSw POPX.W R12 ; Pop lower 16 bits of PC. POPX.W R13 ; Pop upper 4 bits of PC. PUSHX.W R12 ; Save lower 16 bits of PC. RLAM.A #4, R13 ; Save SR + upper 4 bits of PC. RLAM.A #4, R13 RLAM.A #4, R13 MOVX.W SR, R12 ADDX.A R13, R12 PUSHX.W R12 PUSHM.A #12, R15 ; Save R4-R15. MOVX.A &OSTCBCurPtr, R13 ; OSTCBCurPtr->StkPtr = SP MOVX.A SP, 0(R13) CALLA #OSTaskSwHook MOVX.B &OSPrioHighRdy, R13 ; OSPrioCur = OSPrioHighRdy MOVX.B R13, &OSPrioCur MOVX.A &OSTCBHighRdyPtr, R13 ; OSTCBCurPtr = OSTCBHighRdyPtr MOVX.A R13, &OSTCBCurPtr MOVX.A @R13, SP ; SP = OSTCBHighRdyPtr->StkPtr POPM.A #12, R15 ; Restore R4-R15. RETI После POPM.A #12, R15 все регистры заполняются верно(смотрел в debug), в том числе и SP. Если поставить точку останова на RETI и затем сделать один шаг в Debug, то переходит как и требуется на следующий task, записанный в контексте. Если же после RETI продолжить в автомате, то переключается не на task, а похоже в точку вызова OSCtxSw.
  4. Здравствуйте! Пытаюсь настроить TLS в Dlib Iar. В проекте использую uCOS-III и их пример построения в файле os_tls.c. Ранее для проекта на LPC4078 все работало. Нужна TLS для защиты heap, так как вызывается оператор new в разных потоках. В новом проекте - микроконтроллер MSP430F5437a. Линкер выдает ошибку: Error[e46]: Undefined external "__cstart_init_tls" referred in ?errno Пока не могу понять как отменить инициализацию TLS data segment в Dlib. Для LPC4078 инициализация вроде отключена по умолчанию. Может кто что подскажет или укажет на какой-то пример для MSP430. Вторая проблема возникла при определении размера занимаемого кучей с помощью __iar_dlmallinfo(). Также IAR for MSP выдает ошибку: Error[e46]: Undefined external "__iar_dlmallinfo" referred in CommObjectDef, хотя для Iar for Arm нет никаких проблем. Заранее благодарю за помощь.
  5. Здравствуйте, Уважаемые Коллеги! Пишу проект на LPC1769. Среда IAR 7.3. RTOS - uCOS-III. Использую STL(vector, list, map и auto_ptr). Необходимо обеспечить потоковую безопастность как библиотечных объектов, так и собственных при размещении в куче(вызов new и delete). Пытаюсь сделать это через System locks interface IAR. Подключаю к проекту описание Кодvoid __iar_system_Mtxinit(__iar_Rmtx *); /* Initialize a systemlock */ void __iar_system_Mtxdst(__iar_Rmtx *);/*Destroy a system lock */ void __iar_system_Mtxlock(__iar_Rmtx *); /* Lock a system lock */ void __iar_system_Mtxunlock(__iar_Rmtx *); /* Unlock a system lock */сделанное в TLS OS uCOS-III. Все компилится. При отладке вижу что __iar_system_Mtxlock при создании динамического объекта вызывается, она далее вызывает Кодvoid  OS_TLS_LockAcquire (void  *p_lock) {     OS_TLS_LOCK  *p_tls_lock;     OS_ERR        os_err;              if ((p_lock    == (void *)0          ) ||                     /* Return if the lock handler is 'NULL' or the ...  */         (OSRunning != OS_STATE_OS_RUNNING)) {                     /* ... kernel is not running.                       */         return;     }          p_tls_lock = (OS_TLS_LOCK *)p_lock;     OSMutexPend((OS_MUTEX *)&p_tls_lock->Mutex,                 (OS_TICK   ) 0u,                 (OS_OPT    ) OS_OPT_PEND_BLOCKING,                 (CPU_TS   *) 0,                 (OS_ERR   *)&os_err);     (void)&os_err; }но до mutex дело не доходит, так как p_lock = 0 . Соответсвенно защиты нет и как следствие через какое-то время вылет в EXIT. Видимо при инициализации системы необходимо указавать что защищать, но до меня никак не доходит как это сделать. Мне нужно организовать потокобезопастность выделения и освобождения памяти в куче. Может кто-то сталкивался с такой задачей. Заранее благодарю за помощь.
  6. Цитата(Сергей Борщ @ Jan 16 2014, 16:29) А bsp_int.o компилится из сишного файла в режиме C или из ассемблерного файла? Тогда добавьте extern "C" перед объявлением функции CPU_IntSrcEn() и гуглите name mangling. Большое спасибо за помощь. В предыдущих проектах стояло #ifdef __cplusplus extern "C" { #endif Это помогло. Еще раз спасибо за подсказку.
  7. Цитата(Сергей Борщ @ Jan 16 2014, 15:02) Компилится случайно не в режиме С++? Компилится в режиме Extended Embedded C++
  8. Уважаемые коллеги! Помогите с решением проблемы. Использую IAR 6.60. Проект компилится без ошибок. При линковке выдается сообщение: Error[Li005]: no definition for "CPU_IntSrcEn" [referenced from E:\ ControllersArm_IAR\...\Debug\Obj\bsp_int.o] Error while running Linker Файл в котором находится эта функция откомпилирован и есть его объект файл cpu_c.o в ...стандартной папке ...\Debug\Obj\ В литинге этого файла откомпилированная нужная функция CPU_IntSrcEn присутствует. Заранее благодарю за помощь.
  9. Цитата(rezident @ May 28 2013, 23:06) Чтобы не гадать какие именно "чудеса" вносит сам отладчик, проверьте работу на "чистом железе" без использования отладчика. Скорректируйте свою программу. Выведите SMCLK на соответствующий пин (переключите функцию пина для вывода SMCLK) и в штатном режиме с использованием LPM3 проконтролируйте с помощью осциллографа активацию SMCLK при приеме UART. Вывод некорректный. В том смысле, что SMCLKREQEN = 1 это условие необходимое, но не достаточное. Спасибо за подсказку! Сделал как предложили и увидел на осциллографе что старт SMCLK есть, но продолжительное время частота не та которую задаю с помощью DCO+FLL. Только значительно позже частота становится требуемой(8 мГц). За это время уже все данные пропали. Как я понял по документации по старт биту UART через SMCLKREQEN запускается только DCO(так как при вызове прерывания SCG0 остается в 1. Попробовал для решения вопроса организовать прерывание NMI в котором сбрасываю SCG0. Не помогло. Возможно при моей настройке нельзя из LPM3 организовать корректный запуск генератора и прием на UART(baud 115200, хотя пробовал и для 9600). Мои настройки: UCSCTL4 = (SELA__XT1CLK + SELM__DCOCLK + SELS__DCOCLK); __bis_SR_register(SCG0); // Disable the FLL control loop UCSCTL0 = 0x0000; // Set lowest possible DCOx, MODx UCSCTL1 = DCORSEL_4; // Set RSELx for DCO UCSCTL2 = FLLD_0 + 243; // Set DCO Multiplier for 8MHz __bic_SR_register(SCG0); // Enable the FLL control loop Может кто встречал такую ситуацию и что подскажет. Заранее благодарю за помощь.
  10. Уважаемые коллеги подскажите в чем проблема. Кристалл MSP430F5418A. Использую DCO как клок для SMCLK. Калибрую через FLL кварцем 32kHz клок для UART. Ухожу в LPM3. При передачи в UART данных все запускается и ловит данные для ревизии revE. Все это работает и давно. Сейчас закупили ревизию F. Перестал работать UART(данные не ловятся). Но под JTAG работает и ревизия F. В errate пишут что в rev E оставался вкл SMCLK, а в rev F это устранили. Проверял под JTAG с помощью запрета SMCLKREQEN запускается ли процедура старта генерации для UART. Когда SMCLKREQEN = 1, прием UART работает. Когда SMCLKREQEN = 0 не работает. Делаю вывод что запуск клока для UART из LPM3 при правильной настройке SMCLKREQEN работает. Что не так? Заранее благодарю за помощь.
  11. настройка assert

    Цитата(mdmitry @ May 7 2013, 16:35) Скорее всего у Вас не полная лицензия. В полной лицензии есть каталог исходных текстов библиотеки. (Сужу по 6.4). Скачано с Iar.com, а затем полечено. На установку исходников библиотек просит пароль. Получилось сделать вывод сообщения assert в terminal I/O. В симуляторе работает. а под jlink начинает выводить, а затем происходит слет.
  12. настройка assert

    Цитата(scifi @ May 7 2013, 13:05) Найдите файл xassert.c там, где установлен яр, скопируйте в свой проект, исправьте что нужно. Такого файла в IAR 6.50.2 не нашел
  13. настройка assert

    что такое assert и как использовать в коде вроде представляю, но настроить выдачу нужного сообщения в нужное место(ну например, если возможно в какой-то файл, или в DEBUG LOG) не получается. Укажите если можно нужное направление. Заранее спасибо!
  14. Как подключить DHCP

    Спасибо за подсказку, но поясните непросвещенному, что такое контики Понял. Разговор о OS Contiki. Если нетрудно дайте ссылку на ее доку,src и пример проекта
  15. Уважаемые коллеги подскажите. Использую в проекте uCosII и ее Tcp стек в режиме статической адресации.Микроконтроллер NXP 2387. Все работает. Появилась необходимсть в динамичесой адресации. DHCP для этого стека у меня нет. Что можно подключить или адаптировать к этому стеку и операционке. Заранее благодарен за уделенное внимание.