打印
[国产单片机]

求助:如何精简汇编语言?程序空间太紧

[复制链接]
1008|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zzflysky|  楼主 | 2017-9-28 22:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近用汇编设计一小系统,采用类似PIC的单片机的4个IO管脚模拟2套I2C总线,分别控制不同的I2C芯片。由于硬件已经定下来了。本来2套I2C的程序基本上是一样的,由于管脚不同,我写了不同的两套子程序来完成对不同芯片读写功能。哪位高手指点一下,有没有办法共用一套程序,能否通过定义不同的管脚位?在程序中能否重新定义管脚,给个参考。这样至少节约一半的程序空间。有没有办法在调用公用子函数前,定义不同的管脚?用什么指令?大侠指点,谢谢!

相关帖子

沙发
linqing171| | 2017-9-28 23:18 | 只看该作者
加一个全局变量,指示当前I2C是哪套。
修改 SetSclHigh, SetSclLow, SetSdaHigh, SetSdaLow, GetSda  这五个函数。    比两套代码略省。毕竟模拟I2C最大的都在i循环和延时等逻辑。
PIC是没有指向IO的指针的,节省一半比较难。

使用特权

评论回复
板凳
zzflysky|  楼主 | 2017-9-29 08:39 | 只看该作者
linqing171 发表于 2017-9-28 23:18
加一个全局变量,指示当前I2C是哪套。
修改 SetSclHigh, SetSclLow, SetSdaHigh, SetSdaLow, GetSda  这五 ...

这样还是每套I2C的子程序都不一样的,无法节约代码。

使用特权

评论回复
地板
redsun525| | 2017-9-29 16:14 | 只看该作者
毕竟是模拟的IIC口,不能用Flag bit+寄存器,或者Port口左移右移来解决吗?没用过PIC的。

使用特权

评论回复
5
一事无成就是我| | 2017-9-29 23:15 | 只看该作者
节约不了一半,少1/3是没有问题的,只要管脚处于一个8位编号内就可以,采用位移操作IO口的办法就可以了

使用特权

评论回复
6
feelhyq| | 2017-9-30 10:37 | 只看该作者
看看 代码能不能通过变异的方式进行优化   O2什么的,看看编译器有没有相应的编译选项

使用特权

评论回复
7
lpzailushang| | 2017-9-30 11:31 | 只看该作者
PIC的指令是精简指令,你可以通过间接寻址的方式,将程序减缩掉;
PIC的单片机的端口不是准双向口,需要赋值设置为输入输出的,可以通过间接寻址的方式来赋值。

使用特权

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

本版积分规则

21

主题

28

帖子

0

粉丝