ucos

2019年9月25日星期三(STM32 ucos3)

99封情书 提交于 2020-03-17 17:12:09
一.UCOS 1.概念 uc/OS-III(Micro C OS Thee),微型C语言编写的操作系统第三版。是一个可升级,可固化,多任务基于优先级的可抢占式实时内核。 ucos的任务个数不限制,实现了操作系统所需求的大部分功能,资源管理,同步,任务之间的通信。除了这些基本的功能以外,还提供一些其他的实时性内核找不到的特色功能,比如完备的运行时间测量,也可以直接发送信号/消息到某个任务,任务也可以同时等待多个内核对象 由于ucos体积微小,功能强悍,可移植性强,在微控制器领域应用广泛 ucos要收费,有时候我们会选择免费的系统,比如freeRTOS....,以及一些其他和物联网结合操作系统(华为liteOS 阿里巴巴.. 腾讯..) 2.ucos移植 (1)源代码结构 EvalBoards ------------ 工程文件 uc-CPU -------------- CPU相关代码 uc-LIB -------------- 和硬件/编译器 无关的库函数(字符串 数学 内存) uCOS-III ----------- ucos操作系统相关代码 (2)将源码拷贝到工程,修改源码(详情见手册) (3)特性 3.ucos的任务调度和任务 合作式调度 -------- 多个任务按照指定时间和顺序依次运行,下一个任务等待上一个任务时间用完再开始运行 抢占式调度 --------

uCos 之 TaskIdle() 注意事项【worldsing笔记】

北城以北 提交于 2020-03-17 08:12:22
在大多OS里都存在Idle线程或任务,同样uCos也不例外,为什么估计很少有人细研究。为什么设立Idle? 能不能去了? 首先看看uCos中关于Idle的代码做个介绍: config.h里对Idle的配置: #define OS_LOWEST_PRIO 7 /* 最低优先级,OS_LOWEST_PRIO即空闲任务优先级(0 ~ 63) */ #define OS_TASK_IDLE_STK_SIZE 32 /* 空闲任务栈容量 单位类型:OS_STK * */ 在Core.c文件里的OSInit()调用OS_InitTaskIdle();来创建OS_TaskIdle任务,OS_InitTaskIdle();封装了 CreateTask()的不同创建方法,有带ID名,有不带ID名的。 在Core.c文件里的OS_TaskIdle线程体 void OS_TaskIdle (void *pdata) { #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ OS_CPU_SR cpu_sr; #endif pdata = pdata; /* Prevent compiler warning for not using 'pdata' */ for (;;) { OS_ENTER

7、uCOS-Ⅱ 信号量

时光怂恿深爱的人放手 提交于 2020-03-05 23:06:06
1、“信号量”为操作系统用于处理临界区问题和实现进程间同步提供了一种有效的机制。 在很多操作系统原理书中都提到了信号量的概念,常用P操作与V操作来表明信号量的行为。 PV操作的伪代码如下: 设s为一整数型变量: P操作:while( s==0); s--; V操作:s++ 2、例程代码 1 /***************************************************************************************************************************** 2 * 3 * 文件名称:main.c 4 * 文件功能:主函数 5 * 文件说明:无 6 * 7 *****************************************************************************************************************************/ 8 /********************************************************** 9 * 10 * 头文件声明 11 * 12 **********************************************************/ 13 14

手把手,嘴对嘴,讲解UCOSII嵌入式操作系统的任务调度策略(二)

北城以北 提交于 2020-02-25 20:07:21
继续…… if (ticks > 0u) { /* 延时参数是否为0 */ OS_ENTER_CRITICAL();            /* 禁止中断 */ y = OSTCBCur->OSTCBY; OSRdyTbl[y] &= (OS_PRIO)~OSTCBCur->OSTCBBitX; if (OSRdyTbl[y] == 0u) { OSRdyGrp &= (OS_PRIO)~OSTCBCur->OSTCBBitY; } OSTCBCur->OSTCBDly = ticks; OS_EXIT_CRITICAL();           /* 开启中断 */ OS_Sched(); } 在上一段代码中,出现了一个陌生的数组: OSRdyTbl[],跟踪这个变量可以找到它的定义,发现它仅仅是一个uint8型的数组,长度是8个。 可以明确的告诉大家,这个数组很重要,应该算是任务优先级调度核心参数之一,与下面那个参数OSRdyGrp 合起来便可以作为任务就绪表。 ※接下来需要讲UCOSII系统的任务优先级调度策略,这一段有些复杂,需要反复思考,查阅大量的资料。 UCOSII的优先级策略 UCOSII操作系统最大可以管理64个任务(255个的暂时不讨论),每个任务都有唯一的优先级,从0开始到64,数字越小优先级越高,越优先进行系统调用,为了方面管理和调度

开启ucosii的移植之旅

╄→尐↘猪︶ㄣ 提交于 2020-01-26 23:15:52
开启ucosii的移植之旅: 4.6.1、移植和硬件平台的关系 (1)只要是cortex-m3内核内核的soc移植差异都不大。 同内核同soc的不同开发板移植差异都不大。 不同内核的开发板移植难度大,找的官方移植的同内核版本为起点。 移植的一般思路: 先找到相近的内核移植好的源码。(官网里找一个) 在开发环境上建立好工程模板后,将ucosii的核心代码添加进去。然后编译,解决报错和警告。(在这里我们只是解决了语法错误,并不知道整个代码具体干了什么事,自己是不清楚的) 下载运行,并小幅修改代码查看结果(验证自己的想法),最后添加并调试项目需要的BSP,编写并调试项目app部分。 4.6.2开始移植代码 跟着朱老师实战一下: 自己的板子是 STM32F103RCT6,建好工程模板。 编译出错3个错误。 ..\app\..\APP\includes.h(52): error: #5: cannot open source input file "stm32f10x_lib.h": No such file or directory 找不到"stm32f10x_lib.h"头文件,因为老版本的缘故,实际上"stm32f10x_lib.h"里边包含了各个外设的头文件。这个在新版本里没有,但是我们有"stm32f10x.h" 还有绝对路径包含的问题,注意自己的文件名大小写以及对错。 .

STM32F1移植UCOSII

微笑、不失礼 提交于 2020-01-26 01:45:55
作者:珵旭媛 下载对应版本的UCOSII https://www.micrium.com/downloadcenter/ ,你会少修改很多东西; 下载下来后是这样的文件夹,并且Software里面的才是主要用到的; 2、根据个人习惯,建立一个基础 STM32F1模板,运行测试通过口,添加一个UCOS文件夹, 文件包含关系: 3、修改过程 os_cpu.h 才能与ARM中的中断处理对应上; 钩子函数不用改很多,用到再来改 ◆把 OS_CPU_SysTickHandler(), OS_CPU_SysTickInit();//注释掉; 4、App.c 中建立任务 OSInit(); // 任务 构造函数 堆栈顶 优先级 OSTaskCreate(startup_task, (void *)0, &startup_task_stk[STARTUP_TASK_STK_SIZE - 1], STARTUP_TASK_PRIO); OSStart(); 来源: https://www.cnblogs.com/luckytimor/p/6923978.html

从零开始学习UCOSII操作系统15--总结篇

我只是一个虾纸丫 提交于 2020-01-24 03:30:59
https://msd.misuland.com/pd/3626730720442974994 前言:在大学的时候,我们班级上面都有很多人觉得学习UCOSII(包括UCOSIII)是没什么厉害的,因为很多人都喜欢去学习Linux 操作系统 ,但是,但是,真实的对整个UCOSII操作系统进行学习,我可以保证,如果你是基于源码级别的阅读的话,绝对是不简单的。仅仅是调用几个API的话,是永远用不好UCOSII的操作系统的。还有你真正学通了UCOSII操作系统的话,那么你对Linux操作系统的内核也不会有太大的难度。 参考:嵌入式实时操作系统UCOSII原理与应用 1、UCOSII操作系统是怎么管理任务的? 用图是最能表现的: (1)任务控制块是来管理任务的。 (2)其中UCOSII把所有的任务都是通过双向链表来连接到一起的,为什么?我难道不能使用数组来分配空间吗? 关键原因:在整个操作系统中,因为我们不知道用户到底需要多少个任务,所以使用链表的话,在编译后才确认的话,数组的方式优秀很多。 我个人认为这张图其实是有一些错误的: 比如里面写了指向任务的指针,我觉得是应该放置在任务堆栈里面的,因为创建任务的时候,是将任务的函数名,传递给任务堆栈,然后任务堆栈再传到CPU的SR寄存器中,实现任务切换的。 所谓的指向任务的指针:其实就是任务的函数的函数名。 2、UCOSII操作系统是怎么运行的?

STM32CubeMX创建F429/L475 HAL库工程并移植UCOSIII (二)(文末附源码)

依然范特西╮ 提交于 2020-01-22 16:16:05
二、从Micrium官网下载UCOSIII源码并添加文件到工程中 1. 到Micrium官网下载ucos源码程序(MDK版) micrium网址: https://www.micrium.com/ 选择STM32F4xx 下载示例工程 此处需要账号,大家自己注册一下 下载下来目录如下图所示: 2.在STM32CubeMX生成的工程中添加UCOS-III文件夹 2.1 在UCOS-III目录下创建文件夹,放置UCOSIII源码 在STM32CubeMX工程 STM32F429_UCOSIII_DEMO\UCOS-III\ 目录下创建 BSP 和 CONFIG目录 2.1.1 BSP目录填充 复制 Micrium_STM32F429II-SK_OS3\Micrium\Examples\ST\STM32F429II-SK\BSP 目录下的 bsp.c 和 bsp.h 到STM32CubeMX工程 STM32F429_UCOSIII_DEMO\UCOS-III\BSP 2.1.2 CONFIG目录填充 复制 Micrium_STM32F429II-SK_OS3\Micrium\Examples\ST\STM32F429II-SK\OS3 目录下的 8个文件 到STM32CubeMX工程 STM32F429_UCOSIII_DEMO\UCOS-III\CONFIG 2.1.3

UCOSII在STM32F1上的移植

北战南征 提交于 2020-01-22 05:37:51
UCOSII在STM32F1上的移植    首先准备好一份STM32F1的工程、UCOSII源码。   在准备好的工程中新建一个“UCOSII”文件夹(或者取其它名字也行);       UCOSII文件夹用来存放有关UCOSII的文件,UCOS相关的文件也有几种不同用途的类型,在UCOSII文件夹中继续新建几个文件夹,用来存放不同作用的文件,我这边新建的是:“CORE”、“CONFIG”、“PORT”三个文件夹;   文件夹及文件都准备好后,打开工程,将上述文件及头文件都添加到工程中,头文件路径也包含下:    说明:“ CORE ”文件夹下放的是UCOSII源码,“ CONFIG ”文件夹下放的是UCOSII配置文件,其中的“ os_cfg.h ”文件中通过宏定义配置了大量参数,在此,举个例子说明下,例子中的这个宏定义也是非常重要的一个,“ OS_TICKS_PER_SEC ”,这个宏定义定义的是心跳包,如图所示: ,这句话的意思就是每秒钟有200次心跳; “ PORT ”文件夹下放的是一些需要根据不同芯片来使用或设置不同参数等这类文件的,比如其中的一个汇编文件: 如果是新手,这其中的文件的作用可以先不用深究,重点是“ CORE ”文件夹下的那些源码。   上述工作做完后就开始编译,如果此时编译出错,那就查原因,改正错误

UCOSII框架

妖精的绣舞 提交于 2020-01-20 08:59:26
  关于嵌入式实时操作系统ucosii,它的实质是一个微内核,它只提供了任务管理、任务的通信同步和简单的存储管理三项基本服务。μC/OS-Ⅱ的体系结构如图所示,它只对处理器和硬件时钟进行了抽象和逻辑封装,而没有提供其他硬件抽象层。   也就是说,移植μC/OS-Ⅱ时,其主要工作就是根据具体的硬件换一个或者添加一个硬件抽象层。在移植过程中,主要是对与处理器相关的代码进行修改。    OS_CPU.H :它与处理器相关,一些部分应根据处理器的情况进行修改(与处理器相关的常数和宏),还有一些定义数据类型的部分,无需修改。    OS_CPU_A.ASM :它集中了与处理器相关的汇编语言代码。它必须根据实际的处理器进行移植。    OS_CPU_C.C :它集中了与处理器相关的C语言代码。它也必须根据实际的处理器进行移植。   ucosii系统提供的核心功能模块都是以C文件形式:   从ucosii的框架中,还可以看到与应用程序相关的代码,这是对于不同的应用,实际的处理器能力和资源不同,需要的功能也不同,ucosii具有高度的可裁剪性,各种功能开关在OS_CFG.H配置文件中,用户可剪裁的代码放在 #if 和 #endif 预编译指令之间,编译时编译器根据 #if 预编译指令后面的常数的值来确定。而includes.h文件包含了应用所需调用的全部头文件,应用中的多数.C文件都应包含此文件。