找回密码
 注册
搜索
查看: 998|回复: 1

[讨论] 用EEPROM存储或读出函数指针

[复制链接]
发表于 2015-3-31 09:39:26 | 显示全部楼层 |阅读模式
本帖最后由 seaboye 于 2015-3-31 09:40 编辑

在研发一台仪器的时候使用了atmel64单片机,编写的程序中需要用EEPROM存储函数指针,而且有时候还需要从EEPROM中将指针读出来。我用了两种方法从EEPROM中申请存储函数指针空间
WORD hand_front_button_funcptr_eeprom EEMEM;//--因为用sizeof()计算量一下指针占用空间的大小为一个WORD,所以这里如此处理。
void (* hand_front_button_funcptr_eeprom)(void) EEMEM;
这两种方法编译后程序都可以正确运行,不过编译器会在读写EEPROM的时候给出warning。
“warning: passing argument 1 of 'eeprom_write_word' from incompatible pointer type”
产生warning的行
“eeprom_write_word(&hand_front_button_funcptr_eeprom,hand_front_button_funcptr);        ”
其中hand_front_button_funcptr是一个函数指针
虽然不影响使用,但我觉得可能是我哪里用的不对,不知道各位有没有遇到类似的问题,请高手指点。
 楼主| 发表于 2015-3-31 16:43:22 | 显示全部楼层
本帖最后由 seaboye 于 2015-3-31 16:58 编辑

在百度里问了一下,有高手回答如下,他的方案和同事给的建议相同,和大家分享一下,希望对遇到同样问题的人有所帮助:
“不要直接存指针,太危险了。存储一个索引数字,用索引数字查表获得指针。查表前对索引范围进行判断,可以避免使用无效指针。”
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-12-28 09:22 , Processed in 0.043971 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表