Crash when 3 tasks have different priorities

2013-01-22
2013-09-16
  • Gary Austin
    Gary Austin
    2013-01-22

    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

     
  • Gary Austin
    Gary Austin
    2013-01-27

    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