Browse Source

自定义内存池直接定义到RAM上,这样可以直接被DMA访问到

master
Lizongdi 1 week ago
parent
commit
c5cc930fea
  1. 7
      bspMCU/My_print.c
  2. 2
      library/common/rd_mempool.c

7
bspMCU/My_print.c

@ -30,18 +30,13 @@ volatile uint8_t g_flow_control_paused = 0;
TComCtrl *g_ptUartCtrl; TComCtrl *g_ptUartCtrl;
__attribute__((section(".dma_buffer"), aligned(32)))
static uint8_t uart_tx_buffer[512];
int USART_Send(char *_pBuffer, uint32_t _iSize) int USART_Send(char *_pBuffer, uint32_t _iSize)
{ {
HAL_GPIO_WritePin(RS485_2_DIR_GPIO_Port, RS485_2_DIR_Pin,GPIO_PIN_SET); HAL_GPIO_WritePin(RS485_2_DIR_GPIO_Port, RS485_2_DIR_Pin,GPIO_PIN_SET);
TUartUserData *ptUartUserData = (TUartUserData *)g_ptUartCtrl->m_pUserData; TUartUserData *ptUartUserData = (TUartUserData *)g_ptUartCtrl->m_pUserData;
// int iRet = HAL_UART_Transmit(ptUartUserData->m_uart, (uint8_t *)_pBuffer, _iSize, 100); // int iRet = HAL_UART_Transmit(ptUartUserData->m_uart, (uint8_t *)_pBuffer, _iSize, 100);
// HAL_GPIO_WritePin(RS485_2_DIR_GPIO_Port, RS485_2_DIR_Pin,GPIO_PIN_RESET); // HAL_GPIO_WritePin(RS485_2_DIR_GPIO_Port, RS485_2_DIR_Pin,GPIO_PIN_RESET);
RD_MEMCPY(uart_tx_buffer, _pBuffer, _iSize); int iRet = HAL_UART_Transmit_DMA(ptUartUserData->m_uart, (uint8_t *)_pBuffer, _iSize);
//SCB_CleanDCache_by_Addr((uint32_t*)uart_tx_buffer, _iSize);
int iRet = HAL_UART_Transmit_DMA(ptUartUserData->m_uart, (uint8_t *)uart_tx_buffer, _iSize);
return iRet; return iRet;
} }

2
library/common/rd_mempool.c

@ -197,7 +197,7 @@ WEAK void Rd_MemDoInit(void)
g_pool_start = g_heap_buf; g_pool_start = g_heap_buf;
#else #else
// 静态数组,确保对齐 // 静态数组,确保对齐
static uint8_t static_pool[MEM_POOL_TOTAL_SIZE] __attribute__((aligned(RD_ALIGN_SIZE))); static uint8_t static_pool[MEM_POOL_TOTAL_SIZE] __attribute__((section(".dma_buffer"), aligned(RD_ALIGN_SIZE)));
g_pool_start = static_pool; g_pool_start = static_pool;
#endif #endif

Loading…
Cancel
Save