C与汇编混合编程.ppt_第1页
C与汇编混合编程.ppt_第2页
C与汇编混合编程.ppt_第3页
C与汇编混合编程.ppt_第4页
C与汇编混合编程.ppt_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2020 1 27 1 C和ASM的混合编程 2004 4TsinghuaDEE 单片机与嵌入式系统 2020 1 27 2 Content 程序的结构汇编程序C程序project框架C语言和汇编语言混合编程C程序中的底层操作中断处理程序 2020 1 27 3 内存结构 程序的结构 汇编程序结构 C程序结构 2020 1 27 4 M30624FGFPMemoryMap 2020 1 27 5 几个主要的参数 RAM区ramTOPramENDROM区progTOPVvector 2020 1 27 6 汇编程序结构 段类型 RAM DATAROM CODEROMDATA 2020 1 27 7 汇编程序结构 段定义 SECTIONmemory DATA 数据段 ORGVramTOP SECTIONprog CODE 代码段 ORGVprogTOP SECTIONval vect ROMDATA 用户自定义中断向量段 ORGVintbase SECTIONinter ROMDATA 固定中断向量段 ORGVvector 8 4 2020 1 27 8 汇编程序中几个主要的参数 VramTOP EQU000400HVramEND EQU002BFFHVIstack EQU002C00H ISPVprogTOP EQU0F0000HVintbase EQU0FA000HVvector EQU0FFFDCHSB base EQU000380H SB 2020 1 27 9 C程序结构 RAM DATA databssstackheapROM CODE programROMDATA romvectorfvector 2020 1 27 10 NC编译器对Section的处理 2020 1 27 11 Section的属性 属性 I 是否初值 N F 是否扩展区 S SB寻址区 E O 偶地址对齐 举例 bss SE bss NE data FE data SEI 2020 1 27 12 data SEbss SEdata SObss SOdata NEbss NEdata NObss NOstackheapdata FEbss FEdata FOdata FE C程序中所有的section列表 DATA rom NErom NOrom FErom FOdata SEIdata SOIdata NEIdata NOIdata FEIdata FOIvectorfvector ROMDATA CODE programinterruptprogram S 2020 1 27 13 C程序结构 project 可能包括多个asm文件 C文件Startup文件sect30 incncrt0 a30汇编源文件C源文件如何安排project的结构 2020 1 27 14 程序的入口 首先要清楚整个程序的执行过程从哪里开始执行 2020 1 27 15 Startup文件 sect30 inc文件 fixedvectorsection org0fffdch NMI lworddummy intRESET lwordstart end 2020 1 27 16 Startup文件 ncrt0 a30文件 glbstart sectioninterruptstart afterreset thisprogramwillstart ldc istack top isp setistackpointer 2020 1 27 17 根据芯片修改sect30 inc 注释掉不存在的段最重要的三个段的位置设定 sectiondata SE DATA org400H sectionrom FE ROMDATA org0C0000H sectionvector ROMDATA orgVECTOR ADRVECTOR ADR equ0FA000H其他的段就交给编译器来处理 2020 1 27 18 例子 一个Section分配的结果 2020 1 27 19 ncrt0 a30设定单片机工作模式RAM清0变量初值设定堆初始化调用全局Init子程序调用全局Main子程序exit循环 启动过程 主C程序VoidInit VoidMain 2020 1 27 20 主C文件 init init1 init2 init3 main sub1 sub4 Project层次框架 Startup文件 ncrt0 a30 系统提供的库程序 include stdlib h ASM子程序 init1 sub1 C子程序1 init2 sub2 sub3 C子程序2 init3 sub4 ASM子程序 init4 sub5 2020 1 27 21 程序结构小结 明白各个Section的含义根据芯片参数和自己的程序来修改startup程序用层次化来保持整个结构的清晰 2020 1 27 22 C语言和汇编语言混合编程 C语言中直接插入汇编语言C语言中调用汇编语言子程序汇编语言中调用C语言子程序 2020 1 27 23 C语言中直接插入汇编语言 使用asm关键字 直接改变标志和寄存器的值voidmain void initialize asm FSETI 使用 pragmaASM 多行汇编voidmain void initialize pragmaASMFCLRIMOV W 0FFH R0FSETI pragmaENDASM 2020 1 27 24 C语言中调用汇编语言子程序 函数名定义规则参数规则 从C到汇编 参数规则 从汇编返回到C 2020 1 27 25 函数名定义规则 2020 1 27 26 参数规则 从C到汇编 采用 pragmaPARAMETER 2020 1 27 27 参数规则 从汇编到C 2020 1 27 28 EXAMPLE C程序部分 externcharIR RECV char char pragmaPARAMETERIR RECV R0L A0 汇编语言部分 glb IR RECV 全局调用声明 IR RECV mov bR0L N CSTM 参数传递 用户码mov wA0 SAVE ADDR 参数传递 接收结果地址 mov b 1 R0L 返回1 如果收到了数据 2020 1 27 29 汇编语言中调用C语言子程序 函数名定义规则参数规则JSR 2020 1 27 30 2020 1 27 31 C程序中的底层操作 特殊寄存器的操作BIT操作 2020 1 27 32 特殊寄存器的操作 方法1 使用 pragmaADDRESS pragmaADDRESSTA00386H pragmaADDRESSTABSR0380H 建议将所有SFR地址声明放在一个文件里 include mcu16c62 h 定义类型 根据其所占的内存大小 charTA0MR TA0IC TABSR unsignedintTA0 2020 1 27 33 特殊寄存器的操作 方法2 嵌入汇编语句asm 尤其是一些系统寄存器R0 FLG方法3 定义成汇编子函数另写一个as30文件 将相关的操作封装成函数 供C程序调用方法4 直接定义指针 并对该指针赋初值 2020 1 27 34 BIT操作 使用位域 2020 1 27 35 BIT操作 使用宏 defineSET BIT n byteA byteA 0 x01 n SetBit 1 defineCLR BIT n byteA byteA SetBit 0 defineTST BIT n byteA byteA 0 x01 n 0 Bit 0 2020 1 27 36 中断处理程序 写一个中断处理函数 pragmaINTERRUPT中断函数名将这个中断处理函数添加进中断向量表 glb 中断函数名 lword 中断函数名 2020 1 27 37 2020

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论