网站大量收购独家精品文档,联系QQ:2885784924

[工学]8 MC9S12的C语言与标准C语言的区别.ppt

  1. 1、本文档共32页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[工学]8 MC9S12的C语言与标准C语言的区别

MC9S12的C语言与标准C语言的区别 1、C语言程序设计基础 单片机编程语言 ?? 汇编语言 ????? 优点:执行效率高,时序控制精确 ?? C语言 ?????? 优点: 程序开发速度快,提高开发工作效率; ???????????????????? 软件调试直观; ???????????????????? 可维护性好; ???????????????????? 可移植性好(与汇编语言相比较)。 面向对象编程 单片机C语言 单片机C语言和标准C语言的用法基本相同,但是单片机C语言是针对于资源少的MCU,它的编程方法和编程手段与PC机上使用C语言还是有很大差别。 2、MC9S12的C编程与标准C的不同 9S12 C语言的不同 变量 资源映射 用C语言处理中断(中断向量表64) 标准C库 C语言入口 程序链接与定位 2.1 变量 自定义CodeWarrior数据类型 在CodeWarrior环境下按ALT+F7打开工程的通用设置,选择“Compiler for HC12”面板然后点按钮“Type Sizes”。 数据类型的真相 16位微控制器内部的数据长度是16位(2字节),所以首选的数据类型是“int”。16位机处理16位数据比8位数据的效率更高。 对于9S12单片机来说,16位数据类型效率最高,因此在使用中,尽量选择int类型数据。若可能,选用无符号类型。 存储类修饰符 以下关键字用于声明变量,以指定特定需要或内存中变量存储的相关条件。 static(静态变量) volatile(可变变量) const(只读变量) static 在函数体声明的静态变量,在函数调用期间保持其值. 在模块内声明静态的变量(但在函数体之外) ,能被模块内所有函数访问; 在模块内声明静态的函数,只能被模块内其它函数调用。 如:static int func(int x,int y);当一个C语言工程由多个程序员进行编写时,就不用担心自己所定义的函数与别人定义的重名了。 如果在函数名和函数类型前加extern,则表示此函数是外部函数,可以被其他文件中的函数调用。 如:extern int func(int x,int y)。 可变(volatile)变量 volatile的本意是“易变的”,?就是该变量会以编译器无法预知的方式发生变化,请编译器不要做优化(所有的编译器的优化均假设编译器知道变量的变化规律)。 也就是说是其值在正常程序流程以外可能改变的变量。在嵌入式系统中,这种情况通过两种主要途径发生:一是中断服务程序,二是硬件动作。 例如,通过串口接收到一个字符,然后串口状态寄存器的值会发生改变,这完全在程序流程之外发生。在嵌入式设备中,最好将所有外设寄存器声明为volatile。 例子 static?int?i=0;? int?main(void)? {? ...? while?(1)? {? if?(i)?dosomething();? }? }? /*?Interrupt?service?routine.?*/? void?ISR_2(void)? {? i=1;? }? unsigned char aa@0x2100; unsigned char SCS1@0x2110; unsigned char value@0x2120; void main(void) { aa=0x05; aa=0x05; SCS1; value=10; volatile用在如下的几个地方 1、中断服务程序中修改的供其它程序检测的变量需要加volatile;? 3、存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都可能由不同意义 const const unsigned short a; unsigned short const a; const unsigned short *a; unsigned short * const a; Const volatile 变量 一个变量既能是常量,又能是可变量吗?如果是这样,这意味什么,怎样使用?答案是“能”。 这个修饰符应该用于能出乎意料地改变的任何存储器位置,因此需要volatile限定语,由于const该变量是只读的。 最明显的例子是硬件状态寄存器,像SCI状态寄存器SCS1。这个寄存器包含信号状态标志,如发送空、发送完成、接收满以及其它。 这是一个可变寄存器由于这些标志的改变依赖于串行通信的状态; 这也是只读,由于标志不能被程序直接改写,它们只对模块的状态作出响应。 这个状态寄存器最佳声明方法是: const volatile unsigned char SCS1 @0x0016 2.2 资源的映射 1. 访问

文档评论(0)

hhuiws1482 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:5024214302000003

1亿VIP精品文档

相关文档