Я написал функцию, которая считывает входной буфер байтов и создает выходной буфер слов, где каждое слово может быть либо 0x0081 для каждого бита ON входного буфера, либо 0x007F для каждого бита OFF.Длина входного буфера указана.У обоих массивов достаточно физического места.У меня также есть около 2 Кбайт свободной оперативной памяти, которую я могу использовать для поиска таблиц или около того.
Теперь я обнаружил, что эта функция является моим узким местом в приложении реального времени.Это будет называться очень часто.Подскажите, пожалуйста, как оптимизировать эту функцию?Я вижу, что одна возможность может состоять в том, чтобы использовать только один буфер и выполнять замену на месте.
void inline BitsToWords(int8 *pc_BufIn,
int16 *pw_BufOut,
int32 BufInLen)
{
int32 i,j,z=0;
for(i=0; i<BufInLen; i++)
{
for(j=0; j<8; j++, z++)
{
pw_BufOut[z] =
( ((pc_BufIn[i] >> (7-j))&0x01) == 1?
0x0081: 0x007f );
}
}
}
Пожалуйста, не предлагайте какую-либо библиотечную, компиляторную или CPU / аппаратную оптимизацию, потому что это многоПроект платформы.