请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
部件号:MSP430F5529 工具/软件:Code Composer Studio
我正在为一个LCD屏幕编写一个驱动程序,它将函数指针作为基于所使用的总线的写入或读取机制的参数。
但是,在I2C写入函数中,指针在第一次传输后损坏, 我可以看到它所在的寄存器在第一次调用之前是0x1.0698万,然后在传输之后是0x0.0698万,它只是跳回到具有函数指针的函数的起始位置。
以下是声明和函数调用
volatile const ptR_fxn_write writes_8 volatile const ptR_fxn_write命令 volatile const ptR_fxn_write writeI2C =& write_i2c_4bit; volatile const pt_fxn_write commands_i2cs =&write_4bit_command_i2c; init_lcd (命令); init_lcd_i2c
这是功能
void init_lcd_i2c (ptR_fxn_write func)//init lcd
{
func (0x33);
func (0x32);
func (0x28);
func (0x0E);
func (0x01);
func(0x06);
func(0x80);
}
对不起,我有点困惑,我真的不知道如何纠正这一点,我尝试了使指针全局常量,但在中断后,它们仍然被切掉为16位
我是否可以硬声明内存中的函数指针地址在16字节位置,这样它们就不会被切掉?
现在,我只是将函数开头的函数指针重新声明为易失常量,似乎工作正常。
只是想知道为什么会发生这种情况
谢谢