|
|
首先感谢杨老师的提醒,这是我的疏忽。
关于上述两点问题,我再分别针对 STC32G、Cortex-M、RISC-V 等架构做一下适当的补充。
(CosyOS-III 最新版本 v3.1.5,支持 沁恒-青稞 RISC-V32)
一、对可重入函数的支持
0、8051/STC8H
需要用户开启 syscfg.h 中的配置项,可重入函数需显示声明为 reentrant。
1、STC32G
STC32G 如果使用 Keil C251(C251 版本 >= 2.0),是直接支持可重入函数的。
可重入栈由 C251 编译器直接实现,是与 ARM 等同的原理,无需 OS 介入,直接即可支持。
但建议用户开启如下选项:全局生成可重入函数
这样在整个工程中,只要是非 STATIC 属性的(#pragma functions (static))、
未涉及全局公共资源的(如 printf、malloc 等)函数,都将自动成为可重入函数,而不需要用户显示声明为 reentrant。
但这可能会导致一些报错(L127、L128),具体原因和解决方案可参考如下:
全局不关总中断的 RTOS,CosyOS-III-V1.2.0, 送 擎天柱-AI8051U转89C52核心板 - 第112页 - TF卡, SD卡, 文件系统, uCOS/FreeRTOS,GUI-uGFX/U8g2, RTOS 国芯人工智能技术交流网站 - AI32位8051交流社区
2、Cortex-M、RISC-V 等架构
Keil MDK(AC5、AC6)、IAR-EWARM、GCC、MounRiver Studio Ⅱ,等编译器、IDE 皆直接支持可重入函数,无需用户额外操作。
二、高频中断中调用服务
与 上一篇中对 STC8H 的描述基本一致。
但不同的是:
1、同主频下 STC32G 的平均性能会显著高于 STC8H,因此在高频中断中调用 FIFO服务的弊端问题,会有明显改善。
2、Cortex-M、RISC-V32 等都是32位机,最低主频一般 48M,也都有着不弱的性能表现,同样会有明显改善。
3、尤其是当主频达到 上百兆 后,调用一项 FIFO服务的时间,可在 零点几 us 之内完成,改善会更为明显。
4、如果对高频中断的要求较高,如中断周期 1us、必须调用 FIFO服务,采用更高主频、性能更强的处理器即可轻松应对。
总之,在实际项目中,用户仅需关注相关问题并把握“先FLAG,后FIFO”的使用原则,并进行针对性测试,便可防患于未然,有效解决高频中断中调用 FIFO服务 带来的风险问题。
CosyOS-III 最新版本 v3.1.5,还有很多新特性,未来我会陆续介绍。
|
|