打印
[资源共享]

Keil ASM&C混合编程

[复制链接]
725|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
loutin|  楼主 | 2022-2-27 10:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

使用C51进行 单片机编程 是事半功倍的事,但是很多算法上以及编译上的问题,往往使用 ASM代码 更为方便又高效。但不知什么原因, Keil 在实现C51夹杂ASM代码比SDCC麻烦很多,方法如下:
预处理指令 #pragma asm 开始ASM代码
预处理指令 #pragma endasm 结束ASM代码

如果就这样直接编译的话,会出现以下错误:
error C272: 'asm/endasm' requires src-control to be active

解决方法:在 Files Toolbar 中选中当前C51文件,点右键查看文件选项,将 Generate Assembler SRC File 与 Assemble SRC File 的勾选由灰色变为黑色,即使这两项有效!

这时进行编译没有问题,但是Link时产生了两个警告:
*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL
*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL

解决方法是需要在 Source Group 中添加一个 LIB 文件,根据专案的内容不同有所区别:
C51S.LIB - 没有浮点运算的 Small model
C51C.LIB - 没有浮点运算的 Compact model
C51L.LIB - 没有浮点运算的 Large model
C51FPS.LIB - 带浮点运算的 Small model
C51FPC.LIB - 带浮点运算的 Compact model
C51FPL.LIB - 带浮点运算的 Large model


AN0104_Keil ASM&C混合编程_Ver1.00_cn.zip (368.5 KB)

使用特权

评论回复
沙发
caigang13| | 2022-3-1 08:15 | 只看该作者
学习了,谢谢分享。

使用特权

评论回复
板凳
tpgf| | 2022-3-2 15:58 | 只看该作者
都是一些常用的指令

使用特权

评论回复
地板
八层楼| | 2022-3-2 16:07 | 只看该作者
非常不错的解决办法

使用特权

评论回复
5
观海| | 2022-3-2 16:15 | 只看该作者
可以手动更改吗

使用特权

评论回复
6
guanjiaer| | 2022-3-2 16:36 | 只看该作者
如何避免改错呢

使用特权

评论回复
7
heimaojingzhang| | 2022-3-2 16:43 | 只看该作者
首先要有所区别哈

使用特权

评论回复
8
keaibukelian| | 2022-3-2 16:48 | 只看该作者
默认不勾选吗

使用特权

评论回复
9
七毛钱| | 2022-3-3 10:34 | 只看该作者
方法还是不错的

使用特权

评论回复
10
单片小菜| | 2022-3-7 10:45 | 只看该作者
方法还是不错的,很棒的思路,感谢楼主的分享。

使用特权

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

本版积分规则

55

主题

1322

帖子

0

粉丝