mc9s12 c语言,MC9S12的C语言与标准C语言的区别5.ppt

MC9S12的C语言与标准C语言的区别5

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(只读变量) Const volatile static 在函数体声明的静态变量,在函数调用期间保持其值. static 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;(注:把地址0x05的值给aa) aa=0x05; SCS1; value=10; volatile用在如下的几个地方 中断服务程序中修改的供其它程序检测的变量需要加volatile;? 存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都可能由不同意义 const const unsigned short a; unsigned short const a; const unsigned short *a; unsigned short * const a; Const volatile 变量 一个变量既能是常量,又能是可变量吗?如果是这样,这意味什么,怎样使用?答案是“能”。 这个修饰符应该用于能出乎意料地改变的任何存储器位置,因此需要volatile限定语,由于const该变量是只读的。 最明显的例子是硬件状态寄存器,像SCI状态寄存器SCS1。这个寄存器包含信号状态标志,如发送空、发送完成、接收满以及其它。 这是一个可变寄存器由于这些标志的改变依赖于串行通信的状态; 这也是只读,由于标志不能被程序直接改写,它们只对模块的状态作出响应。 这个状态寄存器最佳声明方法是: c

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值