大量案例语句中断 I2C



我使用的是8位PIC(PIC16F18326(,主要目的之一是处理许多不同的I2C消息。 PIC 配置为 I2C 从站,需要使用各种数据响应大约 100 个不同的命令。 当通过 I2C 中断接收到完整消息时,将设置一个标志。 从主循环中读取该标志,并调用一个函数以使用开关处理数据...案例语句并生成消息响应。 当仅解码大约 50 条不同的消息时,一切正常,但当我将案例语句的数量增加到 50 以上时,PIC 甚至无法确认主节点。 有没有人遇到过类似的8位PIC问题? 在 PIC 做奇怪的事情之前,是否允许最多数量的案例陈述? 编译器和链接器不报告任何错误或警告。 如果您有任何想法/建议,请告诉我。

谢谢千斤顶

当您的 switch 语句超过银行边界时听起来会中断?如果是这种情况,那将是编译器中的错误。我相信您可以通过查看生成的 asm 轻松测试这一点......

感谢您的回复。 在与Microchip支持来回发送许多消息后,XC8编译器版本2.00似乎存在问题。 这个版本的编译器是C99标准的第一个版本,显然这引入了一些主要问题。 我更新到 XC8 与 2.05(2019 年 1 月发布(,没有看到任何类似的问题。

再次感谢。Jack

编写大型案例语句的另一种方法是函数列表

/* 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];

最新更新