新闻  |   论坛  |   博客  |   在线研讨会
R8/1B 学习板--IAR下的位变量定义、中断、开关中断
renesasrulz | 2009-12-26 12:15:45    阅读:4975   发布文章

原文:R8/1B 学习板--IAR下的位变量定义、中断、开关中断


#include<stdbool.h>       //位变量,可以看到里位变量是怎么定义的,
在stdbool.h中,定义了一个位宏,如果需要变量定义,就是如下:
bool abit;
abit就是一个位变量了,这种方法简单,但是在多个位的时候不好处理,比如需要一批位变量
初始化的时候。
还可以采用如下方法:
typedef struct
 {
    unsigned char no0:1;
    unsigned char no1:1;
    unsigned char no2:1;
    unsigned char no3:1;
    unsigned char no4:1;
    unsigned char no5:1;
    unsigned char no6:1;
    unsigned char no7:1;
  } __BIT8 ;
volatile union { unsigned char strack; __BIT8 strack_bit; } ;
union { unsigned char sk; __BIT8 sk_bit; } ;
定义位:
 #define  mflag        strack_bit.no0

volatile union { unsigned char strack; __BIT8 strack_bit; } ;
 中加上VOLATILE,如果发现给编译器优化掉,就一定要加上,
strack  就是一个可按位操作的变量,
strack=0;就可以把所有8个位全部清零,比起BOOL方便一些。

IAR,写中断函数,与别的单片机没有什么差别,

#pragma  vector=0x16
__interrupt  void tx_irq(void)
  {
   Sec20ms++;
    if(Sec20ms>50)
      {
       p1_1=!p1_1;
      Sec20ms=0;
      }
   }
vector=0x16  0X16是中断号,tx_irq(void) 是中断函数名,名字随你起。

IAR下的绝对定义,比如你想把一个数组定义在一个DATA FLASH,
按如下操作:
const unsigned char PWord @0x2BFE;  PWord是一个常量,@0x2bfe是一个绝对地址。
数组定义:

const unsigned char buf1[2046] @0x2400 ={1,1,1};
 {1,1,1}是给数组初值。

#include<intrinsics.h>   中定义一些实用宏,最常用的就是开、关中断了,如下:
__disable_interrupt()  //禁止中断
__enable_interrupt()
这样太长了,写起来烦,可以按如下定义成自己习惯的:
define    di() __disable_interrupt()  //禁止中断
#define  ei() __enable_interrupt()

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
来自瑞萨单片机论坛(www.renesas-mcu.com)的经典文章。仅供大家参考,版权归作者所有。
推荐文章
最近访客