您好,
我使用的是msp430g2553,因为我总是需要刷新缓冲区以便使用memset。但当我使用它时 ,我的程序被卷入copy_decpress_rLE.c,在这个函数中,下面的语句被写入,
"由于代码大小的原因,MSP不使用memset,而memset不使用
适用于大型代码,小型数据模型。"
我的缓冲区大小是400字节,它是全局的。
在添加代码的某些部分之前,我可以使用memset,但在添加strstr函数之后,我遇到了这个问题。
我也尝试使用用户定义的strstr和memset,但没有得到输出。
我要在此处粘贴我的代码,
谢谢!
/******************************************************************************** /
#include<msp430g2553.h>
#include<stdio.h>
//#include<string.h>
//#include<stdlib.h>
#define size 400
#define OK "确定\r\n"
CHAR标志;
void send_wifi (void);
无符号int i1;
无符号字符I;
字符[大小];
静态无符号字符命令=1;
char *var;
void Ow_memset (void *,int,int);
CHAR* StrStr (CHAR *,CHAR *);
内部主(无效)
{
WDTCTL = WDTPW + WDTHOLD;//停止WDT
IF (CALBC1_1MHz=0xFF)// If calibration constant erased
{
while (1);//不加载,捕获CPU!!
}
P1DIR || BIT0 + BIT6;
P1OUT &=~(BIT0 + BIT6);
P1DIR = 0x01;
DCOCTL = 0;//选择最低DCOx和MODx设置
BCSCTL1 = CALC1_1MHz;//设置DCO
DCOCTL = CALDCO_1MHz;
P1SEL = BITS1 + BITS2;// WFP 1.1 = RXD,WFP 1.2 = TXD
P1SEL2 = BITS1 + BITS2;// WFP 1.1 = RXD,WFP 1.2 = TXD
UCA0CTL1 |= UCSSEL_2;// SMCLK
UCA0BR0 = 104;// 1MHz 9600
UCA0BR1 = 0;// 1MHz 9600
UCA0MCTL = 0x02;//调制UCBRSx = 1
UCA0CTL1 &=~UCSWRST;//**初始化USCI状态机**
//IE2 |= UCA0TXIE;
IE2 |= UCA0RXIE;//启用USI_A0 RX中断
__enable_interrupt ();//启用全局中断
send_wifi();
}
void UART_PUT (CHAR * CH1)
{
i=0;
own memset (ch,0,size);
while (*通道1)
{
UCA0TXBUF =*通道1++;
while (!(IFG2和UCA0TXIFG));
}
}
#pragma vector=USCIAB0RX_vector
__interrupt void USCI0RX_ISR(void)
{
同时(!(IFG2和UCA0RXIFG));// USI_A0 RX缓冲器就绪?
CH[I++]= UCA0RXBUF;// RX -> RXed字符
IFG2 &=~UCA0RXIFG;
IF (flag == 1)
{
IF (i == 150)
IE2 &=~UCA0RXIE;
}
IF (I=419)
i=0;
}
void响应(car *p)
{
IF(StrStrStr(cch,p)||StrStrSt(cch,"no change")||StrStrSt(cch,"link is builded")
{
Command++;
IF (命令== 7)
{
i=0;
own memset (ch,0,size);
}
}
else if (StrStr (ch,"busy"))
命令--;
else if (StrStrStr (ch,"link is not "))
命令--;
}
void send_wifi (void)
{
char *p,*q,b[50],c[50],i, j;
同时(1)
{
交换机(命令)
{
案例1:UART_Put ("ATE0\r\n");
Command++;
中断;
案例2:答复(确定);
中断;
案例3:UART_Put ("AT+CIPMUX=1\r\n");
Command++;
中断;
案例4:答复(确定);
中断;
案例5:UART_Put ("AT+CIPSERVER=1,80\r\n");
Command++;
中断;
案例6:答复(确定);
中断;
案例7:答复(":Get");
//po=strstrstr (ch,"+ipd");
中断;
案例8:UART_Put ("AT+CIPSEND=IPSEND\r\n" 0237);
// sprintf (buf,"AT+CIPSEND=%c,237\r\n",*(PO+5));
// UART_PUT (buf);
Command++;
中断;
判例9:response (">");
中断;
}
if(command >9)
中断;
}
__DELAY周期(100万);
命令=1;
UART_Put ("<H1>输入您的SSID和密码。</H1><form action=\"action_page.php\">SSID:<br /><input type=\"text\" name="SSID\" value="\"\"><br >密码:<br /><input type="password\" name="submit"\n""></text></text></text></text></text><\"/"></text></text></text></text></text></text><\"/<\"/<\"/></text></text></text></text></text></text></text></text></text></text></text></text></text></text></text></text></text></text></text></text><\"/</</</</></text></text></
标志=1;
p=(char *) StrStr (ch,"SSID");
Q=(car *)StrSt(cch,"&password");
对于(i=5,j=0;(p+i)!=q;i++,j++)
b[j]=p[i];
b[j++]='\r';
b[j++]='\n';
b[j]='\0';
P=StrStr (ch,"HTTP");
对于(i=10,j=0;(q+i)!=p;i++,j++)
c[j]=q[i];
c[j++]='\r';
c[j++]='\n';
c[j]='\0';
UART_Put (c);
UART_PUT (b);
同时(1)
{
交换机(命令)
{
案例1:响应("HTTP / 1.1 ");
中断;
案例2:UART_Put (ch);
Command++;
中断;
案例3:回应("我们必须重启");
中断;
案例4:UART_Put ("AT+RST\r\n");
Command++;
中断;
个案5:回应(「准备就绪」);
中断;
默认值:Break;
}
}
}
CHAR* StrStrStr (char *str,char *substr)
{
同时(*str)
{
char *begin = str;
char *pattern = substr
//如果子字符串的第一个字符匹配,请检查整个字符串
while (*str &&*pattern &&*str ==*pattern)
{
STR++;
模式++;
}
//如果子字符串完全匹配,则返回起始地址
如果(!*pattern)
返回开始;
str = begin + 1;//增量主字符串
}
返回NULL;
}
void Ow_memset (void *ptr,int值,int大小)
{
IF (PTR!= NULL &&大小>0)
{
unsigned char *temp = ptr;
INT I = 0;
for (i = 0;i <大小;i++)
*temp++=(无符号字符)值;
}
}