打印
[Cortex-M0技术交流]

RyanHsiung学习第四贴, 回调函数、一些建议,还有一些疑问!

[复制链接]
2476|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 Ryanhsiung 于 2011-10-14 19:06 编辑

关于回调函数,先前不一直看不懂,看了好几个例程,明白一点了。         
回调函数实质就是函数指针,指向的是中断执行的具体内容。不过不能直接替换中断函数,而是作为子程序的入口供中断函数调用。
      新唐CORTEC-M0  库文件中大量使用回调函数,可以方便做到多任务运行,且封装了底层。
下面是T1的中断程序              
void TMR1_IRQHandler(void)
{
    int32_t i;
   
          TIMER1->TISR.TIF = 1;

    uTimer1Tick++;
        if (bIsSetTime1Event)                        /* Timer Event Handle */
    {
        for (i=0; i<TIMER_EVENT_COUNT; i++)                //这里就可以做到多任务
        {
            if (tTime1Event[i].active)   //任务是否激活
            {
                tTime1Event[i].curTick--;  //计数倒减
                if (tTime1Event[i].curTick == 0)
                {
                    (*tTime1Event[i].funPtr)(tTime1Event[i].transParam);//我门只需要设定函数指针即可调用相应函数
                    tTime1Event[i].curTick = tTime1Event[i].initTick;    //重装
                }
            }}
}
}
        
对板子的一些建议:
      1、文档不全,且有瑕疵,我现在看的文档就看到了3处以上的瑕疵,最好完善一下文档
      2、有些库函数还需要改进
例:
   DrvGPIO_Open( E_D_GPLED1, D_PIN_LED1, E_IO_OUTPUT );

//全部改成宏定义,方便移植
   DrvGPIO_Open( E_D_GPLED2, D_PIN_LED2, E_IO_OUTPUT );
   DrvGPIO_Open( E_D_GPLED3, D_PIN_LED3, E_IO_OUTPUT );
   DrvGPIO_Open( E_D_GPLED4, D_PIN_LED4, E_IO_OUTPUT );
增加兼容性,若E_D_GPLED1,E_D_GPLED2,E_D_GPLED3,E_D_GPLED4 为同一端口
  最好可以这么操作    DrvGPIO_Open( E_D_GPLED1, D_PIN_LED1|D_PIN_LED2|D_PIN_LED3 |D_PIN_LED4 , E_IO_OUTPUT );


   3、库函数最好增加一些操作操作的宏定义(开总中断、关总中断、软件复位和喂狗等等)
     例: #define ClrWDT()
{ UNLOCKREG(); DrvWDT_Ioctl (E_WDT_IOC_RESET_TIMER,0); LOCKREG();}


问题:
今天用TIMER有一个问题,搞不懂
     DrvTIMER_Open(E_TMR0,1000,E_PERIODIC_MODE); // _PERIODIC_MODE 周期 模式
   第二个参数为1000(x) 代表1S / 1000 周期,为1/1周期. 变换关系为1s/X
   函数内部会将第二个参数给TCMPR ,即 TIMER0->TCMPR  =x。
   而 定时溢出周期= (Period of timer clock input) * (8-bit Prescale + 1) * (24-bit TCMP)
  问1:应该X越大,周期越长啊?
  问2:x 变换关系为什么是1S/X,怎么算出来的??

第二个 MDK 中怎么使用内联函数,要怎么表示??
   inline void ClrWDT(void),我这么写不对啊!!

相关帖子

沙发
Ryanhsiung|  楼主 | 2011-10-15 08:03 | 只看该作者
还有一个比较蛋疼的问题!

老是让我升级,点升级后还是这个状态!!

使用特权

评论回复
板凳
x181084431| | 2011-10-16 21:12 | 只看该作者
学习 顶!

使用特权

评论回复
地板
Ryanhsiung|  楼主 | 2011-10-17 07:56 | 只看该作者
是自己没学好,昨天拿MDK的编译指南看了一下,inline 要写成__inline 就可以实现内联函数了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:嵌入式技术专家
简介:道阻且长,行则将至!

64

主题

4658

帖子

14

粉丝