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

C语言在单片机设计中应用.ppt

  1. 1、本文档共94页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 使每一个模块成为相对独立、功能单一、结构清晰、接口简单、容易理解的程序 每个模块可以独立设计算法,单独编写和测试 一个模块中的错误不易扩散和蔓延到其它模块, 众人可同时进行集体性开发 软件具有模块结构,软件开发工作如同搭积木,一个模块可以在不同程序中多次使用 条件编译 条件编译可有效地提高程序的可移植性,并广泛地应用在商业软件中,为一个程序提供各种不同的版本。 #ifdef ~ #endif和#ifndef ~ #endif命令 #if ~ #endif 条件编译 操作系统中使用的条件编译是最多的,因为其要按照不同的版本和不同的CPU来进行编译,基本上,我们不会用到多个CPU的情况 我们用的最多的应该是debug模式和release模式 要注意条件不满足的内容是不编译的,即使有错误也不会报错,在连接的时候根本不占用ROM区 请说出const与#define 相比,有何优点 1) const 常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误。 ?2) 有些集成化的调试工具可以对const 常量进行调试,但是不能对宏常量进行调试。 关于流程图 流程图的好处 方便地看到程序流向 其他人帮你检查错误时容易发现错误 方便与第三方厂家共享 必要性 太简单的程序不需要流程图 当思绪理不清时需要画一下流程图 文字说明有时比流程图更简洁有效 C语言编写注意事项 类型强制转换: unsigned char x = unsigned int n; 取n的低8位赋给x char A = int b + char c; 将c转换为整形后与b相加,取b的低8位赋给x 某些特定操作时各编译器可能实现结果不同,为安全起见最好强制转换,本身b为unsigned char 型,则相加后可能造成结果错误。 (int)A = (unsigned int)(b) + c; 某些用来延时的语句可能会被编译器优化掉 尽量不要用;来延时,改用asm(“ nop”); 建议在RAM和ROM空间足够的情况下编译器选择不优化 可以在线仿真的芯片一般会占用芯片部分资源 C语言编写注意事项 堆栈的使用 先进后出原则 注意调用函数层数过多可能引起堆栈溢出,结果不可预料 尽量不使用嵌套中断 生成.hex文件后先查看下.map文件确认RAM使用量,避免堆栈溢出 C语言编写注意事项 注意如果使用unsigned char i 来定义变量,在判断过程中不要使用如下代码: if (i = 0) 或者 if (i) 两个unsigned char 数相乘时需要类型强制 nSum = (unsigned char)(nCost) * nSum; 使用数组时注意数组的大小 为你认为永远不可能出现的地方填写一些代码 外部函数有返回值时一定要事先声明后再使用 C语言编写注意事项 一般 在电源重置后(Power On Reset)所执行的第一个程序模块并不是使用者的主程序main(),而是一个隐藏在 标准链接库中称为 startup.a 的程序模块(一般为汇编文件),具体启动文件可咨询芯片厂商。 startup.a的主要工作是把包含 idata、xdata、pdata 在内的内存区块清除为 0,并且初始化递归指针。接着 startup.a 被执行的仍然是一个隐藏在标准链接库 中称为 init.a的程序模块。而 init.a51 的主要工作则是初始化具有非零初始值设定的变量。 在完成上述的初始化程序之后,程序 的控制权才会交给 main() 开始执行使用者的程序。 也就是说,一般的C编译器都会在初始运行时将RAM清空,而这段程序我们在自己的代码中就可以省略了。 编程风格 程序编码力求简洁,结构清晰,避免太多的分支结构及太过于技巧性的程序,尽量不采用递归模式(不容易理解); 编写程序时,亦必须想好测试的方法,换句话说,“单元测试” 的测试方案应在程序编写时一并拟好; 将大的复杂代码节分为较小的、易于理解的模块:一般一个模块的大小不超过100行; 编程风格 版本封存以后的修改一定要将老语句用/* */ 封闭,不能自行删除或修改,并要在文件及函数的修改记录中加以记录 预处理语句、全局数据、函数原型、标题、附加说明、函数说明等均顶格书写; 对齐:原则上关系密切的行应对齐,对齐包括类型、修饰、名称、参数等各部分对齐; 空行:程序文件结构各部分之间空两行,若不必要也可只空一行,各函数实现之间一般空两行; 一些常数和表格之类的应该放到code去中以节省RAM或编译器指定的方法; 编程风格 程序编完编译看有多少code多少data,注意留有足够的堆栈空间; 形参:在定义函数时,在函数名后面括

文档评论(0)

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

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

1亿VIP精品文档

相关文档