变量没有正确更新



Xilinx SDK 2016.1 freeRTOS823_xlinx OS平台

我的代码似乎工作得很好,直到我引入了一些freeRTOS元素。我的代码的一般功能如下:

  1. 在中断子程序中,我为变量focusPosition赋值,该值从Zynq Soc的IP寄存器中读取:

    // separate file
    u32 focusPosition=0;
    static void ISR(void *CallbackRef)
    {
      focusPosition = XRb_focus_Get_position_o(CallbackRef);
    }
    
  2. 然后在main函数中将值打印到控制台:

    // separate file
    extern u32 focusPosition;
    main{
     ...
     while(1){
       sleep(1);
       xil_printf("%dn",focusPosition);
     }
    }
    

代码打印正确的值,然而,当我尝试在代码中实现一些额外的行,如xTaskCreate() xEventGroupCreate(),有些东西搞砸了所有的内存和打印的值保持不变,这是不正确的。

简单地添加与变量无关的代码怎么会对该变量产生任何影响?据我所知,xTaskCreate()和xEventGroupCreate()是在堆上创建的。我想看看xil_dachedisable()是否有帮助,但是没有。什么好主意吗?我的focusPosition变量是否正确定义/声明?

您应该将focusPosition声明为volatile,否则编译器不会期望在while循环之外修改它,因此可能会优化代码。添加额外的代码可能会导致这种情况发生。任何在中断中修改但在其他地方使用的变量都应该声明为volatile。

最新更新