打印

51单片机多文件程序该怎么管理和组织

[复制链接]
11014|23
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
超级大华哥|  楼主 | 2014-10-3 09:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我以前写一些独立的小模块程序只要调一调就好了,这次做一个小项目里面涉及到好多的模块,而且有的模块之间还要相互引用变量和函数,搞得我自己都乱了。高手们有没有什么好的管理多文件的方法和技巧,比如说具有某种性质的函数和变量该放在什么地方,文件要留出什么接口之类的。弱弱的请求一下能给出个实例。我在网上查了很多资料大部分都只是大概讲讲怎么规范书写格式,怎么写头文件之类的,望高手们能不吝赐教。万分感谢。

相关帖子

沙发
cnhemiya| | 2014-10-3 10:54 | 只看该作者
单片机接触的时间短,软件编程时间长,个人经验来说一般都是按照功能分类。
模块之间一般都是尽量减少耦合,特别是模块间的全局性质的变量耦合关联,一个模块就完成一个功能。
到需要的时候就像搭积木一样把不同功能的模块组合到一起就完成新的功能了。
至于管理多文件的方法和技巧,这个我也没好办法。软件编程一般都是做成库文件,但是单片机编程还涉及到硬件,有时候硬件稍微变动一下,软件编程部分就要修改。这个只能自己找软件或者用文档记录一下,没啥好办法。

我现在软件编程一般用到的常用的库是Qt自带的,c++标准库stl,自己整理的库,boost库,长时间不用一样要查手册,函数、类啥的好几千太多了,记不住

github.com/qtcn/tianchi
这个是我参与的一个关于Qt的一个开源项目你可以参照看看,是我和几个朋友一起搞的,注释都是中文的。

使用特权

评论回复
板凳
超级大华哥|  楼主 | 2014-10-3 11:17 | 只看该作者
有的文件中要用到同一个中断,比如定时器A那么这个定时器A的中断函数是放在哪里啊,还是直接建个TIMERA.c的文件,如果是建个文件的话,那要怎样降低耦合,我觉的这样的情况好复杂。能否请高手指点一下?

使用特权

评论回复
地板
xlsbz| | 2014-10-3 16:40 | 只看该作者
一般按照功能分

使用特权

评论回复
5
5swords| | 2014-10-3 16:43 | 只看该作者
建立TIMERA.c也是可以的,再写一个TIMERA.h,负责函数的声明和变量的声明,便于其他地方调用

个人一般习惯在 MAIN.c 只负责内写主循环为主,再建立一个主要的C文件写一些各个模块都调用到的东西,
其他模块则分别写其C文件用H头文件,
比如对于时钟DS1302,就包含DS1302.c、DS1302.h,C源文件内容为函数的定义和变量的定义,H头文件则负责函数的声明和变量的声明(包括I、O口的声明),便于其他地方调用,这是很方便的

使用特权

评论回复
6
5swords| | 2014-10-3 16:46 | 只看该作者
看到一个
https://bbs.21ic.com/forum.php?mo ... ;page=26#pid4733112

虽然细看他的代码不算够分明,但还是可以参考的,主要是结构思想可以参考学习

使用特权

评论回复
7
xlsbz| | 2014-10-3 18:46 | 只看该作者
分层

使用特权

评论回复
8
超级大华哥|  楼主 | 2014-10-3 19:01 | 只看该作者
我经常听到分层这个概念,但是具体是怎么分层

使用特权

评论回复
9
超级大华哥|  楼主 | 2014-10-3 19:06 | 只看该作者
xlsbz 发表于 2014-10-3 18:46
分层

分层是说分成硬件层,中间层,和应用层,我查了很多的资料但是许多人也没说出个方法来,到现在我也只知道这些个名词。你如果在这方面了解的话能否提供一些实例代码,我很想参考参考,谢谢。

使用特权

评论回复
10
超级大华哥|  楼主 | 2014-10-3 19:13 | 只看该作者
xlsbz 发表于 2014-10-3 16:40
一般按照功能分

比如说在MSP430中定时器A有三个捕获比较寄存器,这三个捕获比较寄存器要分别用到三个不同的功能模块中,但是在定时器A的中断程序就只有一个,那这种情况是要怎么整?

使用特权

评论回复
11
排山倒海| | 2014-10-3 20:27 | 只看该作者
《C语言程序设计现代方法第2版》第15章 编写大规模程序有一些介绍,不过我没有用多文件方式,没什么体会。

使用特权

评论回复
12
le062| | 2014-10-3 20:27 | 只看该作者
超级大华哥 发表于 2014-10-3 19:13
比如说在MSP430中定时器A有三个捕获比较寄存器,这三个捕获比较寄存器要分别用到三个不同的功能模块中, ...

可以再定时器驱动中设置3个比较器回调函数,高层注册所需的回调函数。
在中断中回调,各功能块中独立判断

鱼与熊掌不可得兼,模块化必定会消耗资源

使用特权

评论回复
13
超级大华哥|  楼主 | 2014-10-3 21:23 | 只看该作者
le062 发表于 2014-10-3 20:27
可以再定时器驱动中设置3个比较器回调函数,高层注册所需的回调函数。
在中断中回调,各功能块中独立判断 ...

果然是遇到高手了,说的名词我都没听过,不过好像很高级,多谢了,待我查一查什么是回调函数

使用特权

评论回复
14
超级大华哥|  楼主 | 2014-10-3 21:23 | 只看该作者
排山倒海 发表于 2014-10-3 20:27
《C语言程序设计现代方法第2版》第15章 编写大规模程序有一些介绍,不过我没有用多文件方式,没什么体会。 ...

谢谢了,我找一找这本书

使用特权

评论回复
15
chen_jhhb| | 2014-10-3 21:40 | 只看该作者
51单片机的程序能有多复杂?

使用特权

评论回复
16
超级大华哥|  楼主 | 2014-10-3 21:43 | 只看该作者
chen_jhhb 发表于 2014-10-3 21:40
51单片机的程序能有多复杂?

主要是在下是初学者,功夫不怎么好,请多指教

使用特权

评论回复
17
xlsbz| | 2014-10-3 22:23 | 只看该作者
国内书不要看,都是垃圾。个别的还行。

使用特权

评论回复
18
xlsbz| | 2014-10-3 22:36 | 只看该作者
超级大华哥 发表于 2014-10-3 21:23
果然是遇到高手了,说的名词我都没听过,不过好像很高级,多谢了,待我查一查什么是回调函数 ...

就是函数名当参数。为了显得高大上,又叫钩子,回调。
老外叫callback.和其他参数一样。对编写通用函数,确实管用

使用特权

评论回复
19
超级大华哥|  楼主 | 2014-10-3 22:44 | 只看该作者
xlsbz 发表于 2014-10-3 22:36
就是函数名当参数。为了显得高大上,又叫钩子,回调。
老外叫callback.和其他参数一样。对编写通用函数, ...

那是不是要用函数指针?

使用特权

评论回复
20
超级大华哥|  楼主 | 2014-10-3 22:46 | 只看该作者
xlsbz 发表于 2014-10-3 22:23
国内书不要看,都是垃圾。个别的还行。

你有没有看过的“个别”的书,推介一下下,现在好书不好找了,都淹没在坏书的浪潮中了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

10

帖子

0

粉丝