Jump to content

    

Johnny81

Свой
  • Content Count

    782
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Johnny81

  • Rank
    Знающий

Контакты

  • Сайт
    http://

Информация

  • Город
    Волгодонск

Recent Profile Visitors

3189 profile views
  1. я вам намекаю, что фриртос тут дело десятое. Вам надо придумать алгоритм работы, пройтись по нему в поисках гонок/дедлоков, а дальше уже переложить его на фриртос. Или не перекладывать - фриртос не отменяет высокоприоритетных прерываний какой-то готовой межпроцессорной синхронизации во фриртос, имхо, из коробки нет
  2. А при чем тут фриртос вообще? Вам надо каким-то образом определить свободность интерфейса...
  3. А вы уверены, что тут вообще нужна очередь? Есть общие данные - содержимое дисплея. С ними работают из разных потоков через локи. Отдельный поток занимается передачей этих данных в дисплей.
  4. А почему нет отладки? Загрузчик модифицируете так, чтобы не ставилась защита. Заливаете загрузчик из под отладчика. Далее заливаете программу штатно через загрузчик. Попадается в Jump_To_Application (). Переключаетесь на отладочные символы программы и вперед! Как сделать последнее в IAR - не знаю :)
  5. Думаю стоит поглядеть в сторону статической библиотеки. Сначала собираете секретную часть исходников в такую библиотеку, а далее используете ее вместе с открытыми исходниками. Лично не пробовал
  6. Странный HARDFAULT

    А я отвечал выше, слилось в одно сообщение. void xPortSysTickHandler( void ) { /* If using preemption, also force a context switch. */ #if configUSE_PREEMPTION == 1 portNVIC_INT_CTRL_REG = portNVIC_PENDSVSET_BIT; #endif /* Only reset the systick load register if configUSE_TICKLESS_IDLE is set to 1. If it is set to 0 tickless idle is not being used. If it is set to a value other than 0 or 1 then a timer other than the SysTick is being used to generate the tick interrupt. */ #if configUSE_TICKLESS_IDLE == 1 portNVIC_SYSTICK_LOAD_REG = ulTimerReloadValueForOneTick; #endif ( void ) portSET_INTERRUPT_MASK_FROM_ISR(); { vTaskIncrementTick(); } portCLEAR_INTERRUPT_MASK_FROM_ISR( 0 ); } portSET_INTERRUPT_MASK_FROM_ISR раскрывается в ulPortSetInterruptMask __attribute__(( naked )) unsigned long ulPortSetInterruptMask( void ) { __asm volatile \ ( \ " mrs r0, basepri \n" \ " mov r1, %0 \n" \ " msr basepri, r1 \n" \ " bx lr \n" \ :: "i" ( configMAX_SYSCALL_INTERRUPT_PRIORITY ) : "r0", "r1" \ ); /* This return will not be reached but is necessary to prevent compiler warnings. */ return 0; } portCLEAR_INTERRUPT_MASK_FROM_ISR раскрывается в vPortClearInterruptMask __attribute__(( naked )) void vPortClearInterruptMask( unsigned long ulNewMaskValue ) { __asm volatile \ ( \ " msr basepri, r0 \n" \ " bx lr \n" \ :::"r0" \ ); /* Just to avoid compiler warnings. */ ( void ) ulNewMaskValue; }
  7. Странный HARDFAULT

    А где есть более подробная инфа? В STM32F3xxx and STM32F4xxx Cortex-M4 programming manual вообще ничего не написано, а этот список я взял из The defnitive guide to the ARM Cortex-M3 Насчет питания и остального - поглядим, спасибо. Я со схемотехникой не особо дружу, этим отдельный народ занимается. Пока они заняты, пытаюсь исключить чисто программные косяки
  8. Странный HARDFAULT

    спасибо, пробегусь по стекам процессов
  9. Странный HARDFAULT

    А сам UNDEFINSTR ничего полезного не несет? В книжке написано 1. Use of instructions not supported in Cortex-M3. 2. Bad/corrupted memory contents. 3. Loading of ARM object code during link stage. Checks compile steps. 4. Instruction align problem. For example, if GNU Tool chain is used, omitting of .align after .ascii might cause next instruction to be unaligned (start in odd memory address instead of halfword addresses). С учетом того, что этот код обычно работает нормально, остается причина 2. Т.е. проц неверно читает FLASH?
  10. Странный HARDFAULT

    Стеки каждого процесса с большим запасом. Контроль стека во фриртос включен, не стреляет. Ну и при исчерпании стека был бы расстрел чего-нить или MemoryFault, а у меня походу UsageFault - 7.4.0, старенькая, пока проблем не было - да - сон не испльзуется - контроль стека включен, уровень 1. Стеки с двукратным запасом примерно - выровнены, вроде как норм - включен, используется __attribute__(( naked )) unsigned long ulPortSetInterruptMask( void ) { __asm volatile \ ( \ " mrs r0, basepri \n" \ " mov r1, %0 \n" \ " msr basepri, r1 \n" \ " bx lr \n" \ :: "i" ( configMAX_SYSCALL_INTERRUPT_PRIORITY ) : "r0", "r1" \ ); /* This return will not be reached but is necessary to prevent compiler warnings. */ return 0; } __attribute__(( naked )) void vPortClearInterruptMask( unsigned long ulNewMaskValue ) { __asm volatile \ ( \ " msr basepri, r0 \n" \ " bx lr \n" \ :::"r0" \ ); /* Just to avoid compiler warnings. */ ( void ) ulNewMaskValue; } Генератор 25МГц, рабочая частота 168 МГц, питание 3,3. FLASH_ACR latency стоит 5, глянул даташит - вроде как норм
  11. Странный HARDFAULT

    STM32F427, gcc Есть устройство, которое раз в несколько часов падает в hard fault. В разных местах - в обычном коде, в прерываниях. Удалось повторить под отладчиком - упало в SysTick_IRQHandler (стандартный от freertos) Мой обработчик HardFault выдает CFSR=0x00010000, // UNDEFINSTR HFSR=0x40000000, // FORCED DFSR=0x00000001, AFSR=0x00000000 PC=0x080D6626; LR=0xFFFFFFFD; PSR=0x6100000F; r0=0x00000000; r1=0xA5A5A5A5; r2=0x10000000; r3=0xE000ED04; r12=0xA5A5A5A5; AFSR=0x00000000 Надо понимать, что это прерывание исполняется постоянно и все ок. Но иногда стреляет HardFault При этом та же самая прошивка на чуть другой плате (ряд компонентов отсутствует, плюс сделана в другое время - возможно другие партии комплектующих) работает штатно. Повторяется на нескольких экземплярах. Что это может быть такое? Куда копать? Может какая-то аппаратная проблема?
  12. Непонятные warning и error в IAR

    Так а пробел есть после "\"? Если есть - уберите
  13. Проблема с условием

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

    Вот ни разу не очевидное выражение :maniac: Плюс что-то кажется мне, что тут правильней не бинарное или, а логическое. А по теме - врядли в IAR и gcc разный приоритет операторов, если проект у вас был рабочий - оставьте как есть, просто отключите эти ворнинги. Если хотите улучшить читаемость - лучше ее отдельно улучшать, после того как перенесенный проект заработает в таком виде
  15. Вопрос о программировании Flash STM32F405

    Ну так может bootloader ее сам устанавливает? Попробуйте сделать unsecure из segger jflash или ее аналога