PC下简单任务之uCOSII启动脉络

STM32 UCOS简单任务调度 基于STM32+UCOS搭建的简单任务调度环境,可直接移植使用 立即下载

奋斗

#include "includes.h"

#define  TASK_STK_SIZE   512   //任务堆栈长度


//typedef unsigned int   OS_STK;定义在OS_CPU.h中
OS_STK   TaskStartStk[TASK_STK_SIZE];  //定义任务堆栈区-大小为2*512=1024byte=1k
INT16S   key;        //用于退出uCOS_II的键 
INT8U  x=0,y=0;    //字符显示位置

void  ATask(void *data);   //声明一个任务
/************************主函数*********************************************/
void  main (void)
{
    char* s="A";    //定义要显示的字符

    OSInit();     //初始化uCOS_II

    PC_DOSSaveReturn();   //保存Dos环境
    PC_VectSet(uCOS, OSCtxSw); //安装uCOS_II中断0x80H.软中断,任务级切换

 #if OS_STK_GROWTH == 1
    OSTaskCreate(ATask,            //创建任务MyTask-指向任务的指针即函数名
                             s,                     //给任务传递参数
                             &TaskStartStk[TASK_STK_SIZE - 1],//设置任务堆栈栈顶指针-堆栈增长方向向下,有高地址向低地址增长
                             0);                     //使任务MyTask的优先级别为0
 #else
 OSTaskCreate(ATask,                 //创建任务MyTask-指向任务的指针即函数名
                           s,                        //给任务传递参数
                           &TaskStartStk[0], //设置任务堆栈栈顶指针-堆栈增长方向向上,有低地址向高地址增长
                           0);
 #endif

    OSStart();     //启动uCOS_II的多任务管理
}


void  ATask (void *pdata)
{
#if OS_CRITICAL_METHOD == 3
    OS_CPU_SR  cpu_sr;
#endif

    pdata = pdata;

    OS_ENTER_CRITICAL();
    PC_VectSet(0x08, OSTickISR); //安装uCOS_II时钟中断向量.硬件中断
    PC_SetTickRate(OS_TICKS_PER_SEC); //设置uCOS_II时钟频率.OS_CFG.H中设置.200hz
    OS_EXIT_CRITICAL();

   //OSStatInit()要在建立的第一个,并且只有一个任务的时候调用
    OSStatInit();   //初始化uCOS_II的统计任务

    for (;;)
 {       
        if (x>10)//0-10共显示11个字符,超过换行
       {
           x=0;
           y+=2;//换2行
       }                                       
      PC_DispChar(x, y,  //在x,y位置显示s中的字符
                             *(char*)pdata,
                             DISP_BGND_BLACK+DISP_FGND_WHITE );
    x += 1;//列递增                        

  //如果按下Esc键则退出uCOS_II
  if (PC_GetKey(&key) == TRUE)
  {
              if (key == 0x1B)
             {
                  PC_DOSReturn();
              }
         }

        OSTimeDlyHMSM(0, 0, 1, 0); //等待
     }
}

奋斗

主函数main中
OS_CORE.C OSInit()→OS_CORE.C OS_InitMisc();       /* 基础参数初始化 */
                                   →OS_CORE.C OS_InitRdyList();  /* 初始化任务就绪表 */
                                   →OS_CORE.C OS_InitTCBList();  /* 初始化任务控制块 */
                                                              →建立OS_TCB OSTCBFreeList
                                   →OS_CORE.C OS_InitEventList();/* 初始化事件控制块 */
                                   →OS_FLAG.C OS_FlagInit();         /* 事件标志组初始化 */
                                   →OS_MEM.C  OS_MemInit();        /* 内存管理初始化 */
                                   →OS_Q.C    OS_QInit();                 /* 消息队列初始化 */
                                   →OS_CORE.C OS_InitTaskIdle(); /* 创建空闲任务(无条件) */
                                   →OS_CORE.C OS_InitTaskStat(); /* 创建统计任务 */

PC.C       PC_DOSSaveReturn()→PC.C PC_VectGet();
                                                    →PC.C PC_VectSet();
                                                    →PC.C PC_SetTickRate();

PC.C       PC.C PC_VectSet(uCOS,OSCtxSw)→OS_CPU_A.ASM _OSCtxSw;

OS_TASK.C  OSTaskCreate()→OS_CPU_C.C OSTaskStkInit();
                                                →OS_CORE.C OSTCBInit();

OS_CORE.C  OSStart()→OS_CPU_A.asm OSStartHighRdy();

任务中
PC.C PC_VectSet(0x08, OSTickISR);//安装uCOS_II时钟中断向量.硬件中断
          →OS_CPU_A.asm _OSTickISR;
                                          →INT 081H;
                                          →OS_CORE.C OSIntExit()→OS_CPU_A.ASM _OSIntCtxSw;
                                          →OS_CORE.C OSTimeTick();

PC.C PC_SetTickRate(OS_TICKS_PER_SEC);//设置uCOS_II时钟频率.OS_TICKS_PER_SEC在OS_CFG.H中设置为200hz
          →PC.C PC_SetTickRate();

OS_CORE.C OSStatInit()→OS_TIME.C OSTimeDly(INT16U ticks);
                                         →OS_CORE.C OS_Sched();
                                                                   →OS_CPU_A.ASM _OSCtxSw;

OS_TIME.C →OSTimeDlyHMSM(hours,minutes,seconds,milli);

 

 

ucos在pc vs2010环境下运行 通过修改后,可以在visual studio 2010下运行的ucos操作系统,版本是2.51,没有开发板也可以学习ucos 立即下载

相关推荐

别再为10G UDP发愁了!手把手教你用Xilinx 10G/25G Ethernet Subsystem IP核搭建FPGA网络栈(附12套工程源码)

本文详细介绍了基于Xilinx UltraScale架构的FPGA网络栈开发,重点讲解了10G/25G Ethernet Subsystem IP核的应用实践。通过手把手教程和12套工程源码,帮助开发者解决10G UDP通信中的物理层接口、协议栈实现和系统集成等核心挑战,实现高性能FPGA网络栈搭建。

weixin_42522575的博客 364

第1章 范例

New Page 1                                             在这一章里将提供三个范例来说明如何使用 µC/OS-II。笔者之所以在本书一开始就写这一章是为了让读者尽快开始使用 <span style="font-family:"Courier New";mso-ascii-fo

Kane的专栏 1980

2025红队实战:Win11环境下ZAP、CobaltStrike与免杀套件深度评测

在网络安全领域,渗透测试与红队行动是评估系统防御能力的关键手段。其核心原理在于模拟真实攻击者的技术与流程,以发现潜在的安全漏洞。这项技术的价值在于主动识别风险,提升整体安全防护水平,广泛应用于企业安全评估、漏洞挖掘和攻防演练等场景。随着Windows 11系统普及,其增强的安全机制(如内存完整性、基于虚拟化的安全)对传统攻击工具链提出了新的挑战。本文聚焦于**CobaltStrike二开版**与**免杀套件**在Win11环境下的实战应用与深度对抗,探讨如何优化工具链以应对现代端点检测与响应(EDR)和高级

weixin_29315091的博客 308

启动ucosii之二PC_DOSSaveReturn()

以下函数原型来自PC.C void PC_DOSSaveReturn (void) { #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */     OS_CPU_SR  cpu_sr;//OS_CPU.H typedef uns

aimarpp的专栏 2299

LTspice仿真实战:共模电感差模/共模插入损耗测试全流程(附WE 744821201参数)

本文以Würth Elektronik 744821201型号共模电感为例,详细介绍了在LTspice中搭建差模与共模插入损耗测试电路的全流程。通过从规格书提取关键参数、构建SPICE模型,到执行仿真并与官方数据对比,旨在帮助硬件工程师在PCB设计前期精准预测EMC性能,弥合器件选型与系统设计之间的鸿沟。

info6的博客 760

DDSP(Differentiable Digital Signal Processing) 开篇

文章目录DDSP可以用来做什么?下一步工作 工作中接触到了DDSP声码器,但非科班出声的我对这块知识非常陌生,甚至带有一些畏惧的心理,但是为了工作为了进步,必须硬下头皮去啃,相信只要耐心地坚持,没什么能难到我。于是从今天开始,就用这个博客专栏来记录我的学习历程,希望也能帮助到你~ DDSP对应的论文是:DDSP: Differentiable Digital Signal Processing 先翻译一篇来自DDSP论文作者的对DDSP的介绍的文章。 今天,我们很高兴地介绍可微数字信号处理(DDSP)库。

YeeKo的博客 9246

嵌入式实时操作系统(任哲)第三章习题解答

1.什么是可剥夺形内核? 概念:最高优先级的任务一旦就绪,总能获得处理器的使用权。一般当系统响应很重要时使用。 过程:(1)当任务A运行时发生中断,进入中断服务程序,使更高优先级任务B就绪。 ​ (2)中断服务执行完毕,返回,任务B优先级较高,获得运行。 ​ (3)直到任务B结束,任务A才获得运行。 2.一个应用程序为什么一定要使用空闲任务? 在多任务系统运行时,系统经常会在某个时间内无用户任...

qq_40400656的博客 6757

核心组件大换血:Backbone与Neck魔改篇:YOLO26结合StarNet结构:2026星状网络在YOLO生态的即插即用实战

本文将介绍如何将StarNet作为Backbone替换YOLO26原生架构,以提升边缘设备上的目标检测性能。文章首先分析了YOLO26在特定场景下的精度瓶颈,指出其通用Backbone设计存在不足。随后深入解析StarNet的核心创新——星操作(Star Operation),这一低维计算却能获得高维特征表达的数学魔术,以及其极简的StarBlock模块设计。通过对比YOLO26原生架构的三大创新与痛点,作者提出两种替换策略:完整替换Backbone或局部替换+Neck联调。文中提供了StarNet核心代码

ZDQ58818的博客 289

启动ucosii之七PC_SetTickRate(OS_TICKS_PER_SEC)

/* uCOS-II定义频率,以改变钟节拍的速率. 在DOS下,每秒产生18.20648次时钟节拍,或每隔54.925ms一次.这是因为82C54定时器芯片没有初始化,而使用默认值65535的结果. 如果初始化为58659,那么时钟节拍的速率就会精确地为20.000Hz */ void PC_SetTickRate (INT16U freq) { #if OS_CRITICAL_ME

aimarpp的专栏 3188

3、保险行业商业智能解决方案的理解与实施

本文详细探讨了商业智能(BI)在保险行业的应用与实施策略,涵盖了从BI环境开发的关键步骤、自下而上与自上而下的数据仓库开发方法,到决策支持工具的选择与使用。文章还分析了BI系统与互联网、内联网和外联网的结合方式,并讨论了购买与自建方案的优劣比较,最后总结了商业智能成功的关键因素及其对保险行业带来的商业价值。通过实际案例与未来趋势展望,展示了商业智能如何推动保险企业的数字化转型和竞争力提升。

moon9的博客 97

光学材料仿真软件:FDTD Solutions_(4).材料属性的定义与应用

在光学材料仿真软件中,材料属性的定义和应用是至关重要的一步。正确地定义材料属性可以确保仿真结果的准确性和可靠性。本节将详细介绍如何在FDTD Solutions中定义和应用不同的材料属性,包括介质材料、金属材料、色散材料等,并提供具体的代码示例和数据样例。介质材料是光学仿真中最常见的材料类型之一。在FDTD Solutions中,可以通过多种方式定义介质材料,包括使用预定义的材料库、自定义材料参数或导入材料数据文件。FDTD Solutions内置了一个丰富的材料库,包含了许多常用材料的光学性质。

kkchenjj的博客 1401

uC/OS-II源码分析(二)

在真正开始分析源代码前,先来看使用uC/OS-II的三个例子 1)使用信号量 &lt;!--&lt;br /&gt; &lt;br /&gt; Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br /&gt; http://www.CodeHighlighter.com/&lt;br /&gt;...

dato0123 313

嵌入式通信协议框架的四层架构设计与实现

本文详细介绍一种模块化的嵌入式通信协议框架设计,采用四层架构:硬件抽象层统一管理数据收发与缓冲,隔离硬件差异;协议管理层通过特征识别自动路由多协议数据,支持动态扩展;协议处理层独立实现各协议解析/构建,确保校验安全与零拷贝效率;应用层采用表驱动模式处理业务逻辑,与协议细节解耦。 该架构已应用于工业控制等领域,具备强类型安全、高扩展性和平台无关性特点,显著提升复通信场景下的开发效率与系统可靠性。提供完整代码实现与设计要点分析,助力开发者构建高效通信栈。

Bit_Dong的博客 2464

经典:UC/OS-2系统的学习教程之(一)

       第一章:范例 在这一章里将提供三个范例来说明如何使用 µC/OS-II。笔者之所以在本书一开始就写这一章是为了让读者尽快开始使用 µC/OS-II。在开始讲述这些例子之前,笔者想先说明一些在这本书里的约定。  这些例子曾经用Borland C/C++ 编译器(V3.1)编译过,用选择项产生Intel/AMD80186处理器(大模式下编译)的代码。这些代码实际上是在Intel Pent

lao_mage的专栏 4743

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

启动ucosii之六PC_VectSet(0x08,OSTickISR)

原型来自PC.C void PC_VectSet (INT8U vect, void (*isr)(void)) { #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */     OS_CPU_SR  cpu_sr; #endif

aimarpp的专栏 3441

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

uCOS-II在PC上的移植(使用VS2015)

说明1.代码来源:网上下载整理2.文件下载: uCOS-II移植到PC项目文件(使用VS2015,包含uCOS-II代码).zip uCOS-II移植到PC源码(uCOS-II版本v2.91).zip 方法1.新建一个空项目。2.添加.c文件。 uCOS-II里有3个:ucos_ii.c、os_cpu_c.c、os_trace.c 自定义1个:用于放main函数(这个文件怎么写可以参考项目文件里的t

廖昌海的个人博客 7442

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

uC/OS-II学习笔记(1)

by WC 7.9.2015 本文假设读者对uC/OS-II和多任务知之甚少,但有一定的C语言和单片机基础。为的是为了从0开始学习uC/OS-II。流程图如下图示: 1## 范例1 ## 范例一演示uC/OC-II的多任务处理能力。共有10个任务在屏幕上面随机的位置显示一个0~9的数字。每个任务只显示同一个数字。其包含了13个任务,在运行窗口的左下角增加了两个内部任务。

Virgo的博客 1337

UCOS-II移植ARM的读书笔记(12.11--12.25)

以下内容转自http://blog.ednchina.com/embedtek/UCOS-II移植ARM的读书笔记(12.11) 真是很郁闷,昨天晚上边看移植代码边记下来的笔记不知道怎么回事在保存的时候竟然不见了。。。5555。。。一个晚上工作的结果啊,关键是我是第一次也是正式开始移植的学习之路啊。。。真是够倒霉的。。。。今天在工作之前先把昨天的笔记重新回顾一下,其实后来想想也许是

bird67的专栏 5431

μC/OS-II系统初步认识及基本数据类型

1、INCLUDES.H增加了代码的可移植性,但同时我们在编译这些文件时需要花费额外的时间。可以在INCLUDES.H里添加用户自己的头文件 1.02 移植文件使用可移植性强的整数数据类型,分别有以下可移植的数据类型: ①Typedef unsigned char  BOOLEAN; ②Typedef unsigned char  INT8U;//代表8位无符号整数数据类型 ③Typed

bv1315008634的博客 1514

uCOS-II学习笔记(一)

第一章:范例   在这一章里将提供三个范例来说明如何使用 µC/OS-II。这一章是为了让读者尽快开始使用 µC/OS-II。 1.00 安装µC/OS-II 1.01 INCLUDES.H #include "includes.h"      INCLUDE.H可以使用户不必在工程项目中每个*.C文件中都考虑需要什么样的头文件。换句话说,INCL

abc94的专栏 1283

ucos在PC机上的编译与运行方法

ucos是一个小巧的公开源代码的嵌入式实时操作系统,非常适合于嵌入式系统学习。为了给同学们讲授ucos的原理和使用,总结了一下ucos在PC机上的编译方法,基于BC、TC、和VC。   方法1:基于BC ucos默认的方法是基于BC45,但是没有在网络上下到BC

通往AGI之路 4473

UCOS-II移植ARM的读书笔记(12.16)

 范例二:void main (void){    OS_STK *ptos;    OS_STK *pbos;    INT32U  size;    PC_DispClrScr(DISP_FGND_WHITE);                        /* Clear the screen                         */    OSInit(); 

永远的BATIGOAL 2185

uCOS-II的检测按键

/************************************************************* FileName : testPressKey.cpp FileFunc : uCOS-II的检测按键代码 Versio

sunrier的专栏 4941

启动ucosii之五OSStart()

函数原型来自OS_CORE.C //该函数由SStart()函数调用,功能是运行优先级最高的就绪任务,在调用OSStart()之前,用户必须先调用OSInit(),并且已经至少创建了一个任务. //OSStartHighRdy()默认指针OSTCBHighRdy指向优先级最高就绪任务的任务控制块(OS_TCB)(在这之前OSTCBHighRdy已由OSStart()设置好了). void

aimarpp的专栏 1万+

启动ucosii之八OSStatInit()

原型出自内核OS_CORE.C //统计任务的初始化 #if OS_TASK_STAT_EN > 0 void  OSStatInit (void) { #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */     OS_CPU_

aimarpp的专栏 5682
下一篇: 启动ucosii之二PC_DOSSaveReturn()
IvyOnion
博客等级 码龄15年 35粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值