Problem with Static Task Creation – TrueStudio, freeRTOS, “Invalid selected thread”
Hi,
I’m troubleshooting a problem with task creation in freeRTOS, Atollic TrueStudio, STM32.
In the first call of xTaskCreateStatic() the code runs into an error: “Invalid selected thread”. When debugging I can see that the pxNewTCB gets initialized correctly in prvInitialiseNewTask( ). But in prvAddNewTaskToReadyList( ) the code breaks at the assignment of pxNewTCB to pxCurrentTCB:
~~~
static void prvAddNewTaskToReadyList( TCBt *pxNewTCB )
{
/* Ensure interrupts don’t access the task lists while the lists are being
updated. */
taskENTERCRITICAL();
{
uxCurrentNumberOfTasks++;
if( pxCurrentTCB == NULL )
{
/* There are no other tasks, or all the other tasks are in
the suspended state – make this the current task. */
pxCurrentTCB = pxNewTCB;
…
~~~
I couldn’t find something related to this problem in the freeRTOS or STM/Atollic forum but something that looks similar in the openstm32 forum http://www.openstm32.org/forumthread2824 …but it didn’t help me.
I double checked the task settings, priority, stack size,… but I don’t find something that looks wrong.
If I deactivate the first taks creation (call of the xTaskCreateStatic() ) it gets stuck at the second (or now first) call of xTaskCreateStatic().
Any ideas what might cause the problem and how to solve it?
If I shall post more stuff, please let me know!
I’m using TrueStudio V9, freeRTOS V9, basic code generated with CubeMX(V4.25.1), Debugger j-link Ultra+.
Regards,
Alex
Problem with Static Task Creation – TrueStudio, freeRTOS, “Invalid selected thread”
Hi,
an addition; I was experimenting with the Debug Config.
When I deactivate Thread-aware RTOS support (No RTOS), debugging the code seems to work. I can still debug RTOS for SEGGER SysView. The code runs good, didn’t find something unexpected yet. Anyway I can’t tell why this could be a problem, because I got the “extra” expression…
~~~
thread 2
continue
~~~
…in my Startup Script. But if this is the best solution, I will do it like that.
Next experiment:
When I deactivate Thread-aware RTOS support AND Trace System (I use SWV), the code runs into assertion. It then seems to mess up with SystemView, because when I deactivate SystemView (not calling SEGGERSYSVIEWConf() ), the code is running without problems.
Well, at least I found a workaround to be able to keep on working. But still I have the feeling that there must be something horrible wrong in the project…maybe somebody has an idea with this new information?
Regards,
Alex
Problem with Static Task Creation – TrueStudio, freeRTOS, “Invalid selected thread”
For some reason my reply to your first post, some ten hours ago, never showed up here. It was:
I’m afraid your description isn’t really clear enough for me to determine what the issue you are reporting is.
In the first call of /xTaskCreateStatic()/ the code runs into an error: “Invalid selected thread”.Where is this error, by which I mean how did you determine that was the error?
When debugging I can see that the /pxNewTCB/ gets initialized correctly in /prvInitialiseNewTask( )/. But in /prvAddNewTaskToReadyList( )/ the code breaks at the assignment of /pxNewTCB/ to /pxCurrentTCB/:What is meant by the code ‘breaking’? Does it crash, and if so, how does that crash occur? Is it related to the “Invalid selected thread” error from above?
I double checked the task settings, priority, stack size,… but I don’t find something that looks wrong. If I deactivate the first taks creation (call of the /xTaskCreateStatic()/ ) it gets stuck at the second (or now first) call of /xTaskCreateStatic()/Do you have configASSERT() defined so it checks the size of the static task structure against the non static task structure? If you have something like configUSELISTDATAINTEGRITYCHECK_BYTES defined then the structures could be different sizes, which would cause a problem.
Problem with Static Task Creation – TrueStudio, freeRTOS, “Invalid selected thread”
Hi Richard,
thanks for the reply. I’ll try to answer your questions.
The problem, however, is that the error is gone. I can’t reproduce it right now. I jumped back in my code history when it occured but I can’t trigger it now…must be evil black magic.
The error was outputted on the debugging console. The code crashed and I was able to isolate it to the assignment mentioned above (pxCurrentTCB = pxNewTCB). The scheduler didn’t start at that point yet, it was all during initialization.
At the moment it’s hard to tell you more as I cannot reproduce it. configASSERT() is defined, configUSELISTDATAINTEGRITYCHECK_BYTES is not defined (gets defined to 0 in projdef.h by default).
I will try to reproduce the error and make more and detailed tests if it occurs.