工具/软件:TI-RTOS
大家好、TI 人、
在 DSPLINK DSP 端有问题。
背景:
-具有不同缓冲区大小的缓冲区池
- DSP 正在发送消息(具有不同的缓冲区大小:128字节、256字节...) 发送到 ARM。
- DSP 端的消息"用户"没有相同的优先级。
我们在以下文件中发现一个错误:
DSP/src/pools/DSPBIOS/SMA_pool.c:SMAPOL_alloc (...) 或 SMAPOL_FREE (...)
我将仅介绍 ALLOC 案例(与免费案例问题相同)
当线程分配128字节的缓冲区时、该线程在"bufHandle[I].FreeBuffers-- ;"(第273行)如果线程要使用256字节的缓冲区,则第二个线程将使"bufHandle[i]"(第252行)无效,从而导致128字节结构上的内存损坏/不匹配,因为尚未对其执行回写操作。
SMAPOL_ALLOO (……)
{
…
HAL_cacheInv((PTR) bufHandle, sizeof (SMAPOL_BufObj));<<此行!!
对于(i = 0;i < smaCtrl->ctrlPtr.numBuf;i++){
if (smaCTRL->TextrMatchReq =false){
/*查找请求大小的最接近匹配项*/
if (bufHandle[i].size >= size){
/*找到所需大小的匹配项。 *
休息;
}
}
否则{
/*查找请求大小的确切匹配值*/
if (bufHandle[i].size =size){
/*找到所需大小的匹配项。 *
休息;
}
HAL_cacheInv((PTR)&bufHandle [i],sizeof (SMAPOL_BufObj));<<此行!!!
}
}
我们不明白为什么这里会出现无效、因为在所有池寿命期间大小都是固定的。
能给你建议吗? 我们能否安全地删除这2个无效(与 SMAPOL_free (...)相同) 或者是否有理由使这些无效?