硬汉嵌入式论坛

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

[FreeRTOS] 在网上看到“互斥量不能在ISR中使用”,有疑问。

[复制链接]

32

主题

88

回帖

184

积分

初级会员

积分
184
发表于 2024-7-4 11:22:57 | 显示全部楼层 |阅读模式
情景:这种情况下应该要加锁吧,我 的思路如下,但网上看到一句 【互斥量不能在ISR中使用】,那遇到下面的这种应用时要怎么处理或改写?
伪码:
[C] 纯文本查看 复制代码
uint8_t fla,cnt;
task()
{
     if(fla==1)
     {
加锁()
          fla=0
cnt=0
解锁()
          do();
     }
}
isr()
{
    if(fla==0)
{
加锁()
    cnt++
解锁()
    if(cnt>60)
    {
加锁()
       cnt=0
       fla=1
解锁()
    }
}
}

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115434
QQ
发表于 2024-7-4 11:27:32 | 显示全部楼层
任务里面开关中断,中断里面什么操作都不用做。
回复

使用道具 举报

32

主题

88

回帖

184

积分

初级会员

积分
184
 楼主| 发表于 2024-7-4 11:44:56 | 显示全部楼层
eric2013 发表于 2024-7-4 11:27
任务里面开关中断,中断里面什么操作都不用做。

那就是 任务里 不用加解锁操作,就在要修改这个变量的时候开关中断即可?那如果有中断+2个任务里都有对同一个变量进行修改,那2个任务里也不用加解锁操作?改为开关中断即可?这么理解是对的吧?
回复

使用道具 举报

33

主题

188

回帖

287

积分

高级会员

积分
287
发表于 2024-7-4 14:53:16 | 显示全部楼层
如果多个任务同时操作 任务里面是不是还是要加解锁的?
回复

使用道具 举报

0

主题

25

回帖

25

积分

新手上路

积分
25
发表于 2024-7-5 08:43:39 | 显示全部楼层
都上操作系统了还在用全局变量做标志位,个人建议不要这样玩
回复

使用道具 举报

32

主题

88

回帖

184

积分

初级会员

积分
184
 楼主| 发表于 2024-7-8 08:53:28 | 显示全部楼层
Zhyolo 发表于 2024-7-5 08:43
都上操作系统了还在用全局变量做标志位,个人建议不要这样玩

那请教该怎么改进?可以贴一下伪代码吗
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115434
QQ
发表于 2024-7-8 09:51:04 | 显示全部楼层
Y1ng 发表于 2024-7-4 11:44
那就是 任务里 不用加解锁操作,就在要修改这个变量的时候开关中断即可?那如果有中断+2个任务里都有对同 ...

开关中断和加解锁效果是一样的,只是这里没法用加锁了。
回复

使用道具 举报

32

主题

88

回帖

184

积分

初级会员

积分
184
 楼主| 发表于 2024-7-8 11:53:38 | 显示全部楼层
eric2013 发表于 2024-7-8 09:51
开关中断和加解锁效果是一样的,只是这里没法用加锁了。

这个ISR不能加解锁的来源依据是来自哪的呀?
回复

使用道具 举报

21

主题

481

回帖

544

积分

金牌会员

积分
544
发表于 2024-7-19 18:20:45 | 显示全部楼层
互斥量不是不能在ISR里面用,只是不能在ISR里等待(有效就用,无效就不用,不能等)
回复

使用道具 举报

1

主题

4

回帖

7

积分

新手上路

积分
7
发表于 2024-8-5 16:51:00 | 显示全部楼层
Zhyolo 发表于 2024-7-5 08:43
都上操作系统了还在用全局变量做标志位,个人建议不要这样玩

现在写程序,我还是全局变量比较多。例如按键改变屏幕符号,
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-26 04:37 , Processed in 0.305959 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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