硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2554|回复: 7
收起左侧

[μCOS-II] 串口处理任务和串口接收中断之间是否存在需要保护的临界区?

[复制链接]

65

主题

432

回帖

632

积分

金牌会员

积分
632
发表于 2020-6-10 22:17:34 | 显示全部楼层 |阅读模式
typedef struct
{
    u8 rxTotal;
    u8 rxBuf[96];   

    u8 txNum;
    u8 txTotal;
    u8 txBuf[160];   
}UART_MyTypeDef;

上面是我定义的串口缓存结构类型,

在串口任务里
{
    while(1)
    {
          OSTimeDly(2);
           if(sMyUart1.rxTotal)
           {
                       。。。。。。。。处理数据,都是读接收缓冲区
           }

          //处理完数据后清除
          sMyUart1.rxTotal = 0;
    }
}

在串口接收中断里
void USART1_IRQHandler(void)
{
        if(sMyUart1.rxTotal >= 96)                                              //溢出管理
        {
            sMyUart1.rxTotal = 0;
        }
        。。。。。。。。。。。。。。。。。。
}

那么现在的问题是,对于sMyUart1.rxTotal变量,在串口任务里和串口中断里都要进行写操作,那么是否需要
在串口任务里对该变量写操作之前要关中断呢,也就是进行进入临界区之前的保护?

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107157
QQ
发表于 2020-6-10 22:54:57 | 显示全部楼层
要个有必要的。
回复

使用道具 举报

1

主题

21

回帖

24

积分

新手上路

积分
24
发表于 2020-6-10 23:42:55 | 显示全部楼层
恰巧在调试类似问题:偶尔某个参数被通信误改写。
教训是处理接收报文时,先关掉接收中断或者关掉485芯片的接收使能。
回复

使用道具 举报

2

主题

180

回帖

186

积分

初级会员

积分
186
发表于 2020-6-11 08:30:58 | 显示全部楼层
肯定要有,虽然遇到几率很小
回复

使用道具 举报

6

主题

93

回帖

111

积分

初级会员

积分
111
发表于 2020-6-11 09:04:03 | 显示全部楼层
我一般串口都是开DMA,然后用环形缓冲区去做处理,数据长度不够等,超时数据丢弃
回复

使用道具 举报

19

主题

311

回帖

368

积分

高级会员

积分
368
发表于 2020-6-11 09:50:03 | 显示全部楼层
我是这样用的
#if 0
/* use freertos interrupt */
#include "FreeRTOS.h"
#include "task.h"
#define UART_DISABLE_INT()   taskENTER_CRITICAL()
#define UART_ENABLE_INT()    taskEXIT_CRITICAL()
#else
/* global interrupt */
#define UART_DISABLE_INT()   __disable_irq()     /* disable global interrupt */
#define UART_ENABLE_INT()    __enable_irq()      /* enable global interrupt */
#endif
回复

使用道具 举报

17

主题

63

回帖

114

积分

初级会员

积分
114
发表于 2020-6-11 14:45:08 | 显示全部楼层
一般要搞个FIFO缓冲区,串口收到数据直接丢进去,主程序另开一个线程从FIFO直接循环处理,直至队列为空,这是接收,发送过程也要这样
回复

使用道具 举报

3

主题

111

回帖

120

积分

初级会员

积分
120
发表于 2020-6-12 00:00:17 | 显示全部楼层
这个做个环形FIFO,一个中断内写的变量p_in,一个任务读用的变量 p_out,用的时候注意边界应该就可以了吧
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-20 21:43 , Processed in 0.202930 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表