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

做网站样品图片怎么拍照南宁seo结算

做网站样品图片怎么拍照,南宁seo结算,成都那家做网站好,网站后台如何登录一 函数taskENTER_CRITICAL,taskEXIT_CRITICAL 函数taskENTER_CRITICAL最终实现如下: 第①处按照系统设定的configMAX_SYSCALL_INTERRUPT_PRIORITY值对中断进行屏蔽 第②处调用一次自增一次 第③处检查中断状态寄存器位,如果有任何中断位置…

一 函数taskENTER_CRITICAL,taskEXIT_CRITICAL

函数taskENTER_CRITICAL最终实现如下:

第①处按照系统设定的configMAX_SYSCALL_INTERRUPT_PRIORITY值对中断进行屏蔽

第②处调用一次自增一次

第③处检查中断状态寄存器位,如果有任何中断位置1,说明是在中断中,那么报错,因为此函数不允许中断中使用。

taskEXIT_CRITICAL函数最终实现如下:

第①处如果前面有过一次以上调用taskENTER_CRITICAL,那么仍然禁止中断configMAX_SYSCALL_INTERRUPT_PRIORITY值以上的中断都不能开启,直到最后一次退出才真正退出,这个意思就是从第一次调用taskENTER_CRITICAL的范围内的代码都不能被中断打扰。

第② 处直接将basepri寄存器写0开启所有中断,taskEXIT_CRITICAL函数没有参数带入,只要调用它就是开启所有中断。

二 taskENTER_CRITICAL_FROM_ISR,taskEXIT_CRITICAL_FROM_ISR

1)taskENTER_CRITICAL_FROM_ISR函数最终实现:

第①②处,将BASEPRI赋值之前先将其值取出来,之后返回

第③处,向BASEPRI寄存器赋新值,

注:BASEPRI是arm的一个寄存器,可以设置一个数值,向寄存器BASEPRI写入某数值时大于等于此数值的中断都会被屏蔽。

2) taskEXIT_CRITICAL_FROM_ISR(xReturn)实现

此函数是带参数的,并不是像taskEXIT_CRITICAL一样直接将0赋值给BASEPRI,而这个参数就是

taskENTER_CRITICAL_FROM_ISR的返回值。

3)这样做有什么作用呢?

直接用实例解释比较容易理解:

// 嵌套中断示例
void Nested_ISR(void) {
    BaseType_t xHigherPriorityTaskWoken = pdFALSE;
    BaseType_t xSavedInterruptStatus1, xSavedInterruptStatus2;
    
    // 第一层临界区保护
    xSavedInterruptStatus1 = taskENTER_CRITICAL_FROM_ISR();
    
    /* 执行第一层临界区代码 */
    

   // 第二层临界区保护(嵌套)
    xSavedInterruptStatus2 = taskENTER_CRITICAL_FROM_ISR();
    
    /* 执行第二层临界区代码 */
    
    // 按相反顺序退出临界区
    taskEXIT_CRITICAL_FROM_ISR(xSavedInterruptStatus2);
   

   taskEXIT_CRITICAL_FROM_ISR(xSavedInterruptStatus1);
    
    portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
}

假设系统设置configMAX_SYSCALL_INTERRUPT_PRIORITY为11

第一次调用前basepri寄存器应该为0,所以xSavedInterruptStatus1=0,调用之后basepri寄存器为11,(如果当前中断优先级为11以上,那么11~15的中断都不能响应,如果当前中断优先级位11以下比如9,那么9以上都不能响应)。

第二次调用前basepri寄存器应该为11,所以xSavedInterruptStatus2=11,调用之后basepri寄存器为11,(如果当前中断优先级为11以上,那么11~15的中断都不能响应,如果当前中断优先级位11以下比如9,那么9以上都不能响应)。

第一次返回时因为xSavedInterruptStatus2=11,basepri寄存器应该为11,0~11都能执行,12~15都不能执行,此时如果使用不带ISR的临界屏蔽taskEXIT_CRITICAL()返回   ,那么0~15都能执行,违背初衷。

第二次返回时因为xSavedInterruptStatus2=0,basepri寄存器应该为0,优先级0~15都能执行。

题外话:

也许中断使用带ISR的屏蔽也许还有一个作用,就是跟任务分开,

因为任务中使用临界段仅仅可能只是想能够屏蔽其他任务的干扰,因为其他任务切换依靠最低优先级pendSV切换, 设定一个屏蔽值,可能不想屏蔽高优先级的中断。

而中断使用临界段的意图是屏蔽更高优先级的中断,起码要比当前中断的优先级要高一级(自然比任务的优先级也要高),如果同样使用 taskEXIT_CRITICAL(),一是起不到作用起不到想要的效果(屏蔽更高优先级的中断),二是起不到嵌套分层的作用,所以两者不能使用相同的屏蔽方式?

总之freeRTOS的任务跟中断是分离的两套系统,一个是任务级临界段代码保护,通过嵌套计数实现,一个是中断级代码临界段保护,通过保存和恢复寄存器BASEPRI的数值实现嵌套使用,最好是互不干扰。

以下来自deepseek的回答有点乱感觉不对稍微参考:

FreeRTOS中断中不能使用taskENTER_CRITICAL()的主要原因如下:

  1. 嵌套机制冲突
    taskENTER_CRITICAL()通过递归计数管理临界区嵌套,但中断服务程序(ISR)可能被更高优先级中断打断,导致嵌套计数不一致,从而引发中断状态恢复错误。

  2. 中断上下文特殊性
    中断中直接关闭所有中断(如taskENTER_CRITICAL()的操作)会破坏实时性,可能导致高优先级中断无法及时响应。FreeRTOS为此专门提供taskENTER_CRITICAL_FROM_ISR(),仅屏蔽特定优先级的中断而非全部。

  3. 优先级管理差异
    taskENTER_CRITICAL()通过操作BASEPRI寄存器屏蔽低于某优先级的中断,而中断服务程序本身可能已处于高优先级上下文,直接调用会导致不可预测的行为。

  4. 任务调度限制
    中断中若使用任务级临界区保护,可能因调度器状态不一致引发任务切换异常,甚至

    死锁。

http://www.dtcms.com/wzjs/93160.html

相关文章:

  • 深圳南园网站建设商业软文
  • 六安营销公司优化网站搜索
  • 兰州拼团网站建设郑州网站制作
  • aspx网站服务器失去响应印度疫情最新消息
  • 个人电子商务网站建设今日十大热点新闻事件
  • b站必看的纪录片自媒体营销方式有哪些
  • 开发商seo百度发包工具
  • wordpress简约博客苏州首页排名关键词优化
  • 徐州盛大图文网站我要发布信息
  • 网站 公安 备案2023年国际新闻大事件10条
  • 石家庄新闻头条文明seo
  • 平面设计线下培训班多少钱长沙seo霜天博客
  • 货代去什么网站开发客户公司网站
  • 动漫美女做爰视频网站软文推广发布平台
  • 手机网站弹出菜单日照网络推广公司
  • 电子代加工东莞网站建设企业查询官网
  • 网站每年都要备案吗金阊seo网站优化软件
  • wordpress壁纸模板湖北网络推广seo
  • 内网网站建设软件外链seo
  • 外贸网站建设 深圳贵州二级站seo整站优化排名
  • 网站开发用什么写得比较好企业推广公司
  • 政府门户网站建设的意义推广和竞价代运营
  • 英德网站建设农产品网络营销推广方案
  • 重庆网站seo推广seo单词优化
  • 福州服务类网站建设徐州网页关键词优化
  • 搭建本地网站今日最新的新闻
  • 华为网站建设目标北京seo网站管理
  • 做网站多少分辨率好企业营销模式
  • 商贸公司网站建设极致发烧站长之家ip地址归属查询
  • 重庆微网站建设哪家好今日新闻50字