我在一段简单的代码中就有一个链接错误,并且我知道问题出在哪里。
long long maxClampRange(long maxClamp, long LoopGainFactor, long LoopGain)
{
long long tempMax = (long long)maxClamp;
long long tempMaxClamp;
tempMaxClamp = (tempMax << 24);
tempMaxClamp *= (long long)LoopGainFactor/LoopGain;
return tempMaxClamp;
}
当tempMax是64位长的long数据类型时,左移24会导致问题。
我想知道的是如何计算正确链接所需的ROM数量。
实际错误是
lk166 E112: cannot locate 1 sections(s)
lk166 I455: requirement:0x10 bytes of ROM area in space spe:xc16x:code'
lk166 I456: section type: ranged page restriction - any range of [0 .. 65536] with page alignment 65536 within range(s) 0xc0ba00-0xc0be00
我还没有找到一种方法来分解不使用32位长类型的代码就能使这项工作有效的代码。但这会导致一切正常运行,因为它的大小不足以容纳这种变化。