今天自己定義了乙個p0口p0.7的外部中斷,在裸機上除錯沒問題,但放入協議棧的時候沒有任何動作,在除錯的時候,我把hal_board_cfg.h中的按鍵key的預編譯改為faulse不通過,結果,自己定義的外中斷就可以用了。那麼問題肯定出在這了,經發現hal_key.c檔案中存在
hal_isr_function( halkeyport0isr, p0int_vector )
hal_isr_function( p0_irq, p0int_vector )
這就衝突了。
硬體中斷的定義在協議棧中的hal_mcu.h檔案中:
#ifdef __iar_systems_icc__
//條件定義
#include
//包含cc2430輸入輸出標頭檔案
#define hal_compiler_iar
//定義
iar編譯器巨集
#define hal_mcu_little_endian()
__little_endian__
//定義mcu小端模式
#define _pragma(x) _pragma(#x)
//定義預處理指令巨集
#define hal_isr_func_declaration(f,v)
_pragma(vector=v) __near_func __interrupt void f(void)
//iar中斷函式宣告
定義格式巨集
#define hal_isr_func_prototype(f,v)
_pragma(vector=v) __near_func __interrupt void f(void)
//iar中斷函式原型
定義格式
巨集#define hal_isr_function(f,v)
hal_isr_func_prototype(f,v); hal_isr_func_declaration(f,v)
//iar中斷函式定義
格式巨集#elif defined __keil__
#include
#define hal_compiler_keil
#define hal_mcu_little_endian()
0#define hal_isr_func_declaration(f,v)
void f(void) interrupt v
#define hal_isr_func_prototype(f,v)
void f(void)
#define hal_isr_function(f,v)
hal_isr_func_prototype(f,v); hal_isr_func_declaration(f,v)
#else
#error "error: unknown compiler."
#endif
這裡定義了在不同編譯環境下的終端函式,我們可以看出zigbee2006協議棧僅支援iar和keil兩種編譯環境,其他的編譯器會當做未識別的編譯器並報錯("error: unknown compiler.")。我使用的是iar編譯環境,並對上面的**進行注釋。
用紅色字型標出的部分就是我們定義中斷函式的格式要求,這三個巨集的意思表明了對中斷函式定義的規則:首先,要在檔案**頂端進行函式宣告(格式:
_pragma(vector=v) __near_func __interrupt void f(void););然後,在相應的c檔案裡定義中斷函式原型(格式:
_pragma(vector=v) __near_func __interrupt void f(void))。其實和c語言中定義函式一模一樣,但是格式要按照協議棧規定的來寫。
例如:#include "iocc2430.h"
_pragma(vector=urx0_vector)
__near_func __interrupt void uart0_isr(void);
..._pragma(vector=urx0_vector) __near_func __interrupt void uart0_isr(void)
例子中淺藍色的部分是可以自己來設定的,其他格式都是確定的,以上就是在協議棧中新增中斷函式的方法,希望能對你有所幫助。
zigbee協議棧 端點
端點的意義 從應用角度看,通訊的本質就是端點到端點的連線 例如,乙個帶開關元件的裝置與帶乙個或多個燈元件的遠端裝置進行通訊,目的是將這些燈點亮 端點的實現 端點之間的通訊是通過稱之為簇的資料結構實現的。這些簇是應用物件之間共享資訊所需的全部屬性的容器,在特殊應用中使用的簇在模板中有定義。所有端點都使...
ZigBee協議棧解析
zigbee技術是物聯網領域最常用的無線技術之一,如果我們要做基於zigbee技術的物聯網應用,最好對zigbee協議棧有乙個基本的了解。這篇文章對zigbee協議棧做乙個簡單明瞭的介紹。概述本文準備介紹的zigbee協議棧是zigbee2007,也是目前業界最常用的標準版本,對於zigbee協議棧...
ZigBee模組 zigbee協議棧網路管理
zigbee協議棧網路管理 一 補充基礎知識 每個cc2530晶元出廠時候都有乙個全球唯一的32位 mac位址,當裝置連入網路的時候,每個裝置都能獲得由協調器分配的 16位短位址,協調器預設位址 0x0000 很多時候網路就是通過短位址進行管理。二 實驗現象 路由器 裝置終端傳送自己定義的裝置號給協...