指向此类代码的 IM 获取寄存器分配失败错误:
/***************************************************
* checks if two angles(sectors) are adjacent
**************************************************/
inline bool_t isSectorAdjacent(uint16_t new_angle)
{
int16_t angle_diff = abs(new_angle - rotpos.angle);
return angle_diff <= 60 or (new_angle == 330 and rotpos.angle == 30);
}
/*****************************************
* get current sector with offset
****************************************/
int16_t getSector(void)
{
int16_t sector;
if(config.adv_sector_fetching)
{
uint16_t GetCurrentHallAngle(void);
float fastNormDeg(float);
uint16_t current_sector = GetCurrentHallAngle();
bool_t is_sector_adj = isSectorAdjacent(current_sector);
if(is_sector_adj) sector = (int16_t)current_sector;
else sector = (int16_t)rotpos.angle; // if adjacency check fails just return normal version
}
else sector = (int16_t)rotpos.angle;
sector += (rotpos.dir == REVERSE ? config.bwdsectoroffset : config.fwdsectoroffset);
return fastNormDeg(sector);
}
免责声明:这种失败绝非有效、只是我尝试修复问题的小试验和错误阶段的一部分。
对 Tobias F.