case语句的大量破坏I2C?

问题描述 投票:0回答:3

我使用一个8位的PIC(PIC16F18326)和主要目的之一是为处理许多不同的I2C消息。该PIC被配置为I2C从而需要具有各种数据进行响应至约100不同的命令。当经由I2C接收到完整的消息中断标志被置位。标志被从主循环读和一个函数被调用使用开关... case语句来处理数据,并建立消息响应。一切工作正常时,只有解码大约50种不同的消息,但在PIC是甚至无法确认主当我长大case语句的数量在50以上有没有人经历了8位的PIC类似的问题?有知情同意做奇怪的事情之前允许的情况下,语句的最大数量?编译器和链接器不报告任何错误或警告。请让我知道如果您有任何意见/建议。

谢谢你,杰克

switch-statement pic 8bit
3个回答
0
投票

听起来当你的switch语句超过了银行界喜欢它打破?如果是这样的话它会在编译器中的错误。您可以轻松地通过查看生成的ASM相信测试这个...


0
投票

谢谢回复。许多消息来回Microchip的支持后,它似乎有一个与XC8编译器版本2.00中的问题。该编译器的版本是C99标准的第一个版本,显然这带来了一些重大问题。我更新到XC8 VS 2.05(2019年1月发布),并没有看到任何类似的问题。

再次感谢。插口


0
投票

编码一个巨大的case语句的替代方案是将是一个功能列表

/* Declarations */
void fun1() {}
void fun2() {}
void fun3() {}

typedef void (*funtype)();

funtype funs[] = { &fun1, &fun2, &fun3, &fun2 };
...

/* Instead of
switch (x)
{
case 0: fun1(); break;
case 1: case 3: fun2(); break;
case 2: fun3(); break;
}
*/

funs[x];
© www.soinside.com 2019 - 2024. All rights reserved.