|
本帖最后由 kation122 于 2015-4-5 13:31 编辑
最近想将LGT8F88D用在一个项目上, 初接触到AVR ,所以初步研究了一下AVR ,以前看到很多大侠说AVR 非常好用,
但是我个人自己的感觉,用起来不是很顺手,就拿IO 操作来说,之前用到的MCU 都是可以直接bit 操作的,比如 用瑞萨的 R8C
#define LED_R p1_0 之后就可以直接用了 , 这样 LED_R =1;IO 就输出高了,很直接、很方便, STM8S 也可以直接bit 操作。
但是AVR 好像这样用不了,在IAR 中,仿照R8C 的头文件,用位域的方法,定义可以位操作的IO ,但是擦看汇编一看,吓一跳,并没有用SBI ,CBI 这样的指令,
而是用 了 类似 读-写-改的操作来实现的,这样效率也太低了吧,将编译器优化等级调到最高,结果还是一样,网上查了一下,原来是“SBI和CBI指令只能对$00-$1F的I/O寄存器”,
但是8F328 的IO 是从0X25 开始的,所以SBI CBI 指令用不了,是不是这个原因呢?请大侠指点。
1、R8C 的IO 设置和操作,可以看到,设置IO DDR 、设置输出值,都是一条 BSET 就搞定了
2、STM8S 的IO 设置和操作,可以看到,同样的一条位指令就OK ,比如设置IO 为低,BRES 就OK 。
3、AVR 的IO 操作,汇编就比较复杂了。可以看到 设置IO 为输出 、设置IO 为低,都要5条指令才能完成。怎么差距会这么大呢。
PS: 使用的平台都统一是 IAR,优化等级都是最高
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!
|