嵌入式C语言编程

如何设置位?
P1OUT |= BIT3;  //P1.3拉高
or
pTimer->control |= (1<<3)

如何清除位?
P1DIR &= ~BIT3; //配置为输入
or
pTimer->control &= ~(1<<3)

如何翻转位?
P1OUT ^= BIT0 ; //翻转位
or
pTimer->control ^= (1<<0)

如何使用位掩码?
#define TIMER_COMPLETE (0x08)
if(*pTimerStatus & TIMER_COMPLETE)

{//your operate}

如何通过地址定义寄存器?
uint32_t volatile *pGPIO0Set = (uint32_t volatile *)(0x40E00018);
*pGPIO0Set=2;         //when application


关于特殊寄存器?
有些寄存器或者寄存器中的位是只读或者只写的。对一个只写寄存器来说,不能进行“读-改-写”操作,诸如|=,&=,^=,<<=等操作。这种情况下通过一个中间变量来保存只写寄存器的当前状态。
uint32_t timerRegValue|=TIMER_ENABLE;
*pTimerReg=timerRegValue;

如何使用位域和联合体?
union
{
  uint8_t byte;
  struct
  {
   uint8_t bit0   :1;
   uint8_t bit1   :1;
   uint8_t bit2   :1;
   uint8_t bit3   :1;
   uint8_t nibble :4;
  }bits;
}foo;

foo.byte=(TIMER_COMPLETE | TIMER_ENABLE);

foo.bits.bit2=1;


如何采用结构体覆盖的方式定义寄存器?
typedef struct
{
  uint32_t count;           // offset 0x00
  uint32_t maxcount;   // offset 0x04
  uint32_t _reserved1; // offset 0x08
  uint32_t control;         // offset 0x0D

}volatile timer_t;
timer_t *pTimer = (timer_t *)(0xabcd0120);

pTimer->control |= 0x10;


如何使用函数指针?
void Square_Number(int, int*)
{
    //code here
}
使用的时候
void Square_Number(int, int*);    //声明函数原型
void (* pFn) (int, int*);                     //声明pFn变量作为fn的指针,fn带有int参数和int指针参数,返回为void;
pFn=Square_Number;                 //pFn存放Square_Number的地址
(*pFn)(b,&Result_b);                    //使用函数指针调用Square_Number函数


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值