|

楼主 |
发表于 2022-3-13 00:17:54
|
显示全部楼层
又做了如下测试,怀疑是rtx_memory.c在多线程环境下加锁也会有内存冲突问题,这个文件是从硬汉兄的V7开发资料拷过来的。请硬汉兄能否帮忙分析一下,是不是我使用上有什么问题。谢谢
测试方法:
创建两个线程,每个线程都向上位机上报数据,上位机不响应。对内存操作都有加锁。发现还是上报有乱码。
//json内存池:tcp_json_buf
//从内存池获取内存
void* external_malloc(size_t size)
{
void *mem = NULL;
json_lock();
mem = osRtxMemoryAlloc(external_buf, size, 0);
json_unlock();
return mem;
}
//释放内存归还给内存池
void external_free(void *ptr)
{
json_lock();
osRtxMemoryFree(external_buf, ptr);
json_unlock();
}
void json_lock(void)
{
xSemaphoreTake(rtos_res.json_mutex, portMAX_DELAY);
}
void json_unlock(void)
{
xSemaphoreGive(rtos_res.json_mutex);
}
void create_rtos_res(void)
{
memset(&rtos_res, 0, sizeof(RTOS_RES));
rtos_res.json_mutex = xSemaphoreCreateMutex();
rtos_res.socket_mutex = xSemaphoreCreateMutex();
DEBUG_OUT("rtos_res.json_mutex = %p\r\n", rtos_res.json_mutex);
DEBUG_OUT("rtos_res.socket_mutex = %p\r\n", rtos_res.socket_mutex);
}
使用方法
UINT8 *data1 = external_malloc(200);
external_free(data1);
|
|