版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机技术与应用代码优化单片机技术与应用代码优化丨提高程序的效率和可维护性基于之前实现的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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年贵州省毕节市街道办人员招聘考试模拟试题及答案解析
- 2025年那曲地区网格员招聘考试试题及答案解析
- 2026年辽宁省街道办人员招聘考试模拟试题及答案解析
- 2025年邢台市桥西区幼儿园教师招聘笔试试题及答案解析
- 2026年广东省云浮市街道办人员招聘考试备考题库及答案解析
- 2026年东营市河口区街道办人员招聘笔试参考试题及答案解析
- 2026年福建省三明市幼儿园教师招聘笔试参考试题及答案解析
- 2026年潍坊市坊子区街道办人员招聘考试参考试题及答案解析
- 2026年辽阳市白塔区街道办人员招聘笔试参考试题及答案解析
- 2026年甘肃省金昌市街道办人员招聘考试备考题库及答案解析
- 《居家安宁疗护服务规范(征求意见稿)》编制说明
- 高中化学与生物跨学科融合:化学键视角下的营养素相互作用教学设计
- 浙江省省杭州市上城区建兰中学2026届中考数学四模试卷含解析
- 乌鲁木齐地区房屋建筑与市政工程施工图文件审查常见问题汇编2025版(勘察专业)
- 青海青江实业集团有限公司招聘笔试题库2026
- 2026贵州黔晟投资有限公司第一批社会招聘8人备考题库附答案详解(完整版)
- 感染质控中心工作制度
- (完整版)2026年党建基础知识应知应会试题及答案
- 雨课堂学堂在线学堂云人工智能技术与应用(江南大学)单元测试考核答案
- OpenClaw专题学习培训
- 大一下学期高等数学期中考试试卷及答案
评论
0/150
提交评论