当前位置:首页 > 技术知识 > 正文内容

单片机C语言编程,心得都在这里了

maynowei10个月前 (08-02)技术知识167

单片机写代码总踩坑,头文件被无视,老工程师的经验哪里来?

前几天写8x8矩阵键盘的程序,搞了三天代码一直乱报错。后来发现自己连头文件是什么都不清楚,之前写的都是小程序,压根没碰过.h文件。看别人的程序都有个KEY.H,里面写着Keyhit()这些函数名字,才知道头文件这么重要。

以前觉得写代码就是把功能实现就行,现在才知道项目做大了必须得规范。头文件就像施工图纸,告诉其他开发者这个模块有什么功能。比如键盘驱动的头文件写清楚有哪些函数,别人要用的时候直接include进来就行。不然大家改同一个程序,参数改错了或者函数名重复了,bug一堆根本找不出来。

有个朋友之前做项目就没用头文件,结果六个工程师一起改代码,编译器天天报重复定义错误。后来被迫重新整理,头文件一建好,效率立马提高。其实头文件核心就两部分,一是防止重复引用,用ifndef那个符号;二是把函数和变量声明放里面,具体实现放在.c文件。

我第一次写头文件时,就在KEY.H里写了两个函数:keyhit()判断有没有按键,Keyscan()读取键值。加上ifndef _KEY_H_这些防护代码,编译时就不会重复加载。虽然刚开始觉得麻烦,慢慢发现好处多得很。别人用我的键盘模块时,只需要看头文件就知道能调什么函数,不用打开整个.c文件找逻辑。

调试的时候有个案例特别清楚。有次把Keyscan()的返回值类型写错了,在头文件写的是int,实际.c里用了char,结果程序完全跑飞了。要是不看头文件对照的话,半天找不着问题。现在养成习惯,改函数参数一定先同步头文件,不然肯定出错。

还有个好处是保护代码隐私。公司做项目的时候,可以只给别人的工程里放头文件和生成的库文件,源码不用暴露。这样别人没法随意改我的算法,也避免版本混乱。以前觉得这是大项目才需要的东西,现在发现哪怕做个小玩意,规范一点也能少走很多弯路。

最近又试着把液晶屏驱动模块也拆出来,写了个LCD.H。虽然开始折腾半天,但现在想改显示内容时,直接调用库函数就行。之前写混编代码的时候,全局变量到处定义,现在都统一在头文件声明,管理方便多了。

有时候看论坛里的代码,那些没用头文件的老程序员回复:“年轻时我也乱写,现在项目做大了才懂规矩。” 现在我终于明白,写代码不只是功能实现,结构清晰才能走得长远。

相关文章

分享我的产品策划流程,希望对你也有用

本文笔者梳理拆解了自己的产品策划流程,并给出了自己对各流程的思考,希望能够给你带来一定的启发。记得刚开始做产品出需求方案的时候,上来就开始画原型写文档,在写的过程中发现某个交互没想明白或者漏了一部分逻...

Windows 加密盘BitLocker爆锁屏绕过严重漏洞

BitLocker Windows内置现代设备级数据加密保护功能,BitLocker与Windows内核深度集成。有大量的企业和个人使用BitLocker加密自己关键数据,以防止数据泄密。BitLoc...

Android监听滚动视图(监听页面滚动)

Android UI Libs之Android-ObservableScrollView1. 说明Android-ObservableScrollView,顾名思义,Android上观察滚动的视图,可...

C语言编写多线程,什么时候要使用互斥锁?为什么要使用互斥锁?

在多线程编程中,当多个线程同时访问共享资源(如变量、文件等)时,会出现竞态条件(Race Condition)问题,导致程序的行为不可预测。为了避免这种问题,需要使用互斥锁来保护共享资源的访问。互斥锁...

什么?Java 中的锁还有状态?(java中的锁都有哪些类型)

线程如果锁住了某个资源,致使其他线程无法访问的这种锁被称为悲观锁,相反,线程不锁住资源的锁被称为乐观锁,而自旋锁是基于 CAS 机制实现的,CAS又是乐观锁的一种实现,那么对于锁来说,多个线程同步访问...

LabVIEW实现Oracle数据库的访问(labview数据库查询界面)

1. 安装 Oracle 客户端下载:从 Oracle 官方网站下载适用于 Windows 操作系统的 Oracle 驱动程序。确保下载的版本与 LabVIEW 环境和操作系统兼容。1)以 Windo...