CS+ for CC 编译的 void* 数据类型问题

我们有一个R5F100LE的工程从CS+ for CA,CX 迁移以 CS+ for CC并增加OTA功能。出现在了一些关于指针数据类型的问题,请教一下怎么解决。

首先是我在编译器的Memory model 设置成 Small model(这个设置在无bootloader时,系统可以正常启动运行)。在加了bootloader部分后,无法正常跳转到user部分。

因此又把Memory model改成了 Auto,这样系统可以启动,能跳转到user部分去。

对比了一下,发现在Auto模式下编译出来的函数指针是32位的,而Small model编译出来的函数指针是16位的。

这个又出现了一个新的问题,改成Auto后虽然可以正常启动,但不能正常运行了,因为我的代码里面有用到 void* 以及其它函数指针类型,如

typedef void (*FuncPtr) (void);

typedef void (*FuncPtrExt) (void*);

使用 void* 强制转换后出现问题,编译器显示这个是转换是无效的。

实际使用中原本16位的数据会变成32位 。比如原先的数据用 %p 格式打印出来是 0000B3C2 ,强制转换后就是 000FB3C2。转换后高16位多了  0x000F。

我用sizeof(void*)获取长度是2。因为指针的错误,执行这个函数后就会重启。

请问这个有什么方法可以处理一下?

Parents Reply Children
No Data