1个回答
展开全部
任务中调用函数,调用处的地址和一些变量自然要保存在任务堆栈中,每个任务的堆栈地址和大小是用OS_STK变量定义的,堆栈中的内容是在任务初始化时一起初始化的,初始化函数是:
OS_STK *OSTaskStkInit(void (*task)(void *pd), void *pdata, OS_STK *ptos, unsigned int opt);
这个函数是移植uCos时要自己完成的函数,也是整个移植过程中最难理解的函数,理解了这个函数,移植应该就没有问题了。
OS_STK *OSTaskStkInit(void (*task)(void *pd), void *pdata, OS_STK *ptos, unsigned int opt);
这个函数是移植uCos时要自己完成的函数,也是整个移植过程中最难理解的函数,理解了这个函数,移植应该就没有问题了。
追问
那当任务挂起时,该任务的堆栈中只保存了CPU相关寄存器的值,而没有上面所说的函数调用时的须保存到堆栈的地址和变量?
追答
如果任务不是在子函数中挂起的,任务堆栈中是不会有子函数的返回地址。如果任务是在子函数中挂起的,应该能从任务堆栈中看到子函数返回的地址。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询