讨论一下,如果堆栈初始化太小了,程序占用超过初始化值时会发生什么 样的情况呢
堆栈相对于来说每一个任务来说就像是他的一个仓库,而任务运行的关键因素都保存在这个仓库中。每一个任务都有这样一个仓库。每一次任务决定放弃CPU时都会把自己的重要信息先保存到自己的仓库中。以便于下次再次获得CPU使用权时使用。如果堆栈较小,也就是仓库容量不足,就会出现两种可能,一个是自己重要的信息无法全部保存,另外一种情况下占用了别的任务的仓库。第一种情况会造成任务再次运行时得不到全部的资源而无**常运行。第二种情况会修改别的任务的重要信息而造成别的任务无**常运行。(在这里解释一下,由于UCOS不想Linux一样使用虚拟地址,UCOS使用的是实地址模式,无法进行地址保护)当任务无**常运行时就会造成任务之间的相互干扰。最终导致系统的崩溃。所以堆栈的分配就至关重要。这就好比你当老板结果给员工的待遇却很低又想让你的员工好好干活。结果会怎样。轻则员工**,重则扰乱军心公司倒闭。呵呵! 在使用系统时,任务本身的程序没有问题而当运行到某一点占用堆栈很大时发生了地址异常,那么可能是你的任务堆栈溢出。
|