我正在编写这个相当长的程序,我遇到了奇怪的行为问题(很可能与记忆有关(。所以我决定重写整个项目,这次不使用字符串,而是使用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
函数标记为内联。