Jump to content

    

Johnny81

Свой
  • Content Count

    785
  • Joined

  • Last visited

Community Reputation

0 Обычный

1 Follower

About Johnny81

  • Rank
    Знающий

Контакты

  • Сайт
    Array

Информация

  • Город
    Array

Recent Profile Visitors

3268 profile views
  1. Изначально вакансия была без удаленки. Теперь пункт про автобус не актуален :)
  2. спасибо, поправил По графику - ему первое время придется соответствовать, чтобы часов 6 нашего рабочего времени пересекались
  3. Upd Можно сразу писать мне на johnny@topazelectro.ru или в телеграм @EvgeniyN Нам нужен человек в штат, работающий надо текущими задачами 40 часов в неделю за оклад. Предприятие довольно большое, есть схемотехники, конструктора, платчики, программисты, тестировщики. Соответственно вакансия - программиста. Желательно немного понимать в электронике и уметь в осциллограф, но особо глубоких познаний не требуется - к примеру у меня их нет, если возникает вопрос - я спрашиваю схемотехника. Проектов много разных. Какие-то активны, какие-то старые и практически "замороженные". Иногда старый проект "размораживается" :). Новые проекты на stm32 (f1, f2, f3, f4), старые - atmega (128/1280/2560, есть и более мелкие). Из одного проекта может собираться много прошивок для разных изделий и с разным функционалом. Изделия взаимодействуют друг с другом и с ПО на компьютере (нашим и чужим), с чужими устройствами, т.е. есть некоторая экосистема - набор протоколов (наших и чужих), систем управления, ПО настройки, практик и т.п. Основные интерфейсы - 485/232, I2C, CAN, SPI, Ethernet/GPRS Программистов на железе несколько, проекты пересекаются - есть много общего кода, в т.ч. общего для avr/stm/windows
  4. Описание вакансии https://krasnodar.superjob.ru/vakansii/veduschij-inzhener-programmist-33600194.html?utm_campaign=google_jobs_apply&utm_source=google_jobs_apply&utm_medium=organic Можно удалённо. Вопросы можно задавать мне
  5. я вам намекаю, что фриртос тут дело десятое. Вам надо придумать алгоритм работы, пройтись по нему в поисках гонок/дедлоков, а дальше уже переложить его на фриртос. Или не перекладывать - фриртос не отменяет высокоприоритетных прерываний какой-то готовой межпроцессорной синхронизации во фриртос, имхо, из коробки нет
  6. А при чем тут фриртос вообще? Вам надо каким-то образом определить свободность интерфейса...
  7. А вы уверены, что тут вообще нужна очередь? Есть общие данные - содержимое дисплея. С ними работают из разных потоков через локи. Отдельный поток занимается передачей этих данных в дисплей.
  8. А почему нет отладки? Загрузчик модифицируете так, чтобы не ставилась защита. Заливаете загрузчик из под отладчика. Далее заливаете программу штатно через загрузчик. Попадается в Jump_To_Application (). Переключаетесь на отладочные символы программы и вперед! Как сделать последнее в IAR - не знаю :)
  9. Думаю стоит поглядеть в сторону статической библиотеки. Сначала собираете секретную часть исходников в такую библиотеку, а далее используете ее вместе с открытыми исходниками. Лично не пробовал
  10. А я отвечал выше, слилось в одно сообщение. 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; }
  11. А где есть более подробная инфа? В STM32F3xxx and STM32F4xxx Cortex-M4 programming manual вообще ничего не написано, а этот список я взял из The defnitive guide to the ARM Cortex-M3 Насчет питания и остального - поглядим, спасибо. Я со схемотехникой не особо дружу, этим отдельный народ занимается. Пока они заняты, пытаюсь исключить чисто программные косяки
  12. спасибо, пробегусь по стекам процессов
  13. А сам 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?
  14. Стеки каждого процесса с большим запасом. Контроль стека во фриртос включен, не стреляет. Ну и при исчерпании стека был бы расстрел чего-нить или 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, глянул даташит - вроде как норм
  15. 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 При этом та же самая прошивка на чуть другой плате (ряд компонентов отсутствует, плюс сделана в другое время - возможно другие партии комплектующих) работает штатно. Повторяется на нескольких экземплярах. Что это может быть такое? Куда копать? Может какая-то аппаратная проблема?