stm32+ucosII建立串口通信等多任务的实现
来源:互联网 发布:jaya编程培训班 编辑:程序博客网 时间:2024/06/12 06:16
关于ucos的知识,目前是边做项目边加深理解,感觉还是有些欠缺,希望能从自己的代码经历中能总结出精髓。个人能力有限,编写边更新,难免有误,还望轻拍.
一、mailbox还是全局变量的问题
一般在任务间传递数据是采用mialbox,全局变量无法实现多任务按照时间片执行的目的。
2017/8/24 更新
设计的大概思想是:
中断接收,然后邮箱传递。目的任务去接收信息
void USART1_IRQHandler(void)
{
static unsigned char msg[512];
unsigned int i;
OS_CPU_SR cpu_sr;
OS_ENTER_CRITICAL(); /* Tell uC/OS-II that we are starting an ISR */
OSIntNesting++;
OS_EXIT_CRITICAL();
if(USART_GetITStatus(USART1, USART_IT_RXNE )==SET)
{
USART_ClearITPendingBit(USART1,USART_IT_RXNE);
msg[Usart1_RXLen] = USART_ReceiveData(USART1);
Usart1_RXLen++;
if(Usart1_RXLen==10)
{
Usart1_RXLen=0;
OSMboxPost(AppUsart2Mbox,(void *)&msg); //把信息发出去
}
}
if(USART_GetFlagStatus(USART1,USART_FLAG_ORE) == SET)
{
USART_ClearFlag(USART1,USART_FLAG_ORE); //?SR
USART_ReceiveData(USART1);
}
OSIntExit(); /* Tell uC/OS-II that we are leaving the ISR */
}
任务执行
void Task_1_Usart1(void *p_arg)
{
INT8U err;
unsigned char * msg;
(void)p_arg;
while(1){
OSTimeDlyHMSM(0, 0, 0, 20);
msg=(unsigned char *)OSMboxPend(AppUsart2Mbox,0,&err);
if(msg[0]=='#' )
{
while(TxCounter < 10)
{
USART_SendData(USART1, msg[TxCounter++]);
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET)
{}
}
TxCounter = 0;
}
}
}
接收长度为10的字符串,字符串以#字符开始,判断完字头把数据发出。
思考:
1、如果数据长度不确定,怎么判定字符的结束。
2、如果每个字符串里面含有长度信息,乱码怎么清除长度
待续
- stm32+ucosII建立串口通信等多任务的实现
- STM32的串口通信
- ucosii之任务的同步与通信
- ucosii之任务的同步与通信
- ucosii 任务的同步与通信复习
- 如何建立cc2430串口与上位机通信的任务
- stm32+ucosII+usart串口的接收,重在分析过程
- STM32上使用UCOSII--任务
- stm32的UART串口通信
- 两种方法实现stm32的8个串口通信
- STM32串口多机通信
- STM32串口实现485双机通信原理
- UCOSii(四)——任务的通信与同步
- stm32串口通信(初学者对于串口通信的理解)
- stm32串口通信(初学者对于串口通信的理解)
- 【转】如何建立cc2430串口与上位机通信的任务
- 初识ucosii多任务
- ucosii 多任务
- TCP/IP 协议:三次握手与四次挥手
- POJ3233-Matrix Power Series
- JVM调优总结 -Xms -Xmx -Xmn -Xss
- HDU 6024 Building Shops(DP)
- 将大文本文件分割成多个小文件
- stm32+ucosII建立串口通信等多任务的实现
- Scrapy Unhandled error in Deferred
- SQLSERVER 中GO
- Activity栈管理
- 在W3C标准定义的阻止事件向父容器传递的方法
- 2017 网易笔试
- ZZULIOJ 2181: GJJ的日常之暴富梦
- 三相电机 驱动
- 算法导论习题自做2.1-4