grain粮食 发表于 2010-8-26 15:25

Zigbee协议栈中OSAL系统如何写中断服务函数

目前用Zigbee协议栈中OSAL操作系统做无线收发、组网、和上位机串口通信什么的。硬件是CC2430,郑州蜂舞的开发板。以前没用过操作系统,添加中断服务程序的时候编译报错如图:
提示:Error: function "T4_ISR" has no prototype

但是定时器中断实验程序(不在OSAL系统上)就没这个问题
如图
另,哪位大侠做过Zigbee2006组网能否给点这方面的资料,最好是偏重应用的。

grain粮食 发表于 2010-8-26 16:18

问题补充:
是不是有了OSAL以后中断服务函数不能这么写?
#pragma vector = URX0_VECTOR
__interrupt void UART0_ISR(void)
{
;
}
如果不能应该怎么用中断呢?
或者是我的IAR设置有问题?

rcwust2009 发表于 2010-9-22 17:31

估计是你的设置有问题,很有可能是头文件没有包含进去,你仔细看一下包含的路径时候出错

罗菜鸟 发表于 2010-9-29 15:43

hal_uart.c里面用了中断向量URX0_VECTOR 。

#if HAL_UART_ISR
/***************************************************************************************************
* @fn      halUart0RxIsr
*
* @brief   UART0 Receive Interrupt
*
* @param   None
*
* @returnNone
***************************************************************************************************/
#if HAL_UART_0_ENABLE
HAL_ISR_FUNCTION( halUart0RxIsr, URX0_VECTOR )
{
cfg0->rxBuf = U0DBUF;

if ( cfg0->rxHead == cfg0->rxMax )
{
    cfg0->rxHead = 0;
}
else
{
    cfg0->rxHead++;
}
}
#endif

zztishan 发表于 2012-5-11 17:12

应该这样写:
HAL_ISR_FUNC_PROTOTYPE(UART0_ISR,URX0_VECTOR)
{;}

zjh6607476 发表于 2013-12-13 11:02

5楼正确,在协议栈里都做了封装!!
#define _PRAGMA(x) _Pragma(#x)
#define HAL_ISR_FUNC_DECLARATION(f,v)   _PRAGMA(vector=v) __near_func __interrupt void f(void)
#define HAL_ISR_FUNC_PROTOTYPE(f,v)   _PRAGMA(vector=v) __near_func __interrupt void f(void)
#define HAL_ISR_FUNCTION(f,v)         HAL_ISR_FUNC_PROTOTYPE(f,v); HAL_ISR_FUNC_DECLARATION(f,v)

emot 发表于 2013-12-15 09:54

z-stack已经占用了一部分中断,有的话就去改,没有再写,而且改的话需要理解原先的代码,不然改完就不工作了。
页: [1]
查看完整版本: Zigbee协议栈中OSAL系统如何写中断服务函数