你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 6114|回复: 6

在C语言中嵌入汇编,并让汇编代码对齐

[复制链接]

1

主题

6

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2012-4-9 12:44:50 | 显示全部楼层 |阅读模式
  1600KHZ.png
我尝试过在 INFI_LOOP_1600KHZ 标号的后面加上 .l 让它4字节对齐,但编译时,提示出错。
如果不对齐的话,出来的波形不正确。
<
回复

使用道具 举报

1

主题

6

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 2012-4-9 12:45:53 | 显示全部楼层

RE:在C语言中嵌入汇编,并让汇编代码对齐

就是让 INFI_LOOP_1600KHZ 这个标号 4 字节对齐。
回复 支持 反对

使用道具 举报

42

主题

101

回帖

0

蝴蝶豆

高级会员

最后登录
1970-1-1
发表于 2012-4-9 13:53:21 | 显示全部楼层

RE:在C语言中嵌入汇编,并让汇编代码对齐

关注中,本人也在学习开发中。谢谢,等待高人
回复 支持 反对

使用道具 举报

134

主题

4489

回帖

239

蝴蝶豆

版主

最后登录
2020-12-9
发表于 2012-4-9 15:29:06 | 显示全部楼层

RE:在C语言中嵌入汇编,并让汇编代码对齐

1、4字节对齐是指?
2、错误信息贴出来。
回复 支持 反对

使用道具 举报

1

主题

6

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 2012-4-9 16:27:29 | 显示全部楼层

RE:在C语言中嵌入汇编,并让汇编代码对齐

4字节对齐,就是让汇编代码的第一条指令
    LD   A, $500F
放在以 XXX0H、XXX4H、XXX8H、XXXCH 开始的地方。
如果不那样做,发现程序执行起来,慢了,多花了一个 clk 的时间,照成无法准确输出 1.6 MHz 的方波信号。
而如果,地址对齐,就和预想的一样。
我曾在前面加上 NOP 空指令来填补,让代码的第一条指令4字节对齐,但修改代码后,并不总是管用,似乎有时候需要 NOP,而有时候不需要。
有没有一种方法,强制的将字节的代码4字节对齐,让编译器来做填补的工作。
回复 支持 反对

使用道具 举报

1

主题

6

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 2012-4-9 16:38:06 | 显示全部楼层

RE:在C语言中嵌入汇编,并让汇编代码对齐

图片中的死循环用来产生 1.6 MHz 的波形。
本来 5 clks 就能执行完一次循环,如果开始地址不 4 字节对齐,就会花 6 clks 才能执行完。
是预取指令的原因,还是编译器偷偷的加了什么指令?
反正地址对齐,问题就没有了。
回复 支持 反对

使用道具 举报

134

主题

4489

回帖

239

蝴蝶豆

版主

最后登录
2020-12-9
发表于 2012-4-10 17:18:21 | 显示全部楼层

RE:在C语言中嵌入汇编,并让汇编代码对齐

这个就需要你去看每条指令占用的字节了,比如MOV占用1个字节,而ADDC占用2个字节。
回复 支持 反对

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版