- 打卡等级:初来乍到
- 打卡总天数:5
- 最近打卡:2025-04-30 07:46:22
荣誉版主
- 积分
- 2319
|
发表于 2023-11-15 21:35:10
|
显示全部楼层
本帖最后由 tzz1983 于 2023-11-15 21:38 编辑
UCOSII - 251内核实现MSP(中断专用堆栈) 代码已实现
介绍:
STC32G12K128 内含4K EDATA, 植入UCOSII后, 去掉1500字节左右固定开销外, 实际剩下2500字节可用.
在没有MSP(中断专用堆栈)前, 中断发生在哪个任务, 即沿用哪个任务的堆栈. 实际上中断用栈量很大. 举例说明: 如果中断内调用函数, 就是寄存器全入栈, 大约38字节, 4个优先级最多嵌套3次 38*3=114字节.
使用MSP(中断专用堆栈)后, 每个任务可节省 114字节, 假设8个任务+2个系统任务(空闲, 统计), 则节省114*10=1140字节, 这都差不多是2500总数的一半了, 说性能翻倍也不过份.
代码已做完, 正在整理中, 估计明天会发出.
先给两张实测数据图: 更直观的体现出用MSP功能以后, 单个任务节省的用栈量!
这是由UCOSII内置统计任务产生的数据, 由prinft()函数打印到CDC串口.
测试条件: 人为故意产生4个中断, 嵌套3级, 每个中断代码都简单的调用一个空函数, 以演示寄存器全入栈的极端情况.
实测数据: 单个任务相差179-72=107字节, 与理论计算值相差不大. (当然了, 实际上代码会变简单或复杂, 结果都会不一样的, 这里只做一个参考, 而不是绝对)
这次代码改动比较大, 正在整理中, 先发个预热 , 估计明天发代码
|
|