|
CC2530串口中断接收的自定义缓存BUF最大可以定义多大? 我现在需要一个最少160字节的BUF存接收到的数据进行解析;但是定义buf[160]后用IAR编译总是提示IDATA空间不够;后来通过调节IAR-option -stack/heap 中的设置;但是最大也是只能设置到buf[135]个字节 我看了2530的芯片手册 上面说它的SARM有8K;不知道是什么原因;我把代码发给大家看看;求各位大侠帮帮忙;不胜感激
#include
#include
//宏定义
#define uint unsigned int
#define uchar unsigned char
/*函数声明和定义*******************************/
void inituart0(void);
void uarttx_send_string(uchar *data,int len);
void uart_send_char(uchar ch);
void delay_ms(uint i_delay);
void Clear_UART0(void);
uint send_messge();
/*变量定义和赋值*******************************/
uchar recdata[130]="";//就是这里希望能定义160个字节的空间
uchar temp=0; //无数据接收到时,设为0
uint datanumber=0;//接收字符串计数
uchar send_content[]={"such handsome"};//发送短信内容
//初始化串口0函数
void inituart0(void)
{
CLKCONCMD &=0XBF;//系统时钟为32MHZ
while(CLKCONSTA & 0X40);//等待时钟稳定
CLKCONCMD &=0XF8;//主时钟频率为32MHZ
PERCFG &=0XFE;//设USART0的ALT 1
P0SEL |=0X3C;//P0口2、3、4、5做外设
P2DIR &=0X3F;//P0外设优先级USART0最高
U0CSR |=0X80;//设USART0 工作方式为UART
U0GCR |=8; //设置波特率
U0BAUD =0x3b;//设波特率
UTX0IF=0;//UART0 TX中断标志位清0
}
//串口发送字符
void uart_send_char(uchar ch)
{
U0DBUF=ch;
while(UTX0IF==0);
UTX0IF=0;
}
//串口发送字符串函数
void uarttx_send_string(uchar *data,int len)
{
int j;
for(j=0;j
{
U0DBUF=*data++;
while(UTX0IF==0);
UTX0IF=0;
}
}
//延时函数
void delay_ms(uint i_delay)
{
uint i,j;
for(i = 0; i< i_delay; i++)
{
for(j = 0; j < 200; j++)
{
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
}
}
}
//串口清0函数
void Clear_UART0()
{
uchar i;
for(i = 0; i<= datanumber;i++)
{
recdata=0;
}
datanumber = 0;
}
/*接收中断函数*******************************/
//串口接收一个字符,一旦有数据从串口传至CC2530,
//则进入中断,将接收到的数据赋值给变量temp。
#pragma vector=URX0_VECTOR
__interrupt void UART0_ISR(void)
{
temp=U0DBUF;//读取缓存到temp
if(temp!=0)
{
//if((temp!='\n')&&(datanumber<80))//'\n'被定义为结束字符,最多能接收80个字符
//{
recdata[datanumber++]=temp;
//}
temp=0;
}
URX0IF=0;//清标志
}
|
|