抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

测试例子(仅仅为了说明问题,不能直接复制使用)

测试例子1:在非赋值函数使用函数指针

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include "slcd_device.h"
#include "libprintf.h"
uint8_t (*FunctionControltest)(int cmd, void *argv);
extern uint8_t hw_slcd_ctrl(int cmd, void *argv);
int slcd_device_init(struct slcd_device_struct *slcd_device)
{
slcd_device->dis_buf[ 0 ] = 1;
FunctionControltest = hw_slcd_ctrl;
return 0;
}
slcd_device_data_type get_port_data(struct slcd_device_struct *slcd_device)
{
libprintf("BBBA:%X\r\n", (uint16_t) slcd_device->dis_buf[ 0 ]);
FunctionControltest(SLCD_CTRL_CMD_COM_OUTPUT, 0);
libprintf("AAA1:%X\r\n", (uint16_t) slcd_device->dis_buf[ 0 ]);
}
  • 调用树如下:

  • 信息输出

正确来说应该都是1的

测试例子2:在赋值函数使用函数指针

1
2
3
4
5
6
7
slcd_device_data_type get_port_data(struct slcd_device_struct *slcd_device)
{
FunctionControltest = hw_slcd_ctrl;
libprintf("BBBA:%X\r\n", (uint16_t) slcd_device->dis_buf[ 0 ]);
FunctionControltest(SLCD_CTRL_CMD_COM_OUTPUT, 0);
libprintf("AAA1:%X\r\n", (uint16_t) slcd_device->dis_buf[ 0 ]);
}
  • 调用树如下:

  • 信息输出

这个时候就是全都是1

解决方案

如果案例1跟案例2同样效果,则需要在案例1上增加调用树

项目右击->option for target -> LX51 Misc -> Overlay -> ?PR?_GET_PORT_DATA?SLCD_DEVICE!?PR?_HW_SLCD_CTRL?HW_SLCD

其中PR?_GET_PORT_DATA?SLCD_DEVICE!?PR?_HW_SLCD_CTRL?HW_SLCD代表增加调用树,PR?_GET_PORT_DATA?SLCD_DEVICE~?PR?_HW_SLCD_CTRL?HW_SLCD代表删除调用树

评论