打印
[PIC®/AVR®/dsPIC®产品]

求救,很凌乱很崩溃毁了我的世界观的灾难性问题

[复制链接]
1792|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 wangtao478552 于 2015-7-24 21:54 编辑

MPLAB X IDE 2.26
XC8 V1.21 PRO
PIC18F25K22



问题表现:1、参数传递过程中发生改变

在单片机内运行时,调用任意一个带参的子函数,例如unsigned char I2cWriteSubAddr (unsigned char , unsigned char , unsigned char);
参数都会被丢失或者改变。特别是多个参数里面的第一个参数。
例如
void main(void)
{
I2cWriteSubAddr(0x10,0x05,0x42);
while(1);
}
在 I2cWriteSubAddr();函数的实现里面加入一个串口打印就可以看到,第一个参数变成了0x02,不是0x10了!!!!!
2、全局变量随意变化
另外,我用全局变量也规避不了这个问题,例如
有全局变量unsigned char I2cAddr;
I2cWriteSubAddr();中有局部变量unsigned char addr;
如果I2cWriteSubAddr();中有赋值语句:I2cAddr=addr;
赋值完成一检查,呵呵,居然有addr!=I2cAddr;!!!!!!!!我也是醉了
!!!另外进行以上测试时串口没有问题,这是在PRO下。


3、换编译器或者更改编译器配置结果错的不同

一旦把XC8的状态改为FREE,呵呵,整个世界都混乱了,让串口循环打印0~9,有时候都是同一个不属于0~9的码。。。
有时候都是随机码。。。
升级XC8我也干了,还是坏坏坏,但坏的不一样1


4、同样的代码在两块单片机上表现不一样,呵呵



5、用PROTEUS仿真没有任何问题


6、定时器跑的很好很准

我感觉自己不相信爱情了


这到底是编译环境的问题?
单片机的问题?
配置字的问题?




!!!!!!答案:是配置字的问题。!!!!!!


具体情况:在配置字里开启了CPU扩展指令集,也就是XINST位。程序却没有使用扩展CPU指令编译,会导致代码无法×正常工作.也就是说配置字里使能了扩展模式,单片机以为是扩展模式的指令,但编译器的编译选项里没有选,编译时代码是按非扩展模式编译的HEX,所以下载进去程序失效,整个代码在单片机都运行不好。


相关知识:

1、PIC18的扩展模式支持哪些些扩展指令?    ADDFSR, ADDULNK, CALLW, MOVSF, MOVSS, PUSHL, SUBFSR and SUBULNK等


2、如何设置编译器配合XINST=ON?     菜单Project--built option--project下将MPASM/C17/C18 SUITE选项卡的extended mode打勾选中



经验总结:一般protues仿真可以,实际不可以,首先看看是不是配置字的问题,因为protues忽略配置字。







沙发
JY-DX-JY| | 2015-7-24 16:34 | 只看该作者
把程序搞得简单一点,看看正不正常。然后再逐个模块往上加,慢慢调试。

使用特权

评论回复
板凳
wangtao478552|  楼主 | 2015-7-24 21:19 | 只看该作者
已结贴,结果更新在一楼,是配制字的问题。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

115

帖子

4

粉丝