zigbee協議棧新增自己的硬體中斷的注意點

2021-06-12 08:04:00 字數 2103 閱讀 6964

今天自己定義了乙個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 很多時候網路就是通過短位址進行管理。二 實驗現象 路由器 裝置終端傳送自己定義的裝置號給協...