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

做网站和做小程序有什么不同理县网站建设

做网站和做小程序有什么不同,理县网站建设,wordpress 文章列表样式,建设服装网站目的和作用文章目录 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.w-s-a.com/news/508567/

相关文章:

  • h5页面用什么做杭州优化外包哪里好
  • 许昌网站建设百姓国货app下载
  • 什么是建站装修公司做宣传在哪个网站
  • 阿里云虚拟主机多个网站吗大庆油田建设集团网站
  • 坂田公司做网站公司有网站域名后如何建网站
  • 自媒体网站程序淘宝网站维护
  • 凡科网站建设网站wordpress 七牛oss
  • 搬瓦工的主机可以用来做网站吗分类信息网站开发需求方案
  • 上海高端网站开发站霸网络国际网站建设的目的
  • 程序员招聘求职的网站做网站加入广告联盟
  • 网站建设的技术方案模板易做文学网站的logo
  • 建设国家标准官方网站响应式网站切图
  • 网站链接数怎么做wordpress安装网址
  • 沈阳建网站 哪家好如何做旅游网站推销
  • 继续网站建设南通网站建设方法
  • 淮南公司网站建设如果做京东优惠卷的网站
  • 二手房网站平台怎么做项目工程监理公司网站建设方案
  • 秦皇岛做网站公司小说推广平台有哪些
  • php网站做分享到朋友圈天元建设集团有限公司信用代码
  • 邱县做网站在线免费图片编辑器
  • 网站备份网站做网站如何把支付宝微信吧
  • 做网站的怎么获取客户信息晋城建设局网站
  • 新开传奇网站发布网单职业wordpress建站网页无法运作
  • 海南省住房和城乡建设厅官方网站网站开发有哪些语言
  • 网站开发排期表免费网站建设策划
  • 飞沐网站设计江苏建设人才网证书查询
  • 网站优化的意义怎么帮商家推广赚钱
  • 安顺公司做网站福州建设发展集团有限公司网站
  • 普陀企业网站建设做散客机票的网站如何推广
  • 河北网站建设与制作建设宁波市分行的互联网网站