这篇文章专门记录一下编写代码过程中遇到的各种问题。
(以后改代码切忌一次改的太多,可以改一点在板子上测试一点,成功了再继续进行!!!!!!!!!)
2019.01.05——
1. c语言和汇编语言的互相调用,变量的相互引用问题
2. 链接脚本中的变量与c语言和汇编语言的互相调用问题
3. 代码的下载地址、链接地址、运行地址的区别
4. 基于汇编语言,需要重新审视c语言的指针
2019.01.06——
执行任务切换时,仿照https://blog.youkuaiyun.com/jgw2008/article/category/6215030,姜广伟的文章就可以执行成功,他的实现主要是固定了地址;
我用c语言定义的变量,就不可以执行成功,我想了想,这里主要的区别应该是,上面的是直接操作地址,而我是用的c语言编译器给分配的地址,两者应该会存在差别,具体原因不清楚,还是应该多看看汇编与c语言的代码对照,可以写一个简单的c代码,然后编译成汇编代码,两者对比一下。
2019.01.09——
执行任务切换的时候,task_struct结构体定义为数组形式 struct task_struct task[64]; 取其中的[0]、[1],任务切换不成功,
在结构体的初始值一样的情况下,定义为 struct task_struct task1; struct task_struct task2; 就可以执行成功,原因不解,先记录下来。
2019.01.10——
今天在调试任务切换的时候,发现给struct task_struct 结构体指针赋绝对地址(如0x00000ff4)的时候,不能写成强转成(struct task_struct *)的形式,否则会执行失败。
######不同.bin的链接脚本中的链接起始地址不要相同,应该和他的运行地址保持一样,因为之前写成一样导致程序运行会出现意想不到的问题(当时是任务切换时,一个任务的lcd图案不能显示)