Xilinx SDK 2016.1 freeRTOS823_xlinx OS平台
在我介绍一些freeRTOS元素之前,我的代码似乎工作正常。我的代码的一般功能如下:
在中断子程序中,我为从Zynq Soc的IP寄存器读取的变量 focusPosition 赋值:
// separate file
u32 focusPosition=0;
static void ISR(void *CallbackRef)
{
focusPosition = XRb_focus_Get_position_o(CallbackRef);
}
然后我在主函数中将值打印到控制台:
// separate file
extern u32 focusPosition;
main{
...
while(1){
sleep(1);
xil_printf("%d\n",focusPosition);
}
}
代码打印正确的值,但是,当我尝试在代码中实现一些额外的行,比如xTaskCreate()xEventGroupCreate()时,某些东西会弄乱所有内存并且打印值保持不变,这是不正确的。
如何简单地添加与变量无关的代码对该变量有任何影响?据我所知,xTaskCreate()和xEventGroupCreate()是在堆上创建的。我厌倦了看看Xil_DCacheDisable()是否有帮助,但没有。有任何想法吗?我的focusPosition变量是否已正确定义/声明?
答案 0 :(得分:1)
您应该将focusPosition声明为volatile,否则编译器不会期望在while循环之外修改它,因此可以优化代码。添加额外的代码可能会导致这种情况发生。在中断中修改但在别处使用的任何变量都应声明为volatile。