历史上的今天
返回首页

历史上的今天

今天是:2025年02月03日(星期一)

2018年02月03日 | 最简单的GPIO驱动的智慧

2018-02-03 来源:eefocus

干货 | 最简单IO驱动的智慧

1.jpg?imageView2/2/w/550



    从单片机到ARM7、ARM9、Cortex-A8,从uC/OS到WinCE、Linux,GPIO驱动都是最简单、最易编写的驱动。但看似简单、毫无技术含量的驱动,其是否完整?是否规范?是否安全?

    典型案例

    本节将选取两例典型案例,从反、正两个角度进行对比。

    反方案例

    以某一源码中XXX驱动为例,截取XXX_IOControl部分的代码,如程序清单1所示;请留意代码突出显示部分。

程序清单1

2.jpg?imageView2/2/w/550

    从反方案例,实现GPIO电平状态的读或写的功能仅需要几行代码,非常简单。

    正方案例

    如程序清单2所示,代码截取自ZLG某核心板GPIO驱动,请留意代码中突出显示部分。

程序清单2

3.jpg?imageView2/2/w/550

    从正方案例,实现GPIO电平状态的读或写的功能却花费了2倍的代码工作量,差异为何如此大?

    案例点评

    一、指针使用

    在反方案例中,函数传递进来的指针参数未经判断而直接使用,这种情况下若为空指针或野指针,则程序极可能出现异常甚至崩溃!

    反方案例在读取操作后,使用“*pBytesReturned = 2;”返回实际读取的字节数,但是,该指针依然未经判断而直接使用!

    而正反案例则在每一项参数使用前均对参数范围、有效性进行判断,从根本上避免了参数异常情况的发生!

    二、错误提示

    在反方案例中,XXX_IOControl只是返回TRUE或FALSE,返回FALSE时应用层无从获取或获知是什么原因造成了“FALSE”!

    对比正方案例,在参数判断时即开始添加错误提示,在return之前,调用SetLastError函数,应用层则可以通过GetLastError获取错误原因,允许用户更快速、准确的定位错误点。

    三、注释

    反方案例函数体内外几乎无注释;

    而正方案例,无论函数体内的关键位置还是函数体外,均做必要、详细的注释说明,为程序的后期维护带来极大的便利!

    包括最简单的GPIO在内,驱动实现功能非常容易,但驱动的完整性与可靠性却蕴藏着软件工程的大智慧。


推荐阅读

史海拾趣

EDO Corp公司的发展小趣事

进入1950年代,Eclipse Magnetics迎来了一次重要的创新。公司决定将磁铁涂上红色,这一独特的红色磁铁迅速在市场上获得了认可。同时,公司还设计了与红色磁铁相配的马蹄形标志,这一标志后来成为Eclipse Magnetics的国际通用标记。随着品牌的国际化,Eclipse Magnetics的产品开始进入全球市场。

Brainboxes公司的发展小趣事

Brainboxes拥有一流的内部制造设施和全球供应链,这使得公司在产品研发和生产方面具有极大的灵活性。内部制造设施保证了产品的高品质和快速交付,而全球供应链则确保了公司能够及时获取所需的原材料和零部件。这种高效的生产模式使得Brainboxes能够迅速响应市场需求,为客户提供优质的产品和服务。

Brand-Rex公司的发展小趣事

随着全球市场的不断扩大,Brand-Rex也将目光投向了潜力巨大的中国市场。作为首批进入中国市场的国际一线品牌之一,Brand-Rex凭借其卓越的技术和产品质量迅速赢得了中国客户的青睐。然而,由于公司重组和调整,Brand-Rex在2005年之后暂停了在中国大陆地区的销售。幸运的是,2009年8月,Brand-Rex与上海速越电子工程有限公司合作重返中国市场,进一步推动了其在华业务的发展。

Cantec Electronic Co Ltd公司的发展小趣事

随着电子行业的快速发展,市场竞争日益激烈。Cantec Electronic Co Ltd意识到,传统的生产模式已经无法满足市场的需求。于是,公司决定进行转型升级,将重心转向智能电子产品的研发和生产。通过引进先进的生产设备和技术人才,公司成功开发出了一系列具有竞争力的智能电子产品,赢得了市场的广泛认可。

广东长利光电(Changli Optoelectronic)公司的发展小趣事

随着公司的发展,广东长利光电逐渐意识到质量管理的重要性。为了提升产品质量,公司决定引进ISO9001质量管理体系。在实施过程中,公司对生产流程进行了全面的梳理和优化,确保了每一个生产环节的严格控制。这一举措不仅提升了产品的合格率,还为公司赢得了更多的客户信任和市场份额。

Esterline Power Systems公司的发展小趣事

Esterline Power Systems深知人才是企业发展的核心动力。因此,公司高度重视人才培养和团队建设。公司建立了完善的培训体系,为员工提供多元化的培训和发展机会。同时,公司还注重营造良好的企业文化氛围,鼓励员工积极参与团队合作和创新实践。这些举措不仅提高了员工的专业技能和综合素质,也增强了公司的凝聚力和竞争力。

问答坊 | AI 解惑

超酷的AVR库函数和头文件及使用范例 GNU官方提供

这个文件包含了很多常用外围的应用,连 vs1003 GPS 等都有,确实佩服这种开源的精神。 本站要整理ICC下的库函数 吼吼 AVR的库函数使用范例 …

查看全部问答>

求双单片机通信的汇编程序~

双单片机主从并行通信接口,两块单片机分别采用AT89C51和AT89C2052。 以AT89C51单片机作为主单片机,通过四根控制信号线和八根数据线连接。 主机工作流程: 1.主发从收方式的工作流程如下:(1)主机设置数据传送方法控制位DIR为0,以表示主机有 ...…

查看全部问答>

跪求大侠:TFT视频应用

本人菜鸟,手头有st7781驱动芯片+TFT显示模块,已经能用contex M3在上面画图。 但是想做个视频播放,就是不知道该怎么设置st7781.我想肯定不能像画图一样把每一帧视频都画到屏上。 所以跪求对TTF应用比较厉害大侠传授点方法,或介绍点资料也行。: ...…

查看全部问答>

新兴智能人体心率检测装置的设计方案

0 引 言  心率是人体中一个非常重要的生命信息,而传统的脉诊由于其定性化和主观性影响了心率测试的精度,成为中医脉诊应用、发展和交流中的制约因素。为了提高对此类生物医学信号的测试精度,必须结合现代科学技术。目前用于检测心率的仪器很多 ...…

查看全部问答>

如何在wince6.0下开发数字电视

如何在wince6.0下开发数字电视,有相关的资料吗?请发给我一份。提供个思路最好了。谢谢…

查看全部问答>

请教:wince流接口驱动DllEntry不停被调用,不断加载卸载线程

各位大侠,本人目前intel270的硬件,跑wince5.0,目前在写流接口驱动的时候发现线程不断的被加载和卸载,即使使用一个与硬件无关的最简单的流接口驱动,情况也是如此。 OOL WINAPI DllEntry(HANDLE hInstDll, DWORD dwReason, LPVOID lpvReserved) ...…

查看全部问答>

散点分

散分,无需理由!…

查看全部问答>

宝贝交换!希望以全新的TI M3开发板换STM32仿真器和开发板!

宝贝交换!希望以全新的TI M3开发板换STM32仿真器和开发板!手头有一个TI的LM3S8962 以太网+CAN 开发板,板载仿真器,有以太网口、OLED图像显示器等资源,但是我想学STM32,所以希望用手上的开发套件换一套J-link仿真器和STM32开发板,简单能用就行 ...…

查看全部问答>

用什么方法提取一个整数的各位

请教一下大家,用什么办法能把一个六位的整数的各个位提取出来放到数组里,比如六位数246358,要把各个位2、4、6、3、5、8放到数组中去,算法里不要有乘法、除法和求余运算,430算乘除慢的吓人。硬件乘法器不能算除法和小数乘除。…

查看全部问答>

MSP430G2452 点阵屏时钟DIY进行中

用蓝色LED焊了个8*24的点阵屏,用MSP430G2452来驱动74HC595来做显示 目前2452在CCS下DEBUG有问题,先用2231验证下硬件有没有问题。   如果2452可以了就用哪个触摸板做按键使用!…

查看全部问答>