我不明白为什么freertos不允许更改外部变量 (MYDATA的) 这是我的项目
file 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",或类似的东西!
谁能告诉我为什么? (因为我英语不好,我很抱歉) 谢谢你的帮助!
答案 0 :(得分:1)
%d
打印uint16_t
的值。 %d
需要int
。您必须在int
调用(printf()
)中将值转换为printf("Result: %d", (int)Mydata);
,或使用适当的说明符(printf("Result: %" PRIu16 "", Mydata);
)。您的工具链可能不支持第二种解决方案。http://en.cppreference.com/w/cpp/io/c/fprintf
volatile
,否则编译器也可以在从不更新RAM中的值时读取它。