硬汉嵌入式论坛

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

[μCOS-III] uCOS III V3.08.01低功耗停机模式+外部exti中断唤醒--详细操作

[复制链接]

19

主题

372

回帖

429

积分

高级会员

积分
429
发表于 2022-5-21 23:21:24 | 显示全部楼层 |阅读模式
近期的项目要用到时间片 + 低功耗停机功能,踩了不少坑,终于完美解决,经验分享如下:
配置:F411 + uCOS III V3.08.01 + 使能时间片(因此不能使用动态tick) + 低功耗停机模式(配置一个外部exti中断专门用于唤醒)+ HAL库

1. 停机模式的相关功能封装为1个函数,在IDLE任务的钩子函数里面调用,函数开始处OSSchedLock()锁定,结尾处OSSchedUnlock()解锁;

2. 外部exti唤醒中断,优先级为NKA,跟裸机中断一样,设置一个"volatile uint8_t low_power"变量,用作进入停机模式/唤醒的控制变量;
3. 执行停机命令前,禁止除外部exti外的所有中断(不包含systick中断),然后读取systick的计数值(用于唤醒后恢复计数值),最后禁止systick中断,初始化exti硬件,进入停机命令;
4. exti中断唤醒后,首先:uwTick,uwTickPrio,uwTickFreq,SystemCoreClock 等变量先恢复到初始值,然后SystemClock_Config()重新初始化系统时钟,再重新设置systick和pendsv的中断优先级;
5. 最后,首先恢复systick的计数值,再恢复systick中断,然后恢复其他所有中断;

及时进入低功耗停机状态,100%唤醒,运行正常


评分

参与人数 1金币 +100 收起 理由
eric2013 + 100 很给力!

查看全部评分

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106997
QQ
发表于 2022-5-22 09:06:42 | 显示全部楼层
谢谢分享。
回复

使用道具 举报

56

主题

905

回帖

1073

积分

至尊会员

积分
1073
发表于 2022-5-22 10:26:24 | 显示全部楼层

这种实战的才是满满的干货。 不知道threadx能否实现,并且两种的优劣比较是。。。。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106997
QQ
发表于 2022-5-22 14:35:04 | 显示全部楼层
roguebear 发表于 2022-5-22 10:26
这种实战的才是满满的干货。 不知道threadx能否实现,并且两种的优劣比较是。。。。

楼主位这个是通用的玩法,任意OS都可以方便实现的。
回复

使用道具 举报

19

主题

372

回帖

429

积分

高级会员

积分
429
 楼主| 发表于 2022-5-22 14:42:28 | 显示全部楼层
多谢多谢,多加点分哈~~准备升级金牌会员了
回复

使用道具 举报

3

主题

110

回帖

119

积分

初级会员

积分
119
发表于 2022-5-22 16:19:44 | 显示全部楼层
好帖,给楼主点赞
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-14 08:12 , Processed in 0.178768 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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