找回密码
 立即注册

使用微信账号登录

只需一步,快速开始

查看: 3962|回复: 2

[CSR8系列] 8670 sink 源文件讨论1

[复制链接]
连续签到天数:1天
签到总天数:29天
签到总奖励:179金币
发表于 2015-1-7 17:58:28 | 显示全部楼层 |阅读模式

马上注册,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册  

×
本帖最后由 aking0532 于 2015-1-9 21:47 编辑

自己看源文件,真困难,就贴出来大家讨论讨论吧,一点点搞。从main开始
int main(void)
{
    DEBUG (("Main [%s]\n",__TIME__));

    /* check and update as necessary the software version pskey, this is used for ensuring maximum
       compatibility with the sinkg configuration tool */


    configManagerSetVersionNo();
    这个应该设置版本啥的啦,啥作用不晓得,就飘过去了。

   /* Initialise memory required early */
    configManagerInitMemory();
   这个就是内存管理啥滴

    /* Retrieve device state prior to reset */
    theSink.rundata->old_state = BootGetPreservedWord();
    为啥要取这个值,咨询软件工程师,貌似是多种启动,像test模式,cvc模式啥的,没搞明白,放过先
    (题外话,不从main开始看,也不晓得从哪儿开始看了,大神给指条明路??)
    /* initialise memory for the led manager */
    LedManagerMemoryInit();    void LedManagerMemoryInit(void)
    {
        /* Allocate memory to hold the led manager states */
        LM_DEBUG(("LM Mem Init Task 0x%x, active leds 0x%x:\n",sizeof(LedTaskData),(sizeof(LEDActivity_t) * SINK_NUM_LEDS) )) ;
       调试信息略过  

        theSink.theLEDTask = mallocPanic(sizeof(LedTaskData));
        给LED 任务分配内存


        memset(theSink.theLEDTask, 0, sizeof(LedTaskData));
        初始化给LED刚分配的内存


       /* allocate memory for LED events */
       theSink.theLEDTask->pEventPatterns = mallocPanic(LM_MAX_NUM_PATTERNS * sizeof(LEDPattern_t));
       memset(theSink.theLEDTask->pEventPatterns, 0, LM_MAX_NUM_PATTERNS * sizeof(LEDPattern_t));
       这一块是给LEDTask里面的pEventPatterns 分配内存并初始化,pEventPatterns 指向的是个数组pEventPatterns [LM_MAX_NUM_PATTERNS ]
    }


    LEDManagerInit( ) ;
    void LEDManagerInit ( void )
   {
     LM_DEBUG(("LM Init :\n")) ;
     调试信息略过  


    theSink.theLEDTask->gLEDSSuspend = FALSE;
    gLEDSSuspend =1;LED指示会被暂停,暂停是啥意思?一直保持现有状态,还是led不工作了?


    LM_DEBUG(("LM : p[%x][%x][%x]\n" ,  (int)theSink.theLEDTask->gStatePatterns ,
                                        (int)*theSink.theLEDTask->pEventPatterns ,
                                        (int)theSink.theLEDTask->gAcqtiveLEDS   
            )) ;
    调试信息略过  


    /*create the patterns we want to use*/
    LEDManagerInitStatePatterns ( ) ;
    static void LEDManagerInitStatePatterns ( void )
   {
       uint16 lIndex = 0;

       for ( lIndex= 0 ; lIndex < SINK_NUM_STATES ; lIndex ++ )
      {
        LEDPattern_t *lStatePattern = &(theSink.theLEDTask->gStatePatterns[lIndex]);
       这是指向要初始化的gStatePatterns数组


        memset(lStatePattern, 0, sizeof(LEDPattern_t));
        初始化gStatePatterns数组


        lStatePattern->Colour     = LED_COL_LED_A ;  
        奇怪的是每个pattern都使用了LED_COL_LED_A,为什么不用B?包括下面的event pattern也是A。。求解
       }     
    }
   
LEDManagerInitActiveLEDS( ) ;    static void LEDManagerInitActiveLEDS ( void )
    {
       uint16 lIndex = 0;

       for ( lIndex= 0 ; lIndex < SINK_NUM_LEDS ; lIndex ++ )
       {
          LedsSetLedActivity ( &theSink.theLEDTask->gActiveLEDS [ lIndex ] , IT_Undefined , 0 , 0 ) ;
          /*初始化Type,Index,DimTime都为0*/
          void LedsSetLedActivity ( LEDActivity_t * pLed , IndicationType_t pType , uint16 pIndex , uint16 pDimTime)
          {
            pLed->Type               = pType ;
            pLed->Index              = pIndex ;
            pLed->DimTime            = pDimTime ;   
            LED_DEBUG(("LED[%d]\n" , pDimTime)) ;
  
          }*/
       }
     }
    LEDManagerInitEventPatterns( ) ;
    static void LEDManagerInitEventPatterns ( void )    {
       uint16 lIndex = 0;
       /*初始化每个pattern都使用LEDA*/
       这个跟上一个statepattern就很像
        for ( lIndex= 0 ; lIndex < LM_MAX_NUM_PATTERNS ; lIndex ++ )
       {
           LEDPattern_t *lEventPattern = &(theSink.theLEDTask->pEventPatterns[lIndex]);
        
           memset(lEventPattern, 0, sizeof(LEDPattern_t));
           lEventPattern->Colour     = LED_COL_LED_A ;  
       }
     }
    初始化Queue,Queue为envent 枚举变量,应该是存储当前的event。
    memset(theSink.theLEDTask->Queue, 0, sizeof(LEDEventQueue_t));
   
    /*the filter information*/
    LEDManagerCreateFilterPatterns( ) ;
    /*gLMNumFiltersUsed:此变量存储使用的filter有多少,是个filter总数的长度
    gTheActiveFiltersH:此变量存储的是所有的filter mask,还是程序过程中某个filter被使用就置位???
    gTheActiveFiltersL,
    gEventFilters分配空间,*/
    /*static void LEDManagerCreateFilterPatterns ( void )
    {
       uint16 lIndex = 0 ;
       for (lIndex = 0 ; lIndex < LM_NUM_FILTER_EVENTS ; lIndex++ )
       {
          LEDFilter_t *lEventFilter = &(theSink.theLEDTask->gEventFilters [ lIndex ]);      
          memset(lEventFilter, 0, sizeof(LEDFilter_t));
       }   
    theSink.theLEDTask->gLMNumFiltersUsed = 0 ;
    LED_SETACTIVEFILTERS(0x0);
    //#define LED_SETACTIVEFILTERS(x)
    // {
    //    theSink.theLEDTask->gTheActiveFiltersH = ((uint32)x>>16) & 0xF ;\
    //    theSink.theLEDTask->gTheActiveFiltersL = x & 0xffff;
         }
    }*/
    最痛苦的就是这个函数喽,明儿开始,太长了,开来明儿得重开一贴。。。。。。。。。
    LedsInit ( ) ;
    }






楼主热帖
积分商城 - 让您的金币更有价值!||官方Q群 - 让您的沟通更加及时!
连续签到天数:1天
签到总天数:666天
签到总奖励:9548金币
发表于 2015-1-8 09:01:26 | 显示全部楼层
从main函数能看出什么?帮你顶,求大神。
积分商城 - 让您的金币更有价值!||官方Q群 - 让您的沟通更加及时!
回复 支持 反对

使用道具 举报

连续签到天数:1天
签到总天数:303天
签到总奖励:2741金币
发表于 2015-1-9 09:56:12 | 显示全部楼层
1. 从 main开始看是对的,因为程序就是从这里开始跑起来的。main函数上面也有说明: The Sink Application starts here...
main最后有个MessageLoop,然后就可以看看handleUEMessage了,里面就是处理用户的各种事件,如开/关机,打电话等等等等

2. gLEDSSuspend =1;是指LED Disable
积分商城 - 让您的金币更有价值!||官方Q群 - 让您的沟通更加及时!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册  

本版积分规则

小黑屋|手机版|我爱蓝牙网 - 52Bluetooth

GMT+8, 2024-4-29 14:39 , Processed in 0.267953 second(s), 17 queries , Gzip On, MemCached On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表