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

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

ID:46525780

大小:522.50 KB

页数:35页

时间:2019-11-24

MC9S12的C语言与标准C语言的区别_第1页
MC9S12的C语言与标准C语言的区别_第2页
MC9S12的C语言与标准C语言的区别_第3页
MC9S12的C语言与标准C语言的区别_第4页
MC9S12的C语言与标准C语言的区别_第5页
资源描述:

《MC9S12的C语言与标准C语言的区别》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、MC9S12的C语言与标准C语言的区别1、C语言程序设计特点单片机编程语言汇编语言      优点:执行效率高,时序控制精确C语言       优点:程序开发速度快,提高开发工作效率;                     软件调试直观;                     可维护性好;                     可移植性好(与汇编语言相比较)。面向对象编程单片机C语言单片机C语言和标准C语言的用法基本相同,但是单片机C语言是针对于资源少的MCU,它的编程方法和编程手段与PC机上使用C语言还是有很大差别。C汇编代码效率中等高涉及时序困难容易查大书表效率低高上手难易容易困

2、难对硬件了解要求低要求很高可读性、维护性、重用性好不好开发时间短长跨平台是否开发大规模项目容易困难2、MC9S12的C编程与标准C的不同9S12C语言的不同变量资源映射用C语言处理中断(中断向量表64)标准C库C语言入口程序链接与定位2.1变量各种类型的数据占的字节数,在不同的系统中有所不同自定义CodeWarrior数据类型在CodeWarrior环境下按ALT+F7打开工程的通用设置,选择“CompilerforHC12”面板然后点按钮“TypeSizes”。CodeWarrior编译器标准类型设置建议不要随意更改数据类型的设置16位微控制器内部的数据长度是16位(2字节),所以首选的

3、数据类型是“int”。16位机处理16位数据比8位数据的效率更高。对于9S12单片机来说,16位数据类型效率最高,因此在使用中,尽量选择int类型数据。若可能,选用无符号类型。数据类型的真相存储类修饰符以下关键字用于声明变量,以指定特定需要或内存中变量存储的相关条件。static(静态变量)volatile(可变变量)const(只读变量)Constvolatilestatic在函数体声明的静态变量,在函数调用期间保持其值.File1.c#include/*包含文件FILE2.c中的函数*/voidmain(void){MyFunction();/*第一次进入MyFunc

4、tion之前,myVar=0*/MyFunction();/*第二次进入MyFunction之前,myVar=1*/}File2.cvoidMyFunction(void){staticunsignedcharmyVar=0;/*本地变量声明为static*/myVar=myVar+1;/*myVar是本地变量,但它保持了自己的值*/}staticFile1.c#include/*包含文件FILE2.c中的函数*/unsignedcharmyVar=0;voidmain(void){MyFunction();/*第一次进入MyFunction之前,myVar=0*/MyF

5、unction();/*第二次进入MyFunction之前,myVar=1*/}File2.cvoidMyFunction(void){myVar=myVar+1;/*myVar是本地变量,但它保持了自己的值*/}在模块内声明静态的变量(但在函数体之外),能被模块内所有函数访问;在模块内声明静态的函数,只能被模块内其它函数调用。如:staticintfunc(intx,inty);当一个C语言工程由多个程序员进行编写时,就不用担心自己所定义的函数与别人定义的重名了。如果在函数名和函数类型前加extern,则表示此函数是外部函数,可以被其他文件中的函数调用。如:externintfunc(i

6、ntx,inty)。可变(volatile)变量volatile的本意是“易变的”, 就是该变量会以编译器无法预知的方式发生变化.所有的编译器的优化均假设编译器知道变量的变化规律,请编译器不要做优化。也就是说是其值在正常程序流程以外可能改变的变量。在嵌入式系统中,这种情况通过两种主要途径发生:一是中断服务程序,二是硬件动作。例如,主程序正常运行,串口接收到一个字符,然后串口状态寄存器的值会发生改变,这完全在程序流程之外发生。在嵌入式设备中,最好将所有外设寄存器声明为volatile。例子static int i=0;intmain(void){...while (1){if (i)doso

7、mething();}}/* Interrupt service routine. */void ISR_2(void){i=1;}程序的本意是希望ISR_2中断产生时,在main当中调用dosomething函数,但是,由于编译器判断在main函数里面没有修改过i,因此可能只执行一次对从i到某寄存器的读操作,然后每次if判断都只使用这个寄存器里面的“i副本”,导致dosomething永远也不会被调用。如果将变量加上v

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。