各位兄台,我一直有个疑问,在ARM上运行uC/OS-II的时候,究竟有没有必要为每个任务设置堆栈,比如说,整个操作系统运行在SVC(管理态)和IRQ态,任务主要运行SVC态,那么每次任务切换时,数据被压入的地方应是SVC态下的堆栈(不考虑中断的话),任务被抢占、数据压栈后只需要一定空间存储当前堆栈指针SP即可(即被抢占任务的OSTCBStkPtr中),而不需要再为每个任务分配堆栈。之所以想到这个问题,是因为小弟以前搞51单片机的,在上面跑过uC,那时候是绝对需要每个任务一个堆栈的,该运行哪个任务就把它堆栈中的数据全部拷贝到系统堆栈,再出栈、中断返回指令即可,但我认为在ARM上没有必要这样,只要在初始化的时候把SVC模式下的堆栈设置足够大即可,没有必要设置OS_STK TaskStk[OSNTSKS][60]; 这类的任务堆栈了吧,不知我的看法是否正确,请高手指点一二,谢谢!
|