第一次接触飞思卡尔的片子,硬着头皮看。
void RTC_Task(void)
{
/* toggle LED1 */
LED0_Toggle();
}
这个程序没有在主循环的调用,是怎么执行的呢?
看样子与初始化有关
RTC_SetupTimerCallback(RTC_Task);
RTC_Init(RTC_CLKSRC_1KHZ,3, RTC_CLK_PRESCALER_100);
这是原函数:
void RTC_Init(uint8 clkSrc,uint16 modulo, uint8 prescaler)
{
SIM_SCGC |= SIM_SCGC_RTC_MASK; /*enable clock to RTC*/
RTC_MOD= modulo; /*NOTE: RTC_MOD must be written after RTC_SC*/
RTC_SC = 0 | RTC_SC_RTIE_MASK | RTC_SC_RTCO_MASK ;
RTC_SC |= ((clkSrc & 0x3) << 14) | ((prescaler & 0x07)<<8);
/*enable interrupt*/
enable_irq(20);
}
void RTC_SetupTimerCallback(T_RTC_Callback pfnCallback)
{
RTC_Callback[0] = pfnCallback;
}
但是怎么和函数void RTC_Task(void)关联在一起的呢?
初学,莫笑话我哦。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
这个库很有意思,他通过调用RTC_SetupTimerCallback(RTC_Task)来将程序切入到RTC_Task这个函数。实际上是地址传递。
你也可以调用此函数将程序切入到任何一个你想要执行的程序。
仔细看配置文件和.h文件,你就会发现其实是中间多了一层包装而已。
这和操作系统没什么关系。这样做的好处是移植方便,不需要去改动应用层,只需要写好驱动层,应用层的程序就可以直接copy使用,程序也更有条理。
(个人使用经验,希望对楼主有帮助)
一周热门 更多>