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

唐山公司网站建设 中企动力网站如何做淘客

唐山公司网站建设 中企动力,网站如何做淘客,最新军事,crm客户关系管理论文文章目录 0、思考与回答0.1、思考一0.2、思考二0.3、思考三 1、关中断1.1、带返回值1.2、不带返回值 2、开中断3、临界段4、应用 0、思考与回答 0.1、思考一 为什么需要临界段#xff1f; 有时候我们需要部分代码一旦这开始执行#xff0c;则不允许任何中断打断#xff0… 文章目录 0、思考与回答0.1、思考一0.2、思考二0.3、思考三 1、关中断1.1、带返回值1.2、不带返回值 2、开中断3、临界段4、应用 0、思考与回答 0.1、思考一 为什么需要临界段 有时候我们需要部分代码一旦这开始执行则不允许任何中断打断这段代码称为临界段 0.2、思考二 如何实现临界段 关中断执行临界区代码开中断 0.3、思考三 对于 Cotex-M4 内核的处理器如何方便的控制其中断开关 使用 BASEPRI 寄存器当该寄存器中的值不为 0 时处理器将不会处理优先级值大于或等于 BASEPRI 的任何异常该寄存器相关信息可以在 Cortex-M4 Devices Generic User Guide 手册中找到具体如下图所示 值得注意的是 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 \nisb \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(uxCriticalNesting1){// 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.dnsts.com.cn/news/158824.html

相关文章:

  • 淄博网站建设至信网络肥西县城乡建设局网站
  • iis网站数据库失败西宁的网站建设公司
  • 有个性的个人网站做网站fjfzwl
  • 厦门建网站费用一览表wordpress 悬停遮罩
  • 专门做金融的招聘网站wordpress 迁移 乱码
  • 长春seo整站优化网站关键词标题怎么写
  • 旅游公司电子商务网站建设策划书郑州网站制作方案
  • 网站动画是怎么做的网站前期设计
  • 网站设计需求文档范例建设银行人才招聘网站
  • 网站推广方法有哪些wordpress页面专题
  • 安利的网站谁做的wordpress登录链接
  • 网站建设 计入哪个科目php的网站有哪些
  • 怎样建设自己的视频网站首页wordpress大气
  • 怎样做天猫 淘宝网站导购小说阅读网站开发设计
  • 东莞企业网站排名优化深圳有效网站制作哪家公司好
  • 如何做摄影网站查公司信息在哪里查
  • 网站维护兼职乐陵森林面积
  • 公司网站非响应式模板拍摄宣传片制作公司
  • 怎么搭建网站软件开发工程师培训学校
  • angular做门户网站微信公众号和小程序开发需要涉及
  • 手机网站 尺寸做头条信息流要网站吗
  • 同一ip大量访问网站柳州购物网站开发设计
  • 深圳网站建设有没有市场专做宠物的网站
  • 完成公司门户网站建设广州网页设计公司排名
  • 电子商务网站的主题及建设目标90字体设计
  • 如果查询网站内页的收录情况物流公司哪家便宜又好
  • 网站建设课程设计心得工程材料价格查询
  • 刚察县公司网站建设国家重大项目建设库网站打不开
  • 中国建设银行企业信息门户网站企业网站哪家做的好
  • 中国农业建设网站wordpress伪静态配置文件