调用多个选定函数并节省 RAM 的最佳方式



我正在编写这个相当长的程序,我遇到了奇怪的行为问题(很可能与记忆有关(。所以我决定重写整个项目,这次不使用字符串,而是使用malloc,strcpy等来更好地管理内存。

在这一点上,我已经创建了所需的所有函数,我需要一些东西来决定女巫函数集,以根据我正在输入的 recognizeIncommingDataCode 变量调用每个事件。

void identifyActionToPerform(int recognizeIncommingDataCode)
{
  switch (recognizeIncommingDataCode)
  {
    case 1:    //incomming phone call
    findIncommingNumber();
    processPhoneCall();
    if(reportsOnOffSetting)
    {
       if(checkRelayState())
        {
          sendStateReport();    //send state report
        }
        else sendErrorReport(); 
    }
    break;
    case 2:
    findIncommingNumber();    
    opperateRelays();   //opperate relay without state report except in case of error sendErrorReport
    if(reportsOnOffSetting==2)
    {
       if(!checkRelayState())
        {
          sendErrorReport();
        } 
    }
    break;
    case 3:
    findIncommingNumber();
    opperateRelays();    //opperate relay with state report
    sendStateReport();
    break;
    case 4:
    findIncommingNumber();    
    sendStateReport();    //send state report
    break;  
    case 5:
    findIncommingNumber();       
    sendSimReport();      //send sim report
    break;
    case 6: 
    findReportsOnOffAndStoteInEEPROM();      //turn reports on or off and save selection in eeprom     
    break;
    case 7: 
    findIncommingNumber();
    saveDefaultNumber();      //save default number to send state reports in eeprom 
    break;
//    case 8: 
//   // renewBalance();
//    break;
    case 9: 
    activateSMSChoice();
    break;
    default:    //irrelevant incomming sms
    break;      
  } 
}

我的问题是,这是执行此任务的好方法还是(关于 RAM 内存(,或者我应该创建 9 个单独的函数,这些函数仅包含特定任务的函数调用,例如

void case3(void)
{
    findIncommingNumber();
    opperateRelays();    //opperate relay with state report
    sendStateReport();
}

准确地说,继续将它们变成单独的函数。

如果您使用任何像样的编译器,它将进行堆栈帧优化,并且在堆栈上使用不超过返回地址大小的内存。

话虽如此,堆栈帧的生命周期仅在调用返回之前。因此,除非这些函数递归多次调用自己,否则您不会真正浪费任何内存。

至于为什么它们应该分开 - 它使代码更具可读性和可维护性。你可以想象你在上面写的版本非常丑陋。

最后,如果您真的担心它在堆栈上占用的内存,请继续将case函数标记为内联。

最新更新