rtos-stack.cpp

#if 1
#include "mbed.h"
#include "rtos.h"
 
DigitalOut led1(LED1),led2(LED2);

const uint32_t MAGIC_WORD = 0xE25A2EA5;

uint8_t stack_area[2048] __attribute((section("AHBSRAM0"),aligned));
//uint8_t stack_area[2048];

int count = 0;
void led2_thread(void const *argument) {
    while(true) {
        Thread::wait(2000);
        led2 != led2;
        printf("%d\n", count++);
    }
}

int main() {
    for(int i = 0; i < sizeof(stack_area); i += 4) {
        memcpy(stack_area+i, &MAGIC_WORD, 4);
    }
    printf("stack_area: %p size: %d\n", stack_area, sizeof(stack_area));
    Thread thread(led2_thread, NULL, osPriorityNormal, sizeof(stack_area), (uint8_t*)stack_area);
    
    for(int i = 0; i < 20; i++) {
        uint32_t* p = (uint32_t*)stack_area;
        while(*p == MAGIC_WORD) {
            p++;
        }
        printf("stack: %p\n", p);
        led1 = !led1;
        Thread::wait(500);
    }
    thread.terminate();
    exit(1);
}
#endif