【FreeRTOS】xPortPendSVHandler任务切换代码分析
摘要:1 /* */ 2 // 当进入PendSVC Handler时, 3 // 上一个任务运行的环境即xPSR、PC(任务入口地址)、r14/r12/r3/r2/r1/r0寄存器的值 4 // 会自动存储到任务的栈中,剩下的r4~r11需要手动保存 5 __asm void xPortPendSVHa
阅读全文
posted @
2022-12-15 18:00
uTank
阅读(1031)
推荐(0)
【FreeRTOS】内核配置说明
摘要:FreeRTOS内核是高度可定制的,在实际使用FreeRTOS 的时候我们时常需要根据自己需求来配置FreeRTOS,而且不同架构的MCU在使用的时候配置也不同。FreeRTOS 的系统配置文件为FreeRTOSConfig.h,在此配置文件中可以完成FreeRTOS 的裁剪和配置。 每个FreeR
阅读全文
posted @
2022-09-08 16:33
uTank
阅读(825)
推荐(0)
【Cortex-M】System Handler Priority Registers(SHRP)寄存器
摘要:【System Handler Priority Registers(SHRP)】 The SHPR1-SHPR3 registers set the priority level, 0 to 255, of the exception handlers that have configurable
阅读全文
posted @
2022-08-26 20:45
uTank
阅读(191)
推荐(0)
Cortex-M相关技术网站
摘要:Cortex-M官方: https://developer.arm.com/search#q=Cortex-M4 Devices Generic User Guide HardFault问题的调试解决: https://blog.csdn.net/_xiao/article/details/7847
阅读全文
posted @
2021-09-15 11:21
uTank
阅读(95)
推荐(0)
FreeRTOS相关技术博客
摘要:源码分析: https://blog.csdn.net/zhoutaopower/category_10073388.html FreeRTOS对系统异常优先级寄存器的PendSV和SysTick 的优先级设置过程: https://blog.csdn.net/weixin_45456099/art
阅读全文
posted @
2021-09-15 11:17
uTank
阅读(118)
推荐(0)
ADS1.2与MDK4.7冲突问题的解决方法
摘要:需要添加2个系统变量。 1、添加环境变量名: ARMCC5LIB 变量值:C:\Keil\ARM\ARMCC\lib(实际Keil安装目录) 2、添加环境变量:ARMCC5INC变量值:C:\Keil\ARM\ARMCC\include(实际Keil安装目录) 添加完后,关闭MDK, 重新打开工程即
阅读全文
posted @
2019-09-16 19:22
uTank
阅读(1176)
推荐(0)
Cortex-M3 咬尾中断 与 晚到中断
摘要:【咬尾中断】在处理器在响应某些异常时,如果又发生其他异常,但它们优先级不够高,则它们会被阻塞。 那么,在当前的异常执行返回后,系统处理悬起的异常时,倘若还是先POP,然后又把POP处理的内容PUSH回去,那么就白白浪费CPU时间了。因此,Cortex-M3不会再POP这些寄存器,而是继续使用上一个异
阅读全文
posted @
2019-08-09 10:16
uTank
阅读(4131)
推荐(1)
Cortex-M3 SVC与PendSV
摘要:【SVC】 SVC(系统服务调用,亦简称系统调用)和PendSV(可悬起系统调用),它们多用在上了操作系统的软件开发中。SVC用于产生系统函数的调用请求。例如,操作系统通常不允许用户程序直接访问硬件,而是通过提供一些系统服务函数,让用户程序使用SVC发出对系统服务函数的调用请求,以这种方法调用它们来
阅读全文
posted @
2019-08-08 19:14
uTank
阅读(2540)
推荐(0)
Cortex-M3 异常中断向量表
摘要:【Cortex-M3异常与中断】 支持10个系统异常和最多240个外部中断; 支持3个固定的高优先级和多达256级的可编程优先级,支持128级抢占; #0~15在Cortex-M3中定义,IRQ#0~239中断由各个芯片厂商定义; 【Cortex-M3异常中断向量表】 向量表定义了中断处理程序的入口
阅读全文
posted @
2019-08-05 17:15
uTank
阅读(2280)
推荐(0)
Cortex-M3 在C中上报入栈的寄存器和各fault状态寄存器
摘要:因为在标准C语音中是不能获取SP指针的。因而,如果想通过C代码来获取入栈的寄存器值,需要配合一小段汇编代码来获取当前的SP值,然后再把这个SP值以参数形式传送给C代码,最后以指针的形式把栈中的各寄存器值输出,同时也可以输出一些想要的各种状态寄存器值。如下: Keil环境汇编封皮: C服务程序,输入为
阅读全文
posted @
2019-07-31 16:01
uTank
阅读(1107)
推荐(1)
Cortex-M3 双堆栈指针(MSP&PSP)
摘要:【双堆栈指针(MSP&PSP)】 Cortex-M3内核中有两个堆栈指针(MSP & PSP),但任何时刻只能使用到其中一个。 复位后处于线程模式特权级,默认使用MSP。 通过SP访问到的是正在使用的那个指针,可以通过MSR/MRS指令访问指定的堆栈指针。 通过设置CONTROL寄存器的bit[1]
阅读全文
posted @
2019-07-29 15:33
uTank
阅读(15111)
推荐(2)
Cortex-M3 异常返回值EXC_RETURN
摘要:【EXC_RETURN】 在进入异常服务程序后,硬件自动更新LR的值为特殊的EXC_RETURN。当程序从异常服务程序返回,把这个EXC_RETURN值送往PC时,就会启动处理器的异常中断返回序列。因为LR的值EXC_RETURN是由硬件自动设置的,所以只要没有特殊需求,就不要改动它。RETURN的
阅读全文
posted @
2019-07-29 11:49
uTank
阅读(4229)
推荐(1)
Cortex-M3 异常中断响应与返回
摘要:【异常/中断响应】Cortex-M3的异常/中断响应序列包括: 入栈:把8个寄存器的值压入栈。 取向量:从向量表中找出对应的服务程序入口地址。 更新寄存器:更新堆栈指针SP,更新连接寄存器LR,更新程序计数器PC 【入栈】响应异常的第一个行动,就是自动保存现场的必要部分:依次把xPSR、PC、LR、
阅读全文
posted @
2019-07-26 17:23
uTank
阅读(2882)
推荐(0)
Cortex-M3 操作模式与特权等级
摘要:Cortex-M3支持2个模式(Handler模式、线程模式)和2个特权等级(特权级、非特权级)。 当处理器处在线程模式时,既可以使用特权级,也可以使用非特权级。 当处理器处在Handler模式时,总是特权级的。 在复位后,处理器进入“线程模式+特权级”。 在“线程模式+非特权级(用户级)”下,禁止
阅读全文
posted @
2019-07-26 11:31
uTank
阅读(5122)
推荐(0)
Cortex-M3 R0~R15寄存器组 & 特殊功能寄存器组
摘要:【R0~R15寄存器组】 Cortex-M3处理器拥有R0~R15的寄存器组,如: 【R0~R12通用寄存器】R0~R12都是32位通用寄存器,用于数据操作。其中: R0~R7为低组寄存器,所有的指令都可以访问。 R8~R12为高组寄存器,只有32位Thumb2指令和很少的16位Thumb指令能访问
阅读全文
posted @
2019-07-24 15:20
uTank
阅读(12125)
推荐(3)
【Keil5 MDK】fromelf工具的基本用法(fromelf --help)
摘要:ARM FromELF, 5.03 [Build 76] [MDK-ARM Standard] ARM image conversion utilityfromelf [options] input_file Options: --help display this help screen --vs
阅读全文
posted @
2018-09-11 15:34
uTank
阅读(3472)
推荐(0)
【Keil5 MDK】armar工具的基本用法【提取.a/.lib库文件信息】
摘要:ARM Librarian, 5.03 [Build 76] - archive creation and maintenance tool Command format: armar options archive [ file_list ] Wildcards '?' and '*' may b
阅读全文
posted @
2018-01-30 14:25
uTank
阅读(1110)
推荐(0)
Cortex-M3的一些概念
摘要:【工作模式】 线程模式(Thread mode):处理器复位或异常退出时为此模式。此模式下的代码可以是特权代码也可以是用户代码,通过CONTROL[0]控制。处理模式(Handler mode):出现异常(包括中断)时进入此模式,此模式下所有代码为特权访问。 【代码限权】 特权访问:对处理器资源拥有
阅读全文
posted @
2017-12-01 17:22
uTank
阅读(664)
推荐(0)
ARM处理器模式
摘要:ARM处理器模式 ARM处理器共有7种运行模式: 除了用户模式之外的其他6种处理器模式称为特权模式(Privileged Modes)。在这些模式下,程序可以访问所有的系统资源,也可以任意地进行处理器模式的切换。其中,除了系统模式外,其他5种特权模式又称为异常模式。 处理器模式可以通过软件控制进行切
阅读全文
posted @
2015-03-09 17:53
uTank
阅读(568)
推荐(0)