2021-07-26 09:50 AM
Hi everyone,
I'm coding an applicaction which needs to send data from CM4 to CA7 through RPMSG framework. FreeRTOS task involved:
void t0Task(void *argument)
{
int count = 0x0, sim_ch = 9;
const int SIZE_DATA = 7;
unsigned char msg[SIZE_DATA * sim_ch], msg2[SIZE_DATA];
TickType_t xLastWakeTime;
const TickType_t xFrequency = 1;
while (1)
{
xLastWakeTime = xTaskGetTickCount();
msg[0] = '\0';
int i;
for (i = 0; i < sim_ch; i++) {
sprintf(msg2, "%06X", count);
strcat(msg, msg2);
strcat(msg, " ");
count = (count + 1) % 0xFFFFFF;
}
VIRT_UART_Transmit(&virtUART0, (uint8_t*)msg, strlen(msg));
vTaskDelayUntil( &xLastWakeTime, xFrequency );
}
}
I need to achieve a throughput near 1.5 MB/s - for that, "sim_ch" variable should be 128.
When this firmware is executing, an error appears after few seconds: "rpmsg_tty virtio0.rpmsg-tty-channel.-1.0: No memory for tty_prepare_flip_string". How can I solve it?
Thanks,
Oscar
2021-07-27 06:16 AM
Hi,
at first look, msg size defintion is missing one position to store the '\0' at the end of the string, so in your example msg real length in memory is sim_ch*7+1
maybe try:
unsigned char msg[ (SIZE_DATA * sim_ch) + 1], msg2[SIZE_DATA];
See also this (old) message https://community.st.com/s/question/0D50X0000BNugJi/no-memory-for-ttyprepareflipstring
and on wiki
https://wiki.st.com/stm32mpu/wiki/How_to_exchange_data_buffers_with_the_coprocessor
Regards.