如何C语言与汇编混编

2019-10-16 05:44发布

我想用汇编写SD卡与TFT的底层函数,封装成头文件形式,让C文件调用,需要设置什么吗?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
15条回答
螃蟹爱虫
1楼-- · 2019-10-17 06:59
只是一些底层的关键点用汇编而已,其它尽量用C。
zenghi
2楼-- · 2019-10-17 08:29
这个比较专业了哈,需要配置个合理的空间,一部份放汇编代码,一部分放C,然后写个上位机把汇编和C的烧录文件组合起来下载到芯片中去。C通过地址跳转到汇编函数地址来使用汇编。
pathfinder
3楼-- · 2019-10-17 13:53
 精彩回答 2  元偷偷看……
86806
4楼-- · 2019-10-17 17:27
pathfinder 发表于 2016-8-21 18:51
我也遇到类似的问题,你把问题解决了吗,我的qq1264511336,可以一起学习讨论

居然有人挖坟,顺便回答下,混编非常方便,举个栗子

1、C 调用汇编函数
假如汇编文件“aaa.s”是这样的,注意 EXPORT AAA是必须的,这样C编译器才能找到
[mw_shl_code=asm,true]
EXPORT     AAA
AAA   ...
      bx      lr[/mw_shl_code]

然后C语言是这样调用的
[mw_shl_code=asm,true]
extern        int AAA(int  a);

main()
{
int b;
b=AAA(1);
}
[/mw_shl_code]

2、汇编 调用C函数
假如汇编文件“aaa.s”是这样的,注意 IMPORT AAA是必须的,这样让汇编知道AAA这个函数不在本文件内部
[mw_shl_code=asm,true]
IMPORT AAA
   ldr    r0,=AAA
   blx   r0
[/mw_shl_code]
C函数无需做特殊处理


**************
整体而言,混编时要注意内存分配,C语言中的变量地址是由编译器分配的,有一定的不可控性,建议位汇编和C单独划分内存块

另外要注意参数传递,正常是r0 - r3,这个相关资料有详细解释
pathfinder
5楼-- · 2019-10-17 18:08
86806 发表于 2016-8-27 09:03
居然有人挖坟,顺便回答下,混编非常方便,举个栗子

1、C 调用汇编函数

建议位汇编和C单独划分内存块??汇编中确实很好把控内存分配问题,但是C中如何分配?
一般C中是编译器自动分配,但是如何划分内存呢?我是第一次尝试混编,请多指教!!谢谢
pathfinder
6楼-- · 2019-10-17 21:33

一周热门 更多>