我正在使用C语言的小型协作操作系统(Salvo),用于嵌入式目标(MSP430)。
我必须用大量不可重用的实现代码来实现命令处理程序。这些代码可能包括使用操作系统的上下文切换。在上下文切换期间,调用堆栈被NOT保存,因此我必须保持在相同的堆栈级别。我是这样做的,通过包括c文件:
TaskA()
{
while(1)
{
command_code = OS_WaitMsgQ()
switch(command_code)
case 0x01:
{
#include CSC0x01_Name_of_the_command.c
}
case 0x02:
{
#include CSC0x02_Name_of_the_command.c
//OSContextSwitch()?
}
//100+ cases like this...
}
}
这目前正在运行,但使用这种方法,在编写特定于命令的代码时,我失去了IDE的大部分功能,我不知道当代码增长时,它是否可以管理。
有更好的解决方案吗?
此外,这些特定于命令的代码可以使用可重用的代码块,但也包含上下文切换。
有比更好的东西吗
- 复制和过去
- 一个复杂而危险的多行宏
- 为那些通用函数保存和恢复使用汇编的堆栈
或者,哪一个是较小的邪恶?
您应该能够将每个命令编写为inline
函数,并将其作为常规函数进行调用。这是一种比您所做的要好得多的方法,它只是让编译器为您生成正确的代码。像这样混乱的#include
是无法维护的。