我程序一直都是**的,在**中发现了几个问题: (1)WARNING L15: MULTIPLE CALL TO SEGMENT --函数重入 其实这个问题实际上就是函数重入问题,在操作系统的多线程很常见。例如在主循环里调用了一个函数,而在中断服务中,你又一次调用了同样的函数。这样当主循环运行到该函数中时,一旦产生中断,则在中断里又再次调用该函数!而使得该子函数发生了重入,这时,尽管概率很低,但是很可能出错!
(2):当主函数与中断函数共享变量问题 (类似两个线程共享资源的问题) 当主函数与中断函数共用变量时,可能发生: 例如:当变量的其中一个字节读入到寄存器中时,发生中断,中断中改写了变量值。当中断返回时,变量的其他字节继续被读入到寄存器中,造成新旧字节组合错误。
这些问题感觉都很隐蔽,如果出现了,可能只能通过反汇编才能看到。个人感觉要有操作系统的思想,理解和避免这些问题就容易些了。
|