硬汉嵌入式论坛

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

[其它] 关于原子变量的问题

[复制链接]

1

主题

3

回帖

6

积分

新手上路

积分
6
发表于 2017-9-16 16:16:41 | 显示全部楼层 |阅读模式
现在在407平台串口中断作队列push,在线程pop数据,请问如果使用字节byte定义读写偏移量 p->in,p->out能否避免加锁操作?

******************************************************************************/
int HyQueue_PopChar(uint8_t nChannel)
{
    uint8_t nData = 0 ;
    HYBRID_QUEUE_STRUCT *p = &g_HyQueue[nChannel];
   
    if(p->in != 0)
    {
            nData = p->pBuf[p->out ++];
            if(p->out == p->in)
            {
                p->out = 0 ;
                p->in  = 0 ;
            }
            return nData ;
    }
    return - 1 ;
}



/**********************************************************************************
*push
***********************************************************************************/
int    HyQueue_PushChar(uint8_t nChannel, uint8_t nData)
{
    HYBRID_QUEUE_STRUCT *p = &g_HyQueue[nChannel];

    if(p->in < (HYBRID_QUEUE_BLOCK_SIZE-1))
    {
        p->pBuf[p->in++] = nData;
        return 1 ;
    }
    else
        return -1 ;
}
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106771
QQ
发表于 2017-9-18 00:58:53 | 显示全部楼层
这个避免不了哦。
回复

使用道具 举报

6

主题

231

回帖

249

积分

高级会员

积分
249
发表于 2017-9-18 16:13:02 | 显示全部楼层
串口收发数据,一收一发,采用环形缓冲区比消息队列好,不用做同步处理。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-6 00:41 , Processed in 0.162151 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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