




已阅读5页,还剩25页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第五章C程序编程和运行环境 TMS320C54xC语言编程C语言和汇编语言混合编程运行环境及C编译工具 1 一TMS320C54xC语言编程 使用ANSIC 即AmericanNationalStandardsInstitute定义的C语言 1 数据类型 2 数据类型 3 定点型数据和浮点型数据 语法使用方法同传统的C没有区别 但后台执行会有所不同 主要是通过rts lib进行相应的处理 数据类型 4 2 关键字 keyword constinterrupt 5 关键字 nearandfar 6 3 寄存器变量 只有AR1和AR6可以作寄存器变量寄存器变量在访问时可以比一般的变量占用更少时间 但是 建立寄存器变量需要4个指令周期 故如果不是多次使用的变量不要设为寄存器变量 7 寄存器变量 变量只能定义为char short int pointers寄存器变量使用时有很多注意事项 8 4 I O端口访问 如果访问的I O空间地址为N 16进制 则定义一个端口变量portN 然后把portN作为一般变量使用 语法ioporttypeportN其中type可以是char short int unsignedvariable 9 10 二 C语言和汇编语言混合编程 1 C中使用汇编语句 语法为asm assemblertext 注意开头要有空格 否则作为标号处理由于C文件中的汇编语句在编译时 由C源文件变为汇编源文件 并不进行语法检查 所以注意该语句在编译后的位置是不是用户需要的位置 11 2 C文件中调用汇编函数 汇编文件中程序代码标号作为函数名 该标号要有 前缀 而且标号要是全局标号 汇编文件中要有ret retd指令表示代码结束 参数和返回结果如果是单个数据 放在A中 C文件中需要把该函数作为外部函数 12 13 3 C使用汇编中变量 从C程序中访问在汇编程序中定义的变量或常数 可以分为以下3种情况 访问在 bss块中定义的变量对于访问不在 bss块中定义的变量对于在汇编程序中用 set和 global伪指令定义的全局常数 也可以使用特殊的操作从C程序中访问它们 14 C使用汇编中变量 1 访问在 bss块中定义的变量 15 C使用汇编中变量 2 对于访问不在 bss块中定义的变量 16 C使用汇编中变量 3 对于在汇编程序中用 set和 global伪指令定义的全局常数 17 4 内联函数 18 内联函数 19 20 5 汇编文件中调用C函数 从汇编程序调用C函数时 第一个参数 最左边 必须放入累加器A中 剩下的参数按自右向左的顺序压入堆栈 调用C函数时 注意C函数只保护了几个特定的寄存器 而其他是可以自由使用的 调用前先对AR0 AR7和其他寄存器压栈保护 然后使用跳转语句B执行 长整型和浮点数在存储器中存放的顺序是低位字在高地址 高位字在低地址 参数通过A传递 即在跳转之前给A 返回值也通过A接收 编译器在所有标识符 函数名 变量名等 前加下划线 21 6 汇编文件中使用C文件变量 C文件中该变量要在MAIN 函数外定义为全局变量 汇编中需要把该变量声明为全局标号 汇编文件中使用绝对地址寻址方式 var name 方式访问 var name为变量名 同时要有 前缀 22 三 运行环境及C编译工具 1 运行环境C54x将存储器处理为程序存储器和数据存储器两个线性块 程序存储器包含可执行代码 数据存储器主要包含外部变量 静态变量和系统堆栈 编译器的任务是产生可重定位的代码 允许链接器将代码和数据定位进合适的存储空间 C编译器对C语言编译后除了生成3个基本段 即 text data bss外 还生成 cinit const stack sysmem段 23 text包括程序代码和常数 cinit包括初始化数据构成的一张表 const包括字符串常量和初始化的全局 静态的变量 即有const定义的变量和常量 switch包括用于switch的常数表 bss变量数据 stack程序运行时的堆栈 sysmem用于malloc函数运行时使用 24 C C 系统堆栈 stack stack不同于DSP汇编指令定义的堆栈 DSP汇编程序中要将堆栈指针SP指向一块RAM 用于保存中断 调用时的返回地址 存放PUSH指令的压栈内容 stack定义的系统堆栈实现的功能是保护函数的返回地址 分配局部变量 在调用函数时用于传递参数 保护临时结果 stack定义的段大小 堆栈大小 可用链接器选项 stacksize设定 链接器还产生一个全局符号 STACK SIZE 并赋给它等于堆栈长度的值 以字为单位 缺省值为1K 25 初始化过程 C程序入口地址默认为 c int00 main不是入口地址 从 c int00到main还有许多的代码 起到初始化作用这段代码从rst lib库中获得 即boot asm 其的作用包括 1 为堆栈在 bss段中保留空间 并初始化堆栈指针2 从 cinit中把全局初始化变量放到 bss段中 ROM初始模式 3 调用main 函数 26 2 C编译工具 1 C编译器的组成代码分析工具Parser优化器Optimizer代码生成器Codegenerator汇编器Assembler链接器Linker 27 2 工作流程 Parser 第一阶段 生成 IF文件Optimizer 第二阶段 生成 OPT文件 该阶段可以选择不使用Codegenerator 第三阶段 生成 ASM文件Assemble 第四阶段 生成 OBJ文件Linke 第五阶段 生成 OUT文件 28 3 执行方法 Filenames是一个C文件 cl500产生 obj文件 因为他会自动调用代码分析 优化 代码生成 汇编 即下列命令 ac500 opt500 cg500 asm500 29 z激活链接器 生成的文件可以直接是 out文件 即执行ac500 opt500 cg500 asm500 lnk500 LNK500时使用的 c和 cr是对C语言中常量 放在
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 店铺代运营协议合同
- 高级审计师学习成果展示试题及答案
- 2025年中级会计考试对象分析与试题及答案
- 护理心理学的重要性初级护师考试试题及答案
- 财务治理与可持续发展实践试题及答案
- 高级审计师考试的网络互动学习试题及答案
- 高级审计师试卷分析试题及答案
- 2025年医保知识考试题库及答案(医保基金监管案例解析测试题及答案)
- 2025年小学教师资格《综合素质》职业道德专项练习题及答案
- 医疗AI技术的伦理法规框架构建探讨
- Excel高效办公应用与技巧知到智慧树章节测试课后答案2024年秋四川职业技术学院
- 酒店行业安全事故举报与奖励制度
- 数字化赋能应用型高校实践教学改革研究
- 《初中物理教材课后习题编制、使用现状调查与策略研究》
- 物管物业交接验收明细表格(全)模板
- 2024年新疆中考数学试卷(含答案解析)
- 员工突发疾病应急预案
- 7分析一个实际的环境问题课件科学五年级下册教科版
- 公司食堂外包项目投标方案(技术方案)
- 2023年全国职业院校技能大赛-直播电商赛项规程
- 事业单位的现金管理制度
评论
0/150
提交评论