本帖最后由 yewuyi 于 2009-11-3 16:48 编辑
感觉很失败,完全看不懂stm8_interrupt_vector.c这个文件是怎么‘潜伏工作’的。
第一个看不懂:typedef void @far (*interrupt_handler_t)(void);
看这个typedef有点晕,是把void-->@far (*interrupt_handler_t)(void)还是把void @far -->(*interrupt_handler_t)(void) ?这个typedef有什么意义吗?
第二个看不懂:
struct interrupt_vector {
unsigned char interrupt_instruction;
interrupt_handler_t interrupt_handler;
};
interrupt_instruction好象找不到在哪里用到了?!似乎是个空定义?空定义还定义它干什么?
interrupt_handler_t interrupt_handler;又是什么东西?interrupt_handler_t本身定义就看不到,用它做后面的interrupt_handler类型定义就更加弄不清了。而且interrupt_handler似乎也看不到那用到了,好象也是空白定义。
第三个看不懂:
@far @interrupt void NonHandledInterrupt (void)
{
/* in order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction
*/
return;
}
既然他是定义了一个函数,实际写自己的代码的时候,好象也从来不需要调用这个函数,这个函数内部除了一句return也什么也没有,它有什么用呢?
第四个看不懂:extern void _stext();
从extern看,_stext()是在别的地方定义了,但从哪里可以看到它呢?从注解看,似乎是复位入口有关,可能就是一条跳转指令什么的,但什么也看不到就没必要让我们看嘛。
第五个看不懂:struct interrupt_vector const _vectab[] = {
{0x82, (interrupt_handler_t)_stext}, /* reset */
{0x82, NonHandledInterrupt}, /* trap */
{0x82, NonHandledInterrupt}, /* irq0 */
{0x82, NonHandledInterrupt}, /* irq1 */
{0x82, NonHandledInterrupt}, /* irq2 */
{0x82, NonHandledInterrupt}, /* irq3 */
{0x82, NonHandledInterrupt}, /* irq4 */
{0x82, NonHandledInterrupt}, /* irq5 */
{0x82, NonHandledInterrupt}, /* irq6 */
{0x82, NonHandledInterrupt}, /* irq7 */
{0x82, NonHandledInterrupt}, /* irq8 */
{0x82, NonHandledInterrupt}, /* irq9 */
{0x82, NonHandledInterrupt}, /* irq10 */
{0x82, NonHandledInterrupt}, /* irq11 */
{0x82, NonHandledInterrupt}, /* irq12 */
{0x82, NonHandledInterrupt}, /* irq13 */
{0x82, NonHandledInterrupt}, /* irq14 */
{0x82, NonHandledInterrupt}, /* irq15 */
{0x82, NonHandledInterrupt}, /* irq16 */
{0x82, NonHandledInterrupt}, /* irq17 */
{0x82, NonHandledInterrupt}, /* irq18 */
{0x82, NonHandledInterrupt}, /* irq19 */
{0x82, NonHandledInterrupt}, /* irq20 */
{0x82, NonHandledInterrupt}, /* irq21 */
{0x82, NonHandledInterrupt}, /* irq22 */
{0x82, NonHandledInterrupt}, /* irq23 */
{0x82, NonHandledInterrupt}, /* irq24 */
{0x82, NonHandledInterrupt}, /* irq25 */
{0x82, NonHandledInterrupt}, /* irq26 */
{0x82, NonHandledInterrupt}, /* irq27 */
{0x82, NonHandledInterrupt}, /* irq28 */
{0x82, NonHandledInterrupt}, /* irq29 */
};
0x82也不知道是什么天外来物?(interrupt_handler_t)_stext指的是何含义?NonHandledInterrupt又是什么的干活?
第六个不懂:从这个文件到底如何去理解STM8的中断是如何定位和工作的?!这些问题零零碎碎的,到底怎么把它系统性的弄清楚?! |