我想编写自己的代码来管理一个Arduino串口(9位串行),所以我需要绕过Serial1 TX的预编程arduino ISR矢量。我可以通过修改HardwareSerial1.cpp来实现这一点,但我不喜欢这样一个事实:我的代码变得不可移植,并且可能成为库更新的牺牲品。
你知道如何编程一个不同的ISR向量而不干扰库代码吗?我在我自己的代码中尝试了这一点,但没有结果:
//bypass arduino library for serial 1 and use this ISR instead
ISR(UART1_UDRE_vect)
{
9bitSerial.interrupt();
}
报告了以下错误,这似乎证实了该方法不起作用:
ISR.cpp:11:25:错误:在宏“UART1_UDRE_vect”的数值常数ISR.cpp:in展开之前期望的非限定-id
有什么线索吗?
发布于 2016-09-02 21:05:50
最安全的方法是将整个HardwareSerial
类复制到一个不同名称的类中。然后继续做你的修改。这正是我对NeoHWSerial和NeoICSerial所做的:它们是从HardwareSerial
和AltSoftSerial
复制和重命名的。
但是,Serialx
(HardwareSerial
实例)在构建中的所有使用都必须替换为类的实例。您将无法将HardwareSerial实例与类混合(重复的ISR错误)。但如果你的课只增加行为,那就没什么大不了的了。不使用9位的其他实例不应受到影响。如果您不介意的话,我想将这些更改折叠到NeoHWSerial中。我偶尔也会看到NeoSWSerial的9位系列。
https://stackoverflow.com/questions/39298844
复制相似问题