2016-11-16 167 views
0

赛灵思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. 然后我的printf在主函数值到控制台:

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

然而,当我尝试在代码中实现一些额外的行时(如xTaskCreate()xEventGroupCreate()),代码会打印出所有内存,并且打印值保持不变,这是不正确的。

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

回答

1

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

+0

声明变量为volatile并没有帮助( – Nazar

+0

你是否声明它在extern声明中也是不稳定的?即使这样也无济于事你也应该这么做 –

+0

你也确定ISR还在继续并返回正确的值到变量? –