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

asp.net获取网站的域名郑州网站推广方案

asp.net获取网站的域名,郑州网站推广方案,建筑施工安全员c证查询,阳江网红打卡点文章目录 0、思考与回答0.1、思考一0.2、思考二0.3、思考三 1、关中断1.1、带返回值1.2、不带返回值 2、开中断3、临界段4、应用 0、思考与回答 0.1、思考一 为什么需要临界段? 有时候我们需要部分代码一旦这开始执行,则不允许任何中断打断&#xff0…

文章目录

  • 0、思考与回答
    • 0.1、思考一
    • 0.2、思考二
    • 0.3、思考三
  • 1、关中断
    • 1.1、带返回值
    • 1.2、不带返回值
  • 2、开中断
  • 3、临界段
  • 4、应用


0、思考与回答

0.1、思考一

为什么需要临界段?

有时候我们需要部分代码一旦这开始执行,则不允许任何中断打断,这段代码称为临界段

0.2、思考二

如何实现临界段?

  1. 关中断
  2. 执行临界区代码
  3. 开中断

0.3、思考三

对于 Cotex-M4 内核的处理器如何方便的控制其中断开关?

使用 BASEPRI 寄存器,当该寄存器中的值不为 0 时,处理器将不会处理优先级值大于或等于 BASEPRI 的任何异常,该寄存器相关信息可以在 Cortex-M4 Devices Generic User Guide 手册中找到,具体如下图所示

![[Kernel_4.1.png]]

值得注意的是 STM32 的 BASEPRI 寄存器做了一些修改,只使用了其高 4 位,低 4 位的数据没有使用,所以对于 STM32 在使用 BASEPRI 寄存器对中断进行屏蔽时,需要考虑到写入的高 4 位数据才是正确的数据,感兴趣的可以阅读 为何修改BASEPRI寄存器无效? 这篇文章

1、关中断

1.1、带返回值

Keil 版本

/* portMacro.h */
#define portSET_INTERRUPT_MASK_FROM_ISR()       ulPortRaiseBASEPRI()
// 带返回值关中断,将当前中断状态作为返回值返回
static __inline uint32_t ulPortRaiseBASEPRI(void)
{uint32_t ulReturn,ulNewBASEPRI = configMAX_SYSCALL_INTERRUPT_PRIORITY;__asm {mrs ulReturn,basepri        // 保存中断时 BASEPRI 寄存器的值msr basepri,ulNewBASEPRI    // 屏蔽 优先级值 大于等于 11 的中断dsbisb}return ulReturn;
}

CLion 版本

static __inline uint32_t ulPortRaiseBASEPRI(void)  
{  uint32_t ulReturn,ulNewBASEPRI = configMAX_SYSCALL_INTERRUPT_PRIORITY;  __asm volatile  (  "mrs ulReturn,basepri        \n"  "msr basepri,ulNewBASEPRI    \n"  "dsb                         \n"  "isb                         \n"  );  return ulReturn;  
}

1.2、不带返回值

Keil 版本

/* portMacro.h */
#define portDISABLE_INTERRUPTS()                vPortRaiseBASEPRI()
// 不带返回值关中断
static __inline void vPortRaiseBASEPRI(void)
{uint32_t ulNewBASEPRI = configMAX_SYSCALL_INTERRUPT_PRIORITY;__asm {msr basepri,ulNewBASEPRIdsbisb}
}

CLion 版本

static __inline void vPortRaiseBASEPRI(void)  
{  uint32_t ulNewBASEPRI = configMAX_SYSCALL_INTERRUPT_PRIORITY;  __asm volatile  (  "msr basepri, %0    \n""isb                \n":: "r" (ulNewBASEPRI): "memory");  
}

2、开中断

Keil 版本

/* portMacro.h */
// 设置 BASEPRI 为 0 开所有中断
#define portENABLE_INTERRUPTS()                 vPortSetBASEPRI(0)
// 设置 BASEPRI 为进入中断时的值则恢复原来的中断状态
#define portCLEAR_INTERRUPT_MASK_FROM_ISR(x)    vPortSetBASEPRI(x)
// 开中断
static __inline void vPortSetBASEPRI(uint32_t ulBASEPRI)
{__asm volatile{msr basepri,ulBASEPRI       }
}

CLion 版本

static __inline void vPortSetBASEPRI(uint32_t ulBASEPRI)  
{__asm volatile  ("msr basepri, %0    \n": "r" (ulBASEPRI): "memory");
}

3、临界段

/* task.h */
#define taskENTER_CRITICAL()           portENTER_CRITICAL()
#define taskEXIT_CRITICAL()            portEXIT_CRITICAL()#define taskENTER_CRITICAL_FROM_ISR()  portSET_INTERRUPT_MASK_FROM_ISR()
#define taskEXIT_CRITICAL_FROM_ISR(x)  portCLEAR_INTERRUPT_MASK_FROM_ISR(x)
/* portMacro.h */
extern void vPortEnterCritical(void);
extern void vPortExitCritical(void);
#define portENTER_CRITICAL()         vPortEnterCritical()
#define portEXIT_CRITICAL()          vPortExitCritical()
/* port.c */
// 中断嵌套计数器
static UBaseType_t uxCriticalNesting = 0xAAAAAAAA;
// 进入临界区
void vPortEnterCritical(void)
{portDISABLE_INTERRUPTS();uxCriticalNesting++;if(uxCriticalNesting==1){// configASSERT((portNVIC_INT_CTRL_REG & portVECTACTIVE_MASK) == 0);}
}
// 退出临界区
void vPortExitCritical(void)
{// configASSERT(uxCriticalNesting);uxCriticalNesting--;if(uxCriticalNesting == 0){portENABLE_INTERRUPTS();}
}

4、应用

普通场合

// 进入临界区直接屏蔽优先级号大于 11 的中断
taskENTER_CRITICAL();
// 退出时直接设置 BASEPRI 寄存器的值为 0 
taskEXIT_CRITICAL();

中断场合

uint32_t ulReturn;
// 进入临界区前保存 BASEPRI 寄存器的值
ulReturn = taskENTER_CRITICAL_FROM_ISR();
// 退出临界区时恢复 BASEPRI 寄存器的值
taskEXIT_CRITICAL_FROM_ISR(ulReturn);
http://www.hkea.cn/news/709247/

相关文章:

  • 网站综合营销方案设计网页设计教程
  • 东莞做网站制作宁波技术好的企业网站制作
  • 广州做网站公司哪家好如何注册一个网站
  • 网站备案协议书互联网营销师证书含金量
  • 广州企业网站建设报价免费推广网站大全
  • 宁波网站排名怎么提交网址让百度收录
  • 杭州 手机网站建设活动营销
  • 加网络网站建设工作室做一个企业网站大概需要多少钱
  • 张家港优化网站seo百度网盘下载
  • 烟台有没有做网站网站安全
  • 网站建设与制作设计公司惠州seo代理商
  • 东营新闻网今日头条常州网站seo
  • 东莞全网合一网站黄页引流推广网站软件免费
  • wordpress的数据库在那里百度seo如何快速排名
  • wordpress手机客服代码免费seo快速排名工具
  • web网站开发作品关键词歌词图片
  • 汕头行业网站seo培训公司
  • 网站背景图片优化关键词歌曲免费听
  • 郑州做网站哪家专业我要发布信息
  • 西安做网站优化的公司石家庄seo按天扣费
  • 2022年西安封城通知自动app优化下载
  • 无锡做网站哪家公司好一个公司可以做几个百度推广
  • 专题网站建设工作关键词林俊杰无损下载
  • adobe 网站开发软件软文写作兼职
  • 英文网站建设 淮安免费培训网站
  • 隔离需要多少钱湖南网站seo找行者seo
  • wordpress简单企业站seo怎么刷排名
  • 网站建设与运维泉州全网推广
  • 网站建站哪个公司好一点营销咨询服务
  • 值得玩的网页游戏北京seo营销培训