中级会员
- 积分
- 396
- 金钱
- 396
- 注册时间
- 2015-1-23
- 在线时间
- 42 小时
|
发表于 2016-8-11 11:30:39
|
显示全部楼层
//图像采集任务//设置任务优先级
#define CAMERA_TASK_PRIO 4
//设置任务堆栈大小
#define CAMERA_STK_SIZE 512
//任务堆栈
OS_STK CAMERA_TASK_STK[CAMERA_STK_SIZE];
//任务函数
void CAMERA_task(void *pdata);
//彩信
void CAMERA_task(void *pdata)
{
while(1)
{
if(send_flag2==0x0f)
{
send_flag2=0x00;
SIM900_MMC();
BEEP_BL(100);
}
delay_ms(10);
}
}
void SIM900_MMC(void)
{
SendCmm2("AT\r",4);
delay_ms1(500);
SendCmm2("AT\r",4);
delay_ms1(500);
SendCmm2("AT+CMMSINIT\r",13);
delay_ms1(500);
SendCmm2("AT+CMMSCURL=\"mmsc.monternet.com\"\r",36);
delay_ms1(500);
SendCmm2("AT+CMMSCID=1\r",14);
delay_ms1(500);
SendCmm2("AT+CMMSPROTO=\"10.0.0.172\",80\r",32);
delay_ms1(500);
SendCmm2("AT+CMMSSENDCFG=6,3,0,0,2,4\r",28);
delay_ms1(500);
SendCmm2("AT+SAPBR=3,1,\"Contype\",\"GPRS\"\r",35);
delay_ms1(500);
SendCmm2("AT+SAPBR=3,1,\"APN\",\"CMWAP\"\r",32);
delay_ms1(500);
SendCmm2("AT+SAPBR=1,1\r",14);
delay_ms1(1000);
SendCmm2("AT+SAPBR=2,1\r",14);
delay_ms1(500);
SendCmm2("AT+CMMSEDIT=1\r",15);
delay_ms1(500);
jpg_upload(PIC_BUFFER);//彩信图片数据
delay_ms1(8000);
SendCmm2("AT+CMMSRECP=\"18789415361\"\r",29);
delay_ms1(500);
SendCmm2("AT+CMMSSEND\r",13);
delay_ms1(12000);
SendCmm2("AT+CMMSEDIT=0\r",15);
delay_ms1(500);
SendCmm2("AT+SAPBR=0,1\r",14);
delay_ms1(500);
SendCmm2("AT+CMMSTERM\r",13);
delay_ms1(5000);
}
void jpg_upload(u8 PIC_BUFFER[])
{
u8 ID;
unsigned int y,D;
u8 i,temp;
i=0;
ID=0x00;
D=1;
GETJPG();
delay_ms1(1000);
do
{
L=0;
y=4;
dynamic_ID(ID);//ID的初始值为0,ID是为了统计一共传了多少包数据
delay_ms1(200);
//打包数据
if(L==134)//说明接收到刚好一包数据(00 00占二个字节,80 00占二个字节,一包数据占128个字节,校验和占一个字节 00(包尾,固定的一直是00)占一个字节总共134个数据,说明接收到刚好一包数据
{
for(i=0;i<128;i++)
{
packet_data_buffer[i]=PIC_BUFFER[y];
if(PIC_BUFFER[y-1]==0xFF&&PIC_BUFFER[y]==0xD9){D=0;break;} //0xFF,0xD9 EOI(end of image)。jpge图片结束标记
y++;
}
SendCmm2(packet_data_buffer,128);
delay_ms1(100);
}
if(L<134)
{
for(i=0;i<128;i++)
{
packet_data_buffer[i]=PIC_BUFFER[y];
if(PIC_BUFFER[y-3]==0xFF&&PIC_BUFFER[y-2]==0xD9){D=0;break;}
temp=i;//注意:这里的temp是为了记录当遇到图片结束位即FF D9时i的值,如果i=130说明数据包刚好为128个字节,那么此时L=134是上面那种情况(此时的
y++;
}
SendCmm2(packet_data_buffer,temp);
delay_ms1(100);
} ID++;
}while(D==1); //当D=0时跳出while循环。
}
void GETJPG()
{
int PIClength;
u8 SYNC_ID[]={0xAA,0x0D,0x00,0x00,0x00,0x00};//连接
u8 CAM_ACK[]={0xAA,0x0E,0x0D,0x00,0x00,0x00}; //应答
u8 CAM_PIXEL[]={0xAA,0x01,0x00,0x07,0x07,0x03};//分辨率
u8 CAM_PACKAGE_SIZE[]={0xAA,0x06,0x08,0x86,0x00,0x00};//包大小02为512字节FF为整个图片
u8 CAM_COMP[]={0xAA,0x05,0x00,0x00,0x00,0x00};//压缩图片
u8 CAM_GET_IMAGE[]={0xAA,0x04,0x01,0x00,0x00,0x00};//获得相片
int i;
CAMERON=1;
delay_ms1(500);
for(i=0;i<38;i++) //主机与 GXT-M201 建立连接 主机发出同步请求 ( 波特率为 115200bps) 后 , 等待接收 GXT-M201 的应答
//(通常需要发出 1-2 次同步请求就可收到应答)。
//注意:最多发送60次同步请求
{
SendCmm5(SYNC_ID,6);delay_ms1(50);
if(RET==0xAA) //说明接收到应答了,当接收到应答后跳出
{L=0; break;}
}
SendCmm5(CAM_ACK,6);
delay_ms1(50);
SendCmm5(CAM_PIXEL,6);
delay_ms1(50);
SendCmm5(CAM_PACKAGE_SIZE,6);
delay_ms1(50);
SendCmm5(CAM_COMP,6);
delay_ms1(1000);
L=0;
SendCmm5(CAM_GET_IMAGE,6);
delay_ms1(1000);
PIClength=PIC_BUFFER[10]*256+PIC_BUFFER[9];
AT_CMMSDOWN[18]=PIClength/1000+0x30;
AT_CMMSDOWN[19]=PIClength%1000/100+0x30;
AT_CMMSDOWN[20]=PIClength%100/10+0x30;
AT_CMMSDOWN[21]=PIClength%10+0x30;
for (i=18;i<22;i++)
{MMS_PIC_Num[i]=AT_CMMSDOWN[i];}
//彩信文本
SendCmm2("AT+CMMSDOWN=\"TEXT\",22,3000\r",30);//发送彩信文本大小
delay_ms1(500);
SendCmm2(MMS_PIC_Num,24);
delay_ms1(2000);
//彩信图片
SendCmm2(AT_CMMSDOWN,32);//发送彩信图片大小
delay_ms1(500);
}
void SendCmm5(u8 *cmd,int t) //串口1发送命令
{
int i;
FLAG=0x00;
for(i=0;i<t;i++)
{
sendchar5(cmd[i]);
delay_us(5);
FLAG=i;
}
}
void sendchar5(u8 c)
{
UART5->DR=c;
while((UART5->SR&0x40)==0);
}
u8 CAM_IMAGE_ID[]={0xAA,0x0E,0x00,0x00,0x00,0x00};//相片ID号
//相片ID定义函数//
void dynamic_ID(u8 IDD)
{
// IDD=IDD-1;
CAM_IMAGE_ID[4]=IDD;
SendCmm5(CAM_IMAGE_ID,6);
}
执行了这个任务后,不能切换到别的任务,卡在了这个任务,大神能不能帮看一看?
|
|