RTX临界段,中断锁与任务锁
os_resume
#include <rtl.h>
void os_resume (
U32 sleep_time ); /* Number of ticks the system was in sleep mode. */
说明:
返回值:
注意要点:
例程:
/* After Wake-up */
sleep = (tc - LPC_WWDT->TV) / 250;
}
os_resume(sleep);
os_suspend
#include <rtl.h>
U32 os_suspend (void);
说明:
返回值:
注意要点:
例程:
#include <rtl.h>
__task void os_idle_demon (void) {
uint32_t sleep;
SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk; /* Configure Cortex-M3 for deep sleep */
PWR->CR &= ~PWR_CR_PDDS; /* Enter Stop mode when in deepsleep */
PWR->CR |= PWR_CR_LPDS; /* Voltage regulator in low-power */
/* Enable LSI clock and wait until ready */
RCC->CSR |= RCC_CSR_LSION;
while ((RCC->CSR & RCC_CSR_LSIRDY) == 0);
/* Enable power interface clock */
RCC->APB1ENR |= RCC_APB1ENR_PWREN;
/* Disable backup domain write protection */
PWR->CR |= PWR_CR_DBP;
/* Select LSI as clock source for RTC and enable RTC */
RCC->BDCR &= ~RCC_BDCR_RTCSEL;
RCC->BDCR |= RCC_BDCR_RTCSEL_1;
RCC->BDCR |= RCC_BDCR_RTCEN;
/* Disable the write protection for RTC registers */
RTC->WPR = 0xCA;
RTC->WPR = 0x53;
/* Configure RTC auto-wakeup mode */
RTC->ISR &= ~RTC_ISR_WUTF; /* Clear wakeup timer flag */
RTC->CR &= ~RTC_CR_WUCKSEL; /* Set RTC clock to 2kHz */
RTC->CR |= RTC_CR_WUTIE; /* Enable RTC wakeup timer interrupt */
/* Configure EXTI line 22 for wakeup on rising edge */
EXTI->EMR |= (1 << 22); /* Event request is not masked */
EXTI->RTSR |= (1 << 22); /* Rising trigger enabled */
NVIC_EnableIRQ (RTC_WKUP_IRQn); /* Enable RTC WakeUp IRQ */
for (;;) {
/* HERE: include optional user code to be executed when no task runs. */
sleep = os_suspend (); /* OS Suspend */
if (sleep) {
RTC->ISR &= ~RTC_ISR_WUTF; /* Clear timer wakeup flag */
RTC->CR &= ~RTC_CR_WUTE; /* Disable wakeup timer */
while ((RTC->ISR & RTC_ISR_WUTWF) == 0);
/* RTC clock is @2kHz, set wakeup time for OS_TICK >= 1ms */
RTC->WUTR = (sleep * (OS_TICK / 1000) * 2);
RTC->CR |= RTC_CR_WUTE; /* Enable wakeup timer */
__WFE (); /* Enter STOP mode */
/* After Wake-up */
if ((RTC->ISR & RTC_ISR_WUTF) == 0) {
sleep = 0; /* We didn't enter Stop mode */
}
}
os_resume (sleep); /* OS Resume */
}
}
tsk_lock
#include <rtl.h>
void tsk_lock (void);
说明:
返回值:
注意要点:
例程:
#include <rtl.h>
void protect_critical_op () {
tsk_lock ();
do_critical_op ();
tsk_unlock ();
}
tsk_unlock
#include <rtl.h>
void tsk_unlock (void);
说明:
返回值:
注意要点:
例程:
#include <rtl.h>
void protect_critical_op () {
tsk_lock ();
do_critical_op ();
tsk_unlock ();
}
转载于:https://www.cnblogs.com/dengxiaojun/p/fee1ab410029b002b7dd4979bf451640.html
RTX临界段,中断锁与任务锁相关推荐
- FreeRTOS源码分析与应用开发01:中断配置与临界段
目录 1. 异常与中断的基本概念 1.1 异常分类 1.2 中断概述 1.2.1 中断处理宜短暂 1.2.2 临界段影响中断实时性 1.3 中断硬件基础 1.3.1 外设 1.3.2 中断控制器 1. ...
- 【FreeRTOS】06 临界段的保护——关中断和关调度
本节来讲一讲FreeRTOS如何保护临界段,先讲临界段的概念,再讲保护临界段的方法. 1)临界段的概念 简单来讲,临界段是一段执行时不允许被中断(或其他任务)打断的代码:如果被打断,就有可能运行出错. ...
- freertos临界段保护
freertos临界段保护 中断的基础知识 cortex-m里面开中断.关中断指令 关中断和开中断 进入临界段和退出临界段 中断的基础知识 嵌套: 嵌套向量中断控制器 NVIC(Nested Vect ...
- FreeRTOS 临界段和开关中断
以下转载自安富莱电子: http://forum.armfly.com/forum.php 临界段 代码的临界段也称为临界区,一旦这部分代码开始执行,则不允许任何中断打断.为确保临界段代码 的执行不被 ...
- FreeRTOS — 临界段和开关中断
以下内容转载自安富莱电子:http://forum.armfly.com/forum.php 1.临界段 代码的临界段也称为临界区,一旦这部分代码开始执行,则不允许任何中断打断.为确保临界段代码的执行 ...
- mysql 隐式锁和显示锁_锁的类型以及粒度,两段锁协议,隐式和显示锁
锁的粒度 行级锁 表级锁 应尽量只锁定需要修改的那部分数据,而不是所有资源.锁定的数据量越少,发生锁争用的可能性就越小,并发行就越高. 加锁需要消耗资源,锁的各种操作都会增加系统开销.因此锁的粒度越小 ...
- FreeRTOS中断配置与临界段
Cortex-M中断 中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序(中断服务程序),处理完毕后又返回原被暂停的程序继续运行.Cortex- ...
- 中断、信号、锁、信号量
1. 碎碎念 作为一个上学能忘记带书包,出门能忘记带钥匙的人.兴冲冲的去看书,发现自己木有带书,只带了电脑,好像也就没什么可奇怪的了.好在现在是 2019 年,在网上找了下要看书的 pdf 版,完美解 ...
- 自旋锁、互斥锁和信号量
自旋锁 Linux内核中最常见的锁是自旋锁(spin lock).自旋锁最多只能被一个可执行线程持有.如果一个执行线程试图获得一个已经被持有的自旋锁,那么该线程就会一直进行忙循环--旋转--等待锁重新 ...
最新文章
- Next.js 7发布,构建速度提升40%
- vxworks中断的使用
- emmc boot1 boot2 partition
- core Bluetooth(蓝牙4.0)
- 武科大计算机专业分数线,武汉科技大学计算机类(中外合作办学)专业2016年在湖北理科高考录取最低分数线...
- 揭秘!月薪30K的大牛到底看了哪些视频?【共2000G】
- windows03系统安装08sql数据库
- 区块链开发(二)以太坊客户端基本操作命令
- atitit.md5算法的原理 与 总结
- Two sum (bilibili有讲解视频)
- 科学研究设计七:单案例设计
- Tuxera NTFS如何解决硬盘无法写入文件教程分享
- unb计算机科学,【加拿大新布伦瑞克大学】加拿大UNB_University of New Brunswick - 加拿大大学 - 加拿大留学云...
- linux下mtr命令,linux-常用命令-mtr(示例代码)
- 如何安装projectlombok
- Docker版本名称YY.MM修改聚焦
- linux+安装xp系统下载,linux系统怎么安装xp系统
- python初始化二维矩阵
- 2023湖北大学计算机考研信息汇总
- 大专的电子信息工程技术学什么?
热门文章
- 计算机网络之网络架构
- 测试面试题之bug的生命周期?你是怎么跟进bug的?
- 从文人相轻说开去...
- IOS 之 NSArray 数组方法详解(3)
- 【AUTOSAR-CanTp】-2.11-UDS诊断响应帧数据段data padding数据填充和data optimization数据优化(理论+配置)
- 欧冶云商将于11月4日上会:上半年营收566亿元,毛利率整体较低
- 计算机专业基础知识(上)
- 不仅霸占双眼,屏幕正在让智能音箱进入下一版本
- 网站制作时要注重策划
- 【转载】 Android 开发环境下载地址 -- 百度网盘 adt-bundle android-studio sdk adt 下载