没有任何callstack使用的类似函数的行为

时间:2014-02-11 01:17:22

标签: c include callstack rtos context-switch

我正在使用C中的小型协作操作系统(Salvo)进行嵌入式目标(MSP430)。

我必须使用大量不可重用的实现代码来实现命令处理程序。这些代码可以包括使用OS的上下文切换。在上下文切换期间,callstack 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的大部分功能,而且我不知道代码增长时它是否可以管理。

有更好的解决方案吗?

此外,这些特定于命令的代码可能会使用可重用但仍包含上下文切换的代码块。

是否有更好的东西:

  • 复制并过去?
  • 一个参与且危险的多线宏?
  • 使用程序集保存和恢复堆栈以实现这些常用功能吗?

或者,哪一个是较小的邪恶?

1 个答案:

答案 0 :(得分:0)

您应该能够将每个命令编写为inline函数,并将它们称为常规函数。这是一个比你所做的更好的方法,它只是让编译器为你生成正确的代码。像#include这样的混乱将无法维持。