Местами ещё и фееричненько. Ручное разматывание цикла: void arm_max_q15(
q15_t * pSrc,
uint32_t blockSize,
q15_t * pResult,
uint32_t * pIndex)
{
q15_t maxVal1, maxVal2, out; /* Temporary variables to store the output value. */
uint32_t blkCnt, outIndex, count; /* loop counter */
count = 0u;
outIndex = 0u;
out = *pSrc++;
blkCnt = (blockSize - 1u) >> 2u;
while(blkCnt > 0u)
{
maxVal1 = *pSrc++;
maxVal2 = *pSrc++;
if(out < maxVal1)
{
out = maxVal1;
outIndex = count + 1u;
}
maxVal1 = *pSrc++;
if(out < maxVal2)
{
out = maxVal2;
outIndex = count + 2u;
}
maxVal2 = *pSrc++;
if(out < maxVal1)
{
out = maxVal1;
outIndex = count + 3u;
}
if(out < maxVal2)
{
out = maxVal2;
outIndex = count + 4u;
}
count += 4u;
blkCnt--;
}
blkCnt = (blockSize - 1u) % 4u;
while(blkCnt > 0u)
{
maxVal1 = *pSrc++;
if(out < maxVal1)
{
out = maxVal1;
outIndex = blockSize - blkCnt;
}
blkCnt--;
}
*pResult = out;
*pIndex = outIndex;
}
ส็็็็็็็็็็็็็็็็็็็็็็็็็༼ ຈل͜ຈ༽ส้้้้้้้้้้้้้้้้้้้้้้้