《嵌入式系统构件》一书中,附有各模块的驱动代码。在这些代码中,有一个普遍存在的会导致内存溢出的Bug。
即在使用到OSTaskCreateExt()函数或者OSTaskCreate()函数时的第三个参数使用错误,
比如在键盘章节,P100页中有:
static OS_STK KeyScanTaskStk[KEY_SCAN_TASK_STK_SIZE];
在创建任务时,P104页中有:
OSTaskCreate(KeyScanTask,(void *)0,&KeyScanTaskStk[KEY_SCAN_TASK_STK_SIZE],KEY_SCAN_TASK_PRIO);
其中“&KeyScanTaskStk[KEY_SCAN_TASK_STK_SIZE]正确的用法应该是“&KeyScanTaskStk[KEY_SCAN_TASK_STK_SIZE - 1]”
原书中的写法会导致内存越界。这种错误在本书中多次出现。
而在作者的另外一本书中《MicroC/OS-II The Real-Time Kernel》中的用法是正确的。
也许是书中的源代码也被译者低劣的翻译质量感染了
本文分析了《嵌入式系统构件》一书中关于RTOS任务创建时的一个常见Bug,指出书中多个实例中使用OSTaskCreateExt()或OSTaskCreate()函数时存在内存溢出风险,并给出正确做法。
1744

被折叠的 条评论
为什么被折叠?



