文章目录

  • 1 嵌套中断共享资源问题及解决

1 嵌套中断共享资源问题及解决

这个问题可以使用三种方式解决:

  1. 关总中断。
  2. 关指定中断。
  3. 请求模式解决嵌套中断共享资源问题。

这里采用关总中断的方式解决,代码如下:

/*** @brief tOS应用示例* @details* @author 01课堂 李述铜 http://01ketang.cc* @date 2017-06-01* @version 1.0* @copyright 版权所有,禁止用于商业用途*/
#include "tinyOS.h"
#include "app.h"
#include "hal.h"static tTask task1;                     // 任务1结构
static tTask task2;                     // 任务2结构
static tTask task3;                     // 任务3结构
static tTask task4;                     // 任务4结构static tTaskStack task1Env[TASK1_ENV_SIZE];     // 任务1的堆栈空间
static tTaskStack task2Env[TASK2_ENV_SIZE];     // 任务2的堆栈空间
static tTaskStack task3Env[TASK3_ENV_SIZE];     // 任务3的堆栈空间
static tTaskStack task4Env[TASK4_ENV_SIZE];     // 任务4的堆栈空间int task1Flag;           // 用于指示任务运行状态的标志变量
int task2Flag;           // 用于指示任务运行状态的标志变量
int task3Flag;           // 用于指示任务运行状态的标志变量
int task4Flag;           // 用于指示任务运行状态的标志变量int globalVar = 0;      // 被任务、两个中断所共享的全局变量/*** 高优先级中断处理函数*/
void IRQHighHandler (void) {globalVar += 3;
}/*** 中优先级中断处理函数*/
void IRQMiddleHandler (void) {int temp;tTaskCritical_t critical;critical = tTaskEnterCritical();temp = globalVar + 2;interruptByIRQ(IRQ_PRIO_HIGH);          // 回写前被高优先级打断globalVar = temp;tTaskExitCritical(critical);
}/*** 任务的运行代码* @param param 任务初始运行参数*/
void task1Entry (void *param) {interruptByIRQ(IRQ_PRIO_MIDDLE);xprintf("IRQ Middle: %d", globalVar);for (;;) {task1Flag = 1;tTaskDelay(1);task1Flag = 0;tTaskDelay(1);}
}/*** 任务的运行代码* @param param 任务初始运行参数*/
void task2Entry (void *param) {for (;;) {task2Flag = 1;tTaskDelay(1);task2Flag = 0;tTaskDelay(1);}
}/*** 任务的运行代码* @param param 任务初始运行参数*/
void task3Entry (void *param) {for (;;) {task3Flag = 1;tTaskDelay(1);task3Flag = 0;tTaskDelay(1);}
}/*** 任务的运行代码* @param param 任务初始运行参数*/
void task4Entry (void *param) {for (;;) {task4Flag = 1;tTaskDelay(1);task4Flag = 0;tTaskDelay(1);}
}/*** App的初始化*/
void tInitApp (void) {halInit();interruptEnable(IRQ_PRIO_HIGH, 1);interruptEnable(IRQ_PRIO_MIDDLE, 1);tTaskInit(&task1, task1Entry, (void *) 0x0, TASK1_PRIO, task1Env, sizeof(task1Env));tTaskInit(&task2, task2Entry, (void *) 0x0, TASK2_PRIO, task2Env, sizeof(task2Env));tTaskInit(&task3, task3Entry, (void *) 0x0, TASK3_PRIO, task3Env, sizeof(task3Env));tTaskInit(&task4, task4Entry, (void *) 0x0, TASK4_PRIO, task4Env, sizeof(task4Env));
}

参考资料:

  1. 手把手教你学用嵌入式操作系统

嵌套中断共享资源问题及解决相关推荐

  1. 请求模式解决共享资源冲突

    文章目录 1 请求模式解决共享资源冲突 1 请求模式解决共享资源冲突 原有方式: 我们可以对其进行改进,统一处理: 代码如下: /*** @brief tOS应用示例* @details* @auth ...

  2. Java多线程学习三十一:ThreadLocal 是用来解决共享资源的多线程访问的问题吗?

    ThreadLocal 是不是用来解决共享资源的多线程访问的. 这是一个常见的面试问题,如果被问到了 ThreadLocal,则有可能在你介绍完它的作用.注意点等内容之后,再问你:ThreadLoca ...

  3. 解决”不允许一个用户使用一个以上用户名与一个服务器或共享资源的多重连接“问题

    解决"不允许一个用户使用一个以上用户名与一个服务器或共享资源的多重连接"问题 参考文章: (1)解决"不允许一个用户使用一个以上用户名与一个服务器或共享资源的多重连接&q ...

  4. 2017-06-13共享时出现错误,没有启动服务器服务,此时尚未创建共享资源”的解决办法

    1.原因windows xp 不能共享 处理了 computer brower+server 都正常,只是windows 防火墙不能启动 后来使用了windowsrepair解决了些问题!在些给大家提 ...

  5. Java-如何解决多线程当中共享资源的冲突问题

    解决多线程当中共享资源冲突的问题 1. 冲突问题展示: /** 共享资源冲突的问题*/ class SingleThread implements Runnable {// 共享资源,100张票pri ...

  6. “不允许一个用户使用一个以上用户名与一个服务器或共享资源的多重连接”问题的解决

    作者:朱金灿 来源:http://blog.csdn.net/clever101 有时在访问共享文件夹时出现"不允许一个用户使用一个以上用户名与一个服务器或共享资源的多重连接",下 ...

  7. w10系统无法访问xp计算机名,解决winxp系统无法访问win10系统共享资源的方法

    如今我们的电脑win7和win10可以正常互访共享资源,win10也可以直接访问winxp共享的资源,但是winxp系统却无法直接进访问win10系统共享的资源下面是学习啦小编为大家整理的关于解决wi ...

  8. w10系统无法访问xp计算机名,xp系统用户无法访问win10电脑上共享资源的解决方法...

    虽然微软已经发布了win10正式版,但是很多用户因为某些原因仍然无法放弃xp系统.不过,最近有一位XP系统用户反馈想通过局域网访问Windows10电脑上的共享资源,可是遇到了无法正常访问的问题,这是 ...

  9. Solaris下访问windows共享资源

    今在做实验过程中,发现上传软件太费时而且解压起来也繁琐,还要占用很大的空间,就在windows上创建了共享资源,在linux下使用mount挂载上来,直接解压在windows上面,用完了直接将解压的文 ...

最新文章

  1. Github GAN 非平稳纹理合成
  2. b超可以看出什么_【b超能检查出什么】b超能看出男女吗_b超能查出什么妇科病 - 妈妈网百科...
  3. matlab相关论文,matlab
  4. 类方法的实例python_Python Class 的实例方法/类方法/静态方法
  5. DEPENDS工具和DUMPBIN工具使用
  6. 网络编程 socket介绍
  7. C语言控制台应用程序绘制曲线,C语言控制台绘制曲线的实现代码
  8. es6 原生构造函数的继承
  9. 最大概率法分词及性能測试
  10. mysql 表字段部分替换
  11. javascript div 没id_javascript原生自定义轮播图组件
  12. mysql 怎么改属性_mysql怎么修改字段的属性
  13. C++实现24点游戏
  14. AGV机器人核心部件——驱动轮
  15. 高速PCB阻抗设计阻抗控制内参
  16. 《惢客创业日记》2019.05.18(周六)视频通话后的一个创意
  17. 关于华为应用市场的上架流程
  18. cmd chcp命令切换字符格式
  19. AI专业教您保姆级在暗影精灵8Windows11上本地部署实现AI绘画:Stable Diffusion(万字教程,多图预警)
  20. Mini RTK | 小巧精致、好测量

热门文章

  1. go语言能编android程序吗,用 Golang 开发 Android 应用(二)—— 简单 UI-Go语言中文社区...
  2. 【CoppeliaSim】使用 Lua 语言控制四旋翼无人机运行
  3. 【控制】《最优控制理论与系统》-胡寿松老师-第5章-线性最优状态调节器
  4. PyTorch 实现 VAE 变分自编码器 含代码
  5. 6.6 二分 K-Means 算法-机器学习笔记-斯坦福吴恩达教授
  6. Beyond Compare 3 许可证密钥被撤销
  7. 为什么要做scan extraction?
  8. linux HZ Tick Jiffies
  9. zynq 文件系统中加载PL fpga.bit笔记
  10. 华为与各国政府签订无间谍无后门协议