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

SMRM

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

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

  • Посещение

Репутация

0 Обычный

Информация о SMRM

  • Звание
    Участник
    Участник

Посетители профиля

1 788 просмотров профиля
  1. Режимы работы STM32L073

    Изучаю режимы работы STM32L073. Использую плату NUCLEO-L073RZ. Первый вопрос. 1. Настраиваю CLK: MSI /* MSI configuration and activation */ LL_RCC_PLL_Disable(); /* Set new latency */ LL_FLASH_SetLatency(LL_FLASH_LATENCY_0); LL_RCC_MSI_Enable(); while (LL_RCC_MSI_IsReady() != 1) { } LL_RCC_MSI_SetRange(LL_RCC_MSIRANGE_6); LL_RCC_MSI_SetCalibTrimming(0x0); /* Sysclk activation */ LL_RCC_SetAHBPrescaler(LL_RCC_SYSCLK_DIV_1); LL_RCC_SetSysClkSource(LL_RCC_SYS_CLKSOURCE_MSI); while (LL_RCC_GetSysClkSource() != LL_RCC_SYS_CLKSOURCE_STATUS_MSI) { } /* Set APB1 & APB2 prescaler*/ LL_RCC_SetAPB1Prescaler(LL_RCC_APB1_DIV_2); LL_RCC_SetAPB2Prescaler(LL_RCC_APB2_DIV_2); /* Set systick to 1ms in using frequency set to 4MHz */ LL_Init1msTick(FREQ_MSI); /* Update CMSIS variable (which can be updated also through SystemCoreClockUpdate function) */ LL_SetSystemCoreClock(FREQ_MSI); /* Enable Power Control clock */ LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_PWR); /* The voltage scaling allows optimizing the power consumption when the device is clocked below the maximum system frequency, to update the voltage scaling value regarding system frequency refer to product datasheet. */ LL_PWR_SetRegulVoltageScaling(LL_PWR_REGU_VOLTAGE_SCALE3); 2. Все пины в режим аналогов. 3. Запускаю часы на LSE и вкл еще WakeUpRTC на интервал 20 сек. 4. Ухожу в режим STOP. Потребление 1 мкА. 5. Через 20 сек контроллер поднимается по прерыванию WakeUpRTC и опять возвращается в STOP. Потребление уже 3 мкА. Вроде все что могло повлиять перерыл, но объяснения не нашел. Второй вопрос. Все тоже самое только контроллер поднимается по WakeUpRTC каждые 100 мсек. Потребление по тестеру 6 мкА стоит около ~43-45 сек. Затем за такой же интервал времени потребление постепенно поднимается до 12 мкА и опускается до 6 мкА. Опять потребление 6 мкА тот же промежуток времени. Опять то же изменение потребление. И так по циклу. Тоже не пойму причину такого поведения. Почему потребление не сохраняется на уровне 6 мкА?
  2. В Iar 8 поменяли DLib_Threads, поэтому не компилятся старые проекты с uCos-iii где использовался TLS. Может кто разбирался с этой проблемой и что-то подскажет. Может есть пример файла os_tls.c для uCos-II или III работающий с IAR 8.x.
  3. Извините, что не сразу ответил. Тики тикают. Вопрос решить удалось. Были мои ошибки связанные с оформлением прерываний. Но в целом пока проект не запустил, возникло много других моментов. Почему 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мкА.
  4. В проекте на 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.
  5. Здравствуйте! Пытаюсь настроить 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 нет никаких проблем. Заранее благодарю за помощь.
  6. использование TLS в IAR

    Здравствуйте, Уважаемые Коллеги! Пишу проект на 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. Видимо при инициализации системы необходимо указавать что защищать, но до меня никак не доходит как это сделать. Мне нужно организовать потокобезопастность выделения и освобождения памяти в куче. Может кто-то сталкивался с такой задачей. Заранее благодарю за помощь.
  7. Большое спасибо за помощь. В предыдущих проектах стояло #ifdef __cplusplus extern "C" { #endif Это помогло. Еще раз спасибо за подсказку.
  8. Компилится в режиме Extended Embedded C++
  9. Уважаемые коллеги! Помогите с решением проблемы. Использую 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 присутствует. Заранее благодарю за помощь.
  10. Спасибо за подсказку! Сделал как предложили и увидел на осциллографе что старт 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 Может кто встречал такую ситуацию и что подскажет. Заранее благодарю за помощь.
  11. Запуск из LPM3 по приему в UART

    Уважаемые коллеги подскажите в чем проблема. Кристалл 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 работает. Что не так? Заранее благодарю за помощь.
  12. настройка assert

    Скачано с Iar.com, а затем полечено. На установку исходников библиотек просит пароль. Получилось сделать вывод сообщения assert в terminal I/O. В симуляторе работает. а под jlink начинает выводить, а затем происходит слет.
  13. настройка assert

    Такого файла в IAR 6.50.2 не нашел
  14. настройка assert

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

    Спасибо за подсказку, но поясните непросвещенному, что такое контики Понял. Разговор о OS Contiki. Если нетрудно дайте ссылку на ее доку,src и пример проекта
×
×
  • Создать...