OS_TASK.C】的更多相关文章

/***********************************************************************************************************                                                uC/OS-II*                                          The Real-Time Kernel*                      …
/*********************************************************************************************************** uC/OS-II* The Real-Time Kernel* TASK MANAGEMENT** (c) Copyright 1992-2002, Jean J. Labrosse, Weston, FL* All Rights Reserved** File : OS_TASK…
使用ucos实时操作系统是在上学的时候,导师科研项目中.那时候就是网上找到操作系统移植教程以及应用教程依葫芦画瓢,功能实现也就罢了,没有很深入的去研究过这个东西.后来工作了,闲来无聊就研究了一下这个只有几千行代码的操作系统,也没所有的代码都看,只是看了其中部分内容.自己还自不量力的尝试着去写过简单的操作系统,最后写着写着就被带到了ucos的设计思路上了,后来干脆就“copy”代码了,虽说对操作系统内核的理解有很大的帮助,但是很是惭愧啊,智力不够,对操作系统内核的设计者更加仰慕,O(∩_∩)O哈哈…
/***********************************************************************************************************                                                uC/OS-II*                                          The Real-Time Kernel**                     …
/***********************************************************************************************************                                                uC/OS-II*                                          The Real-Time Kernel*                      …
去年玩过一阵单片机,也用过μc/osⅡ的系统,但是就理解内核而言,整个即时操作系统还是过于冗杂,很多的东西很不适合初学者来动手操作,多方查找我发现他的任务机制可以进行功能的进一步简化, 可以类似于任务栈的方式,使用纯C写成而不用汇编代码,闲话少说上代码吧. 我的github上有我的渣代码=_=:https://github.com/lfkdsk 灵魂画作任务图: 随手就是灵魂画作=-= 1.主函数: #include "OS_task.h" #include "89c51.h…
Ⅰ.概述 上一篇文章是讲述uC/OS-II Ports下面os_cpu_a.asm.os_cpu_c.c和os_cpu.h文件底层端口代码的移植(修改)和说明,接着上一篇文章来讲述关于UCOS移植应用部分的代码. 该文主要针对uC/OS-II 上层应用(配置OS.新建任务等)来讲述. 请下载“UCOS2_STM32F1_3个简单任务”作为参考工程. 笔者将“UCOS移植详细过程”分为多篇文章来讲述,敬请关注. 关于本文的详情请往下看(微信请点击“阅读原文”查看内容链接内容).   Ⅱ.下载 笔者…
#ifndef __CMSIS_OS_H__ #define __CMSIS_OS_H__ #include <stdint.h> #include <stddef.h> #include "RTOS.h" // API version (main [31:16] .sub [15:0]) #define osCMSIS 0x10002 // RTOS identification and version (main [31:16] .sub [15:0]) #…
一.上篇回顾 上一篇文章中,我们完成了两个任务使用PendSV实现了互相切换的功能,下面我们接着其思路往下做.这次我们完成OS基本框架,即实现一个非抢占式(已经调度的进程执行完成,然后根据优先级调度等待的进程)的任务调度系统,至于抢占式的,就留给大家思考了.上次代码中Task_Switch实现了两个任务的切换,代码如下: void Task_Switch() { if(g_OS_Tcb_CurP == &TCB_1) g_OS_Tcb_HighRdyP=&TCB_2; else g_OS_…
一.什么是PendSV PendSV是可悬起异常,如果我们把它配置最低优先级,那么如果同时有多个异常被触发,它会在其他异常执行完毕后再执行,而且任何异常都可以中断它.更详细的内容在<Cortex-M3 权威指南>里有介绍,下面我摘抄了一段. OS 可以利用它“缓期执行”一个异常——直到其它重要的任务完成后才执行动 作.悬起 PendSV 的方法是:手工往 NVIC的 PendSV悬起寄存器中写 1.悬起后,如果优先级不够 高,则将缓期等待执行. PendSV的典型使用场合是在上下文切换时(在不…
OSTaskCreateExt()建立任务 NT8U OSTaskCreateExt (void   (*task)(void *pd), void    *pdata, OS_STK *ptos, INT8U    prio, INT16U   id, OS_STK *pbos, INT32U   stk_size, void    *pext, INT16U   opt) 所属文件:OS_TASK.C 调用者:任务或者是启动代码,但是不可以在中断中调用.此函数建立一个新文件,是OSTaskC…
1. 知识准备 要想对ucos-ii的移植有较深的理解,需要两方面知识: (1)目标芯片,这里是lpc17xx系列芯片,它们都是基于ARMv7 Cortex-M3内核,所以这一类芯片的ucos-ii移植几乎都是一样的,要想了解Cortex-M3内核,推荐<ARM Cortex-M3权威指南>(宋岩译): (2)ucos-ii内核原理,推荐<嵌入式实时操作系统uC/OS-II(第2版)>(邵贝贝译). 2. 下载文件 ucos-ii移植过程主要涉及三个文件:os_cpu.h, os_…
操作系统栈溢出检測之uc/osII篇 Author               :       David Lin (林鹏) E-mail               :       linpeng1577@gmail.com  linpeng1577@163.com  15820224344@163.com OS                   :       源代码级理解掌握Ucos,Rt-thread等嵌入式操作系统内核的设计与实现,眼下在研究linux内核,路漫漫其修远兮,吾将上下而…
分析源码: 得先学会读文档, 函数前边的 note :是了解该程序员的思想的途径.不得不重视 代码前边的  Notes,了解思想后,然后在分析代码时看他是如何具体实现的. 1. ucosii/source/ucosii.h 全局变量(GLOBAL VARIABLES)的定义: OS_EXT  INT32U  OSCtxSwCtr        /* Counter of number of context switches记录操作系统切换上下文的次数*/   OSEventFreeList;  …
OS_Alloc.o OS_free OS_Alloc.o OS_malloc OS_Alloc.o OS_realloc OS_ARM720_MMU.o OS_ARM720_CACHE_CleanRange OS_ARM720_MMU.o OS_ARM720_CACHE_Enable OS_ARM720_MMU.o OS_ARM720_CACHE_InvalidateRange OS_ARM720_MMU.o OS_ARM720_MMU_AddTTEntries OS_ARM720_MMU.o…
任务消息队列跟任务信号量一样,均隶属于某一个特定任务, 不需单独创建,任务在则在, 只有该任务才可以接收这个任务消息队列的消息,其他任务只能给这个任务消息队列发送消息, 却不能接收.任务消息队列与(普通)消息队列极其相似,只是任务消息队列已隶属于一个特定任务, 所以它不具有等待列表, 省去了等待任务插入和移除列表的动作,所以工作原理相对更简单一点, 效率也比较高一些. 1.原理 如果想要使用任务消息队列,就必须事先使能任务消息队列.消息队列的使能位于“os_cfg.h”. 特别声明,任务消息队列…
1.任务的消息队列 uC/OS-III在任务中内建了一个消息队列.用户可以直接发送消息给任务而不通过外部消息队列. 这个特性不仅简化了代码, 还提供了效率.每个任务都内建一个消息队列. uC/OS-III中与任务消息队列相关的服务都是以OSTask???()开头的. 设置OS_CFG.H中的OS_CFG_TASK_EN使能任务的消息队列服务. 与任务消息队列相关的代码在OS_TASK.C中. 2.双向通信 两个任务可以通过两个消息队列同步,这叫做双向通信, 这两个任务间可能互相发送消息给对方.…
信号量和消息队列均是单独的内核对象,是独立于任务存在的. 任务信号量 仅发布给一个特定任务 .任务消息队列 可以发布给多个任务. 任务信号量伴随任务存在,只要创建了任务,其任务信号量就是该任务的一个数据成员,任务信号量的数据成员被包含在任务控制块里. 1.OSTaskSemPost () OSTaskSemPost () 函数用于给一个任务发布任务信号量. OSTaskSemPost () 函数的定义也位于“os_task.c”. 不管是否使能了中断延迟发布,最终都是调用 OS_TaskSemP…
1.经常通过发送信号量实现同步.每个任务都有内建的信号量,通过任务内建的信号量不仅可以简化信号量通信的代码而且更加有效. 与任务内建的信号量相关的函数都是以 OSTaskSem???()为前缀的.相关的代码都在OS_TASK.C中. 函数名 功能 OSTaskSemPend() 等待一个任务信号量 OSTaskSemPendAbort() 取消等待 OSTaskSemPost() 发送信号量给任务 OSTaskSemSet() 设置信号量计数值 2.挂起(等待)任务信号量 当任务被创建时,也会内…
1.设置任务优先级 嵌入式系统中的重要的应用应该被设置为高优先级,一些显示操作就应该被设置为低优先级. 然而, 由于实时系统的复杂性, 在大多数情况下任务的优先级是不能被事先确定的.多数系统中,不是所有的任务都是重要的,不重要的任务应该被设置为低优先级. 2.堆栈空间大小的确定 堆栈的大小取决于该任务的需求.设定堆栈大小时,你就需要考虑: 所有可能被堆栈调用的函数及其函数的嵌套层数, 相关局部变量的大小, 中断服务程序所需要的空间. 另外, 堆栈还需存入CPU寄存器,如果处理器有浮点数单元FPU…
(1)core_cm3.c , core_cm.h:获取设置CM3内核,配置一些内核寄存器,用到CM3核的都需要: (2)stm32f10x.h 和 system_stm32f10x.c , system_stm32f10x.h 和 startup_stm32f10x_hd.s : stm32的支撑文件,这几个文件是和具体的芯片有关的: ①stm32f10x.h:标准外设库的入口,使用标准外设库的代码中必须包含该头文件: ②system_stm32f10x.c , system_stm32f10…
首先我们看一下uC/OS-II的框架图: 1.配置文件修改 +------------------------------------------ |core: os_core.c |  os: os_flag.c    os_mbox.c |  os_mem.c     os_mutex.c |  os_q.c       os_sem.c |  os_task.c    os_time.c |      os_tmr.c |head: ucos_ii.h +-----------------…
Ⅰ.写在前面 学习本文之前可以参看我前面的文章: UCOS2_STM32移植详细过程(汇总文章) UCOS2系统内核讲述(一)_总体描述 UCOS2系统内核讲述(二)_初始化调用函数 UCOS2系统内核讲述(三)_TCB任务控制块 上一篇文章讲述了关于TCB(Task Control Block)任务控制块数据结构体的内容.本文学习与应用.也与系统内核紧密相关的一个函数“OSTaskCreateExt”创建任务. OSTaskCreateExt这个函数是我们的应用程序所调用的函数,在我们所移植的…
Ⅰ.写在前面 学习本文之前可以参考我前面基于STM32硬件平台移植UCOS2的几篇文章,我将其汇总在一起: UCOS2_STM32F1移植详细过程(汇总文章) 要想学习,或使用系统配套的资源(如:信号量.消息邮箱.消息队列等),就需要先了解一下系统内核大致的原理,也就是先了解大致,在研究细节的东西(从外到内),本文就是接着前面移植的文章来讲述关于系统内核的知识. 本文主要是结合前面移植好.可以运行的源代码来进行讲述关于最新版本UCOS2系统内部代码. 关于本文的更多详情请往下看. Ⅱ.UCOS操…
获得更多资料欢迎进入我的网站或者 csdn或者博客园 对于有热心的小伙伴在微博上私信我,说我的uC/OS-II 一些函数简介篇幅有些过于长应该分开介绍.应小伙伴的要求,特此将文章分开进行讲解.上文主要介绍了OSInit()初始化函数,本文介绍任务相关的函数:OSTaskCreate()任务创建函数1,OSTaskCreateExt任务创建函数2,OSTaskSuspend()任务挂起,OSTaskResume()唤醒任务 OSTaskCreate()任务创建函数 1.主要作用:建立一个新任务.任…
获得更多资料欢迎进入我的网站或者 csdn或者博客园 以前搞硬件的经验,最近突然翻出来了.分享给大家:主要讲解uC/OS-II常用函数:虽说现在转行软件了,但是感觉之前搞硬件的经验还真是很有用对于理解底层等很有帮助.比如这里对于操作系统还是有点用的:好了,开始唠叨下. ucos ii介绍 μC/OS-II由Micrium公司提供,是一个可移植.可固化的.可裁剪的.占先式多任务实时内核,它适用于多种微处理器,微控制器和数字处理芯片(已经移植到超过100种以上的微处理器应用中).同时,该系统源代码开…
在看uCOS II V2.91版本源代码时,在ucos_ii.c源文件中发现下面的代码: #include <os_core.c> #include <os_flag.c> #include <os_mbox.c> #include <os_mem.c> #include <os_mutex.c> #include <os_q.c> #include <os_sem.c> #include <os_task.c>…
转自http://www.amobbs.com/thread-5462878-1-1.html 自学uCOS-II源码,在论坛上上看到大神在WIN7 Visual Studio 2010环境下调试uCOS-II 2.91.故转载过来跟着调试学习. 1. 下载uCOS-II 2.91 官方下载地址:http://micrium.com/page/downloads/source_code 方便调试而修改后的源码地址:http://www.amobbs.com/forum.php?mod=attac…
本人刚刚学习UCOSII,平台为正点原子的STM32F103战舰开发板,写这篇博客主要是为了学习UCOSII,也方便自己能够一点一点的进步,话不多说直入正题吧. 第一步:在STM32上移植好UCOSII系统后,就需要创建一些任务. //创建任务三部曲: 1.设置任务优先级 2.设置任务堆栈(数组) 3.定义任务函数 一.下面是正点原子源代码中的两个例子:START任务和LED0任务 //----------START任务------------ //设置任务优先级 #define START_T…
下载代码 stm32 标准外设库是 stm32 全系列芯片的外设驱动,有了它能够大大加速我们 开发 stm32. 首先从 st 公司的站点下载最新的 stm32 标准外设库,写本文时最新的版本号是 V3.5.0. 解压该 zip 文件.得到例如以下目录和文件 STM32F10x_StdPeriph_Lib_V3.5.0\  _htmresc  Libraries  Project  Utilities  Release_Notes.html  stm32f10x_stdperiph_lib_um…