完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
使用stm32时,在ucos进入临界区代码时,我们需要关闭掉中断,出临界区后再开启中断。使用如下代码:
#define OS_CRITICAL_METHOD 3 #if OS_CRITICAL_METHOD == 3 #define OS_ENTER_CRITICAL() {cpu_sr = OS_CPU_SR_Save();} #define OS_EXIT_CRITICAL() {OS_CPU_SR_Restore(cpu_sr);} #endif 那如果我们用到某些中断需要快速响应,那么这时候这个关中断很显然会使我们的快速响应中断受到影响,那么有什么办法在使用ucos关中断时,放过我们需要快速响应的中断呢?接下来我们给大家介绍一个我们今天的主角寄存器:basepri;可能很多人对这个寄存器不熟悉,那我们先来认识一下,看下图: 那我们怎么实现呢?我们先来看看ucos具体是怎么实现我们的关中断的,从上面程序我们知道OS_ENTER_CRITICAL()是进入中断,那我们来看看OS_CPU_SR_Save具体做了什么: os_cpu_a.asm文件下 OS_CPU_SR_Save MRS R0, PRIMASK ; Set prio int mask to mask all (except faults) CPSID I BX LR OS_CPU_SR_Restore MSR PRIMASK, R0 BX LR 我们看到他使用了PRIMASK,那么我们从上面寄存器表可以看到这个寄存器置1后,将关闭我们所有的可以关闭的中断。那么如果我们要关闭某些呢?那就要换成用basepri寄存器。basepri寄存器最多有9位(由表达优先级的位数决定,STM32F103中,高4位有效),它定义了被屏蔽优先级的阈值。当它设定成某个值后,所有优先级大于等于此值的中断都被关(优先级号越大,优先级越低)。小于此值的中断不会被关闭。若设成0,则不关闭任何中断,0是缺省值。我们将上面这段汇编代码改一下: os_cpu_a.asm文件下 MASK_INTERRUPT_PRIORITY EQU 0X01 OS_CPU_SR_Save MRS R0,BASEPRI MOVS R1,#(MASK_INTERRUPT_PRIORITY<< 4) MSR BASEPRI,R1 BX LR OS_CPU_SR_Restore MSR BASEPRI,R0 BX LR 然后系统简化中断设置,只设置抢占式优先级,不要子优先级。抢占式优先级(0-15),子优先级都为0。 UCOS的SYSTICK中断及PENDSV中断设定在最低优先级 #define ConfigKERNEL_INTERRUPT_PRIORITY_PENSV (15) #define ConfigKERNEL_INTERRUPT_PRIORITY_SYSTICK (14) Pendsvde 的优先级在OS_CPU_A.S的OSStartHighRdy中设置,优先级最低为15. 我们要放一马的中断设置为最高0,那么这时候该中断将不会被关闭。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1614 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1541 浏览 1 评论
970 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
682 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1592 浏览 2 评论
1863浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
644浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
515浏览 3评论
531浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
504浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-21 23:57 , Processed in 0.619677 second(s), Total 46, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号