aking0532 发表于 2015-1-7 17:58:28

8670 sink 源文件讨论1

本帖最后由 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
    }


    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);
       这是指向要初始化的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);
      
         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 ( ) ;
    }






zx104700 发表于 2015-1-8 09:01:26

从main函数能看出什么?帮你顶,求大神。:lol:lol:lol

lb4btspeaker 发表于 2015-1-9 09:56:12

1. 从 main开始看是对的,因为程序就是从这里开始跑起来的。main函数上面也有说明: The Sink Application starts here...
main最后有个MessageLoop,然后就可以看看handleUEMessage了,里面就是处理用户的各种事件,如开/关机,打电话等等等等

2. gLEDSSuspend =1;是指LED Disable
页: [1]
查看完整版本: 8670 sink 源文件讨论1