类似c函数的行为,而不使用任何调用堆栈



我正在使用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是无法维护的。

相关内容

  • 没有找到相关文章

最新更新