打印

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

[复制链接]
2606|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
高建明|  楼主 | 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速度较慢流水线出现等待的情况。

使用特权

评论回复
5
高建明|  楼主 | 2012-4-23 17:36 | 只看该作者
难道香版主不发表意见?

使用特权

评论回复
6
bobo5650| | 2012-4-23 18:13 | 只看该作者
1# 高建明

记得好像把端口定义成指定地址和位的bool型变量就可以了。

使用特权

评论回复
7
jcdzxh| | 2014-12-9 08:31 | 只看该作者
特意试了一下,IAR 1.40.1

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

哎,无语,有重操ASM的冲动。

使用特权

评论回复
8
jcdzxh| | 2014-12-15 08:01 | 只看该作者
本帖最后由 jcdzxh 于 2014-12-15 08:03 编辑

用宏定义一行汇编来解决
#define CPL_PD1 _asm("BCPL _PD_ODR,#1");

使用特权

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

本版积分规则

46

主题

203

帖子

0

粉丝