ZigBee學習之33—osal_start_system()_第1頁
ZigBee學習之33—osal_start_system()_第2頁
ZigBee學習之33—osal_start_system()_第3頁
ZigBee學習之33—osal_start_system()_第4頁
ZigBee學習之33—osal_start_system()_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、#1樓主:【原創(chuàng)】ZigBee學習之33osal_start_system()文章發(fā)表于:2010-02-12 17:34 osal_start_system(); /運行系統(tǒng)【OSAL.c】/此函數(shù)是任務系統(tǒng)的主循環(huán)函數(shù),他將輪詢所有任務事件然后調(diào)用相關的任務處理函數(shù),沒有任務時將進入休眠狀態(tài)。void osal_start_system( void )#if !defined ( ZBIT )/雖然搞不清楚這個ZBIT什么東西,不過應該是沒有定義的,如果定義了的話所有函數(shù)只會順序跑下來,跑完這個函數(shù)整個系統(tǒng)就結束了,沒有意義,這里看到這個無限循環(huán)應該就是整個系統(tǒng)的運行方式了 for(;)

2、#endif uint8 idx = 0; Hal_ProcessPoll(); / This replaces MT_SerialPoll() and osal_check_timer()./OSAL調(diào)用此函數(shù)來推送UART,TIMER?!緃al_drivers.c】void Hal_ProcessPoll ()/選取定時器 HalTimerTick();/檢查定時器的計數(shù)溢出【hal_timer.c】void HalTimerTick (void) if (!halTimerRecordHW_TIMER_1.intEnable) halProcessTimer1 ();/處理TIMER1事

3、件void halProcessTimer1 (void) if (halTimerRecordhalTimerRemap(HAL_TIMER_3).channelMode = HAL_TIMER_CH_MODE_OUTPUT_COMPARE)/處理通道模式為輸出比較時的情況 if (T1CTL & T1CTL_CH0IF)/檢查通道0中斷標志看是否達到設定的中斷要求 T1CTL &= (T1CTL_CH0IF);/清除中斷標志 halTimerSendCallBack (HAL_TIMER_3, HAL_TIMER_CHANNEL_A, HAL_TIMER_CH_MODE_O

4、UTPUT_COMPARE);/給回調(diào)函數(shù)發(fā)送回應void halTimerSendCallBack (uint8 timerId, uint8 channel, uint8 channelMode) uint8 hwtimerid; hwtimerid = halTimerRemap (timerId); if (halTimerRecordhwtimerid.callBackFunc) (halTimerRecordhwtimerid.callBackFunc) (timerId, channel, channelMode); if (T1CTL & T1CTL_CH1IF) T1

5、CTL &= (T1CTL_CH1IF); halTimerSendCallBack (HAL_TIMER_3, HAL_TIMER_CHANNEL_B, HAL_TIMER_CH_MODE_OUTPUT_COMPARE); if (T1CTL & T1CTL_CH2IF) T1CTL &= (T1CTL_CH2IF); halTimerSendCallBack (HAL_TIMER_3, HAL_TIMER_CHANNEL_C, HAL_TIMER_CH_MODE_OUTPUT_COMPARE); else if (halTimerRecordhalTimerRema

6、p(HAL_TIMER_3).channelMode = HAL_TIMER_CH_MODE_OVERFLOW) if (T1CTL & T1CTL_OVFIF) T1CTL &= (T1CTL_OVFIF); halTimerSendCallBack (HAL_TIMER_3, HAL_TIMER_CHANNEL_SINGLE, HAL_TIMER_CH_MODE_OVERFLOW); if (!halTimerRecordHW_TIMER_3.intEnable) halProcessTimer3 (); if (!halTimerRecordHW_TIMER_4.intE

7、nable) halProcessTimer4 (); /* UART的選取*/#if (defined HAL_UART) && (HAL_UART = TRUE) HalUARTPoll();/【hal_uart.c】typedef struct uint8 *rxBuf; uint8 rxHead; uint8 rxTail; uint8 rxMax; uint8 rxCnt; uint8 rxTick; uint8 rxHigh; uint8 *txBuf;#if HAL_UART_BIG_TX_BUF uint16 txHead; uint16 txTail; uin

8、t16 txMax; uint16 txCnt;#else uint8 txHead; uint8 txTail; uint8 txMax; uint8 txCnt;#endif uint8 txTick; uint8 flag; halUARTCBack_t rxCB; uartCfg_t;/UART數(shù)據(jù)結構,這個數(shù)據(jù)結構在文檔中沒有提到,估計是串口緩存區(qū)的配置串口需要掌握的是HalUARTOpen函數(shù)和halUARTCfg_t數(shù)據(jù)結構#endif do if (tasksEventsidx) /輪詢檢查任務 break; while (+idx < tasksCnt); if (id

9、x < tasksCnt) uint16 events; halIntState_t intState; HAL_ENTER_CRITICAL_SECTION(intState); events = tasksEventsidx; tasksEventsidx = 0; / Clear the Events for this task. HAL_EXIT_CRITICAL_SECTION(intState); events = (tasksArridx)( idx, events );/根據(jù)事件的類型執(zhí)行相關的任務處理函數(shù) HAL_ENTER_CRITICAL_SECTION(intState); tasksEventsidx |= events; / Add back unprocessed events to the current task. HAL_EXIT_CRITICAL_SECTION(intState); #if defined( Power_SAVING ) else / Comp

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論