目前已知,工程中區分是終端還是協調器,與工程中Tolls文件夾中的.cfg文件有關:
從project->Edit Configuration進去可以刪減左邊欄Workspace下拉的項:
區別終端、路由器和協調器是通過Options.. -> C/C++ Compiler -> Extra Options 中添加不同的.cfg文件實現的:
協調器:
終端:
還沒學完,接下來看一下cfg文件中的代碼區別,參考自:
詳解在程序中怎樣區分協調器 路由器 終端[轉載]
來自 <https://blog.csdn.net/xiao11xiang123/article/details/26495517>
f8wConfig.cfg文件:
每個Pro都會帶的,不管是終端、協調器還是路由器。存放有一些通用的編譯選項,比如PAN ID網絡識別碼、指定的信道等等。
f8wEndev.cfg文件代碼:
f8wCoord.cfg文件代碼:
f8wRouter.cfg文件代碼:
可以發現CPU頻率、MAC/ZMAC 設置(具體是什麼不太清楚)在三種類型代碼中都有;
MAC層的設置“-DMAC_CFG_APP_PENDING_QUEUE=TRUE”,以及路由器設置“-DRTR_NWK ”只在協調器和路由器中定義,終端沒有;
協調器則單獨多了一行代碼“-DZDO_COORDINATOR ”,應該是定義其有協調器功能。
而協調器既宏定義了ZDO_COORDINATOR又宏定義了RTR_NWK是因爲:在Zigbee網絡中,只有協調器才能建立一個新網絡,而一旦網絡建立後該設備的作用就是一個路由器。
打開協議棧NWK文件夾下的Zglobals.h,可以找到代碼:
我覺得大概意思就是,如果定義了協調器ZDO_COORDINATOR,那麼此Pro的代碼作爲協調器功能執行,否則如果定義了RTR_NWK,則作爲路由器,否則作爲終端。
Zglobals.h有對DEVICE_BUILD_XXX的宏定義:
學習得很粗淺,如有問題歡迎指正。