基于MSP430F5529的μc/os嵌入式实时操作系统移植

本文详细介绍了如何将μc/os-II实时操作系统移植到MSP430F5529处理器上,包括移植条件、移植工作内容、OS_CPU_A.ASM和os_cpu_c.c文件的改写,以及中断处理流程。重点讨论了MSP430的寄存器保存、中断管理和堆栈生长方向,同时提到了os_cfg.h文件的配置用于裁剪系统功能。
摘要由CSDN通过智能技术生成

μc/os移植的条件

uCOS II的移植需要满足以下要求:
  1)处理器的C编译器可以产生可重入代码:可以使用C调用进入和退出Critical Code(临界区代码);
  2)处理器必须支持硬件中断,并且需要一个定时中断源;
  3)处理器需能容纳一定数据的硬件堆栈;
  4)处理器需有能在CPU寄存器与内存和堆栈交换数据的指令。

移植需要完成的工作

CPU的接口部分(Ports)–需要移植的代码部分
汇编文件(OS_CPU_A.ASM)、处理器相关C文件(OS_CPU.H、OS_CPU_C.C)中相关函数和变量的声明定义

OS_CPU_A.ASM文件改写

OSStartHighRdy()    //OS启动时调用,加载用户最高优先级的任务
OSCtxSw()       //任务级调度
OSIntCtxSw()      //中断级调度
OSTickISR()       //时钟中断响应,将检测到延时结束的任务加入就绪队列,

    .cdecls C, LIST, "msp430.h"

;用户钩子,对应os_cpu_c.c中的HOOK函数
    .ref     OSIntExit
    .ref     OSIntNesting
    .ref     OSISRStkPtr
    .ref     OSPrioCur
    .ref     OSPrioHighRdy
    .ref     OSRunning
    .ref     OSTCBCur
    .ref     OSTCBHighRdy
    .ref     OSTaskSwHook
    .ref     OSTimeTick
;全局量
    .global  OSCtxSw
    .global  OSCPURestoreSR
    .global  OSCPUSaveSR
    .global  OSIntCtxSw
    .global  OSStartHighRdy
    .global  OSTickISR
;中断使能操作之前保存SR,恢复中断使能时CPU状态不变
    .asmfunc            ;保存SR寄存器
OSCPUSaveSR:
    MOV.W       SR, R12
    DINT
    NOP
    RETA
    .endasmfunc

    .asmfunc            ;恢复SR寄存器,保持CPU状态
OSCPURestoreSR:
    MOV.W       R12, SR
    NOP
    RETA
    .endasmfunc

    .asmfunc
;OS初始化后,准备运行时调用
;准备运行的最高优先级的任务。任务就绪表第一个
;被OSStart()调用
OSStartHighRdy:
    CALLA       #OSTaskSwHook

    MOV.B       #1, &OSRunning          ; 内核运行标志

    MOVX.A      SP, &OSISRStkPtr        ; 保存中断堆栈,系统堆栈

    MOVX.A      &OSTCBHighRdy, R13      ; 将最高优先级任务准备
    MOVX.A      @R13, SP                ;将SP指向OSTCBHighRdy,即任务堆栈

    POPM.A      #12, R15


    RETI                                ; 模拟中断,中断退出应执行的内容在OSISRStkPtr中
    .endasmfunc

    .asmfunc
;任务级上下文切换
OSCtxSw:
    POP.W       R12                     ;CALLA调用,当前PC地址被压入系统栈
    POP.W       R13                     ;这里使用的是扩展内存地址,地址长度为20位

    PUSH.W      R12                     ;因此压栈的写法有变化

    RLAM.A      #4, R13                 
    RLAM.A      #4, R13
    RLAM.A      #4, R13
    MOVX.W      SR,  R12
    ADDX.A      R13, R12
    PUSH
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值