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

广告投放网站重庆飘逸科技有限公司

广告投放网站,重庆飘逸科技有限公司,上海大型网站制作公司,网络营销的工具有哪些文章目录 系统架构中断管理ARM中断寄存器相关知识ucos中断机制 系统架构 ucos主要包含三个部分的源码: 1、OS核心源码及其配置文件(ucos源码) 2、LIB库文件源码及其配置文件(库文件,比如字符处理、内存管理&#xff0…

文章目录

  • 系统架构
  • 中断管理
    • ARM中断寄存器相关知识
    • ucos中断机制

系统架构

  • ucos主要包含三个部分的源码:
    1、OS核心源码及其配置文件(ucos源码)
    2、LIB库文件源码及其配置文件(库文件,比如字符处理、内存管理)
    3、CPU板级源码及其配置文件(用于适配不同的开发板)
  • PendSV 中断的实现,裸机是不需要实现这个函数的,ucos的任务切换就是通过软件触发PendSV中断调用汇编函数 OSStartHighRdy 实现。
  • SysTick 中断的实现,裸机中通过此中断实现系统时钟HAL_TICK,ucos也是通过该中断调用 OS_CPU_SysTickHandler(); 实现。
  • 以上两个中断接口需要在中断向量表进行修改,注意SysTick的中断函数是自己手动实现不需要修改名称,添加 OS_CPU_SysTickHandler(); 即可,而PendSV 是ucos汇编源码实现,需要在中断向量表修改接口。

中断管理

ARM中断寄存器相关知识

  • 外部中断的优先级设置通过NVIC寄存器设置,ARM Cortex-M 的 NVIC 最大可支持 256 个中断源,其中包括 16 个系统中断和 240 个外部中断。然而芯片厂商一般情况下都用不完这些资源,以正点原子的战舰开发板为例,所使用的STM32F103ZET6 芯片就只用到了 10 个系统中断和 60 个外部中断
    ARM Cortex-M 使用了 8bit 位宽的寄存器来配置中断的优先级,这个寄存器就是中断优先级配置寄存器,因此中断优先级的配置范围就应该是 0 ~ 255。但是芯片厂商一般用不完这些资源,对于 STM32,只用到了中断优先级配置寄存器的高四位[7:4],低四位[3:0]取零处理,因此 STM32 提供了最大 2^4^=16 级(0~15) 的中断优先级等级
    进一步的,ARM Cortex-M 还使用了抢占优先级和子优先级的机制,在 STM32 上使用 µC/OS-III 时,使用中断优先级分组 4(NVIC_PriorityGroup_4)即优先级配置寄存器的高四位全部用于抢占优先级,不使用子优先级,那么这么一来只需要设置中断的抢占优先级即可。
  • 系统中断的优先级通过以下三个寄存器设置:
    在这里插入图片描述
  • 系统中断屏蔽主要通过三个寄存器实现:
    PRIMASK:PRIMASK 寄存器有 32bit,但只有 bit0 有效,是可读可写的,将 PRIMASK 寄存器设置为 1 用于屏蔽除 NMI 和 HardFault 外的所有异常和中断,将 PRIMASK 寄存器清 0 用于使能中断。
    FAULTMASK:FAULTMASK 寄存器有 32bit,但只有 bit0 有效,也是可读可写的,将 FAULTMASK寄存器设置为 1 用于屏蔽除 NMI 外的所有异常和中断,将 FAULTMASK 寄存器清零用于使能中断。
    BASEPRI:BASEPRI 有 32bit,但只有低 8 位[7:0]有效,也是可读可写的。 BASEPRI 寄存器比起 PRIMASK 和 FAULTMASK 寄存器直接屏蔽掉大部分中断的方式, BASEPRI 寄存器的功能显得更加细腻, BASEPRI 用于设置一个中断屏蔽的阈值,设置好 BASEPRI 后,中断优先级低于 BASEPRI 的中断就都会被屏蔽掉, µC/OS-III 就是使用 BASEPRI 寄存器来管理受 µC/OS-III管理的中断的,而不受 µC/OS-III 管理的中断,则不受 µC/OS-III 的影响。

ucos中断机制

  • 中断优先级可以理解为抢占优先级,任务优先级可以理解为子优先级

  • 在ucos中,PendSV的中断优先级设置为最低级16,因此只要其他任务中断优先级大于16,ucos就先执行中断里面的内容,然后才进行任务切换函数(只是个函数不是任务)

  • 在ucos中将 BASEPRI 设置为4,即受ucos控制的最高优先级为4

  • OS_CPU_SysTickInit() 对 SysTick 进行配置, 设置systick的中断优先级为4,systick中断优先级大于一切,毕竟是系统心跳,但是此处会出现一个问题(如果我们使用临界区包含关闭所有受ucos控制的中断的时候,系统时钟也不会发生中断)

  • 控制所有中断,将前面所提到的 PRIMASK 或者 FAULTMASK 置为 1 实现

    CPU_IntDis ; 关闭所有中断
    CPU_IntEn ; 打开所有中断
    

    在这里插入图片描述

  • 控制受ucos管理的中断,通过将BASEPRI的值设置为 4 或者 0 即可进行关闭和打开,0 即为打开所有中断,4 即为优先级大于4的关闭。

    #define  CPU_SR_ALLOC()             CPU_SR  cpu_sr = (CPU_SR)0
    CPU_SR_ALLOC(); /* 必须定义在所有局部变量之后 */
    CPU_SR_Save ; 保存中断状态,并关闭受 µC/OS-III 管理的中断
    CPU_SR_Restore ; 恢复中断状态
    

    在这里插入图片描述

  • 临界区包含(其实就是调用控制受ucos管理的中断的函数)

    CPU_SR_ALLOC(); /* 必须定义在所有局部变量之后 */
    /* 非临界区代码 */
    CPU_CRITICAL_ENTER(); /* 进入临界区 */
    /* 临界区代码 */
    CPU_CRITICAL_EXIT(); /* 退出临界区 */
    /* 非临界区代码 */
    
  • 锁定任务调度器,仅仅PendSV中断不产生

    OS_ERR err;
    OSSchedLock(&err); 锁定 uC/OS-III 的任务调度器
    OSSchedUnlock(&err); 恢复 uC/OS-III 的任务调度器
    
  • SysTick 的中断服务函数为例,展示函数 OSIntEnter() 和函数 OSIntExit() 的使用,函数 OSIntEnter() 只是简单地更新了全局变量 OSIntNestingCtr 的值, 而函数 OSIntExit() 除了更新全局变量OSIntNestingCtr 的值,同时还会根据需要进行任务切换。:

    void OS_CPU_SysTickHandler(void)
    {
    CPU_SR_ALLOC();
    CPU_CRITICAL_ENTER();
    /* 进入中断后,先调用函数 OSIntEnter() */
    OSIntEnter();
    CPU_CRITICAL_EXIT();
    /* 中断服务函数的内容 */
    OSTimeTick();
    /* 中断返回前,调用函数 OSIntExit() */
    OSIntExit();
    }
    

文章转载自:

http://0YoZcLFI.npkrm.cn
http://wwReoYyT.npkrm.cn
http://crDHsz4q.npkrm.cn
http://B3bvTvkb.npkrm.cn
http://ReUe5yb7.npkrm.cn
http://k91mjPlr.npkrm.cn
http://a3gxafxN.npkrm.cn
http://TqRdV8wB.npkrm.cn
http://WBMOeNDE.npkrm.cn
http://R8E8uuxc.npkrm.cn
http://LEWlvFEF.npkrm.cn
http://hMCR9TEm.npkrm.cn
http://rw4RfeYM.npkrm.cn
http://y1P6bpY1.npkrm.cn
http://Ri9AwYgD.npkrm.cn
http://FqLcA9RC.npkrm.cn
http://N8Q5Hnna.npkrm.cn
http://lP6R3TWR.npkrm.cn
http://mhx9PNAb.npkrm.cn
http://JwJ1a553.npkrm.cn
http://Pq8uk4PX.npkrm.cn
http://MnkUmEAr.npkrm.cn
http://bhjKr9YP.npkrm.cn
http://iE7XS87K.npkrm.cn
http://DDso8P2M.npkrm.cn
http://MQre1E1c.npkrm.cn
http://7M2nECHT.npkrm.cn
http://RSeRRTh9.npkrm.cn
http://oP1PLXvJ.npkrm.cn
http://q2IjMZQo.npkrm.cn
http://www.dtcms.com/wzjs/701380.html

相关文章:

  • 网站地址推荐台州律师网站建设
  • 做产品网站营销推广在国外做外国的网站合法吗
  • 企业网站建设变相收取等级保护费6商城网站建设源码
  • 做视频网站 投入怎样用自己的pid做搜索网站
  • 织梦行业网站模板哪个网站可以用MC皮肤做图片
  • 什么网站有女人跟狗做的网页开发者工具怎么用
  • 苏州自助建站模板邳州城乡建设局网站
  • 电商食品网站建设河北建设工程信息网天行建和园
  • 南京网站设计公司兴田德润电话多少软装设计风格
  • 网站建设专用名词互动平台罗马复兴
  • wordpress程序网站模板网页制作
  • 做网站用的动漫资料江苏省建设局报考网站
  • 长沙网站制作的seo优化博客
  • 做外贸有那些网站平台dedecms网站后台很卡
  • 做电影网站需要的服务器配置wordpress登录没链接
  • 黄图网站有哪些 推荐国内做钢铁的网站
  • 淘宝做图网站好蔡甸做网站
  • 网站备案组织机构代码泰安百度网站建设
  • 广东建设工程协会网站杭州百度推广开户
  • 福田网站建设效果凡科建站官网登
  • 建设部网站城建学院wordpress 登陆前台
  • 有没有在家做的兼职网站wordpress怎么给会员加上期限
  • 做网站ppt做网站编写
  • 网站空间绑定域名wordpress获取首页地址
  • 百度云做.net网站惠安网站建设费用
  • 网站后台文章列表里的每篇文章的文字全部乱码怎么办?网站文案技巧
  • 网站管理维护怎么做淘客cms网站建设教程
  • wordpress整站迁移出现403免费做二建题的网站
  • 淘宝网站首页是用什么软件做的免费cmsasp
  • 郑州网站推广优化能做视频的软件有哪些