第2章第4节 Wanlix的文件组织结构

源码请在https://github.com/ifreecoding/MbedRtos.git下载

第4节 Wanlix的文件组织结构

说起写软件,还是比较容易入门的,现在电脑这么普及,随便找本软件的书籍就可以在电脑上编程了,实现一些功能,但这仅仅是编写软件的最初级阶段,一部分人可能一辈子只会停留在这个阶段,全局变量满天飞,函数没有层次结构,文件关系混乱。能够发展下去,能够编出满足功能需求,可维护性、可测试性好,效率高,用户易用的软件才可称之为软件人员。编码只是软件中很小的一个环节,随着产品不断的扩大,这一点越来越明显,编码固然重要,但编码之外的设计也非常重要。

我写的代码虽有一些条理,但也比较凌乱,还请各位多多包涵,就算是一个反面教材,同时,也希望大家能写出好的软件!

现在虽然是在写操作系统,但操作系统最终是要给用户使用的,为了方便用户使用,我们需要设计一下文件结构。如图10所示,RTOS_Wanlix是整个项目的根目录,下面包含了wanlix、srccode、others、outfile和project这5个目录。与操作系统相关的文件被放在wanlix目录下。用户文件用来实现产品功能,放在srccode目录下。编译后的输出文件放在outfile目录下。我使用的是Keil开发工具,与Keil相关的工程文件放在project目录下。其它文件放在others目录下。

RTOS_Wanlix

├[wanlix]

│  ├[wanlix.h]

│  ├[wlx_core_a.asm]

│  ├[wlx_core_a.h]

│  ├[wlx_core_c.c]

│  └[wlx_core_c.h]

├[srccode]

│ ├[global.h]

│ ├[device.c]

│ ├[device.h]

│ ├[test.c]

│ ├[test.h]

│ ├[wlx_userboot.c]

│ ├[wlx_userboot.h]

│ └[unoptimize.c]

├[others]

│ ├[ADuC702X.ld]

│ └[startup.s]

├[outfile]

└[project]

图 10  Wanlix文件结构

下面详细介绍各个目录和文件。

u wanlix目录中存放的是操作系统的源文件,所有的操作系统文件均是以“wlx_”为前缀,操作系统头文件wanlix.h除外。

ü wanlix.h文件是操作系统的总头文件,定义了操作系统共用的宏、结构体,供操作系统全部文件使用,也是操作系统对外的接口文件。用户代码只需要包含且仅需要包含这个头文件,就可以使用Wanlix操作系统的所有功能了。

ü wlx_core_a.asm文件是使用汇编语言编写的操作系统内核调度文件,所有与汇编相关的代码都放在这个文件里。

ü wlx_core_a.h文件是wlx_core_a.asm文件的头文件,被wlx_core_a.asm文件包含,定义了wlx_core_a.asm文件使用的宏、声明了wlx_core_a.asm文件使用的全局变量和函数等。

ü wlx_core_c.c文件是使用C程序编写的操作系统内核调度文件,这个文件是操作系统的核心文件,与操作系统调度相关的功能都是在这个文件实现的。

ü wlx_core_c.h文件是wlx_core_c.c文件的头文件,被wlx_core_c.c文件包含,定义了wlx_core_c.c文件使用的宏、声明了wlx_core_c.c文件使用的全局变量和函数等。

u srccode是用户代码目录,该目录中保存的是用户源代码文件。srccode目录下的文件是与项目直接相关的,用户可根据自身需要增减、修改文件,可以自行安排。在本手册中使用这些用户文件编写一些例子,用来演示操作系统的功能。

ü global.h文件是用户文件的总头文件,用户文件共同使用的信息被存放到该头文件里,该文件被各个用户c文件的h头文件包含,以便每个用户文件都可以使用共有的接口功能。该头文件包含了wanlix.h文件,以便所有用户文件可以使用Wanlix的功能。

ü device.c文件是驱动文件,设备所有的驱动程序均放在此文件。

ü test.c文件包含了演示操作系统功能所使用的代码。

ü wlx_userboot.c文件是操作系统与用户代码的接口文件,用户代码从该文件启动。C语言的入口函数是main函数,在Wanlix操作系统里main函数将被封装到操作系统内部,用户不可见,用户代码将从该文件里的WLX_RootTask函数启动。用户需要根据自身需要向该文件添加代码,这也是这个文件放在srccode目录的原因。

ü unoptimize.c文件里包含的是不能被优化的代码,因此单独提出对该文件采用不优化的编译选项,其它文件均采用O2的优化选项。

ü xxx.h文件是xxx.c文件的头文件,仅包含xxx.c文件所使用的信息。

u others目录里保存的是与开发工具相关的文件,本手册使用的是Keil开发工具,这个目录里保存的是Keil中所使用的与芯片相关的文件,包括芯片启动文件startup.s和链接文件ADuC702X.ld。

ü 在startup.s文件中包括了芯片的中断向量表以及芯片启动程序,由汇编语言编写。

ü ADuC702X.ld文件是整个工程的链接文件,决定了芯片存储空间的分配。

u project目录是开发工具的文件所在目录,我们使用的是Keil,所有与Keil工程相关的文件均保存在此目录。这个目录里的文件我们不用关心,由Keil自动生成。

u outfile目录是输出文件目录,代码编译后输出的所有文件就存放在这个目录里。

为方便理解这些文件之间的调用关系,我们通过图11来做一个说明:

图 11  Wanlix文件调用关系

顺着箭头的方向代表“包含”的意思,A—>B表示A文件包含B文件。

图11中最上面一行文件是需要用户自己编写的文件,需要用户自行修改。中间一行是操作系统的文件,用户不能修改。最下面一行是芯片定义的头文件,由芯片厂商提供,用户不能修改。左边一列是操作系统文件,中间一列是操作系统与用户的接口文件,右边一列是用户文件。

其中mds_core_a. asm文件有点特殊,因为它是汇编文件,无法使用C文件中的定义,因此它与C文件没有关系,它里面的函数是放在mds_core_c.h文件中声明的。

经过对文件结构的设计,每个c文件只需要包含它对应的h文件,每个c文件的h文件都需要包含总头文件,用户文件需要包含wanlix.h文件,形成一个树状结构。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
将《底层工作者手册之C语言基础及项目开发》改名为《底层开发者手册之C语言基础及项目开发》,并做了一些修改,更新到2.4.5。不过其中有一些还没有写完。先凑合看吧   《C》这本手册是《底层开发者手册》系列的第二本,但它却是我第一个开始写的,早在2008年年底时我就开始着手写这本手册,但写了没多久就因为发生了一个意外而终止了。在2010年年初的时候我开始了第四本手册的写作——嵌入式操作系统内核,目前已接近完工状态(我的博客可以下载,blog.sina.com.cn/ifreecoding),现在我又回过头来重新写《C》这本手册,将会采用与《嵌》一样的方式,写一部分就在网上发布一部分,在这同时我又在收集第一本和第三本手册的材料,准备将这4本手册同时写完,使读者可以按照顺序阅读这4本手册,层层深入底层开发者的工作。   一个良好的C语言基础是编写嵌入式设备底层代码的必要条件,如今介绍C语言的书不少,介绍嵌入式C的书也不少,但几乎没有结合实际项目来介绍C语言的,看完这样的书,C语言会用了,但做出来的产品只能称之为中国校园式产品,为求实现功能不择手段,根本不适合在项目中使用。另有一些自称C语言精华的书或网上的面试宝典,尽是讲一些偏题怪题,这可能满足了作者的虚荣心,但却在将新手引向一个错误的方向。当然,仁者见仁智者见智,这仅是我个人的观点,也一定会被他人所反驳的,正是出现百家争鸣的局面社会才能进步。   本手册分为2部分,第一部分介绍C语言基础,在介绍C基础时会结合嵌入式中的应用加以介绍,将重点介绍在项目开发中有用的内容,对于过分追求技术但又没有什么实际用处的内容不做过多的介绍,对于这些内容最多会提一下,让读者知道有这种情况存在。第二部分介绍项目开发,从项目需求、分析、设计、编码、测试、维护的角度来介绍编写代码。记住,编码只是项目中的一个部分,在中国校园式产品中这可能几乎就是全部了,但在一个可以称之为产品的项目中,它只是一部分,并且项目越大它所占的比重越小。   我在看书学习新知识时,希望看到的是那些写的多一些详细一些,也就是废话多一些的书,可以傻瓜式的一步步跟下来,不希望看到那些对关键之处一笔带过还故作高深的书,所以本手册就以废话多为原则,可能会写的罗嗦一些,只求能看的明白一些。当然,本人知识水平有限,有些知识会有理解上的错误,或者有未触及的地方,错误一定是有的,就像做产品一样,不可能没有错误。我写本手册的目的在于分享我的知识,注重实际应用,这对某一论坛上的某些只会空谈经验、分析汉字语法的理想C语言文艺专家们来说可能会不屑一顾。如有问题,请登录我的博客blog.sina.com.cn/ifreecoding反馈,我虚心接受,但我拒绝那些假大空的为了批评而批评的建议。我们做项目不是写论文,是实实在在的东西!   为新手写一本介绍C语言的书很难,因为它牵涉到非常多的知识作为基础,其中的一些知识很可能需要使用另外几本书的篇幅来介绍,而且知识是耦合在一起的,在介绍前面的时候会涉及到后面的知识,对于新手来说,没有对C形成一个全貌,无法理解。因此给新手的建议是只能多看几遍,第一遍大致看看,掌握全貌,不要细读,然后再多读几遍,仔细分析各种问题,并结合例子,自己动手编程,调试,这个过程非常重要,一定要自己动手编程,光看是没有用的,只有自己动手解决了问题,才能从根本上理解问题。 C语言入门可能会比较容易,但不要指望几个月时间就能熟练掌握C语言,如果做底层编码的话则需要以年为单位来衡量。
Mindows操作系统更新5.1~5.3,将wanlix从ARM7内核移植到cortex内核,更多资料请登陆www.ifreecoding.com下载。 前面基础知识介绍完毕,本开始真刀真枪的移植代码了。本Wanlix3.3的代码从ARM7内核移植到TI和ST的cortex内核的芯片上,移植完成后通过串口打印可以看到移植的效果。 如果你有STM32的板子,现在就可以跑! /***************************************************************************/ Wanlix是一个内核非常小的嵌入式操作系统,只有几百个字,但功能少,只提供任务切换功能,非常适合资源特别少但又需要任务切换的小项目。 Mindows可提供多种操作系统功能,是实时抢占式操作系统,任务支持多种优先级抢占调度,将实时性高的任务设置为高优先级就可以保证软件系统的实时性,用户也可根据自身需求选取需要的部分,也可在此基础上编写代码增加自己需要的功能,具有可裁剪性。 我将WanlixMindows开发过程记录下来,就形成了这本“底层工作者手册之嵌入式操作系统内核”一书,本手册不仅仅是从应用的角度介绍操作系统如何使用,更重要的是从原理的角度对操作系统的功能做了分析、设计,从无到有循序渐进一点点的增加操作系统的功能,并且每增加一个功能便配以一个例子加以演示,让读者能立刻看到代码运行的结果。 本手册记录了我从对操作系统内核不了解到写出操作系统内核的过程,这样的一个过程对你来说应该也是一个最好的学习过程。 如果你有一定的C语言基础,并且对硬件也有稍微的了解,那么我相信你一定会看明白本手册!也一定可以随心所欲的修改、扩展你需要的操作系统功能! 请登陆www.ifreecoding.com获取更多资料 /***************************************************************************/
Mindows操作系统更新到4.4看,增加任务任务切换钩子功能,更多资料请登陆www.ifreecoding.com下载。 Wanlix是一个内核非常小的嵌入式操作系统,只有几百个字,但功能少,只提供任务切换功能,非常适合资源特别少但又需要任务切换的小项目。 Mindows可提供多种操作系统功能,是实时抢占式操作系统,任务支持多种优先级抢占调度,将实时性高的任务设置为高优先级就可以保证软件系统的实时性,用户也可根据自身需求选取需要的部分,也可在此基础上编写代码增加自己需要的功能,具有可裁剪性。 我将WanlixMindows开发过程记录下来,就形成了这本“底层工作者手册之嵌入式操作系统内核”一书,本手册不仅仅是从应用的角度介绍操作系统如何使用,更重要的是从原理的角度对操作系统的功能做了分析、设计,从无到有循序渐进一点点的增加操作系统的功能,并且每增加一个功能便配以一个例子加以演示,让读者能立刻看到代码运行的结果。 本手册记录了我从对操作系统内核不了解到写出操作系统内核的过程,这样的一个过程对你来说应该也是一个最好的学习过程。 如果你有一定的C语言基础,并且对硬件也有稍微的了解,那么我相信你一定会看明白本手册!也一定可以随心所欲的修改、扩展你需要的操作系统功能! 请登陆www.ifreecoding.com获取更多资料
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值