os_stack.c

来自「uCOS-II在TMS320F2812上的移植」· C语言 代码 · 共 74 行

C
74
字号
/*
    TI TMS320F2812用户堆栈处理
堆栈空间:0X0000~0X07FF
堆栈大小:2048 WORDS
堆栈分配:每个任务堆栈大小为256WORDS,0X0000~0X06FF为任务堆栈,0X0700~0X07FF为中断堆栈
    0X0000-0X00FF:任务堆栈号0
    0X0100-0X01FF:任务堆栈号1
    0X0200-0X02FF:任务堆栈号2
    0X0300-0X03FF:任务堆栈号3
    0X0400-0X04FF:任务堆栈号4
    0X0500-0X05FF:任务堆栈号5
    0X0600-0X06FF:任务堆栈号6
*/
#include "..\ucosii\ucos_ii.h"
INT8U OSStackState;
INT16U const OSStackPtrTbl[7] = 
{
	0x0000,0x0100,0x0200,0x0300,0x0400,0x0500,0x0600
};
INT16U const OSStackSizeTbl[7] = 
{
	0x0100,0x0100,0x0100,0x0100,0x0100,0x0100,0x0100
};

void OSStackInit(void)
{
	OSStackState = 0;
}

/*
  堆栈分配函数
  参数:
      StackNo---堆栈号
  返回:
      (1)0XFFFF---堆栈分配不成功
      (2)堆栈指针
*/
OS_STK *OSStackAlloc(INT8U StackNo)
{
	INT8U mk;
	if(StackNo>6)
	{
		return (OS_STK *)0xffff;
    }
   mk = 1<<StackNo;
   if(OSStackState & mk)
   {
		return (OS_STK *)0xffff;   	
   }
   OSStackState |= mk;
   return (OS_STK *)OSStackPtrTbl[StackNo];
}
/*
    得到堆栈大小函数
*/
INT16U OSStackSize(INT8U StackNo)
{
	if(StackNo<7)
	{
		return OSStackSizeTbl[StackNo];
   }
   return 0;
}
/*
  堆栈释放函数
*/
void OSStackFree(INT8U StackNo)
{
	if(StackNo<7)
	{
      OSStackState &= ~(1<<StackNo);
   }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?