cosmic居然无法编译出BCPL汇编指令

[复制链接]
 楼主| 高建明 发表于 2012-4-23 11:18 | 显示全部楼层 |阅读模式
GPIOx->ODR|=GPIO_PIN_x可以编译出BSET原子操作指令,
同样GPIOx->ODR&=~GPIO_PIN_x也可以编译出BRES原子操作指令,
但是GPIOx->ODR^=GPIO_PIN_x居然无法编译出BCPL指令。优化开到最大也没用,不知有大侠成功过吗?嵌入汇编除外。
MicroMMU 发表于 2012-4-23 12:52 | 显示全部楼层
STM8我一般不用C。 你看下是否有IO相关的库函数可用?
 楼主| 高建明 发表于 2012-4-23 13:12 | 显示全部楼层
回楼上,我用库函数操作IO甚至还有调用函数指令,果断弃之!
MicroMMU 发表于 2012-4-23 13:27 | 显示全部楼层
只能说是编译器烂。不过也不足为奇,一个不知名的公司做的。所以不用STM8的C,一个8位而且速度不高的MCU再加上效率不高的编译器就玩不好了,一堆人说STM8不好用,一堆BUG,呵呵也就是说这个编译器不行。
我用汇编也没有遇上什么问题。STVD虽说不及KEIL51的ASM爽,但还是可以的。
ARM的C编译器做得相当不错。有些重要的地方我会去看生成汇编代码。那是相当高效率呀,自己写汇编都干不过它。人家的汇编码尽量做到32与16位交替。避免出现FLASH速度较慢流水线出现等待的情况。
 楼主| 高建明 发表于 2012-4-23 17:36 | 显示全部楼层
难道香版主不发表意见?
bobo5650 发表于 2012-4-23 18:13 | 显示全部楼层
1# 高建明

记得好像把端口定义成指定地址和位的bool型变量就可以了。
jcdzxh 发表于 2014-12-9 08:31 | 显示全部楼层
特意试了一下,IAR 1.40.1

LD A, PC_ODR
XOR A, #08
LD PC_ODR, A

哎,无语,有重操ASM的冲动。
jcdzxh 发表于 2014-12-15 08:01 | 显示全部楼层
本帖最后由 jcdzxh 于 2014-12-15 08:03 编辑

用宏定义一行汇编来解决
#define CPL_PD1 _asm("BCPL _PD_ODR,#1");
您需要登录后才可以回帖 登录 | 注册

本版积分规则

46

主题

203

帖子

0

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

46

主题

203

帖子

0

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