第3章第3节 用户代码入口——根任务…

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

第3节 用户代码入口——根任务

经过上节的修改,Wanlix操作系统可以建立任意多个任务,但是在操作系统运行之前必须得先建立一个任务,然后再调用WLX_TaskStart函数从非操作系统状态切换到操作系统状态,如果没有这么做的话系统就会崩溃。这一过程需要用户在用户代码里完成,相当于使用用户代码来初始化操作系统,这无疑给用户增加了一个限制,也不利于用户使用。

为了解决这个问题,我们提出操作系统“根”任务的概念,所谓“根”任务,它是其它所有任务的“根”,其它所有的任务都是从这个根任务开始的,我们将之命名为WLX_RootTask。

我们在main函数里首先建立根任务,然后调用WLX_TaskStart函数切换到操作系统状态,去执行根任务,将根任务作为留给用户的接口,main函数则被封装到操作系统内部,用户不可见,用户只要认为自己的代码是从根任务开始的就可以了,这样,在用户代码执行前,操作系统就已经可以使用了,这个问题也就解决了。

为此,我们需要将main函数从原来的test.c文件中搬移到wlx_core_c.c文件中,将它封装到操作系统内部,作为操作系统的一部分。

00019  S32 main(void)

00020  {

00021      

00022      gpstrRootTaskTcb = WLX_TaskCreate((VFUNC)WLX_RootTask, gaucRootTaskStack,

00023                                        ROOTTASKSTACK);

00024  

00025      

00026      WLX_TaskStart(gpstrRootTaskTcb);

00027  

00028      return 0;

00029  }

在main函数运行完毕后就开始运行根任务WLX_RootTask了,用户可以在WLX_RootTask任务中创建自己的任务,我们将上节的例子移植过来,只需要将原有main函数中创建任务的用户代码移植到根任务WLX_RootTask中就可以了。

00010  void WLX_RootTask(void)

00011  {

00012      

00013      DEV_HardwareInit();

00014  

00015      

00016      gpstrTask1Tcb = WLX_TaskCreate((VFUNC)TEST_TestTask1, gaucTask1Stack,

00017                                     TASKSTACK);

00018      gpstrTask2Tcb = WLX_TaskCreate((VFUNC)TEST_TestTask2, gaucTask2Stack,

00019                                     TASKSTACK);

00020      gpstrTask3Tcb = WLX_TaskCreate((VFUNC)TEST_TestTask3, gaucTask3Stack,

00021                                     TASKSTACK);

00022  

00023      WLX_TaskSwitch(gpstrTask1Tcb);      

00024  }

根任务WLX_RootTask虽然是操作系统建立的任务,属于操作系统的一部分,但它的内容却完全需要用户编写,因此将它放到wlx_userboot.c文件中,将wlx_userboot.c文件放到用户代码目录srccode中,与用户代码绑定在一起。

编译本节代码,运行,串口打印如下。读者也可通过本节的视频观察这3个任务动态执行过程,虽然实现上与上节不同,但输出结果却是一样的。

图 19  使用根任务作为用户入口的运行结果

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值