版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 C 语言编程语言编程清华大学电子工程系2005年4月 单片机与嵌入式系统C 语言编程语言编程 特点:相对于汇编程序来讲结构化语言自动管理变量,支持复杂数据类型可读性和移植性好具有丰富的库函数执行时间稍长 趋势:使用C语言和汇编语言混合编程来开发单片机应用程序 C 程序若干问题程序若干问题 (1) 内存的分配 M30624FGFP的内存分RAM和ROM两个区。每个区定义了若干个SECTION。 RAM DATA data bss stack heap ROM CODE program ROMDATA rom vector fvector M30624FGFP 的内存配置 NC编译器对Secti
2、on的处理 Section的属性属性:I (是否初值), N/F (是否扩展区), S (SB寻址区), E/O (偶地址对齐)举例:bss_SE, bss_NE, data_FE, data_SEIdata_SEbss_SEdata_SObss_SOdata_NEbss_NEdata_NObss_NOstackheapdata_FEbss_FEdata_FOdata_FE C程序中所有的section列表DATArom_NErom_NOrom_FErom_FOdata_SEIdata_SOIdata_NEIdata_NOIdata_FEIdata_FOIvectorfvectorROMDAT
3、ACODEprograminterruptprogram_S C 程序若干问题程序若干问题 (2) C程序结构可能包括多个asm文件, C文件 Startup文件 sect30.inc ncrt0.a30 汇编源文件 C源文件如何安排project的结构? Startup文件sect30.inc文件 ; fixed vector section .org0fffdcHNMI:.lworddummy_intRESET:.lwordstart.end Startup文件ncrt0.a30文件.glbstart.sectioninterruptstart:;-; after reset,this p
4、rogram will start;-ldc#istack_top, isp;set istack pointer 初始化程序的更改1. 注释掉不存在的段2. 最重要的三个段的位置设定.sectiondata_SE, DATA.org 400H.sectionrom_FE, ROMDATA.org 0C0000H.sectionvector, ROMDATA.orgVECTOR_ADR VECTOR_ADR .equ0FA000H其他的段就交给编译器来处理 例子:一个Section分配的结果 C 程序启动过程 主主C程序程序Void Init()Void Main()ncrt0.a30设定单片
5、机工作模式RAM 清0变量初值设定堆初始化调用全局init子程序调用全局main子程序exit循环主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() 一个 project 的层次图 C 程序若干问题程序
6、若干问题 (3) 特殊的操作1. SFR寄存器的操作 方法1: 使用 # pragma ADDRESS # pragma ADDRESS TA0 0386h # pragma ADDRESS port4 03e8h 建议将所有SFR地址声明放在一个文件里 # include “mcu16c62.h”定义类型(根据其所占的内存大小) char TA0MR, TA0IC, TABSR; unsigned int TA0; 一个访问端口的例子 使用指针访问绝对地址 方法2:直接定义指针,并对该指针赋初值 char ptr; ptr = (char ) 0 x03e8; ptr = 0 xef; 后两
7、句也可合成一句 (char ) 0 x03e8 = 0 xef; 或使用宏定义 #define port ( (char )0 x03e8 ) port = 0 xef; 2. 位操作 使用 # pragma BIT 预处理命令 C 程序若干问题程序若干问题 (4) 中断程序处理 写一个中断处理函数需先作声明 #pragma INTERRUPT 中断函数名 中断处理函数必须是一个 void 类型函数 将这个中断处理函数添加进中断向量表 .glb _中断函数名 .lword _中断函数名 一个中断向量表的例子 C 程序若干问题程序若干问题 (5) 混合编程 在 C 语言中直接插入汇编语言一种是使
8、用 asm 关键字 用于直接改变标志和寄存器的值,如 asm ( “fset i”);另一种是使用 #pragma ASM 预处理命令 # pragma ASMFCLR IMOV.W # 0FFH, R0FSET I # pragma ENDASM C 语言中调用汇编语言子程序函数名定义规则 参数值传递规则(从C到汇编) 一种是通过寄存器和堆栈传递参数值从C到汇编传递参数的规则 另一种是采用 # pragma PARAMETER 预处理命令指定寄存器进行参数值的传递 用 pragma 命令进行参数值传递 C 语言中调用汇编语言子程序(续) 参数值传递规则(从汇编到 C) 汇编语言中调用C语言子
9、程序 开发工具的安装和使用开发工具的安装和使用 通过TM提供了集成化的开发环境 软件安装文件位于: TMV320_E.EXE TM集成环境 nc30wav500r1_e.exe 编译器 pd30simv500r1_e.exe PDSIM仿真软件 安装双击直接安装即可,安装目录为E:MTOOL演示 C project 以一个DMAC的例子来演示C编程的过程 TM软件的设置 建立一个新的Project 选择自定义的启动文件:ncrt0.a30 添加C源程序(C文件)到Project里面 编辑和修改C文件演示 C project (续) 设置编译参数 编译和检查错误 程序加载和连续运行 暂停和复位 观察程序执行情况:各种显示窗口 如何修改变量和寄存器的值 单步仿真 设置断点准备工作 源文件有三个在 E: mcusetup DMA目录中ncrt0.a
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025吉林辽源市基石投资控股有限公司公开招聘工作人员笔试历年典型考点题库附带答案详解
- 2025南京银行常州分行国际业务阶段性社会招聘笔试历年典型考题及考点剖析附带答案详解2套
- 2025华夏银行成都分行社会招聘笔试历年典型考题及考点剖析附带答案详解
- 2025农银金融资产投资有限公司校园招聘10人笔试历年典型考题及考点剖析附带答案详解2套
- 2025内蒙古鄂尔多斯电力冶金集团股份有限公司招聘102人笔试历年难易错考点试卷带答案解析
- 2025内蒙古紫光化工有限责任公司招聘16人笔试历年难易错考点试卷带答案解析
- 2025内蒙古呼和浩特市城市投资建设集团有限公司招聘考察人员笔试历年备考题库附带答案详解
- 应急救援指挥中心新建项目压覆重要矿产资源评估
- 2025兴业银行成都分行社会招聘(12月)笔试历年典型考题及考点剖析附带答案详解
- 2025交通银行湖北省分行校园招聘笔试历年典型考题及考点剖析附带答案详解2套
- 2026湖北交投襄阳高速公路运营管理有限公司一线工作人员招聘笔试备考题库及答案详解
- 湖南大学2026年强基计划《专业综合考核+体育测试》模拟试题及答案解析
- 2026年食品安全员培训考试试题库及答案
- 2026江苏镇江市润州区招聘社区工作者、社区党务工作者、“两新”组织专职党务工作者11人笔试参考题库及答案详解
- 2026广东珠海市公安局金湾分局招聘公安辅警16人笔试备考试题及答案详解
- 2026连锁健身房社区化布局与健康数据价值挖掘应用报告
- (2026年)全国高考数学真题试卷(全国一卷)
- 《热力官网施工项目全过程质量控制与标准化实施》教案(高职供热通风与空调工程技术专业二年级)
- 2026年北京市丰台区中考数学一模试卷(含解析)
- 2026年广东阳江市中考地理试卷含答案
- 精准研判·科学备考-《2026年河北省中考化学冲刺策略与备考指导》讲义
评论
0/150
提交评论