oldbeginner 发表于 2013-11-22 08:49:18

开源PLC学习笔记10(再从51开始 文件管理)——2013_11_22

本帖最后由 oldbeginner 于 2013-11-22 08:55 编辑

主函数并没有理解完,因为感觉理解主函数的一些工作还没有准备好。有了这些准备工作,主函数就是非常容易理解的了。

这里要开始理解一下文件管理,理解好了文件管理,就可以单独调试各个模块,比如笔记05中的uart模块,虽然是从程序上理解了,但是并没有做过测试,uart环形队列能正常工作吗?自己试了一下,觉得很难,这就更有必要回头把模块调试好。而要把模块分清,自然需要文件管理知识了。

首先,一栏开源PLC的文件结构,




结构还是很清晰的,首先第一种关系,利用system.h是个头文件集中
所有C文件中的全局函数定义到对应名称的头文件中(要有防重复引用机制)
所有头文件包含在system.h中;
在所有文件中包含system.h。

第二种关系,就是例外的C文件和头文件关系。

因为我是初学者,对如何安排头文件和C文件有些混淆,出现重复定义错误时手足无措,不过,现在好像解决了这个问题。
搜一下,
http://www.eeworld.com.cn/mcu/2013/0701/article_13351.html
因为内容不错,大量摘录,
1)h文件作用
1 方便开发:包含一些文件需要的共同的常量,结构,类型定义,函数,变量申明;
2 提供接口:对一个软件包来说可以提供一个给外界的接口(例如: stdio.h)。

2)h文件里应该有什么
常量,结构,类型定义,函数,变量申明。
3)h文件不应该有什么
变量定义, 函数定义。(最容易产生重复定义的错误)

4)extern问题
对于变量需要extern;
对于函数不需要因为函数的缺省状态是extern的.如果一个函数要改变为只在文件内可见,加static。

5)include包含问题
虽然申明和类型定义可以重复,不过推荐使用条件编译。
#ifndef _FILENAME_H,
#define _FILENAME_H
……
#endif

6)应该在那儿包含h文件
在需要的地方.比如某个提供接口的h文件仅仅被1.c文件需要,那么就在1.c文件里包含。编写的程序一般会有.H文件和相对应的.C文件,.H文件是声明所用,.C文件是其函数实现部分。在调用时只要包含.H文件即可,我们没有听说过#include "delay.c"这类的程序,同时也不提倡使用这个形式。**************************************************************开源PLC的文件管理格式总体上还是比较好的,虽然不排除最后做些文件管理上的更改。例如,uart.h,iap.h等就完全符合上面的观点 理解文件管理上,就可以开始测试模块了。首先测试uart模块,我已经做了一些工作,这个模块对我来说还是比较难的。另外该模块的测试会单独写在新笔记05续里。

cqfeiyu 发表于 2013-11-22 08:51:57

源码在哪下?

oldbeginner 发表于 2013-11-22 08:55:48

cqfeiyu 发表于 2013-11-22 08:51 static/image/common/back.gif
源码在哪下?

笔记01里有链接。

CK345 发表于 2013-11-22 10:27:30

支持顶顶

oldbeginner 发表于 2013-11-25 09:18:22

根据笔记05续,作出的uart模块,再利用FX1N中的函数就可以进行串口通讯模拟了。
首先,看一下结构

主函数是FX1NProcessing在循环,这样就可以了解输出的字符串是否是我们想要的。

为了风格一致性,也引入了system.h,作为总包含文件。


这样,文件结构清晰,就可以把精力放在文件内容上,而不是被他们之间的组织关系搞混淆。

oldbeginner 发表于 2013-11-27 08:08:19

oldbeginner 发表于 2013-11-25 09:18
根据笔记05续,作出的uart模块,再利用FX1N中的函数就可以进行串口通讯模拟了。
首先,看一下结构




模块的结构和作用

页: [1]
查看完整版本: 开源PLC学习笔记10(再从51开始 文件管理)——2013_11_22