天嵌 ARM开发社区

 找回密码
 注册
查看: 5706|回复: 5

uCOS-II...学习ing...

[复制链接]
zyp568 发表于 2013-1-27 19:34:12 | 显示全部楼层 |阅读模式
本帖最后由 zyp568 于 2013-1-27 19:35 编辑

写在前面:
       因为自己是半路出家,一直是瞎碰乱撞,根本没有学习过《操作系统原理》之类的理论, 也学着别人直接上Linux,折磨了半天,内核代码还是糊里糊涂的,后来一位前辈推荐我先学习下uCOS-II,这个内核体积小,结构简单,容易理解内核最基本的一些东西。最近小尝试了一点点,觉得前辈说的很有道理,所以,想在此处来个自己学习的现场直播,方便被大家拍砖,嘿嘿。由于TQ的网站上还没有uCOS-II的板块,所以,只好发在这里了,要是发错区了,还请版主帮移动下。

学前准备:
        主要教材:
                《嵌入式实时操作系统uC/OS-II》(第二版) ---- Jean J.Labrosse著、邵贝贝翻译
        参考教材:
                《微机原理与接口技术》---- 陈光军、傅越千
        "开发"环境:
                BC45 + Source Insight
学前YY:
        各位看官可能就要奇怪了,嵌入式,怎么会整出微机原理这个蛋疼玩意儿来了?
        笔者自打不知是初中还是小学,学了第一篇文言文后,就深刻的体会到,古人啊,就是晕得好,几百年前开始晕人,晕到笔者这一代,效果还是这么好。YY远了,嗯,好像应该是古人云才对,有的放矢。正如前言中所说,笔者学习uC/OS-II的目的,是为了了解操作系统最底层----内核,究竟都干了些什么?是怎么干的?
        所以,看看《嵌入式实时操作系统uC/OS-II》(第二版) 中第一章的内容,作者提供了4个在基于Windows下的例子,编译器使用的就是BC45,作者自己也认为,在Windows + PC的这个平台上,是最容易将uC/OS-II演示清楚的。不过各位不用纠结,《微机原理与接口技术》只是做参考,查查汇编指令之类的。
        如果你也认同笔者的学习目的,并且准备向下看,那么笔者将再次,更明确的提醒你,不要把时间浪费在BC45编译器的编译细节、内核的Makefile、内核的链接文件上,因为他们跟内核原理没有半毛钱的关系。当对内核比较了解,考虑如何移植的时候,再根据所选用的移植环境思考这些问题。

第一课:摸石头过河。
        一直到在教材中看到BC45编译器,笔者才知道,有过这么一个玩意儿,而且据说这玩意儿当年跟Microsoft的Visual C++可以分庭抗礼,之后嘛……你懂的。
        言归正传,既然第一章给出了4个例子,咱不妨先把他们跑起来:
        下载BC45压缩包,解压,放到C盘根目录下,务必解压到C盘,别在路径问题上浪费时间,从教材光盘里,找到一个叫SOFTWARE的目录,所有的源码都在这个里面,将这个文件夹复制到BC45目录内,进入SOFTWARE目录,将其中的TO目录删除,TO是作者自己写的一个工具程序,用以在DOS命令行模式下快速切换目录,笔者觉得没有必要,所以删了。
先说说几个重要目录的用途:
                   SOFTWARE/uCOS-II/DOC           : 一些说明文档,暂时可以不用管。
                   SOFTWARE/uCOS-II/EX……       : 数一数,4个目录,分别就是教材中的4个例子的任务代码。
                   SOFTWARE/uCOS-II/Ix-86L[-FP] : 硬件平台相关的核心代码,4个例子共用。
                   SOFTWARE/uCOS-II/SOURCE    : 硬件平台无关的核心代码,4个例子共用。
                   SOFTWARE/BLOCKS : 提供一些DOS平台相关的API函数,用于在DOS窗口中显示特定内容,4个例子共用。
        接下来建立Source Insight工程,笔者的方法是在Ex……目录下建立一个名SI的目录,在其中建立S.I.工程,这样避免把原目录搞得很混乱。

笔者建立的第一个例子的工程中,添加的文件如下,注意它们的路径:

要改哪些东西呢?其实不多,主要是解决一些路径问题:
        1.    C:\BC45\SOFTWARE\uCOS-II\EX1_x86L\BC45\SOURCE\INCLUDES.H
               原代码:
  1. #include    "\software\ucos-ii\ix86l\bc45\os_cpu.h"
  2. #include    "os_cfg.h"
  3. #include    "\software\ucos-ii\source\ucos_ii.h"
  4. #include    "\software\blocks\pc\bc45\pc.h"
复制代码
               修改后:
  1. #include    "C:\BC45\SOFTWARE\uCOS-II\Ix86L\BC45\os_cpu.h"
  2. #include    "os_cfg.h"
  3. #include    "C:\BC45\SOFTWARE\uCOS-II\SOURCE\ucos_ii.h"
  4. #include    "C:\BC45\SOFTWARE\BLOCKS\PC\BC45\pc.h"
复制代码
           在INCLUDE.H文件可以看到,它把所用到的头文件都包含在一个头文件里,然后在所有代码文件中都包含这个“总”头文件,这样子,如果需要在几个代码文件里添加同一个"分"头文件时,只需要加在"总"头文件中即可。
        2.    C:\BC45\SOFTWARE\uCOS-II\SOURCE\uCOS_II.C
               原代码:
  1. #include "\software\ucos-ii\source\os_core.c"
  2. #include "\software\ucos-ii\source\os_flag.c"
  3. #include "\software\ucos-ii\source\os_mbox.c"
  4. #include "\software\ucos-ii\source\os_mem.c"
  5. #include "\software\ucos-ii\source\os_mutex.c"
  6. #include "\software\ucos-ii\source\os_q.c"
  7. #include "\software\ucos-ii\source\os_sem.c"
  8. #include "\software\ucos-ii\source\os_task.c"
  9. #include "\software\ucos-ii\source\os_time.c"
复制代码
              修改后:
  1. #include "C:\BC45\SOFTWARE\uCOS-II\SOURCE\os_core.c"
  2. #include "C:\BC45\SOFTWARE\uCOS-II\SOURCE\os_flag.c"
  3. #include "C:\BC45\SOFTWARE\uCOS-II\SOURCE\os_mbox.c"
  4. #include "C:\BC45\SOFTWARE\uCOS-II\SOURCE\os_mem.c"
  5. #include "C:\BC45\SOFTWARE\uCOS-II\SOURCE\os_mutex.c"
  6. #include "C:\BC45\SOFTWARE\uCOS-II\SOURCE\os_q.c"
  7. #include "C:\BC45\SOFTWARE\uCOS-II\SOURCE\os_sem.c"
  8. #include "C:\BC45\SOFTWARE\uCOS-II\SOURCE\os_task.c"
  9. #include "C:\BC45\SOFTWARE\uCOS-II\SOURCE\os_time.c"
复制代码
       同样的,加上绝对路径。
3.    C:\BC45\SOFTWARE\uCOS-II\EX1_x86L\BC45\TEST\TEST.MAK
       原代码:
  1. OS=\SOFTWARE\uCOS-II\SOURCE
  2. PC=\SOFTWARE\BLOCKS\PC\BC45
  3. PORT=\SOFTWARE\uCOS-II\Ix86L\BC45
复制代码
       修改后:
  1. OS=$(BORLAND)\SOFTWARE\uCOS-II\SOURCE
  2. PC=$(BORLAND)\SOFTWARE\BLOCKS\PC\BC45
  3. PORT=$(BORLAND)\SOFTWARE\uCOS-II\Ix86L\BC45
复制代码
       这里利用原文件中开头定义的变量BORLAND=C:\BC45来设置路径。

        至此,代码修改完成,进入C:\BC45\SOFTWARE\uCOS-II\EX1_x86L\BC45\TEST目录中,双击MAKETEST.BAT,执行成功后,会在C:\BC45\SOFTWARE\uCOS-II\EX1_x86L\BC45\OBJ目录中生成一个TEST.EXE,双击它:

        OK,第一个成功了,现在可以继续将另外三个例子也弄一下,修改操作基本一样,而且修改过的”共用“文件都可以不用改了。
         
        YY:有朋友可能会说,上面修改头文件路径时,为什么不,把绝对路径去掉,然后在Makefile中的编译选项中用-I选项引入这些搜索路径,以使代码比较整洁。笔者尝试过这个做法,但是可能由于这个编译器太老古董了,跳出了一条错误提示,大意是命令行参数太多。



几个例子的运行情况都在上面了。
        其实仔细看看书的话,会发现书中还提到了一些细节,但是,到目前为止,这些都是次要的。
        重要的是,我们的实验环境建立好了:
        1. 各个路径设置OK了。
        2. 知道如何编译生成.EXE了,双击例程目录下的MAKETEST.BAT即可。
                                                      ↑前面阶段的调试简单,如此即可,后面的调试用到啥,再说。
        接下来的调试,只需要在原例程中做修改即可,不必关心各种杂项问题了。笔者选择用例程4来修改,因为这个例程中,使用了CPU的硬件浮点运算器,现在的CPU基本都支持这个特性。

OK,这一课OVER。

啊,不知道为什么上传了以后,图片缩好小了,但是占的位置还是那么大?……


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| zyp568 发表于 2013-1-28 15:20:15 | 显示全部楼层
本帖最后由 zyp568 于 2013-1-28 15:22 编辑

额,看样子,大家都没啥拍砖的激情,有兴趣的朋友,去我的博客看吧,第二课完成。。。
http://long568.blog.163.com/
wjw123abc 发表于 2013-9-12 12:09:14 | 显示全部楼层
mark mark mark
万里 发表于 2014-3-31 15:34:36 | 显示全部楼层
很强大,学习一下。
kevin_SCM 发表于 2015-8-14 11:03:50 | 显示全部楼层
mark!mark!mark!
1585006673 发表于 2015-8-19 12:44:53 | 显示全部楼层

顶                       起
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )

GMT+8, 2024-4-25 22:53 , Processed in 1.046875 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表