I debug with IAR jtag emulator and see that each of them is executed only once. After that program goes to HardFault Exception. If I add one more task - it goes through 3 tasks. If I replace xTaskDelay by TaskYield() it works good. I use IAR 5.41 compiler.
Thanks
Is there a standard demo application you can try? Are you running into mutual exclusion having two tasks attempting to access the same port so rapidly?
Unfortunately I have only a board with STM32F101C8 and standard demo is designed for STM32F101F103. So, I simplified standard demo reducing it to these small tasks, modified linker script file stm32f10x_flash.icf and changed value f the CPU clock frequency to 24MHz. The 1ms delay seems to be large enough to provide access to port, isn’t it? I initially tried vTaskDelay(1000).
Maybe there is a reference to STM32F101C8 FreeRtos example somewhere?
> Unfortunately I have only a board with STM32F101C8 and standard demo
> is designed for STM32F101F103. So, I simplified standard demo
> reducing it to these small tasks, modified linker script file
> stm32f10x_flash.icf and changed value f the CPU clock
> frequency to 24MHz.
You are doing the right things, but did you start with the project for the standard demo you mention, or create a new project?
> The 1ms delay seems to be large enough to
> provide access to port, isn’t it?
I doubt this is the source of your problem, but it is worth looking at. The delay period does not provide mutual exclusion, if a tick interrupt occurs between reading the current port value and writing the new one then you have a problem. I don’t think it would make it crash though. Look at the partest.c files in the FreeRTOS/Demo directory to see how they do port access.
I downloaded demo project and modified it deleting everything except LED blinking. After that I customized LED ports to my board ports and pins. Preliminary I wrote a separate simple program to test board LEDs switching.
Thanks, I’ll look at partest.c
Well, I replaced LED blinking with a++ and b++ operations, where a and b are two long globals. I still have Hard Fault Exception but I noticed that the system works about two second before it catches it. Can it be something with bus timing?