在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2009|回复: 4

[求助] 关于 static 变量求助

[复制链接]
发表于 2013-2-25 20:28:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x




  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保持原来的值,不知道为什么。请大侠指点。
发表于 2013-2-26 10:50:19 | 显示全部楼层
既然你自己怀疑是静态变量问题,就不用静态变量。因为引用静态变量的函数是不可重入的。也就是说,两个任务同时调用这个函数,或在中断服务程序调用这个函数都不安全。也许你程序的其他地方有问题,例如,flag的值被错误的指针变量赋值损坏了,任务堆栈太小了等等...。
声明一下,我不懂xps。
 楼主| 发表于 2013-2-26 11:21:23 | 显示全部楼层
回复 2# 加油99  这里用静态变量是为了,在退出函数的时候保存addr的值,目前还没想到替换的方法。
 楼主| 发表于 2013-2-27 16:06:25 | 显示全部楼层
回复 2# 加油99

程序的另外一个地方用到memset函数,注释掉这个函数就ok了,看来是memset对存放静态变量内存做了什么操作,但我不理解的是memset是对特定区域进行操作怎么会影响到其他地方。。
发表于 2013-2-28 07:47:16 | 显示全部楼层
回复 4# matrx


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

本版积分规则

关闭

站长推荐 上一条 /2 下一条

×

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-5 04:25 , Processed in 0.025137 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表