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

发布时间:2024-05-17  

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            ;死循环


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>