《单片机技术与应用》课件-17.代码优化_第1页
《单片机技术与应用》课件-17.代码优化_第2页
《单片机技术与应用》课件-17.代码优化_第3页
《单片机技术与应用》课件-17.代码优化_第4页
《单片机技术与应用》课件-17.代码优化_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

单片机技术与应用代码优化单片机技术与应用代码优化丨提高程序的效率和可维护性基于之前实现的CC2530控制LED1(D3)灯闪烁的代码1提高代码的可读性使用更具描述性的函数和变量名增加注释,解释代码的关键部分尽量避免硬编码2提高代码的可维护性减少重复代码,使用宏或函数封装使用配置选项,方便后续修改3提高代码的效率减少空循环的次数,避免浪费CPU资源如果可能,使用硬件定时器代替软件延时二、原代码回顾已编写控制原代码如下#include

"ioCC2530.h"//软件延时函数void

Delay(void)

{

for

(unsignedlong

i=

0;

i<

50000;

i++)

{

//空循环,实现延时}}//主函数void

main(void)

{//初始化I/O端口:

P1SEL&=

~0x01;//配置P1_0为为通用I/O口

P1DIR|=

0x01;//配置P1_0为输出模式

P1_0=

0;//LED1(D3)灯初始状态为熄灭

while

(1)

{

//点亮LED灯

P1_0=

1;

//调用软件延时函数

Delay();

//熄灭LED灯

P1_0=

0;

//调用软件延时函数

Delay();}}后期开发更复杂的项目做好准备二、原代码回顾原代码编写应需优化原代码回顾二、原代码回顾原代码存在的问题如图:出现硬编码更改了灯泡电路修改所有硬编码

P1_0=

0;//LED1(D3)灯初始状态为熄灭灯泡所连接的引脚号P1_0直接写在代码中二、原代码回顾原代码存在的问题如图:主函数代码较烦琐针对初始化I/O端口//主函数void

main(void)

{//初始化I/O端口:

P1SEL&=

~0x01;//配置P1_0为为通用I/O口

P1DIR|=

0x01;//配置P1_0为输出模式

P1_0=

0;//LED1(D3)灯初始状态为熄灭

...}简化处理二、原代码回顾原代码存在的问题如图:void

Delay(void)

{

for

(uint32_t

i=

0;

i<

50000;

i++)

{

//空循环,实现延时}}软件延时次数被固定不方便后续调整1使用宏定义,修整代码很简单丨宏定义灯泡电路有改变直接调整宏定义无须到处修改#define

LED_PIN

P1_0//定义LED灯连接的I/O端口#define

LED_ON()

P1_0=

1

//定义点亮LED的宏#define

LED_OFF()

P1_0=

0

//定义熄灭LED的宏1使用宏定义,修整代码很简单丨宏定义定义延时时间的宏

优化延时函数方便调整调整延时循环次数宏定义里修改#define

DELAY_COUNT50000

//定义延时循环次数//优化后的延时函数void

Delay(void)

{

for

(unsignedlong

i=

0;

i<

DELAY_COUNT;

i++)

{

//空循环,实现延时

}}2使用函数封装,代码简洁如图初始化I/O端口的逻辑代码封装到函数主函数调用初始化函数主函数的代码简洁易懂//初始化I/O端口void

InitIO(void)

{P1SEL&=

~0x01;//配置P1_0为为通用I/O口

P1DIR|=

0x01;

//配置P1_0为输出模式LED_PIN

=

0;

//初始状态为熄灭}//主函数void

main(void)

{InitIO();

//初始化硬件......}2使用函数封装,代码简洁如图点亮和熄灭LED的逻辑封装到函数LedOn(void)和LedOff(void)中主循环main(void)随时调用函数减少代码重复//点亮LED灯的函数void

LedOn(void)

{

LED_ON();Delay();}//熄灭LED灯的函数void

LedOff(void)

{

LED_OFF();Delay();}3使用配置选项提高灵活性(可选)定义配置选项方便修改LED灯的闪烁模式switch开关语句不同闪烁模式适应性灵活度#define

FLASH_MODE1

//定义闪烁模式#define

FLASH_MODE_NORMAL1#define

FLASH_MODE_FAST2//主函数void

main(void)

{

InitIO();

//初始化硬件

while

(1)

{

switch

(FLASH_MODE)

{

case

FLASH_MODE_NORMAL:

LedOn();

LedOff();

break;

case

FLASH_MODE_FAST:

for

(unsigned

i=

0;

i<

2;

i++)

{

LedOn();

LedOff();

}

break;

}}}4使用硬件定时器提高效率(可选)CC2530的硬件定时器配置定时器中断定时器对于定时器的设置将在后期课程进行学习实现更精确的延时四、优化后的代码展示代码如下#include

"ioCC2530.h"//宏定义#define

LED_PINP1_0//定义LED灯连接的I/O端口#define

DELAY_COUNT50000

//定义延时循环次数#define

FLASH_MODE1

//定义闪烁模式#define

FLASH_MODE_NORMAL1#define

FLASH_MODE_FAST2#define

LED_ON()

P1_0=

1#define

LED_OFF()

P1_0=

0//初始化I/O端口void

InitIO(void)

{P1SEL&=

~0x01;//配置P1_0为为通用I/O口

P1DIR|=

0x01;

//配置P1_0为输出模式LED_PIN

=

0;

//初始状态为熄灭}//延时函数Delay()void

Delay(void)

{

for

(unsignedlong

i=

0;

i<

DELAY_COUNT;

i++)

{

//空循环,实现延时}}四、优化后的代码展示代码如下//点亮LED灯的函数LedOn()void

LedOn(void)

{

LED_ON();Delay();}//熄灭LED灯的函数LedOff(void)void

LedOff(void)

{

LED_OFF();Delay();}//主函数void

main(void)

{

InitIO();

//初始化硬件

while

(1)

{

switch

(FLASH_MODE)

{

case

FLASH_MODE_NORMAL:

LedOn();//调用点亮LED灯的函数

LedOff();//调用熄灭LED灯的函数

break;

case

FLASH_MODE_FAST:

for

(unsigned

i=

0;

i<

2;

i++)

{

LedOn();

LedOff();

}

break;

}}}四、优化

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论