[讨论] 提问+如何在keil中实现模块化编程,合理的建立.h与.c文件

disguise2012   2014-3-2 17:29 楼主
一直以来 都非常困惑,,,当程序量 变大时,,,如何增强 程序 的 可读性 成为了 越来越迫切的问题,,也曾经 不断尝试 了很多次,,,除了 规范 程序 的书写,,,,在程序中  增加 注释,,,我想着,,如果 能够 把程序 模块化,,会比之前 所做的 更好,,,就是  不同功能的 模块 独立出来,,不仅 方便 今后的 调用,,还使自己 的 程序 更加明了,,,,望  高手 指点,,,谢谢,,,我主要是 单片机 编程  ,,   想解决的问题 就是 如何 合理 正确的 建立 .h 头文件   

回复评论 (6)

这是个很开放的话题,我简单说说我的看法;

1.模块的划分:
   模块的划分 和 函数的划分很类似。
   应该把握为什么而划分,是为了区分程序中的不同部分而划分,这就类似于 函数是为了区分某个过程中的几个更加具体的更加单一的子过程,或者说,为了完成一个很纯粹的很基本的操作而划分的。

   不要对面向对象太过热衷,面向过程虽然似乎成了一个很落后的东西,但事实上,面向过程在很多地方,比如我们这一行,单片机C编程威力巨大。很多事情没有绝对的是非好坏,只看你怎么看待。
   
    理解了这个核心的原因了,心里就有底。

     千万不要 分函数,分模块,分源文件是单纯的减少你要看的 代码长度,如果是那样,一点没有意义。

     函数也好,模块也好,源文件的个数和长度也好,这些都只是外表,不是核心。
     所以,一个层次划分的好的模块,也许你看着很长很长,但只要你会看,你一下子就跳过去几十行上百行,对整个程序把握起来还是很容易的。
     
2.回到你的问题 源文件和头文件
原则上,一个模块,都应该给它 一对 命名相同的 源文件,头文件。
有时候,一个模块还可以细分为几对 源文件头文件
——和前面说的一样,事实上,到底是多少对文件都不是关键,关键是你在整体上如何设计,组织程序的结构。

这里,我推荐去看一些比较典型的程序,可以作为自己参考的范本。

最好的莫过于C标准库,PJP有一本书专门论述C89标准库的15个部分的书。
但这个对功底一般,写程序还比较少的新手来说看起来比较不知底细。

所以推荐看一些相对比较简单的——只是指结构比较简单,比较容易把握理解,不是说它实现的功能简单。
这里我推荐看ST库,任何一个都可以,如果你本身就是用ST 单片机的,那么就针对你自己最熟悉那个系列的库去看就好了。

程序的结构和层次,是个大话题。
另外我推荐看一本书

代码大全,先看目录,你就知道你需要看其中几章了,这本书很长很长,论述的内容已经到了很高的高度。
但是本身每个单独的章节来看又相对独立,非常适合回答者类问题。

强者为尊,弱者,死无葬身之地
点赞  2014-3-23 00:14
还有个问题
这种问题在哪里都一样
不是keil啥的。

程序本身是很纯粹的,和什么ide,编译器都无关,当然,这个要你慢慢体会了,写程序是一件 易学难精的事情,慢慢来吧。
强者为尊,弱者,死无葬身之地
点赞  2014-3-23 00:17
谢谢  版主  的回答,,,我再  好好消化消化!!!
点赞  2014-3-28 17:07
引用: 辛昕 发表于 2014-3-23 00:17
还有个问题
这种问题在哪里都一样
不是keil啥的。

谢谢  版主  的回答,,,我再  好好消化消化!!!
点赞  2014-3-28 17:08
一般玩单片机都是挂上各种模块,把一个模块的功能函数写好后做个相应的头文件,把接口函数都放在里面声明,main函数要调用的时候先包含该头文件。,这样方便移植和调试,出错了也容易找
点赞  2014-4-28 13:07
还有记得做个公用的 C 文件,里面放些 延时、常用的宏定义呀,比如#define uint unsigned int什么的,这样可以很大程度的优化你的程序
点赞  2014-4-28 13:10
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复