STM32移植ucos‖(一)

从官网上下载的就只有这几个文件,

appnotes 就是ucos‖的一些说明文件,移植不用看它。

licensing是ucos‖的证书,,即使用许可证

software是应用软件的意思,我们需要的的文件夹是ucos‖下面的ports(端口,接口我的感觉是硬件和软件的接口)这里面那我们需要进行改变!和source(源代码)。

BSP(Board Support Package),BSP是板级支持包,是介于主板硬件和操作系统之间的一层,应该说是属于操作系统的一部分,主要目的是为了支持操作系统,使之能够更好的运行于硬件主板。

一:os——cpu.h

Target  board 核心板了。


经典的图啊,,所有的东西都在这里啊,,,,

relationship between modules  //各个模块之间的关系。

总的来说//

os_cpu.h 主要定义了数据类型,全局变量,临界段,栈生长方向,任务切换宏,开中断,关中断,任务管理函数(任务切换函数,中断任务切换函数,系统时钟切换函数)。

二:

os_cpu_c.c文件

我们需要写9个钩子函数和1个任务堆栈结构初始化函数

钩子函数:指那些插入到某些函数中为扩展这些函数功能的函数,一般的,钩子函数为第三方开发人员提供扩充软件功能的入口点,为了扩展系统功能,uc/cos2中提供了大量的钩子函数,用户不需要修改ucos/2内核代码程序,而只需要向钩子函数添加代码就可以扩充uc/cos2的功能

钩子函数必须声明,但不是必须定义的,只是为了扩展你的系统功能而已。。

可以自己写一写任务堆栈函数,这样子对你的C语言和数据结构肯定好了,终于明白为什么只学习这些东西而不学习算法,因为这两者 是算法的基础,而算法是程序的灵魂。一定要敲数据结构这些代码。可能刚开始看不懂,没关系,一点一点的看,很快你就能看懂了。


寄存器组

1.R0-R12为通用寄存器,用于数据操作,但是注意:绝大多数16位Thumb指令只能访问R0-R7,而32位Thumb-2指令可以访问所有寄存器。

2两个堆栈指针R(13)。

MSP(主堆栈指针)复位后默认使用的堆栈指针,用于操作系统内核以及异常处理例程(包括中断服务例程)。

进程堆栈指针(PSP):由用户的应用程序代码使用.

3  R14连接寄存器(LR)

当调用一个子程序时,由R14存储返回地址

不像大多数其他处理器,ARM为了减少访问内存的次数

ARM中LR存储的是发生异常时下一条将要执行的指令(也有可能是发生异常时的当前指令地址,比如发生预取中止异常),IR存储的是下一条将要执行的指令,有什么区别?

先看定义:

(1)PC是程序计数器,存储将要执行的指令地址

(2)LR是链接寄存器,是ARM处理器中一个有特殊用途的寄存器当调用函数时,返回地址即PC的值被保存到LR中(mov lr,pc)也就是当时存的地址。

(3)IR是指令寄存器,用来保存当前正在执行的一条指令。当执行一条指令时,先把它从内存取到数据寄存器(DR)中,然后再传送至IR。

区别:

(1)IR是微体系结构概念(什么是微体系结构?就是程序员看不到,但硬件中确实存在的硬件逻辑,只有系统设计者知道其存在。),而LR是程序员可见的寄存器。比如用gdb调试程序时,如果打印LR寄存器内容是可以看到其值的,但是打印IR是不可能的。

(2)LR是PC的备份,PC寄存器存的是将要执行的指令的地址;IR存的是将要送到ALU等部件执行的指令内容。

4.R15程序计数寄存器。  指向当前的程序地址。

5特殊功能寄存器  xPSR 记录ALU标志(0标志,进位标志,负数标志,溢出标志,)执行状态,以及当前正服务的中断号。

三     os_CPU_a.asm

这个文件主要包含了需要用汇编编写的代码。

声明了外部定义,声明了全局变量,改的原因是因为编译器的原因,我们需要将PUBLIC 改为EXPORT。

如将PUBLIC OS_SR_SAVE  改成 EXPORT OS_SR_SAVE 

还有一些代码段的东西。

CODE 是代码占用的空间,RO_data是READ Only 只读常量的大小,如const型,RW_data是(READ ,WRITE)初始化了的可读写变量的大小,ZI_data是没有初始化的可读写变量的大写

那么我们常常说的FALSH的空间就是CODE+RODATA+RWDATA.

程序运行的时候,芯片内部RAM使用的空间为RW DATA+ZI DATA.(可读可写的东西)。



debug system 跟踪系统   debug 调试信号  debug interface 调试接口   bus interconnect  总线互联网路     memory protection unit 存储器保护单元  instruction bus 指令中线

trace 跟踪信号 code memory 指令存储器   memory system and peripherals 存储器系统和外设  private peripherals 私有外设 optional 调试接口。

NVIC 中端控制器,ALU 算术逻辑但永远,Register bank 寄存器组 trace interface 跟踪系统 processor core system 处理器内核系统  instruction fetch unit取指大院

decoder :指令解码器

SVC(系统服务调用,简称系统调用) 

PendSV(可挂起系统调用)

IRQ全称为Interrupt Request,即是“中断请求”的意思,IRQ的作用就是在我们所用的电脑中,执行硬件中断请求的动作,比如我们需要读取硬盘中的一段数据时,当数据读取完毕,硬盘就通过IRQ来通知系统,相应的数据已经写到指定的内存中了。

NMI (Non Maskable Interrupt)——不可屏蔽中断(即CPU不能屏蔽)

无论状态寄存器中 IF 位的状态如何,CPU收到有效的NMI必须进行响应。







thread  :线程













  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值