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 ();}
RTX临界段,中断锁与任务锁的更多相关文章
- Linux——临界段,信号量,互斥锁,自旋锁,原子操作
一. linux为什么需要临界段,信号量,互斥锁,自旋锁,原子操作? 1.1. linux内核后期版本是支持多核CPU以及抢占式调度.这里就存在一个并发,竞争状态(简称竟态). 1.2. 竞态条件 发 ...
- RTX——第11章 临界段,任务锁和中断锁
以下内容转载自安富莱电子: http://forum.armfly.com/forum.php 临界段代码的临界段也称为临界区,一旦这部分代码开始执行,则不允许任何中断打断.为确保临界段代码的执行不被 ...
- FreeRTOS不允许在中断服务程序和临界段中执行不确定的性的操作
举例 等待事件标志组的任务,要是在中断服务程序中设置事件标志组,但不知道当前有多少个任务在等待此事件标志,这个操作即为不确定性操作,为了不在中断服务程序中执行此不确定性操作,只在中断服务程序中给一确定 ...
- FreeRTOS 调度锁,任务锁和中断锁
以下转载自安富莱电子: http://forum.armfly.com/forum.php 调度锁调度锁就是 RTOS 提供的调度器开关函数,如果某个任务调用了调度锁开关函数,处于调度锁开和调度锁关之 ...
- JAVA锁机制-可重入锁,可中断锁,公平锁,读写锁,自旋锁,
如果需要查看具体的synchronized和lock的实现原理,请参考:解决多线程安全问题-无非两个方法synchronized和lock 具体原理(百度) 在并发编程中,经常遇到多个线程访问同一个 ...
- FreeRTOS 临界段和开关中断
以下转载自安富莱电子: http://forum.armfly.com/forum.php 临界段代码的临界段也称为临界区,一旦这部分代码开始执行,则不允许任何中断打断.为确保临界段代码的执行不被中断 ...
- FreeRTOS 中断配置和临界段
中断屏蔽寄存器 PRIMASK.FAULTMASK和BASEPRI 1.PRIMASK:这是个只有1个位的寄存器.当它置1时, 就关掉所有可屏蔽的异常,只剩下 NMI和硬fault可以响应.它的缺省值 ...
- 8.0-uC/OS-III临界段
1.临界段 (临界段代码,也叫临界区,是指那些必须完整连续运行,不可被打断的代码段) 锁调度器,可以执行ISR,开启调度器不可执行ISR: (1).临界段代码,也称作临界域,是一段不可分割的代码. u ...
- jvm高级特性(6)(线程的种类,调度,状态,安全程度,实现安全的方法,同步种类,锁优化,锁种类)
JVM高级特性与实践(十三):线程实现 与 Java线程调度 JVM高级特性与实践(十四):线程安全 与 锁优化 一. 线程的实现 线程其实是比进程更轻量级的调度执行单位. 线程的引入,可以把一个检查 ...
随机推荐
- java第二周的学习知识4(对原码,补码,反码和java中浮点数计算不准确的总结)
原码:一个正数,转换为二进制位就是这个正数的原码.负数的绝对值转换成二进制位然后在高位补1就是这个负数的原码. 但是原码有几个缺点,零分两种 +0 和 -0 .很奇怪是吧!还有,在进行不同符号的加法运 ...
- vs 基本验证控件使用
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.c ...
- dedecms在后台替换文章标题、内容、摘要、关键字
dedecms在后台替换文章标题.内容.摘要.关键字所在的字段为: 后台替换文章内容 数据表:dede_addonarticle 字段:body 后台替换文章摘要内容 数据表:dede_archive ...
- sql语法中的中的with rollup
就一道ctf题分析 http://ctf5.shiyanbar.com/web/pcat/index.php 打开一看是个登陆框,首先想到的是盲注,查看源代码,有个源文件, $filter = &qu ...
- diff比较两个文件 linux
功能:比较两个文件的差异,并把不同地方的信息显示出来.默认diff格式的信息. diff比较两个文件或文件集合的差异,并记录下来,生成一个diff文件,这也是我们常说的补丁文件.也使用patch命令对 ...
- JS_高程5.引用类型(5)Array类型的操作方法
一.操作方法 1.concat()方法 基于当前数组中的所有项创建一个新数组.具体说,是先创建当前数组的一个副本,然后将接收到的参数添加到这个副本的末尾,最后返回新构建的数组.在没有给concat() ...
- Jetpack 迁移到 androidX support MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- Visual Studio进行Web性能测试- Part II
Visual Studio进行Web性能测试- Part II 2012-08-31 14:34 by 知平软件, 7557 阅读, 5 评论, 收藏, 编辑 原文作者:Ambily.raj 对于一个 ...
- Hadoop小文件存储方案
原文地址:https://www.cnblogs.com/ballwql/p/8944025.html HDFS总体架构 在介绍文件存储方案之前,我觉得有必要先介绍下关于HDFS存储架构方面的一些知识 ...
- Effective Java 第三版——76. 争取保持失败原子性
Tips 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java 9 API中的,所 ...