1
我不明白爲什麼FreeRTOS操作系統不允許改變的extern變量 (MYDATA的) 這裏是我的pojectSTM32 FreeRTOS操作系統,所有的變量不能在我的項目變化
main.c文件
uint16_t Mydata = 0;
main()
{
System_Init();
xTaskCreate(Task1, (const char*)"Task1", 100, NULL, 4, NULL);
xTaskCreate(Task2, (const char*)"Task2", 100, NULL, 3, NULL);
vTaskStartScheduler();
}
文件Task1.c
extern uint16_t Mydata;
void Task1(void *p)
{
while(1)
{
vTaskDelay(10);
printf("Result: %d", Mydata);
}
}
文件Task2.c
extern uint16_t Mydata;
void Task2(void *p)
{
while(1)
{
Mydata++;
vTaskDelay(10);
}
}
但結果卻是永遠正確的
大多數的結果就像是 「13842930」, 「-18234952」,或類似的東西!
誰能告訴我爲什麼? (對不起,因爲我的英文不好) 感謝您的幫助!
非常感謝! –
我改變了我的項目,就像你告訴我要做的一樣,但錯誤並沒有消失。我是否需要任何功能將數據從一個任務轉移到另一個任務? –
@ loi.efy - 問題必須在別處。我懷疑由於線程中的堆棧溢出,您可能會覆蓋全局變量。根據確切的編譯標誌和工具鏈配置,'printf()'可以使用高達2kB的堆棧(是的 - 這是正確的 - 兩千字節)。你只提供100B到你的線程,對於任何有用的東西來說太少了。然後,我會開始大幅增加堆棧大小(帶有'printf()'的線程爲3-4kB)並啓用堆棧溢出檢查。 –