微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 关于 static 变量求助

关于 static 变量求助

时间:10-02 整理:3721RD 点击:

  1. void send_header(Xuint32 start_addr,Xuint8 flag)
  2. {
  3.         static Xuint32 addr;
  4.         Xuint32 temp;
  5.         Xuint8  tmp1[4];
  6.         Xuint8  last_byte=0;
  7.         Xuint32 i=0;
  8.         Xuint8  j=0;
  9.         //Xuint8  addr_tem;
  10.         static Xuint8 k=0;
  11.         //static Xunit8 k=0;
  12.         Xuint8    jump_flag=0;
  13.    Xuint32  temp_d; //
  14.         if(flag!=0)//send file header
  15.         {       
  16.                         addr = start_addr;
  17.                         k=0;
  18.         }
  19. }

复制代码

在xilinx xps中编写软件是写了上面一个子程序。其中addr用到的是static型变量,单步调试程序的时候没有问题,但是一直运行程序的时候,当flag!=0时,if{}这一段有时候不被执行,addr保持原来的值,不知道为什么。请大侠指点。

既然你自己怀疑是静态变量问题,就不用静态变量。因为引用静态变量的函数是不可重入的。也就是说,两个任务同时调用这个函数,或在中断服务程序调用这个函数都不安全。也许你程序的其他地方有问题,例如,flag的值被错误的指针变量赋值损坏了,任务堆栈太小了等等...。
声明一下,我不懂xps。


程序的另外一个地方用到memset函数,注释掉这个函数就ok了,看来是memset对存放静态变量内存做了什么操作,但我不理解的是memset是对特定区域进行操作怎么会影响到其他地方。



    通常,静态变量只不过是只能在特定函数才能访问的全局变量。你那个memset也许访问了一个全局变量或静态变量,所以很容易误写了其他的全局变量或静态变量。多任务(多线程)编程应该尽量少用静态变量。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top