ZigBee中遇到的問題總結

2021-06-05 17:48:36 字數 1989 閱讀 1508

學習zigbee已經有乙個月的時間。從cc2430到cc2530都有過接觸,也寫了一些簡單的程式。在學習的過程中,找了不少資料,解決了很多困惑。總結如下:

1:生成的hex檔案大於128k或256k 

hex檔案是可以燒錄到mcu,並可以被mcu執行的檔案。檔案本身包含了很多資訊,

如:起始位址、資料長度、段位址、偏遠位址等資訊。**的大小應該從生成的.map檔案中檢視(在工程目錄的最後)。在檔案末尾就是**的大小。實際不到128k

101 290 bytes of code  memory

26 bytes of data  memory (+ 78 absolute )

6 306 bytes of xdata memory

192 bytes of idata memory

8 bits  of bit   memory

181 bytes of const memory

2:不進行繫結,終端節點和協調器怎麼進行通訊

繫結是兩個或者多個應用裝置之間資訊流的控制機制。繫結允許應用程式傳送乙個資料報而不需要知道目標位址。在協調器開始工作時,會根據pan_id建立乙個網路,其段位址為0x0000,所以終端節點只需要把傳送位址設為0x0000,就可以給協調器傳送資訊。如:zb_senddatarequest( 0x0000, enddev_report_cmd_id, 9, "*********", 0, af_tx_options_none, 0); (如果需要雙向通訊,或多向通訊還需要其他辦法)。

3:hex檔案刷到裝置上後沒反應

這個問題還真的遇到過,首先排除程式的問題,發現是生成的hex檔案不正確。

project->options->linker->output format 選項內應該選擇other 剩下的預設。

在tools資料夾下 f8w2530.xcl 檔案 210行左右 有以下內容:

include these two lines when generating a .hex file for banked code model:

-m(code)[(_codebank_start+_first_bank_addr)-(_codebank_end+_first_bank_addr)]*\

_nr_of_banks+_first_bank_addr=0x8000

生成正確的hex檔案要把這兩行註解去掉

4:怎麼接收資料

收發資料主要是靠af層(應用框架層)完成。

傳送資料的函式是af_datarequest()(在sapi中是zb_senddatarequest())

傳送到節點後,節點執行osal_msg_receive()來檢索收到的資訊,判斷是否是af_incoming_msg_cmd 事件。如果是則通過af_incoming_msg_cmd 訊息事件來處理收到的資料報,處理函式可以自己來寫(在sapi中有zb_receivedataindication())。函式引數中要有剛收到的資料報,資料型別是afincomingmsgpacket_t

5:怎麼給協調器傳送資訊,是否需要繫結

當乙個終端節點加入協調器建好的網路時,只需要將傳送目的的短位址設定為0x0000,就可以向協調器傳送資訊。協調器是網路的建立者,網路建好後協調器的短位址就是0x0000。可以不需要進行繫結,繫結是在不知道對方位址而進行通訊的一種方法。

6:終端節點怎樣加入乙個網路

7:怎麼正確設定pan_id

8:關於#pragma optimize=none 禁止優化指令

iar ewarm編譯器和其他廠家的c編譯器相比非常高效,但是當程式裡面包含對時序要求比較嚴格的**的時候,iar常常會把這些**過渡優化,破壞了時序的要求,造成程式錯誤,在程式**比較緊的時候又必須優化,特別在延時函式,spi操作等延時要求高的操作中,如果不加禁止優化指令,很多都會出現莫名奇妙的錯誤,如:延時時間不對,spi沒有收到資料。解決加入禁止優化指令可以很好的解決這一問題。

推薦飛比論壇

鋒碩電子

鋒碩出的資料對**分析很好,初學看**分析會理解很多。(如有理解不當之處,歡迎指正)。

面試中遇到的問題總結

兩個或者兩個以上執行緒在執行過程中,因爭奪資源而產生互相等待的現象,若無外力作用,他們都將無法推進下去,此時,稱系統處於死鎖。四個條件,互斥,請求保持,不可剝奪,環路等待。破壞任一條件即可 預防破壞請求保持,程序必須一次申請所有需要的資源。資源分層,破壞環路等待。避免是在程序每次申請資源時判斷是否是...

jsp servlet中遇到的問題總結

在做jsp專案發現自己不是很理解filter的原理,登入過濾器一直出錯 後來發現是邏輯寫錯了,一直攔截登入的servlet怎麼可能登入上去 提示找不到物件 然後整理了一下筆記,重新學習了一些filter的原理。參考課程 過濾器通過dofilter 處理攔截,並通過chain.dofilter req...

6 5 開發中遇到的問題總結

今天在測試時發現,當多個執行緒同時往networkstream裡寫入不同的命令時,出現問題,描述如下 1。假設執行緒1要發命令 a 然後伺服器收到a之後返回相應的操作,執行緒2傳送命令b,伺服器收到命令b後返回相應的操作 2.由於在傳送b命令之前沒有考慮,已經寫進networkstream中的命令a...