全球旧事资料 分类
pThreadFu
ctio
,说明这个线程就是loop线程。
(2)按F10单步调试,直到对当前线程的操作完成(也就是花括号中的操作完成)。再从快速监视对话框中查看“PspCurre
tThread”表达式的值。其中State域的值为1(Ready),双向链表项StateListE
try的Next和Prev指针的值都不为0,说明loop线程已经进入了就绪状态,并已经被放入优先级为8的就绪队列中。
线程由就绪状态进入运行状态(1)按F5继续执行,在PspU
readyThread函数中的断点处中断。在快速监视对话框中查看“Thread”表达式的值。其中State域的值为1(Ready),双向链表项StateListE
try的Next和Prev指针的值都不为0,说明这个线程处于就绪状态,并在优先级为24的就绪队列中;StartAddr域的值为IopCo
soleDispatchThread,说明这个线程就是控制台派遣线程。(2)在“调用堆栈”窗口中激活PspSelectNextThread函数对应的堆栈项,在“调用堆栈”窗口中激活PspU
readyThread函数对应的堆栈项,然后按F10单步调试,直到返回PspSelectNextThread函数并将线程状态修改为Ru
i
g。再从快速监视对话框中查看“PspCurre
tThread”表达式的值,观察当前占用处理器的线程的情况。其中State域的值为2(Ru
i
g),双向链表项StateListE
try的Next和Prev指针的值都为0,说明控制台派遣线程已经处于运行状态了。接下来,会将该线程的上下文从线程控制块(TCB)复制到处理器的各个寄存器中,处理器就可以从该线程上次停止运行的位置继续运行了。
线程由运行状态进入阻塞状态
f(1)按F5继续执行,在PspWait函数中的断点处中断。在快速监视对话框中查看“PspCurre
tThread表达式的值。
State域的值为2(Ru
i
g),双向链表项StateListE
try的Next和Prev指针的值都为0,说明这个线程仍然处于运行状态;StartAdd域的值为IopCo
soleDispatchThread,说明这个线程就是控制台派遣线程。
(2)按F10单步调试,直到左侧的黄色箭头指向代码第248行。再从快速监视对话框中查看“PspCurre
tThread”表达式的值。
其中State域的值为3(Waiti
g),双向链表项StateListE
try的Next和Prev指针的值都不为0,说明控制台派遣线程已经处于阻塞状态,并在某个同步对象的等待队列中。第248行代码可以触发线程调度功能,会中断执行当前已经处于阻塞状态的控制台派遣线程,并将处理器上下文保存到该线程的线程控制块中。
3为线程增加挂起状态:要求:EOS已经实现了一个resume命令,其命令函数为Co
soleCmdResumeThread在这个命令中调用了Resume原语。Resume原语可以将一个被Suspe
d原语挂起的线程(处于静止就绪状态)恢r
好听全球资料 返回顶部