標籤:zigbee ti cc2530 z-stack iar
1.Zigbee協議和Z-Stack
Zigbee協議和Z-Stack是什麼關係?這可能是初學Zigbee同學想知道的問題。給大家舉個例子吧,我們生活中使用的插排是要符合一定的標準的,現在國家標準是GB2099.3-2008,裡面規定了好多插排的電氣、機械等要求。不同廠家生產的插排,要在中國國內銷售的話,必須符合這個標準。但是生產這個插排的廠家多了去了,像 公牛、philips等等(排除做廣告的嫌疑)。其實Zigbee協議棧規範和Z-Stack的關係也差不多,Z-Stack就是符合Zigbee協議棧規範的一個硬體和軟體平台,是Zigbee協議棧的一個具體實現。當然,還有其他的具體實現,freakz協議棧和contiki作業系統、TinyOS等等。大家要注意,Z-Stack是TI公司提供的協議棧,它是個半開源的協議棧,有些核心代碼是以庫的形式提供的,所以要想深入瞭解協議棧或者想進一步提升編程能力的同學還是找一個全開源的協議棧玩玩吧。比如,freakz協議棧。
2.IAR和Z-Stack
Z-Stack的整個開發環境IDE使用的是IAR(IAR的版本需要參考Z-Stack Home Sample Application User‘s Guide。此文檔在TI提供的資料包裡\Documents內)。從來沒有使用過IAR的同學請參考文章最後附件:IAR入門。這隻是個簡單的入門指導,想詳細瞭解IAR或者使用過程中遇到什麼問題請使用IAR的help選項。
我們知道Zigbee裝置的分為Coordinator、Router、Enddevice三種角色,這三種角色在IAR裡怎麼修改呐?我們開啟一個TI HA(TI提供的關於智能家居的解決方案),見下載平台:*************
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/6F/AD/wKioL1Wk53LxIEsoAAFyv-dkGSI060.jpg" title="QQ20150714183023.png" alt="wKioL1Wk53LxIEsoAAFyv-dkGSI060.jpg" />
標示的位置可以修改這三種裝置角色,其實這裡的選項是修改IAR project配置的地方,這裡TI提供的project裡已經配置好了這三鐘Zigbee裝置角色的設定檔。我們這裡只選擇就可以了。
Z-Stack軟體結構有一個很大的特點:使用宏定義來區分是否編譯某一模組/功能/函數。
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/6F/AD/wKioL1Wk7nWQmoxpAAGhZuoMECk541.jpg" title="QQ20150714190021.png" alt="wKioL1Wk7nWQmoxpAAGhZuoMECk541.jpg" />
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/6F/B0/wKiom1Wk7QPiEbzKAAEYILvI9E8551.jpg" title="QQ20150714190202.png" alt="wKiom1Wk7QPiEbzKAAEYILvI9E8551.jpg" />
全是根據宏定義來決定是否編譯這個功能,有的是根據是否定義這個宏,有的是根據定義的這個宏的值來決定其什麼作用。這也可以理解,因為TI提供的是一個通用的基礎開發平台,需要考慮相容性,易用性,並且硬體資源有限,只能使用宏定義的方式在程式先行編譯階段根據宏定義就可以知道需要哪些功能了。
那麼關鍵的問題來了,這些宏定義在IAR裡是怎麼定義的類?在IAR中有兩種定義方式:
第一種:
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/6F/B0/wKiom1Wk7tHBhrJaAAG4NBIk_mE550.jpg" title="QQ20150714190930.png" alt="wKiom1Wk7tHBhrJaAAG4NBIk_mE550.jpg" />
在開啟的TI project工程目錄的Tools下面,有***.cfg檔案,這些是IAR Compiler command-line options。可以在這裡定義宏。
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/6F/B0/wKiom1Wk71aBvXOYAAIr1o9BUYo509.jpg" title="QQ20150714191201.png" alt="wKiom1Wk71aBvXOYAAIr1o9BUYo509.jpg" />
定義的方法是“-D 加上你要定義的宏”,例如上面的 -DMAC_CFG_TX_MAX,其實定義的宏就是MAC_CFG_TX_MAX,你搜尋整個工程就可以找到在哪裡使用了這個宏。取消定義可以在定義前加上“//”。例如//-DMAC_CFG_TX_DATA_MAX=5。
你可能想知道IAR讀取這些cfg檔案需要不需要配置?自己新增加設定檔怎麼辦?
開啟功能表列 project---option
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/6F/AD/wKioL1Wk8w7TzqMGAAH4PJsKoOM737.jpg" title="QQ20150714192000.png" alt="wKioL1Wk8w7TzqMGAAH4PJsKoOM737.jpg" />
找到C/C++Complier 選項,然後選擇Extra Options,在這裡寫你自己需要引用的cfg檔案就可以了。
第二種:
開啟功能表列 project---option 然後找到preprocessor選項。
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/6F/AD/wKioL1Wk9GSQ33xeAAJl6zDtaeg698.jpg" title="QQ20150714192306.png" alt="wKioL1Wk9GSQ33xeAAJl6zDtaeg698.jpg" />
在這裡也可以定義宏,直接書寫宏的名字即可,例如:“ZTOOL_P1”。取消宏定義可以在前面添加“x”,例如“xZTOOL_P1”。當然也可以定義有值的宏,“LCD_SUPPORTED=DEBUG”。
另外,還要說一下上面中的上面的部分:是添加標頭檔包含路徑的,這樣在原始碼包含標頭檔時你就不用書寫好長的路徑名稱了,直接寫標頭檔名稱就行。
關於這兩種定義宏有什麼區別?要是兩個地方都定義了相同的宏但值不同(有可能是你馬虎定義重複了),這種情況以那個為準?
3.Z-Stack軟體結構簡介
4.兩個基於TI CC2530和Z-Stack平台的裝置Zigbee通訊
5.HA和ZCL是什嗎?
6.Zigbee抓包工具(SmartRF Packet Sniffer)的使用
7.總結
本文出自 “張連聘的部落格” 部落格,請務必保留此出處http://1801179.blog.51cto.com/1791179/1674160
Zigbee通訊之開發篇(基於TI 的Z-Stack)