- 1、本文档共38页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C和ASM的混合编程 2004-4 Tsinghua DEE Content 程序的结构 汇编程序 C程序 project框架 C语言和汇编语言混合编程 C程序中的底层操作 中断处理程序 程序的结构 内存结构 M30624FGFP Memory Map 几个主要的参数 RAM区 ramTOP ramEND ROM区 progTOP Vvector 汇编程序结构-段类型 RAM - DATA ROM - CODE ROMDATA 汇编程序结构 - 段定义 汇编程序中几个主要的参数 VramTOP .EQU 000400H VramEND .EQU 002BFFH VIstack .EQU 002C00H -》 ISP VprogTOP .EQU 0F0000H Vintbase .EQU 0FA000H Vvector .EQU 0FFFDCH SB_base .EQU 000380H -》 SB C程序结构 RAM - DATA - data bss stack heap ROM - CODE - program ROMDATA - rom vector fvector NC编译器对Section的处理 Section的属性 C程序中所有的section列表 C程序结构 - project 可能包括多个asm文件, C文件 Startup文件 sect30.inc ncrt0.a30 汇编源文件 C源文件 如何安排project的结构? 程序的入口 首先要清楚整个程序的执行过程 从哪里开始执行? Startup文件 sect30.inc文件 Startup文件 ncrt0.a30文件 根据芯片修改sect30.inc 注释掉不存在的段 最重要的三个段的位置设定 .section data_SE,DATA .org 400H .section rom_FE,ROMDATA .org 0C0000H .section vector,ROMDATA .org VECTOR_ADR VECTOR_ADR .equ 0FA000H 其他的段就交给编译器来处理 例子:一个Section分配的结果 启动过程 ncrt0.a30 设定单片机工作模式 RAM 清0 变量初值设定 堆初始化 调用全局Init子程序 调用全局Main子程序 exit循环 Project层次框架 程序结构小结 明白各个Section的含义 根据芯片参数和自己的程序来修改startup程序 用层次化来保持整个结构的清晰 C语言和汇编语言混合编程 C语言中直接插入汇编语言 C语言中调用汇编语言子程序 汇编语言中调用C语言子程序 C语言中直接插入汇编语言 使用asm关键字 — 直接改变标志和寄存器的值 void main (void) { initialize(); asm(“FSET I”); } 使用#pragma ASM — 多行汇编 void main (void) { initialize(); #pragma ASM FCLR I MOV.W #0FFH,R0 FSET I #pragma ENDASM } C语言中调用汇编语言子程序 函数名定义规则 参数规则(从C到汇编) 参数规则(从汇编返回到C) 函数名定义规则 参数规则(从C到汇编) 参数规则(从汇编到C) EXAMPLE C程序部分: extern char IR_RECV(char,char*); #pragma PARAMETER IR_RECV(R0L,A0) 汇编语言部分: .glb _IR_RECV ; 全局调用声明 _IR_RECV: mov.b R0L,N_CSTM ; 参数传递:用户码 mov.w A0, SAVE_ADDR ; 参数传递:接收结果地址 …… …… mov.b #1, R0L ; 返回1,如果收到了数据 汇编语言中调用C语言子程序 函数名定义规则 参数规则 JSR C程序中的底层操作 特
文档评论(0)