继续10楼的帖子:
如果结合看第2个问题和第5个问题就容易了,第5个问题是定义了一个结构数组,这个结构就是第2个问题中定义的结构interrupt_vector,这里定义结构数组的同时,对这个结构数组进行了初始化,以后的每行都是数组中的一个分量。
就以数组中的第2行为例:
{0x82, NonHandledInterrupt}, /* trap */
0x82对应结构的第1个分量unsigned char interrupt_instruction,这正是你的第2个问题中找不到在哪里用到的东西。
NonHandledInterrupt对应结构的第2个分量interrupt_handler_t interrupt_handler,而这个分量的类型正好是你的第1个问题中定义的指针类型,它是一个指向函数的指针,这里把这个指针初始化为指向NonHandledInterrupt函数,即你的第3个问题中提到的函数。
你的第3个问题中提到的函数,它内部除了一句return也什么也没有,这是为了在你没有定义它的内容时的一个默认动作,通常你需要自己定义每个处理函数的动作,然后在初始化数组_vectab[]的时候,用自己的函数名替换掉那个默认的函数NonHandledInterrupt。
最后关于你的第4个问题:_stext()似乎是一个汇编函数,是由编译器提供的,它的目的是在芯片复位后至进入你的main()之前,编译器需要进行一些预处理动作,如初始化某些编译器需要用到的变量等,具体有哪些内容,我没有看过,不太清楚。你可以不必理会它在哪里,它做什么。
struct { unsigned char interrupt_instruction; interrupt_handler_t interrupt_handler; }; |