文章来源 农民讲习所 发的一篇 (设计者.叶志伟)《建立通用处理程序》
其中涉及到 指针使用 内存分配 串口处理等
注意 其中 串口使用了函数 未处理重入函数
- /*********************************************************************************
- **@CPU @ AT89S52
- **@RAM @ 256Bytes
- **@ROM @ 0x0000-0x1fff
- **@时间@ 12/19/09
- **@环境@ keil uv3 v8.16
- **@整理@ jerkoh
- **@功能@ 51单片机模块化设计
- **@注意@ 请保留以下字样-> 版权.设计者.叶志伟.农民讲习所.21IcBBS
- *********************************************************************************/
- /*********************************************************************************
- **包含头文件
- *********************************************************************************/
- #include
- /*********************************************************************************
- **定义功能原型
- *********************************************************************************/
- void Memory_Init(unsigned char *pRamEnd);
- void Memory_Destory(void);
- void Memory_MemSet(unsigned char idata *pRam,unsigned char mChar,unsigned char mLen);
- unsigned char idata *Memory_Malloc(unsigned char mSize);
- void Queue_Init(void);
- void Queue_Destory(void);
- void Queue_Push(struct QueueBuffer *pQueueBuffer,unsigned char mData);
- void Queue_Clear(struct QueueBuffer *pQueueBuffer);
- unsigned char Queue_Pop(struct QueueBuffer *pQueueBuffer);
- unsigned char Queue_Read(struct QueueBuffer *pQueueBuffer,unsigned char mId);
- unsigned int Queue_Num(struct QueueBuffer *pQueueBuffer);
- struct QueueBuffer *Queue_Register(unsigned int mSize);
- void Uart08_Init(unsigned char SendBufferMax,unsigned char ReciBufferMax,unsigned char mBaud);
- void Uart08_Destory(void);
- /*********************************************************************************
- **定义结构体
- *********************************************************************************/
- struct QueueBuffer /*缓冲队列结构体*/
- { /*结构体内成员是指针占3字节*/
- unsigned char *aBufferStart; /*缓冲区起始点*/
- unsigned char *aBufferEnd; /*缓冲区结束点*/
- unsigned char *pIn; /*写指针*/
- unsigned char *pOut; /*读指针*/
- unsigned int mCount; /*缓冲区数据个数*/
- };
- struct Uart0
- {
- struct QueueBuffer *psSend; /*发送队列指针*/
- struct QueueBuffer *psReci; /*接收队列指针*/
- };
- /*********************************************************************************
- **申明全局变量及宏定义
- *********************************************************************************/
- #define mSendBufferMax 32 /*发送缓冲区最大数据个数*/
- #define mReciBufferMax 32 /*接收缓冲区最大数据个数*/
- #define Baud_9600_11M 6 /*9600 8/n/1*/
- /*宏定义串口发送*/
- #define Uart08_Push(x) do{Queue_Push(sUart0.psSend,x);\
- if(!fUart0_Send_OK){fUart0_Send_OK=1;TI=1;};\
- }while(0)
- /*宏定义串口接收*/
- #define Uart08_Pop() Queue_Pop(sUart0.psReci)
- /*宏定义读串口指定ID号*/
- #define Uart08_Read(x) Queue_Read(sUart0.psReci,x)
- /*宏定义读串口接受区数据个数*/
- #define Uart08_ReciNum() Queue_Num(sUart0.psReci)
- /*宏定义串口发送区清0*/
- #define Uart08_SendClear(x) do{Queue_Clear(sUart0.psend);}while(0);
- /*宏定义串口接收区清0*/
- #define Uart08_ReciClear(x) do{Queue_Clear(sUart0.pReci);}while(0);
- data struct Uart0 sUart0; /*定义串口的结构体*/
- bit fUart0_Send_OK; /*发送结束标记*/
- unsigned char idata *pRamEnd; /*内存指针尾*/
- /*用于测试的缓冲区*/
- unsigned char idata TestBuffer[32]={"Hello World!"};
复制代码
|