热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

目前更新到5.3节,请在http:dl.dbank.comc02ackpwp6下载5.3节的全部文档本节源代码请在http:dl.dbank.comc0bvhcdi9n下载第3节

 

 


目前更新到5.3节,请在
http://dl.dbank.com/c02ackpwp6下载5.3节的全部文档

 

本节源代码请在http://dl.dbank.com/c0bvhcdi9n下载

 

第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个任务动态执行过程,虽然实现上与上节不同,但输出结果却是一样的。

第3章第3节 <wbr>用户代码入口——根任务

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


 

 

 

 

 

 

 

 

 

 

 


推荐阅读
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 本文介绍了C++中省略号类型和参数个数不确定函数参数的使用方法,并提供了一个范例。通过宏定义的方式,可以方便地处理不定参数的情况。文章中给出了具体的代码实现,并对代码进行了解释和说明。这对于需要处理不定参数的情况的程序员来说,是一个很有用的参考资料。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • Python如何调用类里面的方法
    本文介绍了在Python中调用同一个类中的方法需要加上self参数,并且规范写法要求每个函数的第一个参数都为self。同时还介绍了如何调用另一个类中的方法。详细内容请阅读剩余部分。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • 本文讨论了为什么在main.js中写import不会全局生效的问题,并提供了解决方案。在每一个vue文件中都需要写import语句才能使其生效,而在main.js中写import语句则不会全局生效。本文还介绍了使用Swal和sweetalert2库的示例。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 本文介绍了响应式页面的概念和实现方式,包括针对不同终端制作特定页面和制作一个页面适应不同终端的显示。分析了两种实现方式的优缺点,提出了选择方案的建议。同时,对于响应式页面的需求和背景进行了讨论,解释了为什么需要响应式页面。 ... [详细]
  • 移动传感器扫描覆盖摘要:关于传感器网络中的地址覆盖问题,已经做过很多尝试。他们通常归为两类,全覆盖和栅栏覆盖,统称为静态覆盖 ... [详细]
  • [手机][其他]绝对经典!疯狂Pinphone 3GS又发更新,Pin第三代(转载)
    已经致Pinfans疯狂的Pinphone3GS最近又放出新功能,好评如潮请设置pin。 ... [详细]
  • SLAM优秀开源工程最全汇总
    https:zhuanlan.zhihu.comp145750808 1、CartographerCartographer是一个系统,可跨多个平台和传感器配置以2D和3D形式提供实 ... [详细]
author-avatar
holy190
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有