网站建设的需求客户,静态网站可以做哪些内容,重庆网站建设 渝icp,建设网站制作实训报告需求
总共11个串口#xff0c;现在每个串口接收BUFF分配1024个字节的收发缓冲区。原始方法将11个串口全部进行初始化#xff0c;分配大串口#xff0c;由于单片机RAM不足#xff0c;现在将串口1和串口2固定分配为大串口#xff0c;串口3-11随机选择2个作为大串口#xf…需求
总共11个串口现在每个串口接收BUFF分配1024个字节的收发缓冲区。原始方法将11个串口全部进行初始化分配大串口由于单片机RAM不足现在将串口1和串口2固定分配为大串口串口3-11随机选择2个作为大串口其他串口BUFF缓冲区配置为256字节的小串口总体可以节约5k左右ram空间。
思路
单独定义一个大串口接收和发送的结构体并且确立缓冲区大小为1024在原始的串口结构体中定义大串口标识符 Seril_index。根据串口不同的工作模式连接液晶屏幕或者其他当判断串口是大串口时 Seril_index保存大串口的串口号。
重新定义一个新的大串口结构体Seril_index;
typedef struct
{int Seril_index;u8 RxBuffer[MAXCOMBUFSIZE_PLUS];u8 TxBuffer[MAXCOMBUFSIZE_PLUS];
}UART_PLUS_BUF;
extern UART_PLUS_BUF stUartPlusBuf[PLUS_SERIAL_NUM];判断是否为大串口并更新选中的大串口状态 bool IsPlusBufSerial(u8 serial_index)
{bool isPlusBuf false;if(serial_index USART_NUM)return false;//大串口判断条件if (UartParam[serial_index].WorkMode UART_FUN_LCD ) {isPlusBuf true;}return isPlusBuf;
}部分代码实现
void Init_PlusUart()
{// //初始化大串口for (u8 i 0; i PLUS_SERIAL_NUM; i){if (i1)stUartPlusBuf[i].Seril_index i; if (i1)stUartPlusBuf[i].Seril_index -1; }// 更新选中的大串口状态u8 count 2;for (u8 i 2; i USART_NUM count PLUS_SERIAL_NUM; i){if (IsPlusBufSerial(i)) {if (stUartPlusBuf[count].Seril_index -1){stUartPlusBuf[count].Seril_index i;count;}}}//保护大串口参数u8 ucPlusUsartNum 2;for(u8 i2;iMAXUARTNUM;i){if (UartParam[i].WorkMode 3 || UartParam[i].PlusBufFlg 1){ucPlusUsartNum;}if (ucPlusUsartNum4){UartParam[i].WorkMode 0;UartParam[i].PlusBufFlg 65535;}}
}