| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 690 人关注过本帖
标题:单片机中的NULL
只看楼主 加入收藏
陨灭
Rank: 2
等 级:等待验证会员
帖 子:44
专家分:65
注 册:2013-4-21
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:3 
单片机中的NULL
在pc上的程序中,由于有NULL宏定义,所以可以直接拿来使用。但是在单片机中,就没有NULL了。而且也不能简单将NULL自定义为0,因为0地址处是有用的,比如目前我使用的M4地址0是堆栈指针。因此,我考虑定义一个变量uint32 const * const NULL = (uint32 *)&NULL;这样如果之后的程序对NULL进行了误操作就会产生错误。
但是,当我将NULL给一个函数指针赋值时,却发生了问题,如果不强转,就会发生错误;如果将其强转成函数指针,链接时也会报错,例如..\out\M401.axf: Error: L6200E: Symbol NULL multiply defined (by main.o and mytimer.o).
请问应该怎么解决才好?求指教!
搜索更多相关主题的帖子: 单片机 而且 
2015-05-14 19:06
wyw19880809
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:3
帖 子:178
专家分:738
注 册:2013-3-14
收藏
得分:20 
单片机中解引用0也是不被允许的啊,所以把NULL定义为0是没有问题的!
2015-05-14 22:27
陨灭
Rank: 2
等 级:等待验证会员
帖 子:44
专家分:65
注 册:2013-4-21
收藏
得分:0 
回复 2楼 wyw19880809
但是我将NULL宏定义成为0后,对指针操作也没有出现任何警告啊,编译也顺利通过了,这样不是就把堆栈指针修改了吗

1@w-h.win
2015-05-14 23:04
陨灭
Rank: 2
等 级:等待验证会员
帖 子:44
专家分:65
注 册:2013-4-21
收藏
得分:0 
回复 2楼 wyw19880809
不过我尝试直接对0地址操作确实会有警告,编译能正常通过,但是如果是先把地址赋给指针,再操作时就没有任何警告了,请问这种情况下会对0地址造成误操作吗?

1@w-h.win
2015-05-14 23:09
快速回复:单片机中的NULL
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.080848 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved