找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1163|回复: 8
收起左侧

用sdcc+gputils 编译器编译pic系列单片机

[复制链接]
ID:871174 发表于 2023-11-10 16:05 | 显示全部楼层 |阅读模式
因个人需求,需要用 sdcc + gputils 编译器 来 编译 pic 系列的程序并烧录
使用过程中,写了简单的程序,并经过 xc8 编译后,能在 烧录进去,并实现特定功能
现同样的程序,按照sdcc的语法要求修改部分语法(主要功能部分没有修改)后
编译烧录后,发现问题
发现 中断函数里的程序 在反复执行,就是没有达到中断触发条件也还在一直触发
有兄弟遇到过吗?
回复

使用道具 举报

ID:883242 发表于 2023-11-10 21:51 | 显示全部楼层
8位PIC单片机设计的时候就没考虑过用高级语言,c语言编译器出来的代码怎么看怎么拧巴,还是用汇编吧。
回复

使用道具 举报

ID:123289 发表于 2023-11-11 09:13 | 显示全部楼层
靠谱的找问题方式这一:
查看编译后生成的汇编程序语句,重点关注与中断相关的部分。
这需要你精通PIC的单片机原理。
回复

使用道具 举报

ID:871174 发表于 2023-11-11 14:28 | 显示全部楼层
yzwzfyz 发表于 2023-11-11 09:13
靠谱的找问题方式这一:
查看编译后生成的汇编程序语句,重点关注与中断相关的部分。
这需要你精通PIC的 ...

好的,谢谢
回复

使用道具 举报

ID:1100590 发表于 2023-11-22 20:28 | 显示全部楼层
Merci beaucoup vénérable ami
回复

使用道具 举报

ID:883242 发表于 2023-11-22 20:59 | 显示全部楼层
yzwzfyz 发表于 2023-11-11 09:13
靠谱的找问题方式这一:
查看编译后生成的汇编程序语句,重点关注与中断相关的部分。
这需要你精通PIC的 ...

你就不能亲自用一下pic单片机再来发言?
回复

使用道具 举报

ID:1093268 发表于 2023-11-23 10:45 | 显示全部楼层
是反复触发什么中断?是IOCA吗?以前刚用PIC的时候,确实遇到过触发了一次中断后,不满足中断条件也会反复无限进入中断,就是IOCA导致的。根本原因就是看规格书不够仔细,想当然地以为清标志位即可:
20231123102455.jpg
楼主可以根据这个线索,看看是不是这种情况导致的。
XC8(HI-TECH PICC)对PIC的架构、指令集和外设了解还是非常透彻的。所以对于IOCA的清失配(读IO或写IO),编译器优化开到最大,它都不会优化掉清失配的语句。比如RdPort = PORTA这一句RdPort在代码是冗余赋值,后续逻辑没对RdPort进行操作,通常编译器会优化掉,但XC8会在这个地方把这一句转成"MOVF PORTA,W",也就是读PORTA却不赋值,达到清失配目的。

当然汇编功底不弱的话,可以在可以复现问题的前提下,把代码精简化,然后编译成功后,看反汇编。此方法和楼上网友yzwzfyz所说一致。这也是定然能找到问题所在,只是比较花时间,毕竟反汇编看起来有点麻烦。

PS:XC8(HI-TECH PICC)是主流的PIC内核C编译器,网上处理过的很多,并且经过这么版本的进化,它几乎没有啥bug了,而且它的效率奇高(我经常看它的反汇编经常惊叹它竟能有这么多骚操作,同时很多在PIC耕耘多年的朋友都感慨它效率真的高),不知楼主为何不选择它?
回复

使用道具 举报

ID:401564 发表于 2023-11-24 00:14 | 显示全部楼层
PIC单片机实在不是初学都用的,不管你是用C还是汇编,真心用得不爽
PIC的XC8环境有的默认值并不是你想要得默认值
我用过PIC18F46K80,它有一个扩展指令,一旦开启这个功能,C语法压根就不会朝着C走的,偏偏它默认是启用扩展指令的,你得手动去关闭这个功能,写出来的C才是你想要的C
同样的代码,开不开启扩展指令,运行几乎是两个结果
还有一些其它复位值,你得自己去更改的
回复

使用道具 举报

ID:883242 发表于 2023-11-24 14:15 | 显示全部楼层
Y_G_G 发表于 2023-11-24 00:14
PIC单片机实在不是初学都用的,不管你是用C还是汇编,真心用得不爽
PIC的XC8环境有的默认值并不是你想要得默 ...

PIC的汇编用的挺爽的。就是C语言太拧巴了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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