zoukankan      html  css  js  c++  java
  • uart学习之环形缓冲区struct

    ringbuffer中的相邻帧数据并不是连接的,由于每一帧数据按照内存对齐方式存放,相邻帧数据会有几个字节的间隔。

    说明uart数据结构体成员的作用。

    typedef struct {
    uart_port_t uart_num; /*!< UART port number*/
    int queue_size; /*!< UART event queue size*/
    QueueHandle_t xQueueUart; /*!< UART queue handler*/
    intr_handle_t intr_handle; /*!< UART interrupt handle*/
    uart_mode_t uart_mode; /*!< UART controller actual mode set by uart_set_mode() */
    bool coll_det_flg; /*!< UART collision detection flag */
    bool rx_always_timeout_flg; /*!< UART always detect rx timeout flag */

    //rx parameters
    int rx_buffered_len; /*!< UART cached data length */ 缓冲区中还没有读取得数据长度 
    SemaphoreHandle_t rx_mux; /*!< UART RX data mutex*/
    int rx_buf_size; /*!< RX ring buffer size */
    RingbufHandle_t rx_ring_buf; /*!< RX ring buffer handler*/
    bool rx_buffer_full_flg; /*!< RX ring buffer full flag. */
    uint32_t rx_cur_remain; /*!< Data number that waiting to be read out in ring buffer item*/  从缓冲区读出一帧数据的长度
    uint8_t* rx_ptr; /*!< pointer to the current data in ring buffer*/  指向从缓冲区读出的一帧数据
    uint8_t* rx_head_ptr; /*!< pointer to the head of RX item*/  指向从缓冲区读出的一帧数据
    uint8_t rx_data_buf[SOC_UART_FIFO_LEN]; /*!< Data buffer to stash FIFO data*/
    uint8_t rx_stash_len; /*!< stashed data length.(When using flow control, after reading out FIFO data, if we fail to push to buffer, we can just stash them.) */
    uart_pat_rb_t rx_pattern_pos;

    //tx parameters
    SemaphoreHandle_t tx_fifo_sem; /*!< UART TX FIFO semaphore*/
    SemaphoreHandle_t tx_mux; /*!< UART TX mutex*/
    SemaphoreHandle_t tx_done_sem; /*!< UART TX done semaphore*/
    SemaphoreHandle_t tx_brk_sem; /*!< UART TX send break done semaphore*/
    int tx_buf_size; /*!< TX ring buffer size */
    RingbufHandle_t tx_ring_buf; /*!< TX ring buffer handler*/
    bool tx_waiting_fifo; /*!< this flag indicates that some task is waiting for FIFO empty interrupt, used to send all data without any data buffer*/
    uint8_t* tx_ptr; /*!< TX data pointer to push to FIFO in TX buffer mode*/
    uart_tx_data_t* tx_head; /*!< TX data pointer to head of the current buffer in TX ring buffer*/
    uint32_t tx_len_tot; /*!< Total length of current item in ring buffer*/
    uint32_t tx_len_cur;
    uint8_t tx_brk_flg; /*!< Flag to indicate to send a break signal in the end of the item sending procedure */
    uint8_t tx_brk_len; /*!< TX break signal cycle length/number */
    uint8_t tx_waiting_brk; /*!< Flag to indicate that TX FIFO is ready to send break signal after FIFO is empty, do not push data into TX FIFO right now.*/
    uart_select_notif_callback_t uart_select_notif_callback; /*!< Notification about select() events */
    } uart_obj_t;

  • 相关阅读:
    android之wifi开发
    android wifi讲解 wifi列表显示
    jQuery格式化时间插件formatDate
    Android自定义照相机实现(拍照、保存到SD卡,利用Bundle在Acitivity交换数据)
    Android圆形图片自定义控件
    Android自定义控件
    SQL表连接查询(inner join、full join、left join、right join)
    Jquery 中each循环嵌套的使用示例教程
    JQuery遍历json数组的3种方法
    怎样从数据库层面检測两表内容的一致性
  • 原文地址:https://www.cnblogs.com/leo0621/p/15693392.html
Copyright © 2011-2022 走看看