问题一:
可能的原因及解决办法:
(1)在machdep.c中定义这两个系统调用实现函数所致,需要在task.c文件中定义这两个实现函数,并且需要定义在get_task()函数之后(或者提前声明get_task()函数)
问题二:
可能的原因及解决办法:
(1)g_load_avg全局变量需要定义在task.c文件中
问题三:
可能的原因及解决办法:
(1)
删除“#”,make clean之后再make run即可。
问题四:
QEMU界面不断重启(界面循环)
可能的原因及解决办法:
内核出错,可能是调度器算法出错或者定时器ISR出错,需要调整正确。
问题五:
一个线程结束之后再开始下一个进程。
可能的原因及解决办法:
直接原因:调度器或者ISR错误。
根本原因:
(1)ISR函数里面添加内容的位置错误,应该添加到下图的else块里。
(2)fixedpt类型使用错误,不可以使用普通的+ - * /运算,需要使用fixedpt的专有运算符。
(3)调度器或者ISR算法错误。
问题六:
出现下面的界面,但是不进入图形界面
可能的原因及解决办法:
main.c的主函数里需要等待线程结束task_wait函数。
问题七:
图形界面的绘图区域交叉,或者部分绘图不完整。
可能的原因及解决办法
(1)没有创建栈空间或者创建了栈空间但是传入堆栈的参数错误
如图,把右边线程的堆栈指针误传入了控制线程。
问题八:
如何结束控制进程?
解决办法:
(1)先定义两个wait变量,设定初值(非0)
(2)设置等待被控制线程结束,task_wait()函数,并将返回值赋值给wait变量
(3)在控制线程函数的 “等待输入循环” 中,判断wait变量是否均为0,均为0则被控制的两个线程皆已经退出。
PS: 如果对你有帮助的话,帮忙点个赞吧!有任何问题欢迎在评论区留言!