tzz1983
发表于 2023-11-16 14:12:20
本帖最后由 tzz1983 于 2023-11-17 16:27 编辑
最新版本V1.05 已实现中断专用栈MSP+任务栈PSP模式. 大幅节省RAM使用量
代码已在1楼更新
251内核实现中断专用栈MSP介绍
实现原理: 首次进入中断时,如果当前是PSP,则保存PSP指针,并切换至MSP,退出中断时操作相反. 嵌套中断时,已使用MSP,不必切换栈.
性能提升:STC32G12K128 内含4K EDATA, 植入UCOSII后, 去掉1500字节左右固定开销外, 实际剩下2500字节可用.
在没有MSP功能前, 中断发生在哪个任务, 即沿用哪个任务的堆栈. 实际上中断用栈量很大. 举例说明: 如果中断内调用函数, 就是寄存器全入栈, 大约38字节, 4个优先级最多嵌套3次 38*3=114字节.
使用MSP(中断专用堆栈)后, 每个任务可节省 114字节, 假设8个任务+2个系统任务(空闲, 统计),则节省114*10=1140字节,这都差不多是2500总数的一半了, 说性能翻倍也不过份.
安全性提升: 不用再担心中断优先级设置变更后影响全局任务栈, 现在中断和任务, 任务和任务之间都做到了有效的隔离
如何使用:
每个中断可以单独设置是否使用MSP功能, 在头文件"os_isr_251.h"中用宏来开启. 如果设置了对应的宏, 则在"os_isr_251.c"中创建对应的中断汇编封皮函数
封皮函数已包含"堆栈切换" "OSIntNesting++" "OSIntExit()"功能, 剩下的事情,用户只需要在勾子函数中添加自己的中断代码即可. 实际用起来更简单了.
没有开启MSP功能的中断, 采取沿用的方式, 即当中断发生时, 不管当前是MSP还是PSP, 都沿用.
如果所有中断都不开启MSP功能, 则不会创建MAP_STK(中断专用堆栈). 用法不变, 仍是用关键字interrupt创建中断函数, 也就是说MSP功能是可选的. 兼容之前的用法
定时器3中断应用举例:
用法1. 中断使用MSP:
使能宏OS_ISR19_USE_MSP_EN 1u. 中断代码放在勾子函数中, 适用于有函数调用的中断代码.
说明; 使能宏"OS_ISR19_USE_MSP_EN"以后, 不要再用关键字 interrupt 创建中断函数Timer3_Handler(), 这个函数已在"os_isr_251.c"创建了.
void Timer3_ISR_Handler_Hook (void)
{
P27 = ~P27; //中断代码
abc(); //中断代码
}
用法2. 快速中断方式:
不使能宏OS_ISR19_USE_MSP_EN0u. 适用于中断代码没有使用函数调用时(包括自编函数和OS服务函数). 利用编绎器智能减少寄存器入栈数量, 这样的中断没有多余的动作,效率是最高的.
void Timer3_ISR_Handler() interrupt 19
{
//利用编绎器智能减少寄存器入栈数量, 这样的中断没有多余的动作,效率是最高的. (前提是没有函数调用)
//不用OS服务时可以不用 OSIntNesting++;
P27 = ~P27; //中断代码
//同时也不需要 OSIntExit();
}
gzlai
发表于 2023-11-16 14:53:13
感谢技术大牛分享~~~目前在使用STC官方移植的FreeRTOS,完成手上的工作后,回来再学习
神农鼎
发表于 2023-12-21 10:53:55
MSP+PSP模式开发成功,这是STC8051世界的重大胜利 !
tzz1983
发表于 2023-12-21 12:44:37
神农鼎 发表于 2023-12-21 10:53
MSP+PSP模式开发成功,这是STC8051世界的重大胜利 !
有空官方可以去测试一下OS各种功能, 我一直都在用这个版本做产品, 目前没有发现什么问题
神农鼎
发表于 2023-12-21 12:59:02
tzz1983 发表于 2023-12-21 12:44
有空官方可以去测试一下OS各种功能, 我一直都在用这个版本做产品, 目前没有发现什么问题 ...
帮移植下 CANOpen 到这上面,方向【CAN + USB】
55337575
发表于 2024-1-5 11:05:28
将定时器4中断模似软中断PendSv来切换任务更改为使用普通I/O模拟中断比较安全吧,虽然切换时间上有一些延迟,但中断资源丰富。
我在其他应用中也是使用定时器4模拟中断,但当串口4设置为定时器4作为波特率发生器时,这个模拟中断就成为真实中断了。UCOS-II@STC32G12K128 移植程序还没有深入研究,不知道这个问题有否屏蔽
Snapdragon
发表于 2024-1-9 21:08:51
{:4_250:}刚刷到这个帖子,下载下来观摩学习一下
神农鼎
发表于 2024-2-9 09:41:13
龙年新春捷报:
STC8H2K32U-45MHz-LQFP32/TSSOP28 的 USB 型 MCU 已开始制造光罩流程中
RMB1.3 的 USB, STC8H2K32U-45MHz-LQFP32/TSSOP28/20,SOP16, 4月开始供货
51世界火热的夏天全面来临 全面 进入 USB 时代 !新增硬件32位乘除法器MDU32C
硬件USB 支持 仿真/下载, RTC 实时时钟, 年/月/日/时/分/秒,星期
真12位ADC, 144MHz-16位高级PWM新增硬件移相功能
32K Flash, 2.5k SRAM, USB, 双串口/I2C/SPI, 轨到轨比较器,12位ADC, PWM
串口1/串口2:
===都支持串口接收硬件超时侦测,硬件奇偶校验
===都支持帧错误数据检测和自动地址识别
T11,强大的24位低功耗定时器/系统定时器,支持低功耗唤醒
P1.2口在P5.4口上共享,P1.0/P1.1的全部数字功能可以交换
STC8H2K32U要让51成为永恒的经典:钻石恒久远,51永流传
======================================================================
RMB0.99 的 USB, STC8H2K08U-45MHz-TSSOP20/SOP16,已开始供货
51世界火热的夏天全面来临 全面 进入 USB 时代 !
380091044
发表于 2024-2-10 08:23:08
神农鼎 发表于 2024-2-9 09:41
龙年新春捷报:
STC8H2K32U-45MHz-LQFP32/TSSOP28 的 USB 型 MCU 已开始制造光罩流程中
RMB1.3 的 USB, STC ...
加油!
神农鼎
发表于 2024-2-10 09:20:33
页:
1
2
3
4
5
6
7
8
[9]
10
11
12