您当前的位置:首页 > 技术风向标

μCOSII在基于Cortex-M3核的ARM处理器上的移植

时间:2015-03-30  来源:扁平线圈电感厂家  点击:

#define OS_TASK_SW()OS_SVC()
其中OS_SVC()之中包含了SVC指令,它可以由嵌入汇编的方式在C语言代码中进行定义,如下所示
_asm void OS_SVC(void){SVCOx00}
以上代码以嵌入汇编的方式定义了一个输入参数和返回值都为空的C语插件电感器言函数,嵌入汇编的格式在RealView编译器的说明文档中有详细的说明。
2.2.2 修改C语言文件OS_CPU.C
根据文献可知文件OS_CPU.C中有10个C语言函数需要编写,这些函数中唯一必要的函数是OSTaskStkInit,其他9个函数必须声明,但不一定要包含任何代码。为了简洁起见,本移植过程只编写了OSTaskStkInit,此函数的作用是把任务堆栈初始化成好像刚发生过中断一样。要初始化堆栈首先必须了解微处理器在中断发生前后的堆栈结构,根据文献易知微处理器在中断发生前后的堆栈结构,并且可知寄存器xPSR、PC、LR、R12、R3、R2、R绕行电感1、RO是中断时由硬件自动保存的。初始化时需要注意的地方是xPSR、PC和LR的初值,对于其他寄存器的初值没有特别的要求。xPSR比特位是Thumb状态位,初始化时须置1,否则执行代码时会引起一个称为Invstate的异常,这是因为内置Cortex—M3核的微处理器只支持Thumb和Thumb2指令集。堆栈中PC和LR须初始化为任务的入口地址值,这样才能在任务切换时跳转到正确的地方开始执行。此函数可以用以下代码来实现


2.2.3 修改汇编语言文件OS_CPU_A.ASM
汇编文件OS_CPU_A.ASM中需要编写的函数分别为OSStartHighRdy、OSCtxSw、OSIntCtxSw和OSTickISR。第一个函数的作用是启动多任务调度,此函数只在操作系统开始调度任务前执行一次,以后不再调用。按照文献中所述须将堆栈中的寄存器依次弹出,然后执行一条中断返回指令来开始第一个用户任务的调度。但基于Cortex—M3核的ARM处理器在执行中断返回指令时必须处于处理模式下,否则将会引起内存访问异常。当系统上电启动时或程序重置后,处理器会进入线程模式,而要在函数OSStartHighRdy中执行中断返回指令就首先需要进行模式转换,进入处理模式,而进行同步可控制模式转换的途径是超级用户调用,即通过SVC指令产生软件中断可转换到处理模式。实际上考虑到此函数只在启动多任务调度开始前被调用一次,并且第一次调度任务运行时任务堆栈中除了xPSR、PC和LR的初值以外,其他寄存器的初值无关紧要。因此可以简化该函数的编写,只须从第一个任务的堆栈中取出该任务的首地址,然后修改堆栈指针使其指向任务堆栈中内存地址最高处,即相当于抛弃任务堆栈中所有数据,最后根据取出的地址直接跳转到任务入口地址处开始执行。这样可以免去软件中断和模式切换,从而简化了对此函数的编写。需要说明的是在线艺电感抛弃任务堆栈中所用数据的同时也将xPSR的初值抛弃了,但这并不影响第一个任务投人运行,因为在跳转到第一个任务运行之前,指令流是在Thumb状态下正常执行的,xPSR已经有了确定的值。此函数代码如下所示

BX r0;直接跳转到第一个任务的入口地址
第二个汇编语言函数OSCtxSw是任务级的任务切换函数。若在任务执行过程中有一个比当前任务优先级更高的任务进入就绪态,μCOS—II内核就会启动OSCtxSw进行任务切换。该函数会保存当前任务状态,然后恢复那个优先级更高的任务状态,使之投入运行。前述的宏定义#defineOS_TASK_SW()OS_SVC()中的OS_SVC()包含了SVC软件中断指令,此中断的中断向量应该设为函数OSCtxSw的入口地址,即O差模电感器SCtxSw是SVC指令产生中断的中断服务程序,其源代码如下


由于微处理器在进入中断时按堆栈增长方向自动顺序保存了如下8个寄存器:xPSR、PC、LR、R12、R3、R2、R1、R0,因此在程序中只须保存另外8个寄存器,保存顺序可以随意,但注意弹栈时要按照先进后出的方式进行。按照本文开头的假定,任务总是运行在线程模式的特权方式下且总是使用堆栈指针PSP。而中断产生后,中断服务程序将处于处理模式一体电感下,并且默认使用的堆栈指针是MSP。因此在保存堆栈指针的时候需要保存的是当前任务的PSP。中断返回前新任务的堆栈指针需要恢复到PSP中。中断返回使用如下指令

大电流电感

有没有比sg3525功耗低的片子啊?功能和它要差不多sg3525太耗电了,工作100khz自己就耗电30ma,求一款低功耗的不是双极工艺的片子。消灭零回复。。。这是要做什么电源,30ma都这么在乎,说来听听。找到一款,bicom工艺的,功能和sg3525

[开关电源]稳压电源抗瞬间冲击的能力不如线性电假设输入端有强烈的瞬间冲击,即电压在极短的时间里猛烈变大,又迅速变回去,那么开关电源的输出是不是容易跟着变,而线性电源则不会呢?假设如此,有什么对策呢?在开关电源的输出那里并联电容?看你的设计参数了,我觉得反而前者的性能比较好,前提是你的电源设计带保护电路。 以及你的瞬间电压的大小。 xyz549040622 发表于 2017-5-26 12:44看你的设计参数了,我觉得反而前者的性能比较好,前提是你的电源设计带保护电路。 以及你的瞬间电压的大小。 ..

基于UC3842的电路,请大神解惑


这个电路7管脚没有电流,输出电压从37V一直缓慢往下降,管脚6的波形也不对,请大神们帮忙看看

没看懂
R5、C4改成1k、470p,再看下波形。R6改为100mR.

注塑加工厂


上一篇高速误码测试系统中的C8051F005运用

下一篇LED光柱显示器与PLC的接口技术


  
  温馨提示
网站首页 | 产品展示 | 科技前沿 | 行业资讯
本公司专业研发、设计、生产、销售贴片电感、插件电感、功率电感、大电流电感、扁平线圈电感、一体成型电感。
专业电感生产制造商,品质优异、交期快。
在线客服
热线电话