Small RTOS51把所有的内部自由RAM空间分配给当前任务。为了顺利进行堆栈变换,Small RTOS51定义了一个数组OSTaskStackBotton保存所有任务堆栈的顶端和底端位置。它的定义如下:
uint8 idata *OSTaskStackBotton[OS_MAX_TASKS+2]; //任务堆栈底部位置。
这三个图系统假设有三个任务。因为OSTaskStackBotton[x]为字节宽度,所以,当IDATA_RAM_SIZE为0x100时,OSTaskStackBotton[OS_MAX_TASKS+2]=0。
为什么要这样做呢?只是因为51系列单片机内部RAM小,通过中断切换任务要保存的内容我(最少17个;R0~R7,A,B,PSW,DPTR和PC),全局变量和局部变量还要使用一些,寄存器组还要占用一些。若不把所有空闲RAM分配给当前任务作堆栈,则堆栈几乎肯定溢出,故只好以时间换空间。。 |