|
发表于 2014-10-26 12:21:36
|
显示全部楼层
本帖最后由 myqiang1990 于 2014-10-26 12:32 编辑
本屌丝在一个WEB服务器里面接受加密文件用的~仅供参考~
- /*******************************************************************************
- ** 文件名: Queue.c
- ** 版本: 1.0
- ** 工作环境: RealView MDK-ARM 4.23
- ** 作者: 陈志强
- ** 生成日期: 2012-5-18
- ** 功能:
- ** 相关文件:
- ** 修改日志:
- ** 注意事项:
- 采用循环队列接收POST的数据,为什么要采用循环队列呢?因为TCP
- 每次发下来的数据你根本就不知道是多少到底是不是512的整数倍!
- 但是我们解码必须保证是512个字节的整数数据!
-
- *******************************************************************************/
- #include "stm32f4xx.h"
- #include "queue.h"
- #include <string.h>
- /*******************************************************************************
- *全局变量:
- *全局说明:
- ********************************************************************************/
- Q_Queue Dq;
- static uint32_t APPStartddress;
- static uint32_t IAPStartddress;
- u8 PrgBuffer[PBLOCK] = {0}; //编程缓冲
- /*******************************************************************************
- *函数原型:void Q_Int(void)
- *参数入口:no
- *参数出口: no
- *函数说明: no
- ********************************************************************************/
- void Q_Int(Q_Queue *q)
- {
- q->head = 0;
- q->tail = 0;
- q->size = 0;
- CleanData();
- APPStartddress = APPLICATION_ADDRESS;
- IAPStartddress = IAP_START_ADDRESS;
- }
- /*******************************************************************************
- *函数原型:void Q_In(Q_Queue *q, u8 data)
- *参数入口:no
- *参数出口: no
- *函数说明: 入队
- ********************************************************************************/
- static u8 Q_InPut(Q_Queue *q, u8 data)
- {
- if((q->tail + 1) % BLOCK == q->head)//满了
- {
- return Q_FULL;
- }
- else
- {
- q->Data[q->tail] = data;
- q->tail = (q->tail + 1) % BLOCK;
- q->size++;
- }
- return Q_OK;
- }
- /*******************************************************************************
- *函数原型:void Q_Out(Q_Queue *q, u8 *data)
- *参数入口:no
- *参数出口: no
- *函数说明: 出队
- ********************************************************************************/
- static u8 Q_OutPut(Q_Queue *q, u8 *data)
- {
- if(q->tail == q->head)//空
- {
- return Q_EMPTY;
- }
- else
- {
- *data = q->Data[q->head];
- q->head = (q->head + 1) % BLOCK;
- q->size--;
- }
- return Q_OK;
- }
- /*******************************************************************************
- *函数原型:void Q_DataInPut(Q_Queue *q, u8 *data, u16 len)
- *参数入口:no
- *参数出口: no
- *函数说明: 数据入队
- ********************************************************************************/
- u8 Q_DataInPut(Q_Queue *q, u8 *dataaddr, u16 len)
- {
- u16 i = 0;
- for(i = 0; i < len; i++)
- {
- if(Q_InPut(q, *(dataaddr + i)) == Q_FULL)
- return Q_FULL;
- }
- return Q_OK;
- }
- /*******************************************************************************
- *函数原型:u8 Q_DataOutPut(Q_Queue *q, u8 *buffer, u16 len)
- *参数入口:no
- *参数出口: no
- *函数说明: 处理
- ********************************************************************************/
- u8 Q_DataOutPut(Q_Queue *q, u8 *buffer, u16 len)
- {
- u16 i = 0;
- for(i = 0; i < len; i++)
- {
- if(Q_OutPut(q, buffer + i) == Q_EMPTY)
- return Q_EMPTY;
- }
- return Q_OK;
- }
复制代码- /*******************************************************************************
- ** 文件名: Queue.h
- ** 版本: 1.0
- ** 工作环境: RealView MDK-ARM 4.23
- ** 作者: 陈志强
- ** 生成日期: 2012-5-18
- ** 功能:
- ** 相关文件:
- ** 修改日志:
- ** 注意事项:
- 循环队列
- *******************************************************************************/
- #ifndef _QUEUE_H_
- #define _QUEUE_H_
- /*******************************************************************************/
- #define BLOCK 5120
- #define PBLOCK 512
- #define Q_FULL 0x01
- #define Q_EMPTY 0x02
- #define Q_OK 0x03
- /*******************************************************************************/
- typedef struct
- {
- u32 head;
- u32 tail;
- u32 size;
- u8 Data[BLOCK];
- }Q_Queue;
- extern Q_Queue Dq;
- #define CleanData() memset(Dq.Data, 0, BLOCK)
- /*******************************************************************************/
- void Q_Int(Q_Queue *q);
- u8 Q_DataInPut(Q_Queue *q, u8 *dataaddr, u16 len);
- u8 Q_DataOutPut(Q_Queue *q, u8 *buffer, u16 len);
- void ProgameHanld(Q_Queue *q);
- /*******************************************************************************/
- #endif
复制代码 |
|