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 ( ) ;
}
从main函数能看出什么?帮你顶,求大神。:lol:lol:lol 1. 从 main开始看是对的,因为程序就是从这里开始跑起来的。main函数上面也有说明: The Sink Application starts here...
main最后有个MessageLoop,然后就可以看看handleUEMessage了,里面就是处理用户的各种事件,如开/关机,打电话等等等等
2. gLEDSSuspend =1;是指LED Disable
页:
[1]