变量没有正确更新

时间:2016-11-16 17:35:57

标签: scope freertos xilinx-edk

Xilinx SDK 2016.1 freeRTOS823_xlinx OS平台

在我介绍一些freeRTOS元素之前,我的代码似乎工作正常。我的代码的一般功能如下:

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

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

    // separate file
    extern u32 focusPosition;
    main{
     ...
     while(1){
       sleep(1);
       xil_printf("%d\n",focusPosition);
     }
    }
    
  3. 代码打印正确的值,但是,当我尝试在代码中实现一些额外的行,比如xTaskCreate()xEventGroupCreate()时,某些东西会弄乱所有内存并且打印值保持不变,这是不正确的。

    如何简单地添加与变量无关的代码对该变量有任何影响?据我所知,xTaskCreate()和xEventGroupCreate()是在堆上创建的。我厌倦了看看Xil_DCacheDisable()是否有帮助,但没有。有任何想法吗?我的focusPosition变量是否已正确定义/声明?

1 个答案:

答案 0 :(得分:1)

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