首页
|
新闻
|
新品
|
文库
|
方案
|
视频
|
下载
|
商城
|
开发板
|
数据中心
|
座谈新版
|
培训
|
工具
|
博客
|
论坛
|
百科
|
GEC
|
活动
|
主题月
|
电子展
注册
登录
论坛
博客
搜索
帮助
导航
默认风格
uchome
discuz6
GreenM
»
DSP技术
» 最简单IO驱动的智慧
返回列表
回复
发帖
发新话题
发布投票
发布悬赏
发布辩论
发布活动
发布视频
发布商品
最简单IO驱动的智慧
发短消息
加为好友
porereading
当前离线
UID
863084
帖子
7183
精华
0
积分
3592
阅读权限
90
在线时间
209 小时
注册时间
2011-11-30
最后登录
2019-8-28
论坛元老
UID
863084
1
#
打印
字体大小:
t
T
porereading
发表于 2015-7-11 09:00
|
只看该作者
最简单IO驱动的智慧
单片机
,
Linux
GPIO驱动是嵌入式系统中最简单的驱动,然而有多少电子类高材生在它身上栽了跟头?
干货 | 最简单IO驱动的智慧
从单片机到ARM7、ARM9、Cortex-A8,从uC/OS到WinCE、Linux,GPIO驱动都是最简单、最易编写的驱动。但看似简单、毫无技术含量的驱动,其是否完整?是否规范?是否安全?
典型案例
本节将选取两例典型案例,从反、正两个角度进行对比。
反方案例
以某一源码中XXX驱动为例,截取XXX_IOControl部分的代码,如程序清单1所示;请留意代码突出显示部分。
程序清单1
从反方案例,实现GPIO电平状态的读或写的功能仅需要几行代码,非常简单。
正方案例
如程序清单2所示,代码截取自ZLG某核心板GPIO驱动,请留意代码中突出显示部分。
程序清单2
从正方案例,实现GPIO电平状态的读或写的功能却花费了2倍的代码工作量,差异为何如此大?
案例点评
一、指针使用
在反方案例中,函数传递进来的指针参数未经判断而直接使用,这种情况下若为空指针或野指针,则程序极可能出现异常甚至崩溃!
反方案例在读取操作后,使用“*pBytesReturned = 2;”返回实际读取的字节数,但是,该指针依然未经判断而直接使用!
而正反案例则在每一项参数使用前均对参数范围、有效性进行判断,从根本上避免了参数异常情况的发生!
二、错误提示
在反方案例中,XXX_IOControl只是返回TRUE或FALSE,返回FALSE时应用层无从获取或获知是什么原因造成了“FALSE”!
对比正方案例,在参数判断时即开始添加错误提示,在return之前,调用SetLastError函数,应用层则可以通过GetLastError获取错误原因,允许用户更快速、准确的定位错误点。
三、注释
反方案例函数体内外几乎无注释;
而正方案例,无论函数体内的关键位置还是函数体外,均做必要、详细的注释说明,为程序的后期维护带来极大的便利!
包括最简单的GPIO在内,驱动实现功能非常容易,但驱动的完整性与可靠性却蕴藏着软件工程的大智慧。
收藏
分享
评分
回复
引用
订阅
TOP
返回列表
电商论坛
Pine A64
资料下载
方案分享
FAQ
行业应用
消费电子
便携式设备
医疗电子
汽车电子
工业控制
热门技术
智能可穿戴
3D打印
智能家居
综合设计
示波器技术
存储器
电子制造
计算机和外设
软件开发
分立器件
传感器技术
无源元件
资料共享
PCB综合技术
综合技术交流
EDA
MCU 单片机技术
ST MCU
Freescale MCU
NXP MCU
新唐 MCU
MIPS
X86
ARM
PowerPC
DSP技术
嵌入式技术
FPGA/CPLD可编程逻辑
模拟电路
数字电路
富士通半导体FRAM 铁电存储器“免费样片”使用心得
电源与功率管理
LED技术
测试测量
通信技术
3G
无线技术
微波在线
综合交流区
职场驿站
活动专区
在线座谈交流区
紧缺人才培训课程交流区
意见和建议