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

Win64 GTK+3编程【2】GTK+3完… 软件和包下载步骤: 首先是开发环境,选用Dev-cpp 5.11,下载地址:http://sourceforge.net/projects/orwelldevcpp/ 其次是GTK+3的打包文件,这里选择其首页的下载页的win64 bit页面,下载地址:all-in-one bundle   首先安装dev-cpp,安装过程跟以前一样。基本不需要什么繁琐的配置,第一次运行的时候会让用户选择主 阅读详情

源码请在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  使用根任务作为用户入口的运行结果

 

保姆级教程:在Ubuntu 22.04上,用Chroot和xorriso定制你的专属服务器镜像(附离线包集成) 本文提供了一份详细的Ubuntu 22.04离线镜像定制教程,通过Chroot环境和xorriso工具,帮助用户打造专属服务器镜像。教程涵盖环境准备、镜像解构、系统定制、镜像重组与验证等全流程,特别适合需要在隔离网络环境中批量部署服务器的场景。 阅读详情

相关推荐

activiti(六):activiti7的数据表和字段的解释

介绍activiti7的数据表和各表字段的含义,对于学习activiti7工作流引擎的运行过程很有帮助!

no problem的博客 1万+

第3章第2节 任意任务间的切换

源代码请在https://github.com/ifreecoding/MbedRtos.git下载 第2节任意任务间的切换 上一节我们使用2个固定的任务验证了操作系统任务切换的功能,但这些代码并不具有通用性,如果要扩充其它任务,就必须修改操作系统函数,这显然是不可接受的。操作系统作为独立于用户

ifreecoding的博客 591

2023-2024深度学习框架之争——选pytorch还是tensorflow?

深度学习是人工智能领域的一个重要分支,它利用多层神经网络来模拟人类的学习和推理能力,解决各种复杂的问题,如图像识别、自然语言处理、语音识别、推荐系统等。深度学习框架是一种软件工具,它提供了构建、训练、测试和部署深度学习模型的便利,使得开发者和研究者可以更高效地进行深度学习的开发和应用。目前,市场上有许多不同的深度学习框架,如PyTorch、TensorFlow、Keras、MXNet、Caffe2等,它们各有优劣,适用于不同的场景和需求。

flchen_nchu的博客 6756

RT-Thread学习笔记(1)- 系统启动代码和用户入口代码

 (一)废话      RT-Thread是一个来自中国的开源物联网操作系统,它提供了非常强的可伸缩能力:从一个可以运行在ARM Cortex-M0芯片上的极小内核,到中等的ARM Cortex-M3/4/7系统,甚至是运行于MIPS32、ARM Cortex-A系列处理器上功能丰富系统。       顺潮流而学,RTT是一个很有前途的操作系统,所以有精力学学,总没有坏处。      本次学...

Eureka1024的博客 2652

PINN——加入物理约束的神经网络

【摘要】 基于物理信息的神经网络(Physics-informed Neural Network, 简称PINN),是一类用于解决有监督学习任务的神经网络,它不仅能够像传统神经网络一样学习到训练数据样本的分布规律,而且能够学习到数学方程描述的物理定律。与纯数据驱动的神经网络学习相比,PINN在训练过程中施加了物理信息约束,因而能用更少的数据样本学习到更具泛化能力的模型。本文主要解析这种神经网络以...

qq_39444290的博客 4584

std::map看来可以被淘汰了?可以用vector来替代,而且更好

vector的优势在于内存连续,可以先std::sort,然后std::lower_bound,或者std::binary_search。而std::map,insert的时候,需要new出内存。

tumu_C的博客 1019

第3章第5节 发布Wanlix操作系统

​源代码请在https://github.com/ifreecoding/MbedRtos.git下载 第5节发布Wanlix操作系统 经过前面3.1~3.3节循序渐进的开发,我们已经使Wanlix操作系统具备了最基本的任务切换功能,并在3.4节使用Wanlix开发了一个交通红绿灯控制系统,到此为

ifreecoding的博客 813

最佳量化交易的计算机操作系统

本文在Creative Commons许可证下发布   我经常被问到的一个问题是:用哪种计算机操作系统和计算软件进行量化交易的理论研究和代码实现?   我想把这个问题简化,从挑选的计算软件和计算库来反推最佳使用的计算机操作系统。简而言之,就是在本文撰写的时候而言,如果你想进行基于任何严肃的数学理论和金融量化交易研究理论,这里特指机器学习或者深度学习。并且需要在本地研究机器上使用桌面版本,...

evilqliang的博客 2307

第3章第4节 使用Wanlix编写交通红…

源码请在https://github.com/ifreecoding/MbedRtos.git下载 第4节使用Wanlix编写交通红绿灯控制系统 至此我们已经实现了一个非常简单、小巧的操作系统——Wanlix,简单到它只具备任务切换这一项任务管理功能,而且需要用户自己主动切换,实时性较差。但无

ifreecoding的博客 554

手把手用LTspice仿真运算放大器电路:从虚短虚断到频响分析

本文通过LTspice仿真软件,手把手教你从搭建基础运算放大器电路开始,验证虚短虚断原理,并逐步深入频响分析与稳定性探究。内容涵盖反相/同相放大器、积分器仿真,导入真实运放模型进行蒙特卡洛分析,以及利用交流分析和波特图评估电路性能,帮助工程师和学生将抽象理论转化为直观、可测量的仿真结果,提升电路设计实战能力。

salt9的博客 1094

vivo X200 Ultra前瞻系列(1):重塑影像旗舰标准

在色彩风格化、视频专业度上实现了安卓阵营的突破性进步。其2亿像素长焦、双LYT-818传感器及5轴防抖技术,对追求个性化创作的用户具有强吸引力。若真机表现能兑现硬件承诺,X200 Ultra有望重新定义手机影像的“专业”标准。然而,其厚重设计、价格门槛及生态适配问题,仍需市场检验。vivo X200 Ultra作为2025年上半年影像旗舰,以“全焦段夜视仪+电影级视频”为核心卖点,主打。,对标小米15 Ultra、OPPO Find X8 Ultra等竞品。,顶配版(24GB+2TB)逼近万元。

专注:太空算力、AI infra、异构调度、大模型成本工程 964

第4章第6节 任务自结束

目前更新到5.3节,请在http://dl.dbank.com/c02ackpwp6下载5.3节的全部文档 本节源代码请在http://dl.dbank.com/c0ss54iddw下载     第6节 任务自结束 上节增加了删除任务的函数MDS_TaskDelete,任务可以调用该函数结束其它任务或自身任务的运行。在前面章节我们说过,目前任务还不具备自结束功能,需要使用类似while的结

ifreecoding的博客 466

手把手教你学simulink(16.8)--基于Simulink的小波变换滤波器(Wavelet Transform Filter)项目

基于Simulink的小波变换滤波器(Wavelet Transform Filter)项目的详细实例介绍。这个项目将重点放在小波变换滤波器的设计、实现和仿真上,帮助你理解和应用小波变换滤波器在信号处理中的作用。

MHD0815的博客 534

第4章第2节 定时器触发的实时抢占…

源码请在https://github.com/ifreecoding/MbedRtos.git下载 第2节定时器触发的实时抢占调度 在第3章,我们依靠用户代码主动调用任务切换函数WLX_TaskSwitch实现了任务切换功能,这种任务调度方式的调度时机是固定死的,只有代码运行到WLX_TaskSw

ifreecoding的博客 622

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

第4章第3节 实时事件触发的实时抢…

源码请在https://github.com/ifreecoding/MbedRtos.git下载 本节用户代码在打印输出方面做了较大的修改,从本节开始,串口打印功能不再由任务实时向串口打印,而是由任务先将字符串打印到内存,然后使用一个低优先级的任务从内存中取出字符串打印到串口。串口是一个低速率的外设,960

ifreecoding的博客 349

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

第1章第1节 为什么要使用操作系统

源码请在https://github.com/ifreecoding/MbedRtos.git下载 第1节为什么要使用操作系统 在没有操作系统的情况下,C语言是以函数为单位实现功能的,一个函数一个函数串行的执行,一个完整的功能会由多个函数共同完成。然而当软件系统的功能变得多而庞大的时候,这种方法几乎无法使用,因为此时各个功能之间必然会有千丝万缕的联系,不可能依次串行的完成每个

ifreecoding的博客 831

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

第4章第1节 Mindows的文件组织结构

源码请在https://github.com/ifreecoding/MbedRtos.git下载 第1节Mindows的文件组织结构 在第3章,我们依据任务切换的原理编写了Wanlix操作系统,Wanlix很简单,只实现了任务切换功能,从本章开始,我们将编写Mindows操作系统,Mindows将会实现更多的功能,相对Wanlix来说要复杂一些,文件也更多一些,因此,Min

ifreecoding的博客 620

第2章第3节 ARM7芯片的函数调用标…

源码请在https://github.com/ifreecoding/MbedRtos.git下载 第3节ARM7芯片的函数调用标准 在上节,我们最后用汇编语言写了一个函数,但该函数没有入口参数,那么C语言函数、汇编函数之间是如何传递参数和返回值的?函数在执行过程中是如何使用栈的?它们需要遵守什么规则?本节我们将介绍这方面的内容。 如果我们不是在编写操作系统,只是编写正常

ifreecoding的博客 573

第4章第7节 二进制信号量(一)

目前更新到5.3节,请在http://dl.dbank.com/c02ackpwp6下载5.3节的全部文档 本节源代码请在http://dl.dbank.com/c0fp2g5z9s下载   第7节 二进制信号量 某些资源在同一时刻只可以被一个任务操作,实时操作系统的任务抢占特性会导致这些资源可能被多个任务同时操作,从而产生错误。本节将讲述二进制信号量的原理,可以利用二进制信号量保护这些资源

ifreecoding的博客 2039

第2章第1节 ARM7芯片基本结构

源码请在https://github.com/ifreecoding/MbedRtos.git下载 第1节ARM7芯片基本结构 ARM7芯片构架比较简单,32bits线性地址空间统一排列,任何地址都是唯一的,不同的片上资源及外设被分配到不同的地址空间,不同数据结构的指针固定为4字节长度,这相对51芯片来说方便很多也清晰很多,从用户编程的角度来看入手比较简单,因此本手册首先选用

ifreecoding的博客 900

1 任务管理  --转载于电子工程世界

uC/OS-II 中最多可以支持64 个任务,分别对应优先级0~63,其中0 为最高优先级。63为最低级,系统保留了4个最高优先级的任务和4个最低优先级的任务,所有用户可以使用的任务数有56个。    uC/OS-II提供了任务管理的各种函数调用,包括创建任务,删除任务,改变任务的优先级,任务挂起和恢复等。    系统初始化时会自动产生两个任务:一个是空闲任务,它的优先级最低,该任务仅给一个

不积跬步无以至千里,千里之行始于足下! 898

红帽 LINUX 6自学笔记第三章(3) …

1.检查进程用户ID ps aux   2.根据用户名和用户ID检查文件所有者 ls -ln 3.作为根用户修改用户名 计算机管理员,即根用户,想编辑 /etc/passwd 文件。首先,根用户使用 ls -l命令列出目录/home 中的文件。其次根用户在用户数据库中修改sleepy 的用户名。最后,再次查看ls -l命令的输出。   LINUX 组 1.每个用户都隶属于一个主要组。此外,用户可以

sakaliu的专栏 529

Flash AS3 学习5 - 全代码拼图游戏

package {  import flash.display.Sprite;  import com.zjj.RectShape;  import flash.events.MouseEvent;  import flash.sensors.Accelerometer;    public class Main extends Sprite{   private var indexShape:A

Amare丶的部落格 1377

第4章 Mindows操作系统

源码请在https://github.com/ifreecoding/MbedRtos.git下载 第4 章Mindows操作系统 在第3章中,我们实现了一个简单的操作系统——Wanlix,这个操作系统是一种非抢占式操作系统,任务之间的切换需要用户主动调用任务切换函数WLX_TaskSwitch来实现。从本章开始,我们将编写一个实时抢占的嵌入式操作系统——Mindows,它

ifreecoding的博客 598

代码统计工具(linecount3.6.3) 下…

用于对目前流行的几乎所有编程工具所编写的程序进行代码统计,分析出程序中的代码行、注释行、空白行的行数和比例,软件支持VC++、C++ Builder、Delphi、VB、C/C++、ASM、Java等程序类型。软件拥有非常漂亮的界面和强大的智能化统计功能,编程必备工具。 优快云下载地址: http://d.download.youkuaiyun.com/down/162950/adverse 注意:必须是

Cheers Li 软件测试博客 1万+

3个 JavaScript ( jQuery ) …

不错 原文地址:3个<wbr>JavaScript<wbr>(<wbr>jQuery<wbr>)<wbr>安全虚拟网页小键盘插件</wbr></wbr></wbr></wbr></wbr>作者:北京网页设计师效铭 在进

qizhanfeng的专栏 201
上一篇: 第3章第2节 任意任务间的切换
下一篇: 第3章第4节 使用Wanlix编写交通红…
ifreecoding
博客等级 码龄15年 148粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值