uCOS的移植过程(uCOS II 在LPC11C14上面的移植方法)

笔记-stm32移植ucos 文章目录一、UCOS的基础知识1.1 前后台系统:1.2 RTOS系统可剥夺型内核:前后台系统和RTOS系统UCOS系统简介 一、UCOS的基础知识 1.1 前后台系统:   早期嵌入式开发没有嵌入式操作系统的概念,直接操作裸机,在裸机上写程序,比如用51单片机基本就没有操作系统的概念。通常把程序分为两部分:前台系统和后台系统。   简单的小系统通常是前后台系统,这样的程序包括一个死循环和若千个中断服务程序:应用程序是一个无限循环,循环中调用API函数完成所需的操作,这个大循环就叫做后台系统。中断服务程序用 阅读详情

uCOS II 在LPC11C14上面的移植方法

电子文档:http://download.youkuaiyun.com/detail/icegoly/5449031  

第一:OS_CPU.H的移植 2

1.1 定义与编译器有关的数据类型 2

1.2 定义中断的实现方式 3

1.3 定义栈的生长方式 5

1.4 宏定义 优先级任务切换 6

1.5 定义开、关中断的函数 6

1.6 声明5个函数 6

第二:OS_CPU_C.C的移植 6

2.1 OSTaskStkInt()任务堆栈初始化函数 6

2.2 OSTaskStkInit() 10

2.3 OSTaskCreateHook() 11

2.4 OSTaskDelHook() 11

2.5 OSTaskSwHook() 11

2.6 OSTaskStatHook() 11

2.7 OSTimeTickHook() 11

第三:OS_CPU_A.S的移植 11

3.0 说明: 11

3.0.1 NVIC_INT_CTRL:中断控制和状态寄存器 12

3.0.2 NVIC_SCB_SHPR3系统处理程序优先级寄存器 14

3.0.3:PendSV 15

3.1 实现 中断开、关的汇编 15

3.2 OSStartHighRdy函数移植 16

A:设置PendSV 异常优先级为最低 17

B:初始化PSP设置为0 17

C:设置OSRunning=ture 17

D:触发PendSV 异常 17

E:开中断 18

3.3 OSCtxSw  任务切换 18

3.4 OSIntCtxSw任务切换 18

3.5 OS_CPU_PendSVHandler   pendsv异常处理 18

A:获取任务的SP,如果为0 的话则 直接跳到 OS_CPU_PendSVHandler_nosave,去执行 18

B:保存R4-R11和SP 19

C:将当前的堆栈指针给当前进程的任务块 19

D:然后调用OSTaskSwHook 19

E:获取当前的高优先级 20

F获取当前就绪线程 20

G 得到新任务的Sp和恢复从堆栈r4-r11 20

H:载入新的SP和返回 21


第一:OS_CPU.H的移植

1.1 定义与编译器有关的数据类型

typedef unsigned char  BOOLEAN;   /* boolean */

typedef unsigned char  INT8U;     /* Unsigned  8 bit quantity 无符号8位整型变量                          */

typedef signed   char  INT8S;     /* Signed    8 bit quantity 有符号8位整型变量                          */

typedef unsigned short INT16U;    /* Unsigned 16 bit quantity 无符号16位整型变量                          */

typedef signed   short INT16S;    /* Signed   16 bit quantity 有符号16位整型变量                          */

typedef unsigned int   INT32U;    /* Unsigned 32 bit quantity 无符号32位整型变量                          */

typedef signed   int   INT32S;    /* Signed   32 bit quantity  有符号32位整型变量                         */

typedef float          FP32;      /* Single precision floating point    单精度浮点数(32位长度)                */

typedef double         FP64;      /* Double precision floating point    双精度浮点数(64位长度)                */

typedef unsigned int   OS_STK;      /* Each stack entry is 32-bit wide  堆栈是32位宽度                 */

typedef unsigned int   OS_CPU_SR;   /* Define size of CPU status register (PSR = 32 bits) */

1.2 定义中断的实现方式  

为了处理临界区代码,必须关中断,等处理完毕后,再开中断。关中断可以避免其他任务或中断进入临界区代码。uC/OS-II定义了这两个宏来实现,但注意一条:调用uC/OS-II功能函数时,中断应该总是开着的。

1)当OS_CRITICAL_METHOD= = 1时,简单实现如下:
   #define OS_ENTER_CRITICAL() disable_int() 
    #define OS_EXIT_CRITICAL() enable_int()
但这样有一个问题,如果禁止中断的情况下调用uC/OS-II功能函数,那么从功能函数返回时,中断可能变成允许的了,而实际上还是希望是禁止的。

 2)当OS_CRITICAL_METHOD= = 2时,实现如下:
   #define OS_ENTER_CRITICAL()    
            asm(“PUSH PSW”);
            asm(“DI”);
    #define OS_EXIT_CRITICAL()
            asm(“POP PSW”);
执行OS_ENTER_CRITICAL()时,先将中断状态保存到堆栈,然后关中断;执行OS_EXIT_CRITICAL()时,再从堆栈中恢复原来的中断开/关状态。这种方法不会改变中断状态,避免前面的问题。

3)当OS_CRITICAL_METHOD= = 3时,实现如下:
 #define OS_ENTER_CRITICAL()    
        cpu_sr = get_processor_psw();
        disable_interrupts();
 #define OS_EXIT_CRITICAL()
        set_ processor_psw(cpu_sr);

====================
这里注意的是OS_CRITICAL_METHOD ,ucos提供了3种方法实现,第一种方法是直接简单的开关中断方式,但是一旦嵌套会发生意外,比如:

view plaincopy to clipboardprint?
·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
void Task (void *data)   
  
    .........         
  
   OS_ENTER_CRITICAL();    
   //进入临界区1   
  
   //调用了某一函数,该函数也需要进入临界区:   
   {   
     OS_ENTER_CRITICAL();    
     ................   
     OS_EXIT_CRITICAL();    
   }   
   //这里就自然变成废墟了   
   ...........   
   //临界区切掉   
   OS_EXIT_CRITICAL();    
       
}  
 void Task (void *data)
{
     .........     

    OS_ENTER_CRITICAL(); 
    //进入临界区1

LPC11C14__uCOS-II V2.91 移植笔记(二) OS_CPU_C.C这文件的内容,这个文件基本上没有什么改动,都是来自cortex-M3移植UCOS系统的源码,更详细的内容可以看一下官方移植LPC1768的例子 #define  OS_CPU_GLOBALS #include #include "LPC11xx.h" #if OS_TMR_EN > 0u static  INT16U  OSTmrCtr; #endif 阅读详情

相关推荐

LPC11C14__uCOS-II V2.91 移植笔记(三)

OS_CPU_A.ASM这个文件是移植UCOS-II到LPC1114最关键的部分,里面用到一些汇编指令,Cortex-M3和Cortex-M0的任务切换都用到PenSV中断,被来向在OSStartHighRdy也安装Cortex-M3的方式来完成,就是也触发PenSV中断来完成第一个任务的执行,发现这两个内核还有有点不一样的,只要我设置NVIC_SYSPRI14为最低优先级,就不能触发SysTic

sunnon的专栏 1759

ARM Cortex-M3核LPC1768的μCOS-II的移植练习-1

摘要: 移植步骤参考文章《 LPC17XX 学习之 uCOS-II 移植实例》(简称《实例》)。对移植过程中遇到的几个细节问题进行总结,形成文档备份。由于是初次接触操作系统移植,可能会有一些错误认识或操作,敬请指正。   1概述 《实例》文档详细讲述了uCOS-II(V2.89)向LPC17xx系列CPU移植的过程。本文是对上文档的过程细化,即在向LPC1768移植过程中遇到的一些细节性问

ldu0323的专栏 1536

uCOS-II移植过程实例讲解 编程

移植后,我们可以在目标硬件上运行uCOS-II,并利用其强大的实时调度和任务管理功能。在本文中,我们将详细讲解如何进行uCOS-II实时操作系统的移植过程,并提供相应的源代码示例。uCOS-II是一个非常流行的嵌入式实时操作系统,具有可移植性强的特点,可以在各种不同的硬件平台上进行移植。在进行uCOS-II的移植之前,首先需要选择目标硬件平台。完成以上步骤后,可以将移植后的uCOS-II源代码编译为目标硬件平台的可执行程序,并通过调试器进行调试。uCOS-II的移植文件是用于适配目标硬件平台的关键部分。

PixelEnigma的博客 623

STM32 UCOS-II 移植实战

UCOS-II 是一款非常优秀的嵌入式实时操作系统,它提供了丰富的操作系统服务,可以使我们的嵌入式系统更为健壮和可靠。希望读者能够通过本文的介绍,掌握 UCOS-II 的移植技巧,从而快速构建自己的嵌入式系统。然后,根据 UCOS-II 的文档,修改相应的配置文件和头文件。例如,在 UCOS-II 目录下有一个 OS_CFG.H 文件,其中定义了 UCOS-II 的各种配置参数。然后,添加我们的代码文件,包括 UCOS-II 的源代码和应用程序的代码。然后,在另一个任务中读取邮箱中的数据并输出到串口上。

qq_37934722的博客 971

CanOpen PDO映射实战:从原理到配置的完整指南

本文详细解析了CanOpen PDO映射的原理与配置流程,从基础通信机制到实战配置步骤,涵盖禁用PDO、清空映射、逐项映射和使能PDO等关键环节。特别针对西门子G120变频器、台达伺服和倍福CX控制器等不同厂商设备,提供了具体的配置技巧和常见问题排查指南,帮助工程师快速掌握多厂商设备间的PDO通信配置。

weixin_30718391的博客 516

Jaspersoft Studio 6.20.0 免注册安装指南(附下载链接)

本文提供了Jaspersoft Studio 6.20.0社区版的免注册安装详细指南。文章介绍了绕过官网注册获取安装包的多种可靠途径,并逐步详解了从启动安装器到首次运行的全过程,帮助用户快速完成安装与基础配置,高效开启报表设计工作。

mars5的博客 1696

AUTOSAR实战:手把手教你配置EthTsync模块,搞定车载以太网时间同步

本文详细解析AUTOSAR架构中EthTsync模块的配置方法,实现车载以太网时间同步。通过对比gPTP与PTP协议差异,提供从开发环境准备到参数配置、模块集成的全流程指南,并分享性能优化与调试技巧,帮助开发者实现微秒级同步精度,满足自动驾驶等高精度时间同步需求。

weixin_28736335的博客 374

YOLOv8实战火焰和烟雾检测 (视频教程)

本课程将手把手地教大家使用YOLOv8结合可变形卷积(deformable convolution)训练火焰和烟雾数据集,完成一个多目标检测实战项目,可实时检测图像、视频、摄像头和流媒体(http/rtsp)中火焰和烟雾,并提供可视化演示界面 。

bai666ai的博客 1915

相机中的归一化实现讲解

本分讲解了图像处理中常出现的两个相机归一化操作

weixin_42102084的博客 1475

超越防抖:索尼CXD5254GG芯片如何重新定义电子影像稳定

索尼CXD5254GG芯片通过融合6轴IMU与图像传感器数据,重新定义了电子影像稳定技术。其核心突破在于实时地平线校正、抑制果冻效应和镜头畸变校正,并搭载智能画质控制器提升画面细节。该芯片适用于广播制作、体育娱乐、安防监控和机器人视觉导航等专业领域,提供开箱即用的优化参数配置,大幅缩短开发周期。CXD5254GG不仅实现稳定成像,更通过姿态感知与智能优化,为专业影像应用提供了完整的稳定解决方案。

致力于lidar应用开发 114

国密GmSSL v2版本命令行方式生成国密sm2私钥、公钥、签名和验证签名

GmSSL是国密算法的工具库(主要包含SM2、SM3、SM4和国密SSL证书生成等功能),项目本身是OpenSSL的分支,但是截至文章发布为止,OpenSSL主分支的国密算法并不完善,目前并不支持签名和解签,所以国密算法这块还是需要使用GmSSL工具库。网上现在并没有v2版本的GmSSL可用的命令行文章,本章用于记录这些命令。本文原创自csdn博客,其他网站看到这篇文章都是盗,版,爬。虫。网站,支持原创,远离盗版。

eguid音视频方向博客,分享经过实践检验的硬核音视频技术。FFmpeg、openCV和JavaCV音视频和图像处理系列教程发布十周年,众多开发者的严格验证。欢迎关注,一起交流探索学习最新音视频和图像处理技术 4604

在 SAP Fiori 中正确配置 Group 角色:从 PFCG 分配到首页呈现的完整链路

摘要:SAP Fiori项目中,用户登录后能否看到应用往往取决于角色配置而非前端开发。关键在于通过PFCG角色将launchpad designer中创建的tile group关联到用户角色。Catalog是应用池,group是用户首页可见的工作区。正确配置后,用户会看到角色对应的默认分组,同时保留个性化调整能力。项目实施中常见问题是应用开发完成但未正确配置group与角色关联,导致业务用户无法在首页看到应用入口。(150字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 164

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

上一篇: ubuntu 常见的几个小问题
下一篇: C语言总结之---关键字
普通网友
博客等级 码龄16年 9粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值