KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I found some code in FreeRTOS (FreeRTOSV7.4.0\FreeRTOS\Source\tasks.c): void vTaskSuspendAll( void ) { /* A critical section is not required as the variable is of type portBASE_TYPE. */ ++uxSchedulerSuspended; } It is explicitly said no need to protect due to the type is "portBASE_TYPE", which is a "long" type. My understood is that it assumes the self-increment to this type is atomic. But after I disassembled it I could not find any proof, its a plain load->add->store. Then is it a problem? void vTaskSuspendAll( void ) { /* A critical section is not required as the variable is of type portBASE_TYPE. */ ++uxSchedulerSuspended; 4dc: 4b03 ldr r3, [pc, #12] ; (4ec <vTaskSuspendAll+0x10>) 4de: f8d3 2118 ldr.w r2, [r3, #280] ; 0x118 4e2: 1c50 adds r0, r2, #1 4e4: f8c3 0118 str.w r0, [r3, #280] ; 0x118 4e8: 4770 bx lr 4ea: bf00 nop 4ec: 00000000 .word 0x00000000 000004f0 <xTaskGetTickCount>: return xAlreadyYielded; }
Tags (comma-separated)
Save Edits
Cancel