- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第6章C语言程序设计要点
6.2.4 标准C库 标准库如stdio.h中的大部分函数,可以直接使用。 Getchar()、gets()、printf()、putchar()、puts()、scanf()、sprintf()、sscanf()等这些库中的函数例外。 #include stdio.h void main(void) { Printf(“Hello World!\n”) } 山东大学控制学院 李振华 标准C语言与硬件无关,I/O的输入输出并不是标准C语言的一部分。 在标准C语言中,I/O操作时通过操作系统实现的。 在标准C中, printf()缺省的控制台是显示器,但9S12没有显示器作为片外外设。 在嵌入式编程中,如果需要使用这个功能,则需要修改基础库函数才能正确输出。 山东大学控制学院 李振华 6.2.5 C语言入口 在MC9S12的C程序中,程序的入口在什么地方?程序是怎样起动的呢? 开机进入0号复位中断 初始化(堆栈、硬件初始化、看门狗等等) 调用main函数 Codewarrior中的Start12.c 程序员可以自己编写启动代码,可以将应用程序中的硬件初始化程序都放在启动代码里面,这样就可以比较专注地在应用程序中做要做的事情。 山东大学控制学院 李振华 C起动代码通常执行下列动作 (1) 关中断; (2) 将初始化数据从ROM复制到RAM; (3) 将未初始化数据区清零; (4) 为堆栈定位空间以及初始化堆栈; (5) 创建并初始化堆; (6) 执行构造函数并初始化所有全局变量(仅C++); (7) 开中断; 山东大学控制学院 李振华 最后,起动代码调用main(),启动应用的剩余部分。当然针对于MC9S12来说,启动代码可以不必这么麻烦。可以只初始化堆,初始化硬件然后直接跳转到main函数,下面是一个启动代码的例子 山东大学控制学院 李振华 void _Startup() { asm { LDS 0x1000 JSR HardInit JSR main } } 程序员可以自己编写启动代码,可以将应用程序中的硬件初始化程序都放在启动代码里面,这样就可以比较专注地在应用程序中做要做的事情。 山东大学控制学院 李振华 6.2.6 程序的链接与定位 对于MC9S12单片机来说,由于RAM,EEPROM,寄存器可以重新映射,而且不同型号的单片机内部FLASH大小也不一样,这样程序编译后存放在什么位置,成了我们必须告诉链接器的内容,因为链接器不知道你用的单片机RAM放在什么地方,ROM放在什么地方。 为了方便管理,CodeWarrior自动生成一个.prm文件,用于定义目标代码的装载地址。 详见课本192页。 山东大学控制学院 李振华 6.2.7 C语言与汇编语言的混合编程 在绝大多数场合采用C语言编程可完成预期的目的,但是对一些特殊情况进行编程时要结合汇编语言。汇编语言具有直接和硬件打交道、执行代码的效率高等特点,可以做到C语言所不能做到的一些事情: 一个程序中的关键部分对执行速度有很高要求,实时性强。用汇编编程可以更有效的利用CPU的寄存器和指令集,用其产生的代码比用编译器产生的代码运行更快。 对特定硬件接口的访问。例如对I/O端口的访问,或者用于禁止、启用中断系统。 #define EnableInterrupts {__asm CLI;} #define DisableInterrupts {__asm SEI;} 因此,选用C语言编程时,还需要夹杂一些汇编程序。 山东大学控制学院 李振华 C中使用汇编 目前大多数MCU系统,在C语言中使用汇编语言有两种情况:一种是汇编程序部分和C程序部分为不同模块或不同的文件,通常由C程序调用汇编程序模块的变量和函数(也可称为子程序或过程);另一种是嵌入式汇编,即在C语言程序中嵌入一段汇编语言程序。 C语言中嵌入汇编语句: _asm AssemblyInstuction; asm (AssemblyInstruction); asm { AssemblyInstruction AssemblyInstruction } 山东大学控制学院 李振华 C中调用汇编指令构成的子程序: 当汇编程序和C程序为不同模块时,程序一般可分为若干个C程序模块和汇编程序模块,C程序模块通常是程序的主体框架,而汇编程序模块通常是若用C语言实现则效率不高的函数组成,也可以是已经成熟的、没有必要再转化成C语言的汇编子程序。 在这种混合编程技术中,关键是参数的传递和函数的返回值。它们必须有完整的约定,否则数据的交换就可能出错。 定义汇编子程序,定义格式如下: _子程序名 代码 ……
您可能关注的文档
- 第九讲文化研究.pptx
- 第5章 数据库设计与应用系统开发.ppt
- 第5章 环境管理的技术方法-2.ppt
- 第二章-信息论基本概念.ppt
- 第5章 数据链路层协议.ppt
- 第5章 直流直流变流电路.ppt
- 第二章 蛋白质的结构与功能.ppt
- 第二章-第7节-肺结核.ppt
- 第5章 程序设计基础.ppt
- 第二章-翻译的原则,过程及对译者的要求.ppt
- 山东聊城市文轩中学2026届数学八年级第一学期期末统考试题含解析.doc
- 安徽省芜湖市繁昌县2026届八年级数学第一学期期末预测试题含解析.doc
- 辽宁省锦州市凌海市2026届九年级数学第一学期期末调研模拟试题含解析.doc
- 江苏省泰州市姜堰区2026届八年级数学第一学期期末考试模拟试题含解析.doc
- 2026届广西桂林市灌阳县数学九上期末经典试题含解析.doc
- 安徽省马鞍山市2026届数学八上期末达标检测模拟试题含解析.doc
- 山南市重点中学2026届数学八年级第一学期期末学业水平测试模拟试题含解析.doc
- 种子预约生产合同协议书(精选).doc
- 石材买卖(合同)与石材买卖(合同)范本.doc
- 六、劳动合同书(16页版本).doc
原创力文档


文档评论(0)