昨天对 HRTOS Shell 模块又进行了一次细节完善。
这次修改的代码量并不大,主要针对 Shell 中 printf 风格输出函数的两个细节进行优化:
-
char buf[32]增加static; -
%s字符串输出增加缓冲区长度检查。
这些修改不会增加新的 Shell 功能,但可以进一步提高代码运行的可靠性,并避免一些潜在的内存访问问题。
本次修改会与 HRTOS 新版本一起,在国庆假期之后正式更新。
一、Shell输出缓冲区增加static
原来的代码中,shell_printf() 使用局部数组作为格式化输出缓冲区:
char buf[32];
这次调整为:
static char buf[32];
主要考虑的是 8051 这类资源有限的平台。
buf 本身属于 Shell 输出过程中的固定工作缓冲区,每次调用 shell_printf() 都重新创建并不必要。
增加 static 后,这个缓冲区不再作为普通局部变量反复使用,而是固定分配一块存储空间。
这样做也可以避免局部变量放置和函数调用过程中产生的一些潜在地址/栈使用问题。
对于 HRTOS 这样的系统软件,尤其是在 8051 平台上,局部变量、栈空间以及内存布局都需要更加谨慎地处理。
因此,这次修改虽然只有一个 static,实际上也是对底层运行环境的一次针对性优化。
二、%s增加长度检查
第二处修改是在 %s 字符串处理过程中增加长度限制。
原来的逻辑主要是:
while(*s)
{
*p++ = *s++;
}
现在增加了:
while(*s && (p - buf) < 31)
{
*p++ = *s++;
}
Shell 的输出缓冲区大小为:
static char buf[32];
因此这里最多写入 31 个字符,并预留最后一个字节用于:
*p = '\0';
这样可以保证最终字符串仍然具有正确的结束符。
也就是说,即使用户传入的 %s 字符串非常长,也不会无限制地继续写入 buf。
三、为什么这种小修改也值得做
对于一个大型软件来说,这种修改可能很普通。
但 HRTOS 面向的是 8051 平台,系统资源本身就非常有限。
一个只有几十字节的 Shell 缓冲区,同样需要认真处理边界。
尤其是 Shell 属于开发者经常使用的调试和交互入口,输出函数又会被大量调用,因此这些基础代码的可靠性非常重要。
这次修改实际上解决的是两个不同层面的问题:
static:优化缓冲区的存储方式;
长度判断:限制字符串写入范围,避免缓冲区越界。
两者结合起来,可以让 Shell 的基础输出模块更加稳健。
四、HRTOS正在不断补齐这些工程细节
HRTOS 最近的更新并不只是增加新功能。
越来越多的工作是在已有代码基础上不断检查和完善。
例如:
-
系统 XDATA 资源继续优化;
-
任务删除标记重新整理;
-
DEBUG 与内核同步更新;
-
Shell 输出缓冲区优化;
-
字符串长度边界保护;
-
官网示例重新进行实际硬件验证。
这些修改单独来看都比较小。
但操作系统的稳定性往往就是由这些大量的小细节共同构成的。
尤其是在 8051 这种资源非常有限的环境下,很多在其他平台上可以忽略的问题,都需要认真考虑。
五、将与新版本一起更新
目前这次 Shell 修改已经完成。
接下来会继续进行测试和整理,并与近期完成的 HRTOS 系统优化一起打包。
新版本预计在国庆假期之后正式上线。
本次版本除了 Shell 的这些细节完善之外,还包括前面已经完成的系统资源优化:
XDATA:567 Bytes → 511 Bytes
同时对任务删除标记以及 HRTOS-Debug 进行了同步调整。
在正式上线之前,还会继续进行实际硬件验证。
六、持续把基础代码做好
HRTOS 目前越来越进入一个持续打磨的阶段。
相比不断增加大量新功能,现在更加重要的是把已经存在的功能继续做好。
一个 static;
一个长度判断;
一个边界检查;
一次实际硬件验证。
这些东西看起来都很小,但长期积累下来,最终形成的就是系统整体的工程质量。
HRTOS 会继续围绕 稳定性、资源占用、可维护性和实际可用性进行优化。
国庆假期之后,新版本见。
HRTOS,持续维护,持续验证,持续优化。