ucos移植指南
指定堆栈数据类型(宽度) typedef unsigned int OS_STK;
指定Ucos移植方法3中保存cpu状态寄存器的变量的宽度
typedef unsigned int OS_CPU_SR;指定堆栈的生长方向,cortex-m3的生长方向是高地址到低地址
#define OS_STK_GROWTH 1选择cpu进入中断时候(临界段)的切换方式,有三种选择,第一是直接利用cpu的开关中断指令来实现,第二是通过堆栈保存和恢复cpu的状态,第三是通过编译器扩展功能
获取程序状态字,保存在变量cpu_sr中Os_cpu.h说明完成
接下来需要移植os_cpu_a.asm汇编代码
OS_CPU_SR_Save 保存cpu状态寄存器的汇编代码,将primask保存
OS_CPU_SR_Restore 恢复cpu状态,将primask赋值到之前保存的值
OSStartHighRdy 使用调度器调度第一个任务,os_start会调用它
当一个任务放弃 cpu 的使用权,就会调用 OS_TASK_SW()宏,而
OS_TASK_SW()就是 OSCtxSw()。 OSCtxSw()应该做任务切换。但是在 CM3 中,
所有任务切换都被放到 PendSV 的中断处理函数中去做了,因此 OSCtxSw()只需简
单的触发 PendSV 中断即可,OS_TASK_SW()是由 OS_Sched()调用当一个中断处理函数退出时, OSIntExit()会被调用来决定是否有优先级更高的任
务需要执行。如果有 OSIntExit()对调用 OSIntCtxSw()做任务切换OSCtxSw()做的是任务之间的切换,如任务 A 因为
等待某个资源或是做延时切换到任务 B,而 OSIntCtxSw()则是中断退出时,由中断
状态切换到另一个任务。由中断切换到任务时, CPU 寄存器入栈的工作已经做完了,
所以无需做第二次了(参考邵老师书的 3.10 节)。这里只不过由于 CM3 的特殊机
制导致了在这两个函数中只要做触发 PendSV 中断即可PendSV 中断处理函数中只需保存 R4-R11 并调节堆栈指针
OSInitHookBegin()
OSInitHookEnd()
OSTaskCreateHook()
OSTaskDelHook()
OSTaskIdleHook()
OSTaskStatHook()
OSTaskStkInit()
OSTaskSwHook()
OSTCBInitHook()
OSTimeTickHook()
这些函数除了 OSTaskStkInit(),都是一些 hook 函数。这些 hook 函数如果不使
能的话,都不会用上,也都比较简单OSTaskStkInit()的作用,它被任务创建函数调用,所以要在开始时,在栈中作
出该任务好像刚被中断一样的假象OSTaskStkInit()的工作就是在任务自己的栈中保存 cpu 的所有
寄存器。这些值里 R1-R12 都没什么意义,这里用相应的数字代号(如 R1 用
0x01010101 )主要是方便调试打开系统定时中断,添加操作系统时钟切换函数
OSIntEnter(); //进入中断
OSTimeTick(); //调用ucos的时钟服务程序
OSIntExit(); //触发任务切换软中断主程序系统初始化,创建任务,启动任务
OSInit();
OSTaskCreate(start_task,(void)0,(OS_STK)&START_TASK_STK[START_STK_SIZE-1],START_TASK_PRIO );//创建起始任务
OSStart();- 起始任务负责创建中间任务
OS_CPU_SR cpu_sr=0;
pdata = pdata;
OSStatInit(); //初始化统计任务.这里会延时1秒钟左右
OS_ENTER_CRITICAL(); //进入临界区(无法被中断打断)
OSTaskCreate(led1_task,(void)0,(OS_STK)&LED1_TASK_STK[LED1_STK_SIZE-1],LED1_TASK_PRIO);
OSTaskCreate(led2_task,(void)0,(OS_STK)&LED2_TASK_STK[LED2_STK_SIZE-1],LED2_TASK_PRIO);
OSTaskSuspend(START_TASK_PRIO); //挂起起始任务.
OS_EXIT_CRITICAL(); //退出临界区(可以被中断打断) 移植到此结束
ucos移植指南的更多相关文章
- Hello China操作系统STM32移植指南(一)
Hello China操作系统移植指南 首先说明一下,为了适应更多的文化背景,对Hello China操作系统的名字做了修改,修改为"Hello X",或者连接在一起,写为&quo ...
- MiniGUI ial 移植指南
MiniGUI ial 移植指南 2.1 ial的定义 ial是一个通用的抽象输入接口,可以输入统一的数据的结构,也就是说在MiniGUI的核心代码里输入的数据的格式是固定的,不管输入设备是鼠标 还是 ...
- Unity5和WebGL移植指南的一些总结
对于手游开发者来说,更新版本往往意味着非常复杂的过程,你需要根据反馈做更新.测试.提交然后等待审核,而由于不需要客户端依赖,页游往往是快速测试游戏版本的最佳途径,很多人可能都知道Unity 5可以再不 ...
- UCOS移植心得(
移植UCOS之前,你首先应该做好三件事: 1.弄懂UCOS,这是谁都知道的哦 ^_^ 2. 弄懂你想要移植到的硬件平台 3. 清楚你使用的编译器是如何处理函数的局部变量和怎么样处理函数间的参数传递 这 ...
- Hello China操作系统STM32移植指南(三)
移植到STM32的源代码,可从下列链接下载: http://download.csdn.net/detail/hellochina15/7049909 包含两个包:一个是移植前的Hello China ...
- Hello China操作系统STM32移植指南(二)
移植步骤详解 下面就以MDK 4.72为开发环境,详细说明Hello China内核向STM32的移植过程.MDK 4.72评估版只支持32K代码的编译,这对Hello China的内核来说,裁剪掉一 ...
- 在秉火STM32F429挑战者开发板上移植Huawei LiteOS指南
昨天在B站上突然看到了一个短视频,是在正点原子的战舰V3开发板上移植华为的Huawei LiteOS操作系统,就是这个视频:看完鸿蒙OS发布会,试用华为的物联网操作系统Lite OS(B站),于是呢, ...
- ucos任务控制块详解
Ucos实现多任务的基础包括几个方面:任务控制块,任务堆栈,中断,任务优先级,一一说起 首先,任务控制块的结构如下 //系统在运行一个任务的时候,按照任务的优先级获取任务控制块,再在任务堆栈中获得任务 ...
- 备忘:移植ucos-III到stm32f103c8t6
由于本人对linux系统内核这块比较感兴趣,下一份工作想做linux驱动相关的:于是最近一旦有空都在研究linux内核源码,面对linux内核这个庞然大物,越看越觉得不能太过急躁,且由于还要工作,只能 ...
随机推荐
- Swift の 函数式编程
Swift 相比原先的 Objective-C 最重要的优点之一,就是对函数式编程提供了更好的支持. Swift 提供了更多的语法糖和一些新特性来增强函数式编程的能力,本文就在这方面进行一些讨论. S ...
- Java 学习路线以及各阶段学习书籍,博文,视频的分享
感谢: 感谢每一个打开这篇文章的人,听我在这里瞎扯!至于我为什么会有闲情写这篇文章呢?因为我每天想的是为什么要给我这样的需求,背后的人性是什么,我能再做些什么能让他更好.久而久之,我也稍微有了些自己的 ...
- cordova 启动界面config.xml配置
<preference name="SplashScreen" value="screen"/> <preference name=" ...
- Android Studio的使用(五)--导入第三方Jar包
本篇博文将介绍一下如何导入第三方Jar包. 1.首先将下载的Jar包直接Copy到libs目录下面,然后右击Jar文件,点击Add As Library后,在出现的弹出框点击确定即可. 2.打开bui ...
- [JNI] Java 调用 C++ dll
首先介绍一下JNI吧! JNI 是Java提供的一个用于调用本地接口的接口层,位于Java代码 和 本地代码之间的一层:主要功能是 数据类型的转换,还有就是通过这一层来调用本地代码! 下面就说说Jav ...
- php的表单安全处理
规则 1:绝不要信任外部数据或输入 关于 Web 应用程序安全性,必须认识到的第一件事是不应该信任外部数据.外部数据(outside data) 包括不是由程序员在 PHP 代码中直接输入的任何数据. ...
- gen_grant_sel.sql
set echo off feedback off verify off pagesize 0 linesize 120 define v_grantee=&1 define v_grant_ ...
- javascript中的正则匹配函数exec(),test(),match()
test() var str = "cat";var reStr = /cat/;alert(reStr.test(str)); 输出为:true 它的返回值为true or fa ...
- 打开jsp页面自动加载多个Action的实现方法
平时我们加载Action的时候都是提交表单,或者点击按钮以后才能发起Action请求. 现在我要实现一个功能:打开一个网站的首页从数据库中立刻读取多条不同表中的数据显示在页面上.这个时候要发起多个Ac ...
- POJ 1062 昂贵的聘礼详解最短路变形
POJ上难得一见的中文题…… 思路:建立一个以0为源点的地图,那么Map[0][n]的值代表 第n号物品的价值,Map[i][j]代表用 j 替代 i 后,物品j的价值.我们认为酋长的承诺为节点 ‘ ...