本帖最后由 ben001 于 2013-9-30 18:44 编辑
最近在学习以太网通信,通信芯片是使用ENC28J60,拿了奋斗版uIP例程进行学习。但是最近看到SysTick部分的时候发现一个问题,就是SysTick的中断函数定义了,却没有作为中断函数调用。
根据例子中systick.c文件中定义了一个函数SysTick_ISR(),函数的功能说明是SysTick中断服务程序,每隔1ms进入1次。但是我stm32f10x_it.c文件中找到SysTick的中断函数SysTick_Handler(),它的定义如下:
/**
* @brief This function handles SysTick Handler.
* @param None
* @retval None
*/
extern void SysTick_ISR(void);
void SysTick_Handler(void)
{
if(net_time05++>=1000){ //0.5秒溢出标志
net_time05=0;
net_timeover05=1;
}
if(net_time10++>=20000){ //10秒溢出标志
net_time10=0;
net_timeover10=1;
}
}
由以上代码可以看出SysTick_ISR()函数在这里只申明了外部定义,但是却没有在SysTick的中断函数SysTick_Handler()中断函数中调用。函数SysTick_Handler()中的net_time05、net_timeover05、net_time10和net_timeover10变量是在main.c文件eth_poll()函数中调用的,作为更新ARP定时器。SysTick_ISR()最终是由clock-arch.c文件的clock_time()函数调用。那么这个没有在SysTick_Handler()中断函数中调用的SysTick_ISR()函数也能起到定时的作用???
附件是奋斗版的uIPl例子的完整工程代码:
STM32-奋斗板-uIP1.0网络例程.zip
(493.55 KB)
|