Loading...
 

SW4STM32 and SW4Linux fully supports the STM32MP1 asymmetric multicore Cortex/A7+M4 MPUs

   With System Workbench for Linux, Embedded Linux on the STM32MP1 family of MPUs from ST was never as simple to build and maintain, even for newcomers in the Linux world. And, if you install System Workbench for Linux in System Workbench for STM32 you can seamlessly develop and debug asymmetric applications running partly on Linux, partly on the Cortex-M4.
You can get more information from the ac6-tools website and download (registration required) various documents highlighting:

System Workbench for STM32


vPortRaiseBASEPRI Infinite Loop

The processor is an STM32F373. This an STM32CubeMX 4.14 generated project with FREERTOS enabled, and the SysTick TImebase Source.

Calls to: HAL_Delay(50), vTaskDelay(50), and osDelay(50) hang. This hang is in the function vPortRaiseBASEPRI() which, as I can see in the disassembly window, has as its last instruction an infinite loop.

This is the disassembly I see for that function:

215                                       	__asm volatile
0800a564: 0x4ff05003 ...eGenericReceive+8   mov.w   r3, #80 ; 0x50
0800a568: 0x83f31188 ...GenericReceive+12   msr     BASEPRI, r3
0800a56c: 0xbff36f8f ...GenericReceive+16   isb     sy
0800a570: 0xbff34f8f ...GenericReceive+20   dsb     sy
0800a574: 0x0000fee7 ...GenericReceive+24   b.n     0x800a574 <xQueueGenericReceive+24>


The b.n instruction is an unconditional branch to itself. Was it meant to be this way? Or is this a bug? What can be done about it?

In Project => Properties => C/C++ Build (tree) => Settings => Tool Settings (tab)
The compile’s Optimize for Debug (-Og) option was selected.
Place the function in their own section was checked.
Place the data in their own secions was not checked.

This is solved. The queue handle was set to NULL. It was never created. The calls are working now.

Hello

Did you mean this
configASSERT( uxQueueLength > ( UBaseType_t ) 0 );

if( uxItemSize == ( UBaseType_t ) 0 )
{
/* There is not going to be a queue storage area. */
xQueueSizeInBytes = ( size_t ) 0;
}


And how did you solve it please ?? I am in the same problem