微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > μC/OS-Ⅱ在ATmega128上的移植Step by Step

μC/OS-Ⅱ在ATmega128上的移植Step by Step

时间:10-08 来源:互联网 点击:

ega128\includes.h //包含头文件

/*

*************************************************************************

* 九个接口函数(暂未使用)

*************************************************************************

*/

#if OS_CPU_HOOKS_EN > 0 OS_VERSION > 203

void OSInitHookBegin (void)

{

}

#endif

... ...

/*

*************************************************************************

* OSTaskStkInit()

*************************************************************************

*/

OS_STK *OSTaskStkInit (void (*task)(void *pd), void *p_arg, OS_STK *ptos,

INT16U opt)

{

INT8U *psoft_stk;

INT8U *phard_stk; //为操作AVR单片机软、硬件堆栈而建立的临时指针

INT16U tmp;

opt = opt; //'opt'未使用,此处可防止编译器的警告

psoft_stk = (INT8U *)ptos; // 载入堆栈指针

phard_stk = (INT8U *)ptos

- OS_TASK_SOFT_STK_SIZE // 任务栈栈空间的大小

L1

+ OS_TASK_HARD_STK_SIZE; // 系统返回的堆栈(硬件堆栈) L2

tmp = *(INT16U const *)task;

*phard_stk-- = (INT8U)tmp;

*phard_stk-- = (INT8U)(tmp >> 8); //把任务入口地址放入硬件堆栈

//******************通用寄存器入栈**************************/

*psoft_stk-- = (INT8U)0x00; // R0 = 0x00 L3

*psoft_stk-- = (INT8U)0x01; // R1 = 0x01

*psoft_stk-- = (INT8U)0x02; // R2 = 0x02

*psoft_stk-- = (INT8U)0x03; // R3 = 0x03

*psoft_stk-- = (INT8U)0x04; // R4 = 0x04

*psoft_stk-- = (INT8U)0x05; // R5 = 0x05

*psoft_stk-- = (INT8U)0x06; // R6 = 0x06

*psoft_stk-- = (INT8U)0x07; // R7 = 0x07

*psoft_stk-- = (INT8U)0x08; // R8 = 0x08

*psoft_stk-- = (INT8U)0x09; // R9 = 0x09

*psoft_stk-- = (INT8U)0x10; // R10 = 0x10

*psoft_stk-- = (INT8U)0x11; // R11 = 0x11

*psoft_stk-- = (INT8U)0x12; // R12 = 0x12

*psoft_stk-- = (INT8U)0x13; // R13 = 0x13

*phard_stk-- = (INT8U)tmp;

*phard_stk-- = (INT8U)(tmp >> 8); //把任务入口地址放入硬件堆栈

//***********R16、R17的位置中放置向任务传递的参数*****************/

tmp = (INT16U)p_arg;

*psoft_stk-- = (INT8U)tmp;

*psoft_stk-- = (INT8U)(tmp >> 8);

*psoft_stk-- = (INT8U)0x18; // R18 = 0x18

*psoft_stk-- = (INT8U)0x19; // R19 = 0x19

*psoft_stk-- = (INT8U)0x20; // R20 = 0x20

*psoft_stk-- = (INT8U)0x21; // R21 = 0x21

*psoft_stk-- = (INT8U)0x22; // R22 =

0x22

*psoft_stk-- = (INT8U)0x23; // R23 = 0x23

*psoft_stk-- = (INT8U)0x24; // R24 =

0x24

*psoft_stk-- = (INT8U)0x25; // R25 = 0x25

*psoft_stk-- = (INT8U)0x26; // R26 = 0x26

*psoft_stk-- = (INT8U)0x27; // R27 = 0x27

/***R28、R29用作软件堆栈的指针储存在任务控制块OS_TCB的OSTCBStkPtr中***/

*psoft_stk-- = (INT8U)0x30; // R30 = 0x30

*psoft_stk-- = (INT8U)0x31; // R31 = 0x31L2

*psoft_stk-- = (INT8U)0x80; // SREG = 0x80,开全局中

tmp = (INT16U)phard_stk;

*psoft_stk-- = (INT8U)(tmp >> 8); // SPH

*psoft_stk = (INT8U) tmp; // SPL

return ((void *)psoft_stk);

}

接下去的工作便是测试移植的代码,具体的测试工作,请参考邵贝贝译的《嵌入式实时操作系统μC/OS-II(第2版)》。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top