51单片机ucos ii任务切换汇编代码分析(1)

本文深入解析UCOS II操作系统中任务切换的汇编代码,重点分析OS_CPU_A.ASM文件中的汇编指令。内容涵盖汇编函数的声明、C语言与汇编交互的规则,以及Keil编译器对函数命名的处理,帮助读者掌握汇编代码在任务切换中的作用。
摘要由CSDN通过智能技术生成

ucos中任务切换函数都是汇编写的,属于“需移植”文件,

这个汇编文件名一般叫做:OS_CPU_A.ASM

要想看懂任务切换的原理,首先遇到的第一个难点,就是OS_CPU_A.ASM这个汇编文件里的一大堆不常见的汇编伪指令,搞懂这些指令是搞懂程序原理的第一步。

这篇文章先只分析这些汇编指令。


这个文件为ucos操作系统提供了4个API函数,分别是:

	PUBLIC OSStartHighRdy;函数功能:切换到已就绪的任务横纵优先级最高的那个任务中去
        PUBLIC OSCtxSw ;函数功能:一般的上下文切换,ContextSwitch,上下文切换又叫任务切换
        PUBLIC OSIntCtxSw ;函数功能:在中断中进行上下文切换
        PUBLIC OSTickISR ;函数功能:系统滴答

PULIC是汇编伪代码,表明所声明的函数可以被其他文件调用

首先来学习一个知识点,如何在汇编代码中写一个函数,才能使得这个函数能够被其他文件调用?不仅是加PUBLIC关键字这么简单,另外,我们还必须遵守一定的规范,可参考这篇文章,链接:点击打开链接

如果链接挂了,自行搜索关键字即可:《汇编函数与C函数的相互调用


这个文件OS_CPU_A.ASM除了供外部文件引用自己的函数外,也需要引用别的文件的函数和变量,例如: 

EXTRN IDATA (OSRunning) ;声明引用IDATA 区的变量OSRunning
MOV  R0,#LOW (OSRunning) ;在汇编中使用外部变量
EXTRN CODE  (_?OSTaskSwHook) ;声明引用外部函数(代码),OSTaskSwHook()
LCALL _?OSTaskSwHook ;在汇编中调用C语言函数OSTaskSwHook()

解释:函数OSTaskSwHook是用C语言写的,名字为OSTaskSwHook,但是在汇编中引用它的话,必须在前面加前缀才行,由前面链接里的文章我们知道,如果我们在汇编中引用的是可重入函数,那么必须在函数名前面加_?前缀才能被汇编文件识别到。为什么要加前缀?因为C51的C语言函数转换为汇编的时候,keil编译器会自动把C语言的函数名给改掉,当然keil所做的改动是有规律的,例如,我们声明的可重入的C函数,keil转成汇编后,会自动在原先的函数名前加前缀“_?” 。

keil会自动添加什么前缀,添加的前缀有什么规范?这些问题可以参考keil的帮助文件,依次点击菜单栏->help->uVision help,在打开的帮助文件中搜索“Segment Naming Conve

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值