函数指针在声明的时候形式就已经定死了,有什么方法能使中断服务可以灵活地执行不同形式的外部函数?
写了一个如下定义的函数
int CountdownTimer_Init(u32 settime,u32 period,FunType fp)
{
if (countdowntimer_on==TRUE) return 1;//计时器正被使用
countdowntimer_on=TRUE;
tick_settime=settime;
RCC->APB1ENR|=1<<2;//TIM4时钟使能
TIM4->ARR=10000*period; //设定计数器自动重装值//刚好1ms
TIM4->PSC=Clock_PLL*800; //预分频器,得到10Khz的计数时钟
//这两个东东要同时设置才可以使用中断
TIM4->DIER|=1<<0; //允许更新中断
TIM4->DIER|=1<<6; //允许触发中断
TIM4->CR1|=0x01; //使能定时器4
MY_NVIC_Init(2,3,TIM4_IRQChannel,2);//抢占1,子优先级3,组2
tick_start=tick_now;
funcp=fp;
return 0;
}
void TIM4_IRQHandler(void)
{
tick_now++;
(*funcp)();
TIM4->SR&=~(1<<0);//清除中断标志位
if(tick_now-tick_start>=tick_settime)
{
RCC->APB1RSTR|=1<<2;//TIM4复位
RCC->APB1RSTR&=~(1<<2);
countdowntimer_on=FALSE;
}
}
这样可以通过fp传入另外的函数指针来实现相应的中断服务
现在的问题是函数指针在声明的时候形式就已经定死了,也没法传入不同的参数个数
有什么方法能使中断服务可以灵活地执行不同形式的外部函数?
芹泽多摩雄
12 years, 1 month ago