编辑点评:包含了ucosii 系统实现的原理,任务,调度等
经典的ucos ii 教程,里面包含了ucosii 系统实现的原理,包括任务,调度等,讲的非常详细,很容易理解,uCOSⅡ中文教程(邵贝贝)版可以使用户不必在工程项目中每个*.C 文件中都考虑需要什么样的头文件。
图片预览
子目录介绍
\SOFTWARE
这是根目录,是所有软件相关的文件都放在这个目录下。
\SOFTWARE\BLOCKS
子程序模块目录。笔者将例子中 C/OS-II 用到的与 PC 相关的函数模块编译以后放在这个目录下。
\SOFTWARE\HPLISTC
这个目录中存放的是与范例 HPLIST 相关的文件(请看附录 D,HPLISTC 和 TO)。HPLIST.C存放在\SOFTWARE\HPLISTC\SOURCE 目录下。DOS 下的可执行文件(HPLIST.EXE)存放在
\SOFTWARE\TO\EXE 中。
\SOFTWARE\TO
这个目录中存放的是和范例 TO 相关的文件(请看附录 D,HPLISTC 和 TO)。源文件 TO.C存放在\SOFTWARE\TO\SOURCE 中,DOS 下的可执行文件(TO.EXE)存放在\SOFTWARE\TO\EXE中。注意 TO 需要一个 TO.TBL 文件,它必须放在根目录下。用户可以在\SOFTWARE\TO\EXE目录下找到 TO.TBL 文件。如果要运行 TO.EXE,必须将 TO.TBL 复制到根目录下。
\SOFTWARE\uCOS-II与 C/OS-II 相关的文件都放在这个目录下。
\SOFTWARE\uCOS-II\EX1_x86L
这个目录里包括例 1 的源代码(参见 1.07, 例 1),可以在 DOS(或 Windows 95 下的 DOS窗口)下运行。
\SOFTWARE\uCOS-II\EX2_x86L
这个目录里包括例 2 的源代码(参见 1.08, 例 2),可以在 DOS(或 Windows 95 下的 DOS窗口)下运行。
\SOFTWARE\uCOS-II\EX3_x86L
这个目录里包括例 3 的源代码(参见 1.09, 例 3),可以在 DOS(或 Windows 95 下的 DOS窗口)下运行。
\SOFTWARE\uCOS-II\Ix86L
这个目录下包括依赖于处理器类型的代码。此时是为在 80x86 处理器上运行 uC/OS-II而必须的一些代码,实模式,在大模式下编译。
\SOFTWARE\uCOS-II\SOURCE
这个目录里包括与处理器类型无关的源代码。这些代码完全可移植到其它架构的处理器上。
内容提要
在这一章里将提供三个范例来说明如何使用 C/OS-II。笔者之所以在本书一开始就写这一章是为了让读者尽快开始使用 C/OS-II。在开始讲述这些例子之前,笔者想先说明一些在这本书里的约定。 这些例子曾经用 Borland C/C++ 编译器(V3.1)编译过,用选择项产生 Intel/AMD80186 处理器(大模式下编译)的代码。这些代码实际上是在 Intel PenTIum II PC (300MHz)上运行和测试过,Intel PenTIum II PC 可以看成是特别快的 80186。笔者选择 PC 做为目标系统是由于以下几个原因:首先也是最为重要的,以 PC 做为目标系统比起以其他嵌入式环境,如评估板,仿真器等,更容易进行代码的测试,不用不断地烧写 EPROM,不断地向 EPROM 仿真器中下载程序等等。用户只需要简单地编译、链接和执行。其次,使用 Borland C/C++ 产生的 80186 的目标代码(实模式,在大模式下编译)与所有 Intel、AMD、Cyrix 公司的 80x86 CPU 兼容。
其它函数介绍
μC/OS-II 的应用程序和其他 DOS 应用程序是一样的,换句话说,用户可以像在 DOS 下编译其他单线程的程序一样编译和链接用户程序。所生成的.EXE 程序可以在 DOS 下装载和运行,当然应用程序应该从 main()函数开始。因为 μC/OS-II 是多任务,而且为每个任务开辟一个堆栈,所以单线程的 DOS 环境应该保存,在退出 μC/OS-II 程序时返回到 DOS。
调用 PC_DOSSaveReturn()可以保存当前 DOS 环境,而调用 PC_DOSReturn()可以返回到 DOS。
PC.C 中使用 ANSI C 的 setjmp(),longjmp()函数来分别保存和恢复 DOS 环境。Borland C/C++编译库提供这些函数,多数其它的编译程序也应有这类函数。
应该注意到无论是应用程序的错误还是只调用 exit(0)而没有调用 PC_DOSReturn()函数都会使 DOS 环境被破坏,从而导致 DOS 或 WINDOWS95 下的 DOS 窗口崩溃。
调用 PC_GetDateTime()函数可得到 PC 中的日期和时间,并且以 SACII 字符串形式返回。
格式是 MM-DD-YY HH:MM:SS,用户需要 19 个字符来存放这些数据。该函数使用了 BorlandC/C++的 gettime()和 getdate()函数,其它 DOS 环境下的 C 编译应该也有类似函数。
PC_GetKey() 函数检查是否有按键被按下。如果有按键被按下,函数返回其值。这个函数使用了 Borland C/C++的 kbhit()和 getch()函数,其它 DOS 环境下的 C 编译应该也有类
似函数。
函数 PC_SetTickRate()允许用户为 μC /OS-II 定义频率,以改变钟节拍的速率。在 DOS下,每秒产生 18.20648 次时钟节拍,或每隔 54.925ms 一次。这是因为 82C54 定时器芯片没有初始化,而使用默认值 65,535 的结果。如果初始化为 58,659,那么时钟节拍的速率就会精确地为 20.000Hz。笔者决定将时钟节拍设得更快一些,用的是 200Hz(实际是上是199.9966Hz)。注意 OS_CPU_A.ASM 中的 OSTickISR()函数将会每 11 个时钟节拍调用一次 DOS中的时钟节拍处理,这是为了保证在 DOS 下时钟的准确性。如果用户希望将时钟节拍的速度设置为 20HZ,就必须这样做。在返回 DOS 以前,要调用 PC_SetTickRate(),并设置 18 为目标频率,PC_SetTickRate()就会知道用户要设置为 18.2Hz,并且会正确设置 82C54。
PC.C 中最后两个函数是得到和设置中断向量,笔者是用 Borland C/C++中的库函数来完成的,但是 PC_VectGet()和 PC_VectSet()很容易改写,以适用于其它编译器。
热门评论
最新评论