C++程序编译器对AVR的差异?

2024-10-01 15:36:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我通过Nanpy和Atmega32A芯片查询ADC芯片,遇到了一个与函数命名相关的非常奇怪的问题。Nanpy是一个固件库,它将Python函数绑定到相同的固件函数。Python/C++绑定似乎不是问题所在,而是编译后的固件中的某些东西。下面是C++固件中NANPI绑定的一些变化:

// these work:
if (strcmp(m->getName(), "getOffsetRegister2") == 0) m->returns(v[m->getObjectId()]->getOffsetRegister2());    
if (strcmp(m->getName(), "getOffsetRegister3") == 0) m->returns(v[m->getObjectId()]->getOffsetRegister());    
if (strcmp(m->getName(), "getOffsetRegister") == 0) m->returns(v[m->getObjectId()]->getOffsetRegister2());  

// this statement fails to return
if (strcmp(m->getName(), "getOffsetRegister") == 0) m->returns(v[m->getObjectId()]->getOffsetRegister());  

getOffsetRegister和getOffsetRegister2都是相同的函数

基于这些变体,我可以从名为getOffsetRegister以外的python函数调用getOffsetRegister或getOffsetRegister2。我也可以从python函数getOffsetRegister调用getOffsetRegister 2,但是当我从同名python函数调用getOffsetRegister时,它无法返回

<>这是C++编译器错误还是我错过了什么?如果不是编译器错误,我想找出问题的原因,以便尽可能防止同样的问题再次发生


Tags: 函数if编译器错误固件芯片returns函数调用
1条回答
网友
1楼 · 发布于 2024-10-01 15:36:24

虽然不是真正的答案,但问题似乎是通过将一组“ifs”更改为一组“if else if”子句来解决的:

if (strcmp(m->getName(), "getOffsetRegister2") == 0) m->returns(v[m->getObjectId()]->getOffsetRegister2());    
else if (strcmp(m->getName(), "getOffsetRegister3") == 0) m->returns(v[m->getObjectId()]->getOffsetRegister());    
else if (strcmp(m->getName(), "getOffsetRegister") == 0) m->returns(v[m->getObjectId()]->getOffsetRegister2());  

// this statement works now
else if (strcmp(m->getName(), "getOffsetRegister") == 0) m->returns(v[m->getObjectId()]->getOffsetRegister());  
else {
    // return some kind of error
}

在进一步的测试中,我发现原始代码对于一些额外的if语句也失败了。添加“else”后,所有失败的比较都有效。如果比较不是最佳做法,那么可能太多了

相关问题 更多 >

    热门问题