Crash when 3 tasks have different priorities

gary-e-a wrote on Tuesday, January 22, 2013:

I am new to FreeRTOS and have been learning using the debug demo project included in Dave Lyneham’s rtos.zip which was referenced in the x86 write up (http://www.freertos.org/portternee.html).

In main() I created 3 tasks,  Each task does a forever loop incrementing a counter variable and then SLEEP_MS(1000).  This code works if the 3 tasks have the same priority.  But when I change each task’s priority (for example task 1 has priority 1, task 2 has priority 0, and task 3 has priority 2) then the application crashes when vTaskStartScheduler is called.

freertosconfig.h has #define configUSE_PREEMPTION 0
The controller board is Tern’s B engine with 512 MB SDRAM.
Paradigm C++ V7.00.0054, Tern Edition is the development tool.
The memory model is large.

I would prefer to use preemption but it crashes even when the priorities are identical.  Is there something I have to do in addition to the freertosconfig.h #define change?

Thanks

rtel wrote on Tuesday, January 22, 2013:

Hmm.  That is very old code, not an official zip file (provided by Dave), and probably uses a very old version of FreeRTOS.  I’m afraid there is not much help I can provide in this case.

If you are looking to learn and experiment with FreeRTOS in a convenient environment then you could try using the MSVC project with the Win32 simulator demos, or the Keil simulator demo.

http://www.freertos.org/FreeRTOS-Windows-Simulator-Emulator-for-Visual-Studio-and-Eclipse-MingW.html
http://www.freertos.org/simple-freertos-demos.html

Regards.

gary-e-a wrote on Sunday, January 27, 2013:

Thanks Richard.

I have switched to the demo project WizNET_DEMO_TERN_186 for the Tern B Engine 186.  I have still encountered task / priority issues with this demo (I am using the Paradigm C/C++ IDE version 7.00 for Tern).

Since I did not have all of the hardware used in this project I commented out the serial and http task creates.  I also modified 186.cfg (changed the amount of RAM from 128 to 512, the rdonly map from 0x0800 to 0x7ffff to 0x2c000 to 0x7ffff and the CODE_START from 0x0800 to 0x2c000) and freertosconfig.h (config_USE_IDLE_HOOK from 1 to 0 configCPU_CLOCK_HZ from 80000000 to 40000000).

After downloading the application I set breakpoints inside the various forever loops that are in the created tasks.  When I executed the code none of the breakpoints were hit.  I did this because an earlier debug session with a breakpoint in the prvCheckTask function in main.c showed that no other task was running so I thought I could confirm this by breakpoints in the forever loops.

What could be causing the lack of task execution other than prvCheckTask (I even changed its priority from tskIDLE_PRIORITY + 4 to tskIDLE_PRIORITY + 2)?

Thanjs for your help.

Best regards,

Gary