当前位置: 首页 > news >正文

申请网站建设费用的请示建设部招标网 官方网站

申请网站建设费用的请示,建设部招标网 官方网站,商家商城小程序,建筑业企业所得税2%1.以前临界资源的保护方式 有使用过静态局部变量来保护临界资源#xff0c;也有用队列#xff0c;信号量#xff0c;互斥量来保护临界资源。这些都是在多个任务会共同使用临界资源的情况下我们的保护方式。 问题提出#xff1a;如果有个传感器在读取数据时有严格的时序也有用队列信号量互斥量来保护临界资源。这些都是在多个任务会共同使用临界资源的情况下我们的保护方式。 问题提出如果有个传感器在读取数据时有严格的时序如果在读取数据中途被打断就会读取错误为了防止这一过程被打断我们会进行一些管理关闭中断或调度器。 1.2队列信号量/互斥量事件组任务通知内部如何实现互斥的  核心就是谁跟我抢我就屏蔽谁中断抢我就屏蔽中断任务要抢我就进制调度器。什么意思呢举两个例子。 1.2.1队列例子 我们可以在中断里去写队列也可以在任务里写队列所以在写队列的函数里一定是去关闭中断的。我们要知道调度器切换任务也是基于中断的我只关闭所有中断就可以达到防止任务和中断抢。因此写队列里一定是去关闭中断的。要注意的是关闭中断前先要记录当前中断的状态再关闭中断之后在根据记录的当前状态去恢复中断的状态。 写队列源码分析 中断写队列 从图中可以看出在中断中写队列先记录当前中断状态在返回中断状态的函数里执行了关闭中断的操作。在第二张图中是xQueueGenericSendFromISR函数末尾执行的一个恢复中断的一个函数。  任务写队列 1.2.2事件组例子 没有中断参与的我们只需要关闭调度器即可比如事件组事件组也有在中断中写事件组的函数为什么是关闭调度器呢 在写事件组函数内部去写一个Timer队列然后去守护任务会去唤醒定时器任务在任务里去写事件值。虽然他是在中断中执行的但是本质是去唤醒一个任务在任务中进行操作我们只需要停止调度器即可无需关中断。 ​​ 2.如何去关闭中断如何去关闭调度器 关闭中断 关闭中断就是去操作某个寄存器。 关闭调度器 设置一个变量把这个变量根据这个变量是否为0去判断是否要切换任务。 切换上下文 加了之后这个变量就不等于0就不进行切换。else才是执行任务切换。 2.1在任务中屏蔽中断 在任务中屏蔽中断的示例代码如下 /* 在任务中当前时刻中断是使能的* 执行这句代码后屏蔽中断*/ taskENTER_CRITICAL();/* 访问临界资源 *//* 重新使能中断 */ taskEXIT_CRITICAL();在 taskENTER_CRITICA()/taskEXIT_CRITICAL() 之间 低优先级的中断被屏蔽了优先级低于、等于 configMAX_SYSCALL_INTERRUPT_PRIORITY高优先级的中断可以产生优先级高于 configMAX_SYSCALL_INTERRUPT_PRIORITY 但是这些中断ISR里不允许使用FreeRTOS的API函数任务调度依赖于中断、依赖于API函数所以这两段代码之间不会有任务调度产生 这套 taskENTER_CRITICA()/taskEXIT_CRITICAL() 宏是可以递归使用的它的内部会记录嵌套的深度只有嵌套深度变为0时调用 taskEXIT_CRITICAL() 才会重新使能中断。 使用 taskENTER_CRITICA()/taskEXIT_CRITICAL() 来访问临界资源是很粗鲁的方法 中断无法正常运行任务调度无法进行所以之间的代码要尽可能快速地执行 2.2 在ISR中屏蔽中断 要使用含有FROM_ISR后缀的宏示例代码如下 void vAnInterruptServiceRoutine( void ) {/* 用来记录当前中断是否使能 */UBaseType_t uxSavedInterruptStatus;/* 在ISR中当前时刻中断可能是使能的也可能是禁止的* 所以要记录当前状态, 后面要恢复为原先的状态* 执行这句代码后屏蔽中断*/uxSavedInterruptStatus taskENTER_CRITICAL_FROM_ISR();/* 访问临界资源 *//* 恢复中断状态 */taskEXIT_CRITICAL_FROM_ISR( uxSavedInterruptStatus );/* 现在当前ISR可以被更高优先级的中断打断了 */ }在 taskENTER_CRITICA_FROM_ISR()/taskEXIT_CRITICAL_FROM_ISR() 之间 低优先级的中断被屏蔽了优先级低于、等于 configMAX_SYSCALL_INTERRUPT_PRIORITY高优先级的中断可以产生优先级高于 configMAX_SYSCALL_INTERRUPT_PRIORITY 但是这些中断ISR里不允许使用FreeRTOS的API函数任务调度依赖于中断、依赖于API函数所以这两段代码之间不会有任务调度产生 2.3 暂停调度器 如果有别的任务来跟你竞争临界资源你可以把中断关掉这当然可以禁止别的任务运行但是这代价太大了。它会影响到中断的处理。 如果只是禁止别的任务来跟你竞争不需要关中断暂停调度器就可以了在这期间中断还是可以发生、处理。 使用这2个函数来暂停、恢复调度器 /* 暂停调度器 */ void vTaskSuspendAll( void );/* 恢复调度器* 返回值: pdTRUE表示在暂定期间有更高优先级的任务就绪了* 可以不理会这个返回值*/ BaseType_t xTaskResumeAll( void );示例代码如下 vTaskSuspendScheduler();/* 访问临界资源 */xTaskResumeScheduler();这套 vTaskSuspendScheduler()/xTaskResumeScheduler() 宏是可以递归使用的它的内部会记录嵌套的深度只有嵌套深度变为0时调用 taskEXIT_CRITICAL() 才会重新使能中断。 3.总结 在使用临界资源时需要严格的读取时序图时我们的管理方式为在中断中我们就先关闭中断在任务中我们就暂停调度器除此之外互斥操作尽可能是使用信号量互斥量来实现。
http://www.zqtcl.cn/news/435621/

相关文章:

  • 帮人家做网站维护女性手机网站模板
  • 给一个企业做网站苏州网站备案查询
  • 域名备案期间怎么做网站广告投放行业
  • wordpress站内搜索统计网站突然不收录了
  • 网站源码小千个人网做网页设计一个月能挣多少
  • 贵州省建设厅公示网站广州seo网站推广费用
  • 旅游网站建设前期分析公众号制作多少钱
  • 延庆长沙网站建设怎样下载门户网站
  • flash 网站建设建设带数据搜索的网站
  • 设计网站网站名称云主机 小型网站
  • 网站建设方案书 模版公司制作网站收费标准
  • 福州企业网站html模板网站模板下载
  • 湛江自做网站城乡住建局官网
  • 广东网站建设找自己做网站还有出路吗
  • wordpress后台管理地址更改班级优化大师怎么用
  • 电脑网站开发学习产品怎么做市场推广
  • 上海市网站建设公叿目前流行的app网站开发模式
  • 企业手机网站建设效果wordpress栏目链接地址
  • 产品经理做网站网络公司名字免费起名大全
  • 做得比较好的公司网站kol营销
  • 百度指数分析平台长春seo优化企业网络跃升
  • 如何免费做网站域名wordpress 赚钱
  • 苏州市住房建设局网站首页温州网站设计公司
  • 网站模板哪个好用汕头建设工程总公司
  • iis网站重定向软件开发培训机构排名
  • 浙江大学教室办事大厅网站建设网页棋牌搭建
  • 长沙市天心区建设局网站新河网站
  • 网站改版 升级的目的嘉兴海盐县城乡建设局网站
  • 网站建设一年多少钱上海工程建设交易信息网站
  • 网站推广到底应该怎么做中国建设银行网上登录入口