[国产单片机] 求助:如何精简汇编语言?程序空间太紧

[复制链接]
1256|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的。
一事无成就是我 发表于 2017-9-29 23:15 | 显示全部楼层
节约不了一半,少1/3是没有问题的,只要管脚处于一个8位编号内就可以,采用位移操作IO口的办法就可以了

feelhyq 发表于 2017-9-30 10:37 | 显示全部楼层
看看 代码能不能通过变异的方式进行优化   O2什么的,看看编译器有没有相应的编译选项
lpzailushang 发表于 2017-9-30 11:31 | 显示全部楼层
PIC的指令是精简指令,你可以通过间接寻址的方式,将程序减缩掉;
PIC的单片机的端口不是准双向口,需要赋值设置为输入输出的,可以通过间接寻址的方式来赋值。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

21

主题

28

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部