我正在使用mbed开发嵌入式项目。芯片的制造商使用此查找生成器指定了循环冗余测试,但是它是用C编写的。 查找生成器代码
///////////////////////configures CRC check lookup table////////////////////////
short pec15Table[256];
short CRC15_POLY = 0x4599; //CRC code
void configCRC(void)
{
for (int i = 0; i < 256; i++)
{
remainder = i << 7;
for (int bit = 8; bit > 0; --bit)
{
if (remainder & 0x4000)
{
remainder = ((remainder << 1));
remainder = (remainder ^ CRC15_POLY)
}
else
{
remainder = ((remainder << 1));
}
}
}
pec15Table[i] = remainder&0xFFFF;
};
我对C ++还不是很满意,所以我只复制并粘贴了它,并检查了清晰的语法错误。例如,我将int16声明切换为short和unsigned short。但是,当我编译它时,出现以下错误。 这对我来说没有意义。我确定我做错了事。
Error: Cannot determine which instance of overloaded function "remainder" is intended in "config.cpp", Line: 20, Col: 10
答案 0 :(得分:1)
很明显,您与std::remainder
存在命名空间冲突。这是避免全局变量的众多原因之一。否则,C和C ++应该相同。
尽管如此,该代码非常幼稚。不仅必须重写该函数以正确获取参数,而且类型用法无处不在。
永远不要对带符号的类型进行按位算术,因为这会导致许多定义不当的行为错误。 short
和int
之类的所有“草率键入”类型都必须替换为stdint.h中的类型。您只能使用无符号类型。您需要了解隐式整数提升。
答案 1 :(得分:0)