FreeRtos – TMR SVR stack overflow

I dag havde jeg et problem med jeg fik et stack overflow crash. Det viste sig, at det var et TMR SCR stack overflow. Efter lidt søgning viste det sig, at man bestemmer stack størrelse i freeRtosConfig.h. Jeg øgede Timer stack størrelsen til 3 gange minimal stack størrelse med nedenstående i freeRtosConfig.h. #define configTIMER_TASK_STACK_DEPTH            ( configMINIMAL_STACK_SIZE * … [Read more…]

STM32F7 – HAL – Interrupt handling

Når man bruger CubeMx til at lave den basale kode får man automatisk genereret en interrupt handler for External Interrupts, som vist nedenfor.   /** * @brief This function handles EXTI line0 interrupt. */ void EXTI0_IRQHandler(void) { /* USER CODE BEGIN EXTI0_IRQn 0 */ /* USER CODE END EXTI0_IRQn 0 */ HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0); /* USER CODE … [Read more…]

UNI/O med STM32F7 og FreeRtos

For at kunne kommunikere med en UNI/O eeprom med en STM32F7, som kører FreeRtos, har jeg lavet et lille test program. Jeg har taget udgangspunkt i et eksempel skrevet af Stephen Early (Thanks Steve 🙂 – https://github.com/martmaiste/UNIO/blob/master/UNIO.h )   /* Copyright (C) 2011 by Stephen Early <steve@greenend.org.uk> Permission is hereby granted, free of charge, to any … [Read more…]

FreeRtos – TaskNotify eller Semaphore

Jeg har altid lært, at man skal bruge semaphores til at synkronisere mellem threads i et multithreaded system, men er nu blevet opmærksom på at FreeRtos har noget, der hedder Tasknotify. TaskNotify kan bruges i langt de fleste tilfælde, hvor man ville ha brugt en semaphore. Jævnfør FreeRtos’s egen dokumentation bruger TaskNotify’ing mindre RAM og … [Read more…]

Hvordan debugger man “HardFault_Handler” med FreeRtos og ARM Cortex-M

Når man arbejder med FreeRtos sker det (ret ofte), at man får et system crash, der ender i HardFault_Handler handleren, og så vil man jo gerne vide, hvad der gik galt. Dette kan bedst gøres ved at undersøge indholdet af Cortex -M registrene. Det kan gøres ved, at indføre nedenstående kode i HardFault_Handler  funktionen. Det mest … [Read more…]

FreeRtos – xQueueSendToFrontFromISR – assertion failure

I dag havde jeg er problem med at sende data til en FreeRtos queue fra et interrupt kald. Problemet var, at når jeg kaldte xQueueSendToFrontFromISR crash’ede systemet med en assertion. Det viste sig at FreeRtos ikke tillader at have en interrupt med en højere prioritet end configMAX_SYSCALL_INTERRUPT_PRIORITY, så problemet blev løst ved at sætte interrupt prioriteten. … [Read more…]