1. 指定堆栈数据类型(宽度) typedef unsigned int OS_STK;

  2. 指定Ucos移植方法3中保存cpu状态寄存器的变量的宽度
    typedef unsigned int OS_CPU_SR;

  3. 指定堆栈的生长方向,cortex-m3的生长方向是高地址到低地址
    #define OS_STK_GROWTH 1

  4. 选择cpu进入中断时候(临界段)的切换方式,有三种选择,第一是直接利用cpu的开关中断指令来实现,第二是通过堆栈保存和恢复cpu的状态,第三是通过编译器扩展功能
    获取程序状态字,保存在变量cpu_sr中

  5. Os_cpu.h说明完成

  6. 接下来需要移植os_cpu_a.asm汇编代码

  7. OS_CPU_SR_Save 保存cpu状态寄存器的汇编代码,将primask保存

  8. OS_CPU_SR_Restore 恢复cpu状态,将primask赋值到之前保存的值

  9. OSStartHighRdy 使用调度器调度第一个任务,os_start会调用它

  10. 当一个任务放弃 cpu 的使用权,就会调用 OS_TASK_SW()宏,而
    OS_TASK_SW()就是 OSCtxSw()。 OSCtxSw()应该做任务切换。但是在 CM3 中,
    所有任务切换都被放到 PendSV 的中断处理函数中去做了,因此 OSCtxSw()只需简
    单的触发 PendSV 中断即可,OS_TASK_SW()是由 OS_Sched()调用

  11. 当一个中断处理函数退出时, OSIntExit()会被调用来决定是否有优先级更高的任
    务需要执行。如果有 OSIntExit()对调用 OSIntCtxSw()做任务切换

  12. OSCtxSw()做的是任务之间的切换,如任务 A 因为
    等待某个资源或是做延时切换到任务 B,而 OSIntCtxSw()则是中断退出时,由中断
    状态切换到另一个任务。由中断切换到任务时, CPU 寄存器入栈的工作已经做完了,
    所以无需做第二次了(参考邵老师书的 3.10 节)。这里只不过由于 CM3 的特殊机
    制导致了在这两个函数中只要做触发 PendSV 中断即可

  13. PendSV 中断处理函数中只需保存 R4-R11 并调节堆栈指针

  14. OSInitHookBegin()
    OSInitHookEnd()
    OSTaskCreateHook()
    OSTaskDelHook()
    OSTaskIdleHook()
    OSTaskStatHook()
    OSTaskStkInit()
    OSTaskSwHook()
    OSTCBInitHook()
    OSTimeTickHook()
    这些函数除了 OSTaskStkInit(),都是一些 hook 函数。这些 hook 函数如果不使
    能的话,都不会用上,也都比较简单

  15. OSTaskStkInit()的作用,它被任务创建函数调用,所以要在开始时,在栈中作
    出该任务好像刚被中断一样的假象

  16. OSTaskStkInit()的工作就是在任务自己的栈中保存 cpu 的所有
    寄存器。这些值里 R1-R12 都没什么意义,这里用相应的数字代号(如 R1 用
    0x01010101 )主要是方便调试

  17. 打开系统定时中断,添加操作系统时钟切换函数
    OSIntEnter(); //进入中断
    OSTimeTick(); //调用ucos的时钟服务程序
    OSIntExit(); //触发任务切换软中断

  18. 主程序系统初始化,创建任务,启动任务

  19. OSInit();
    OSTaskCreate(start_task,(void)0,(OS_STK)&START_TASK_STK[START_STK_SIZE-1],START_TASK_PRIO );//创建起始任务
    OSStart();

  20. 起始任务负责创建中间任务
    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(); //退出临界区(可以被中断打断)
  21. 移植到此结束

ucos移植指南的更多相关文章

  1. Hello China操作系统STM32移植指南(一)

    Hello China操作系统移植指南 首先说明一下,为了适应更多的文化背景,对Hello China操作系统的名字做了修改,修改为"Hello X",或者连接在一起,写为&quo ...

  2. MiniGUI ial 移植指南

    MiniGUI ial 移植指南 2.1 ial的定义 ial是一个通用的抽象输入接口,可以输入统一的数据的结构,也就是说在MiniGUI的核心代码里输入的数据的格式是固定的,不管输入设备是鼠标 还是 ...

  3. Unity5和WebGL移植指南的一些总结

    对于手游开发者来说,更新版本往往意味着非常复杂的过程,你需要根据反馈做更新.测试.提交然后等待审核,而由于不需要客户端依赖,页游往往是快速测试游戏版本的最佳途径,很多人可能都知道Unity 5可以再不 ...

  4. UCOS移植心得(

    移植UCOS之前,你首先应该做好三件事: 1.弄懂UCOS,这是谁都知道的哦 ^_^ 2. 弄懂你想要移植到的硬件平台 3. 清楚你使用的编译器是如何处理函数的局部变量和怎么样处理函数间的参数传递 这 ...

  5. Hello China操作系统STM32移植指南(三)

    移植到STM32的源代码,可从下列链接下载: http://download.csdn.net/detail/hellochina15/7049909 包含两个包:一个是移植前的Hello China ...

  6. Hello China操作系统STM32移植指南(二)

    移植步骤详解 下面就以MDK 4.72为开发环境,详细说明Hello China内核向STM32的移植过程.MDK 4.72评估版只支持32K代码的编译,这对Hello China的内核来说,裁剪掉一 ...

  7. 在秉火STM32F429挑战者开发板上移植Huawei LiteOS指南

    昨天在B站上突然看到了一个短视频,是在正点原子的战舰V3开发板上移植华为的Huawei LiteOS操作系统,就是这个视频:看完鸿蒙OS发布会,试用华为的物联网操作系统Lite OS(B站),于是呢, ...

  8. ucos任务控制块详解

    Ucos实现多任务的基础包括几个方面:任务控制块,任务堆栈,中断,任务优先级,一一说起 首先,任务控制块的结构如下 //系统在运行一个任务的时候,按照任务的优先级获取任务控制块,再在任务堆栈中获得任务 ...

  9. 备忘:移植ucos-III到stm32f103c8t6

    由于本人对linux系统内核这块比较感兴趣,下一份工作想做linux驱动相关的:于是最近一旦有空都在研究linux内核源码,面对linux内核这个庞然大物,越看越觉得不能太过急躁,且由于还要工作,只能 ...

随机推荐

  1. HDU 3038 How Many Answers Are Wrong (并查集)---并查集看不出来系列-1

    Problem Description TT and FF are ... friends. Uh... very very good friends -________-bFF is a bad b ...

  2. HDU 4612 Warm up(双连通分量缩点+求树的直径)

    思路:强连通分量缩点,建立一颗新的树,然后求树的最长直径,然后加上一条边能够去掉的桥数,就是直径的长度. 树的直径长度的求法:两次bfs可以求,第一次随便找一个点u,然后进行bfs搜到的最后一个点v, ...

  3. 链接libtorrent库时出现的问题

    在QtCreator中使用libtorrent库的时候, 项目配置中 libs项配置如下: LIBS += -liconv -ltorrent-rasterbar -lboost_system -lb ...

  4. 十二月总结-and-2016年终总结

    回顾 今天是2016的最后一天了,所以今天来做一个年终总结是最好不过的了.各种期末考试随着而来,也就意味着在工大的第一个学期马上结束了.回顾一下这一年所获得或者失去的一些东西: 2月份在家焦虑的等待着 ...

  5. Lint Code——最多共线的点的个数

    题目链接:http://www.lintcode.com/zh-cn/problem/max-points-on-a-line/# 条件:给一个点数组 目标:求出共线的点的最多个数 实现:时间复杂度- ...

  6. VIJOS P1081 野生动物园 SBT、划分树模板

    [描述] cjBBteam拥有一个很大的野生动物园.这个动物园坐落在一个狭长的山谷内,这个区域从南到北被划分成N个区域,每个区域都饲养着一头狮子.这些狮子从北到南编号为1,2,3,…,N.每头狮子都有 ...

  7. Linux链接VPN进行转发

    1.安装client sudo apt-get install pptp-linux 2.连接vpn server sudo pptpsetup --create pptpd --server x.x ...

  8. 转 图片缓存之内存缓存技术LruCache,软引用

    每当碰到一些大图片的时候,我们如果不对图片进行处理就会报OOM异常,这个问题曾经让我觉得很烦恼,后来终于得到了解决,那么现在就让我和大家一起分享一下吧.这篇博文要讲的图片缓存机制,我接触到的有两钟,一 ...

  9. 2016大连网络赛 Function

    Function Time Limit: 7000/3500 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Probl ...

  10. 利用ZjDroid对 <捕鱼达人3> 脱壳及破解过程-转

    http://blog.sina.com.cn/zihao2015 <捕鱼达人3> 刚出来不久,就被鬼哥Dump出来dex,随之破解也就轻而易举.一开始我用ZjDroid神器试验过,但是没 ...