打印

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

[复制链接]
7669|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
目前用Zigbee协议栈中OSAL操作系统做无线收发、组网、和上位机串口通信什么的。硬件是CC2430,郑州蜂舞的开发板。以前没用过操作系统,添加中断服务程序的时候编译报错如图:
提示:Error[Pa045]: 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
*
* @return  None
***************************************************************************************************/
#if HAL_UART_0_ENABLE
HAL_ISR_FUNCTION( halUart0RxIsr, URX0_VECTOR )
{
  cfg0->rxBuf[cfg0->rxHead] = U0DBUF;

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

使用特权

评论回复
5
zztishan| | 2012-5-11 17:12 | 只看该作者
应该这样写:
HAL_ISR_FUNC_PROTOTYPE(UART0_ISR,URX0_VECTOR)
{;}

使用特权

评论回复
6
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)

使用特权

评论回复
7
emot| | 2013-12-15 09:54 | 只看该作者
z-stack已经占用了一部分中断,有的话就去改,没有再写,而且改的话需要理解原先的代码,不然改完就不工作了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:天对地,雨对风。大陆对长空。山花对海树,赤日对苍穹。

0

主题

83

帖子

1

粉丝