|
发表于 2009-11-7 11:13:49
|
显示全部楼层
我最近在写一个简单的任务调度的东西
-------------------------------------
OS建议用GCC,或IAR.
一般任务上下文初始化,需要函数地址。
个人代码:GCC
typedef struct
{
uint8 _reserved;
uint8 _r0;
uint8 _r1;
uint8 _r2;
uint8 _r3;
uint8 _r4;
uint8 _r5;
uint8 _r6;
uint8 _r7;
uint8 _r8;
uint8 _r9;
uint8 _r10;
uint8 _r11;
uint8 _r12;
uint8 _r13;
uint8 _r14;
uint8 _r15;
uint8 _r16;
uint8 _r17;
uint8 _r18;
uint8 _r19;
uint8 _r20;
uint8 _r21;
uint8 _r22;
uint8 _r23;
uint8 _r24;
uint8 _r25;
uint8 _r26;
uint8 _r27;
uint8 _r28;
uint8 _r29;
uint8 _r30;
uint8 _sreg;
uint8 _r31;
uint8 _pch;
uint8 _pcl;
}ctx_sp_t;
typedef ctx_sp_t TContext;
指向上下文指针的指针 函数指针,指向任务处理函数 指向任务堆栈空间
void ctx_init( TContext **Context , TTaskProc *TaskProc , void *Stack1 )
{
ctx_sp_t *ctx_sp;
ctx_sp=(ctx_sp_t *)Stack1 - 1;
ctx_sp->_pcl = (uint16)TaskProc%256;
ctx_sp->_pch = (uint16)TaskProc/256;
ctx_sp->_sreg = 0;
ctx_sp->_r31 = 0x31;
ctx_sp->_r30 = 0x30;
ctx_sp->_r29 = 0x29;
ctx_sp->_r28 = 0x28;
ctx_sp->_r27 = 0x27;
ctx_sp->_r26 = 0x26;
ctx_sp->_r25 = 0x25;
ctx_sp->_r24 = 0x24;
ctx_sp->_r23 = 0x23;
ctx_sp->_r22 = 0x22;
ctx_sp->_r21 = 0x21;
ctx_sp->_r20 = 0x20;
ctx_sp->_r19 = 0x19;
ctx_sp->_r18 = 0x18;
ctx_sp->_r17 = 0x17;
ctx_sp->_r16 = 0x16;
ctx_sp->_r15 = 0x15;
ctx_sp->_r14 = 0x14;
ctx_sp->_r13 = 0x13;
ctx_sp->_r12 = 0x12;
ctx_sp->_r11 = 0x11;
ctx_sp->_r10 = 0x10;
ctx_sp->_r9 = 0x09;
ctx_sp->_r8 = 0x08;
ctx_sp->_r7 = 0x07;
ctx_sp->_r6 = 0x06;
ctx_sp->_r5 = 0x05;
ctx_sp->_r4 = 0x04;
ctx_sp->_r3 = 0x03;
ctx_sp->_r2 = 0x02;
ctx_sp->_r1 = 0x00;
ctx_sp->_r0 = 0x00;
*Context=ctx_sp;
} |
|