| 查看: 1915 | 回复: 4 | ||
[求助]
单片机C语言编程中的自定义函数使用问题
|
|
void v_Lcd12864PutString_f (unsigned char x, unsigned char y, unsigned char *pData) unsigned char n1; v_Lcd12864PutString_f( 2,0,&n1); 编译能成功,但是LCD无法显示n1这个变量的内容,如果是静态的字符串就没问题。是什么原因呢? 如果改成这样 void v_Lcd12864PutString_f (unsigned char x, unsigned char y, unsigned char *pData) unsigned char *p1; p1=&n1; v_Lcd12864PutString_f( 2,0,p1); 编译通过,可是还是乱码。 其中n1是取自时钟芯片DS1302。 unsigned char n1;n1=Time->Hour/10;所以n1应该等于小时的高位,只有可能是字符“1”或者字符“2”。请高人指点。 |
» 猜你喜欢
有没有人能给点建议
已经有5人回复
假如你的研究生提出不合理要求
已经有12人回复
实验室接单子
已经有7人回复
全日制(定向)博士
已经有5人回复
萌生出自己或许不适合搞科研的想法,现在跑or等等看?
已经有4人回复
Materials Today Chemistry审稿周期
已经有4人回复
参与限项
已经有3人回复
对氯苯硼酸纯化
已经有3人回复
所感
已经有4人回复
要不要辞职读博?
已经有7人回复
» 本主题相关价值贴推荐,对您同样有帮助:
求助三元函数二阶偏微分C语言写法
已经有10人回复
【求助】如何将matlab中的randn函数转变为C语言形式的啊?
已经有3人回复
ifly21cn
银虫 (初入文坛)
- 应助: 7 (幼儿园)
- 金币: 764.7
- 散金: 10
- 帖子: 35
- 在线: 324.1小时
- 虫号: 1634933
- 注册: 2012-02-22
- 性别: GG
- 专业: 控制理论与方法
【答案】应助回帖
感谢参与,应助指数 +1
|
根据我的经验来推测,这个问题跟变量的生命周期有关。 你如果不加static关键字,n1变量所属的程序分支结束之后,n1所在的地址也就被收回了,里面存了什么数据就不好说了,而你调用的lcd显示函数仍然引用n1之前的地址,而这个老地址里面的数据已经不是你所期望的1或者2了。而你如果加了static关键字,n1这个变量就会被分配在静态数据区,不会被收回,数据永远是1或者2,显示也就不会错。 由于楼主没有贴出完整的程序,所以我猜测一般来说,是你调用lcd显示函数之前,n1变量的生命周期就结束了。 当然还有另一种情况,由于单片机的内存是很小的,IAR这种工具都是有编译优化的,也就是说编译器会自动的省去一些它认为不必要的代码段和数据段。这种情况下,编译器有可能认为n1这个引用是没有意义的,从而产生传址错误。这种情况我也见过。如果不是第一种情况,你就把编译器里的代码优化选项给去掉。 如果还有问题可以把完整的代码贴出来看看 |
2楼2012-12-28 03:42:19
Clark391
木虫 (职业作家)
- 应助: 4 (幼儿园)
- 金币: 29722.9
- 散金: 1650
- 红花: 10
- 帖子: 3760
- 在线: 184.5小时
- 虫号: 476445
- 注册: 2007-12-11
- 性别: GG
- 专业: 声学
3楼2012-12-28 16:06:37
ifly21cn
银虫 (初入文坛)
- 应助: 7 (幼儿园)
- 金币: 764.7
- 散金: 10
- 帖子: 35
- 在线: 324.1小时
- 虫号: 1634933
- 注册: 2012-02-22
- 性别: GG
- 专业: 控制理论与方法
4楼2012-12-29 06:16:11
5楼2013-01-02 16:35:47












回复此楼