STM32入门学习笔记之uCOS-II系统移植2

发布者:GoldenHarmony最新更新时间:2024-05-17 来源: elecfans关键字:STM3  uCOS-II  系统移植 手机看文章 扫描二维码
随时随地手机看文章

23.2 uCos-II移植

我们将下载好的uCOS-II的源代码解压出来如下图所示。

图片

23.2.1 在工程中添加相应的文件

(1)在工程目录下建立UCOSII文件夹,并在该文件夹内新建三个文件夹CONFIG,CORE和PORT

(2)将除了os_cfg_r.h和os_dbg_r.c这两个文件以外的所有文件全部复制到CORE文件夹下

(3)在CONFIG文件夹中新建includes.h文件和os_cfg.h文件

(4)在PORT文件夹中新建os_cpu.h,os_cpu_a.asm,os_cpu_c.c这3个文件

(5)在工程中添加这三个目录下的文件,如下图所示。

图片

注:不要把ucos-ii.c文件添加到UCOS-CORE分组中,否则会提示有重复定义错误。

23.2.2 文件修改

我们编译工程后可以发现报了11个错误,但都是同一个错误,如下图所示。

图片

我们在移植的时候并没有发现这个文件,那是因为我们并没有用到这个文件,这个文件是在ucos-ii.h文件中引用的,我们跳转到这个文件将其屏蔽掉。

注 :我们可以发现在修改的时候,文件虽然可以打开,但是修改不了,这是因为我们下载的源码都被设置成了只读模式,在工程中只读文件会有一个钥匙的标志,这就需要我们将文件的只读属性去掉即可。

图片

图片

去掉只读属性之后,我们会发现项目中的文件上钥匙标志消失了,如下图所示。

图片

此时,我们就可以对文件内容进行修改了。打开ucos_ii.h文件,屏蔽44行的文件引用,如下图所示。

图片

此时会发现报更多的错误,此时我们进行新建文件的修改。


(1)os_cpu_a.asm文件详解


①这部分代码主要用于定义外部变量,IMPORT表示这是一个外部变量,不是在本程序内定义的,EXPORT则表示这些函数位于该文件内,供其他文件调用,类似于C语言中的extern关键字。


IMPORT  OSRunning

  IMPORT  OSPrioCur

  IMPORT  OSPrioHighRdy

  IMPORT  OSTCBCur

  IMPORT  OSTCBHighRdy

  IMPORT  OSIntNesting

  IMPORT  OSIntExit

  IMPORT  OSTaskSwHook



  EXPORT  OSStartHighRdy

  EXPORT  OSCtxSw

  EXPORT  OSIntCtxSw

  EXPORT  OS_CPU_SR_Save

  EXPORT  OS_CPU_SR_Restore

  EXPORT  PendSV_Handler

②EQU和C语言中的define关键字一样,用于宏定义,定义了一些寄存器的地址


NVIC_INT_CTRL    EQU    0xE000ED04      ;中断控制寄存器

NVIC_SYSPRI2    EQU    0xE000ED20      ;系统优先级寄存器

NVIC_PENDSV_PRI  EQU    0xFFFF0000      ;PendSV中断和系统节拍中断

NVIC_PENDSVSET    EQU    0x10000000      ;触发软件中断的值

  PRESERVE8



  AREA    |.text|, CODE, READONLY

  THUMB

③OS_CPU_SR_Save和OS_CPU_SR_Restore是用于开关中断的汇编函数,通过给PRIMASK写1来关闭中断,写0来开启中断,这里也可以使用CPS指令来快速开关中断


OS_CPU_SR_Save

  MRS    R0, PRIMASK            ;读取PRIMASK到R0,R0为返回值 

  CPSID  I                ;PRIMASK=1,关中断(NMI和硬件FAULT可以响应)

  BX    LR                ;返回



OS_CPU_SR_Restore

  MSR    PRIMASK, R0            ;读取R0到PRIMASK中,R0为参数

  BX    LR                ;返回

④OSStartHighRdy是由OSStart()调用,用来开启多任务,如果多任务开启失败就会进入OSStartHang函数中


OSStartHighRdy

  LDR     R4, =NVIC_SYSPRI2        ;设置PendSV优先级

  LDR     R5, =NVIC_PENDSV_PRI

  STR     R5, [R4]

  MOV     R4, #0              ;设置PSP=0

  MSR     PSP, R4

  LDR     R4, =OSRunning          ;设置OSRunning=1

  MOV     R5, #1

  STRB    R5, [R4]

  ;切换到最高优先级的任务

  LDR     R4, =NVIC_INT_CTRL        ;R4=NVIC_INT_CTRL

  LDR     R5, =NVIC_PENDSVSET      ;R5=NVIC_PENDSVSET

  STR     R5, [R4]

  CPSIE   I                ;开启所有中断

OSStartHang

  B       OSStartHang            ;死循环


关键字:STM3  uCOS-II  系统移植 引用地址:STM32入门学习笔记之uCOS-II系统移植2

上一篇:STM32入门学习笔记之uCOS-II系统移植3
下一篇:浅析STM32F0系列中断向量映射问题如何解决

推荐阅读最新更新时间:2026-03-25 11:24

ALINX技术教程:Zynq UltraScale+ MPSoC平台PYNQ 3.1.2系统移植指南
本教程于 Ubuntu22.04.1 虚拟机中搭建 Xilinx 2024.1 开发环境,并基于此环境从源码构建 PYNQ 3.1.2 工程,最终生成适用于 ALINX AXU15EGB 开发板的 PYNQ 系统镜像。 Zynq US+ oC + 10G 光纤 开发板AXU15EGB AXU15EGB 开发板: www.alinx.com/detail/261 资源链接: https://pan.baidu.com/s/1J1KnN_z404Skze42CUj7gQ 提取码: in8s 环境配置 提示: ubuntu、vis 和 vivo 安装的部分可以参考 ALINX 的教程文档《coue_s0
[嵌入式]
ALINX技术教程:Zynq UltraScale+ MPSoC平台PYNQ 3.1.2<font color='red'>系统移植</font>指南
基于STM32+CS创世 SD NAND(贴片SD卡)完成FATFS文件系统移植与测试(下篇)
四、移植FATFS文件系统 前面第3章,完成了SD NAND的驱动代码编写,这一章节实现FATFS文件的移植。 4.1 FATFS文件系统介绍 (1)介绍 FatFs 是一种完全免费开源的 FAT 文件系统模块,专门为小型的嵌入式系统而设计。它完全用标准C 语言编写,所以具有良好的硬件平台独立性,可以移植到 8051、 PIC、 AVR、 SH、 Z80、 H8、 ARM 等系列单片机上而只需做简单的修改。它支持 FATl2、 FATl6 和 FAT32,支持多个存储媒介;有独立的缓冲区,可以对多个文件进行读/写,并特别对 8 位单片机和 16 位单片机做了优化。 (2)特点 【1】Windows兼容的FAT文件系统 【2
[单片机]
基于STM32+CS创世 SD NAND(贴片SD卡)完成FATFS文件<font color='red'>系统移植</font>与测试(下篇)
Linux系统移植开发篇1:系统移植前说明及源码编译
本文章为《STM32MP157 Linux系统移植开发篇》系列中的一篇,笔者使用的开发平台为华清远见FS-MP1A开发板(STM32MP157开发板)。stm32mp157是ARM双核,2个A7核,1个M4核,A7核上可以跑Linux操作系统,M4核上可以跑FreeRTOS、RT-Thread等实时操作系统,STM32MP157开发板所以既可以学嵌入式linux,也可以学stm32单片机。 针对FS-MP1A开发板,除了Linux系统移植篇外,还包括其他多系列教程,包括Cortex-A7开发篇、Cortex-M4开发篇、扩展板驱动移植篇、Linux应用开发篇、FreeRTOS系统移植篇、Linux驱动开发篇、硬件设计篇、人工智
[单片机]
Linux<font color='red'>系统移植</font>开发篇1:<font color='red'>系统移植</font>前说明及源码编译
基于STM32MP157的Linux操作系统移植 —Trusted Firmware-A移植
嵌入式高速发展的今天,大量的嵌入式设备使用了arm为核心的芯片。我们会接触到越来越多的嵌入式设备,一个问题油然而生:数量如此巨大的嵌入式设备的安全性如何?目前针对嵌入式安全的技术和标准可谓千姿百态,除了必要的硬件安全技术,与之配套的安全软件也是必不可少的一部分。我们今天要介绍的是基于arm的可信固件Trusted Firmware-A,简称TF-A。它是一个开源软件,运行在一个硬件隔离的安全环境中并提供安全服务。 实验目的 完成TF-A的基本功能实现TF-A引导u-boot启动。 实验平台 华清远见开发环境,FS-MP1A平台 实验步骤 本实验基于tf-a-stm32mp-2.2版本,然后添加意法半导体提供的补丁文件。 导入代
[单片机]
s3c2440上linux-2.6.28.7内核配置及Qtopia文件系统移植和搭建
一、linux-2.6.28.7内核配置过程 1,新编译好的内核下载到FLASH中,启动linux以后报错,说找不到rootfs入口,解决方法是内核编译选项中选中“file system- yaffs2 fs support”,以及 let yaffs to its ecc . 2,烧写好内核及文件系统后,发现无论怎么点击触摸屏,系统都没有反应,可是开发板自带的kernel烧上去后就没有问题,所以,判断问题还是出于内核配置的问题。解决办法是内核配置“device drivers- input device- (*)touchscreen interface并且(*)touchscreen event”, 以及“device
[单片机]
Linux 文件系统移植全解密
简介:最近不断有人跟我说起静态映射的问题,今天就以linux-2.6.35内核源码为例说明一下IO静态映射的过程(ARM平台)。 //init/main.c asmlinkage void __init start_kernel(void){ ... setup_arch(&command_line); ... } //arch/arm/kernel/setup.c void __init setup_arch(char **cmdline_p){ ... paging_init(mdesc); ... } //arch/arm/mm/mmu.c void __init paging_init(struct machi
[单片机]
#嵌入式Linux最小系统移植# mini2440内核4.0.8移植记录
/*移植内核Linux4.0.8*/ 1.机器码匹配(linux/arch/arm/tools/mach-types) # machine_is_xxx CONFIG_xxxx MACH_TYPE_xxx number mini2440 MACH_MINI2440 MINI2440 1999 oluan2440 MACH_OLUAN2440 OLUAN2440 1999 MACH_TYPE_xxx 与MACHINE_START中匹配 CONFIG_xxxx 与linux/arch/arm/mach-s3c244
[单片机]
STM32F103_SD卡FatFs文件系统移植
一、下载解压官方源码压缩包 1 添加下列文件至项目列表并包含头文件。 二、配置函数接口 主要有以下几个文件 : diskio.c ffconf.h 1 官方源码已经有写好的代码框架,只需要添加ATA(指SD卡)部分即可 (1) 获取设备状态部分,由于SD卡起始状态特别多,此处默认检测到SD卡设备。 case ATA : //默认设备检测成功 status &= ~STA_NOINIT; break; (2) 设备初始化部分,调用sdio.c中的初始化函数即可。 case ATA : if(SD_Init()==SD_OK) {
[单片机]
STM32F103_SD卡FatFs文件<font color='red'>系统移植</font>
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved