Hard Fault when an array is send over uart every 'n' second

Hello,

I am trying to send an array which has 2048 bytes via UART. But, when I add a some delay to repeat the the UART transfer, the code gets stuck on the HardFault. I am using nRF52DK for it.

This is the code:

 

#include <stdbool.h>
#include <stdint.h>
#include <stdio.h>
#include "app_uart.h"
#include "nrf_delay.h"
#include "nrf.h"
#include "bsp.h"
#include "nrf_uart.h"

#define UART_TX_BUF_SIZE 2048                         /**< UART TX buffer size. */
#define UART_RX_BUF_SIZE 256                          /**< UART RX buffer size. */
#define UART_HWFC APP_UART_FLOW_CONTROL_DISABLED      /**< Hardware flow control disabled. */

uint8_t data_array[2048] = {0};

void send_data_array(uint8_t *data_array, uint32_t length)
{
    for (uint32_t i = 0; i < length; i++)
    {
        uint32_t err_code = app_uart_put(data_array[i]);
        if (err_code != NRF_SUCCESS)
        {
            // Handle error if any
            printf("UART transmission error: %lu\n", err_code);
        }
    }
}

void intialise_array(uint8_t *array)
{
    for (uint32_t i = 0; i < 2048; i++)
    {
        array[i] = i % 255;  
    }
}

int main(void)
{
    uint32_t err_code;
    const app_uart_comm_params_t comm_params =
    {
        RX_PIN_NUMBER,
        TX_PIN_NUMBER,
        RTS_PIN_NUMBER,
        CTS_PIN_NUMBER,
        UART_HWFC,
        false,
        NRF_UART_BAUDRATE_115200
    };

    APP_UART_FIFO_INIT(&comm_params,
                       UART_RX_BUF_SIZE,
                       UART_TX_BUF_SIZE,
                       NULL,
                       APP_IRQ_PRIORITY_LOWEST,
                       err_code);

    if (err_code != NRF_SUCCESS)
    {
        // Initialization failed, handle error
        printf("UART initialization error: %lu\n", err_code);
        return err_code;
    }

    APP_ERROR_CHECK(err_code);

    intialise_array(data_array);

    while (true)
    {
        send_data_array(data_array, 2048);
        nrf_delay_ms(2000);
    }
}

I would greatly appreciate any help from the community. 

Parents
  • Hello,

    You are not registering a UART callback in your APP_UART_FIFO_INIT(), which will cause the program to execute a NULL function pointer if a UART event is triggered (e.g., on APP_UART_TX_EMPTY). I expected this to be handled in the driver by either raising an error or not invoking the callback when it is set to NULL, but that does not seem to be the case, unfortunately.

    Best regards,

    Vidar

Reply
  • Hello,

    You are not registering a UART callback in your APP_UART_FIFO_INIT(), which will cause the program to execute a NULL function pointer if a UART event is triggered (e.g., on APP_UART_TX_EMPTY). I expected this to be handled in the driver by either raising an error or not invoking the callback when it is set to NULL, but that does not seem to be the case, unfortunately.

    Best regards,

    Vidar

Children
Related