⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 console-recording.c

📁 RTEMS (Real-Time Executive for Multiprocessor Systems) is a free open source real-time operating sys
💻 C
📖 第 1 页 / 共 2 页
字号:
/* *  Copyright (c) 2000, National Research Council of Canada * *  The license and distribution terms for this file may be *  found in the file LICENSE in this distribution or at *  http://www.rtems.com/license/LICENSE. */ /* CD2401 CONSOLE DRIVER DEBUG INFO RECORDING */#ifdef CD2401_RECORD_DEBUG_INFO/* Control individual recording here. That way, we don't clutter console.c */#define CD2401_RECORD_WRITE#define CD2401_RECORD_TX_ISR#define CD2401_RECORD_RX_ISR#define CD2401_RECORD_RE_ISR#define CD2401_RECORD_MODEM_ISR#define CD2401_RECORD_SET_ATTRIBUTE#define CD2401_RECORD_FIRST_OPEN#define CD2401_RECORD_LAST_CLOSE#define CD2401_RECORD_START_REMOTE_TX#define CD2401_RECORD_STOP_REMOTE_TX#define CD2401_RECORD_DRAIN_OUTPUT#define CD2401_RECORD_DELAY/* Call the data recording functions */#ifdef CD2401_RECORD_WRITE#define CD2401_RECORD_WRITE_INFO( args )              cd2401_record_write_info args#else#define CD2401_RECORD_WRITE_INFO( args )#endif#ifdef CD2401_RECORD_TX_ISR#define CD2401_RECORD_TX_ISR_INFO( args )             cd2401_record_tx_isr_info args#define CD2401_RECORD_TX_ISR_SPURIOUS_INFO( args )    cd2401_record_tx_isr_spurious_info args#define CD2401_RECORD_TX_ISR_BUSERR_INFO( args )      cd2401_record_tx_isr_buserr_info args#else#define CD2401_RECORD_TX_ISR_INFO( args )#define CD2401_RECORD_TX_ISR_SPURIOUS_INFO( args )#define CD2401_RECORD_TX_ISR_BUSERR_INFO( args )#endif#ifdef CD2401_RECORD_RX_ISR#define CD2401_RECORD_RX_ISR_INFO( args )             cd2401_record_rx_isr_info args#define CD2401_RECORD_RX_ISR_SPURIOUS_INFO( args )    cd2401_record_rx_isr_spurious_info args#else#define CD2401_RECORD_RX_ISR_INFO( args )#define CD2401_RECORD_RX_ISR_SPURIOUS_INFO( args )#endif#ifdef CD2401_RECORD_RE_ISR#define CD2401_RECORD_RE_ISR_SPURIOUS_INFO( args )    cd2401_record_re_isr_spurious_info args#else#define CD2401_RECORD_RE_ISR_SPURIOUS_INFO( args )#endif#ifdef CD2401_RECORD_MODEM_ISR#define CD2401_RECORD_MODEM_ISR_SPURIOUS_INFO( args ) cd2401_record_modem_isr_spurious_info args#else#define CD2401_RECORD_MODEM_ISR_SPURIOUS_INFO( args )#endif#ifdef CD2401_RECORD_SET_ATTRIBUTES#define CD2401_RECORD_SET_ATTRIBUTES_INFO( args )     cd2401_record_set_attributes_info args#else#define CD2401_RECORD_SET_ATTRIBUTES_INFO( args )#endif#ifdef CD2401_RECORD_FIRST_OPEN#define CD2401_RECORD_FIRST_OPEN_INFO( args )         cd2401_record_first_open_info args#else#define CD2401_RECORD_FIRST_OPEN_INFO( args )#endif#ifdef CD2401_RECORD_LAST_CLOSE#define CD2401_RECORD_LAST_CLOSE_INFO( args )         cd2401_record_last_close_info args#else#define CD2401_RECORD_LAST_CLOSE_INFO( args )#endif#ifdef CD2401_RECORD_START_REMOTE_TX#define CD2401_RECORD_START_REMOTE_TX_INFO( args )    cd2401_record_start_remote_tx_info args#else#define CD2401_RECORD_START_REMOTE_TX_INFO( args )#endif#ifdef CD2401_RECORD_STOP_REMOTE_TX#define CD2401_RECORD_STOP_REMOTE_TX_INFO( args )     cd2401_record_stop_remote_tx_info args#else#define CD2401_RECORD_STOP_REMOTE_TX_INFO( args )#endif#ifdef CD2401_RECORD_DRAIN_OUTPUT#define CD2401_RECORD_DRAIN_OUTPUT_INFO( args )       cd2401_record_drain_output_info args#else#define CD2401_RECORD_DRAIN_OUTPUT_INFO( args )#endif#ifdef CD2401_RECORD_DELAY#define CD2401_RECORD_DELAY_INFO( args )              cd2401_record_delay_info args#else#define CD2401_RECORD_DELAY_INFO( args )#endif/* Define the data and the recording functions */#define CD2401_DEBUG_BUFFER_SIZE     256#define CD2401_DEBUG_CHAR_BUFSIZE     64#define CD2401_WRITE_INFO              1#define CD2401_TX_ISR_INFO             2#define CD2401_TX_ISR_SPURIOUS_INFO    3#define CD2401_TX_ISR_BUSERR_INFO      4#define CD2401_RX_ISR_INFO             5#define CD2401_RX_ISR_SPURIOUS_INFO    6#define CD2401_RE_ISR_SPURIOUS_INFO    7#define CD2401_MODEM_ISR_SPURIOUS_INFO 8#define CD2401_FIRST_OPEN_INFO         9#define CD2401_LAST_CLOSE_INFO        10#define CD2401_START_REMOTE_TX_INFO   11#define CD2401_STOP_REMOTE_TX_INFO    12#define CD2401_SET_ATTRIBUTE_INFO     13#define CD2401_DRAIN_OUTPUT_INFO      14#define CD2401_DELAY_INFO             15struct cd2401_debug_info {  short discriminant;  short record_size;  union {    struct cd2401_write_info {      int length;      char buffer[CD2401_DEBUG_CHAR_BUFSIZE];      char dmabuf;    } write_info;    struct cd2401_tx_isr_info {      unsigned char channel;      unsigned char status;      unsigned char initial_ier;      unsigned char final_ier;      rtems_unsigned8 txEmpty;    } tx_isr_info;    struct cd2401_tx_isr_spurious_info {      unsigned char channel;      unsigned char status;      unsigned char initial_ier;      unsigned char final_ier;      unsigned long spurdev;      unsigned long spurcount;    } tx_isr_spurious_info;    struct cd2401_tx_isr_buserr_info {      unsigned char channel;      unsigned char status;      unsigned char initial_ier;      unsigned char buserr;      unsigned long type;      unsigned long addr;    } tx_isr_buserr_info;    struct cd2401_rx_isr_info {      unsigned char channel;      int length;      char buffer[CD2401_DEBUG_CHAR_BUFSIZE];    } rx_isr_info;    struct cd2401_rx_isr_spurious_info {      unsigned char channel;      unsigned char status;      unsigned long spurdev;      unsigned long spurcount;    } rx_isr_spurious_info;    struct cd2401_re_isr_spurious_info {      unsigned char channel;      unsigned long spurdev;      unsigned long spurcount;    } re_isr_spurious_info;    struct cd2401_modem_isr_spurious_info {      unsigned char channel;      unsigned long spurdev;      unsigned long spurcount;    } modem_isr_spurious_info;    struct cd2401_first_open_info {      unsigned char channel;      rtems_unsigned8 init_count;    } first_open_info;    struct cd2401_last_close_info {      unsigned char channel;      rtems_unsigned8 init_count;    } last_close_info;    struct cd2401_start_remote_tx_info {      unsigned char channel;    } start_remote_tx_info;    struct cd2401_stop_remote_tx_info {      unsigned char channel;    } stop_remote_tx_info;    struct cd2401_set_attribute_info {      int minor;      rtems_unsigned8 need_reinit;      rtems_unsigned8 txEmpty;      rtems_unsigned8 csize;      rtems_unsigned8 cstopb;      rtems_unsigned8 parodd;      rtems_unsigned8 parenb;      rtems_unsigned8 ignpar;      rtems_unsigned8 inpck;      rtems_unsigned8 hw_flow_ctl;      rtems_unsigned8 sw_flow_ctl;      rtems_unsigned8 extra_flow_ctl;      rtems_unsigned8 icrnl;      rtems_unsigned8 igncr;      rtems_unsigned8 inlcr;      rtems_unsigned8 brkint;      rtems_unsigned8 ignbrk;      rtems_unsigned8 parmrk;      rtems_unsigned8 istrip;      rtems_unsigned16 tx_period;      rtems_unsigned16 rx_period;      rtems_unsigned32 out_baud;      rtems_unsigned32 in_baud;    } set_attribute_info;    struct cd2401_drain_output_info {      rtems_unsigned8 txEmpty;      rtems_unsigned8 own_buf_A;      rtems_unsigned8 own_buf_B;    } drain_output_info;    struct cd2401_delay_info {      rtems_interval start;      rtems_interval end;      rtems_interval current;      unsigned long loop_count;    } delay_info;  } u;};struct cd2401_debug_info cd2401_debug_buffer[CD2401_DEBUG_BUFFER_SIZE];int cd2401_debug_index = 0;#include <string.h>int cd2401_get_record_size(  int size){  /* Not the best way to do this */  return size + 4;}    void cd2401_record_write_info(  int len,  const char * buf,  char dmabuf){  int max_length;    max_length = (len < CD2401_DEBUG_CHAR_BUFSIZE ) ? len : CD2401_DEBUG_CHAR_BUFSIZE;    memset( &(cd2401_debug_buffer[cd2401_debug_index]), '\0', sizeof( struct cd2401_debug_info )  );  cd2401_debug_buffer[cd2401_debug_index].discriminant = CD2401_WRITE_INFO;  cd2401_debug_buffer[cd2401_debug_index].record_size =      cd2401_get_record_size( sizeof( struct cd2401_write_info ) );  cd2401_debug_buffer[cd2401_debug_index].u.write_info.length = len;  memcpy ( &(cd2401_debug_buffer[cd2401_debug_index].u.write_info.buffer), buf, max_length );  cd2401_debug_buffer[cd2401_debug_index].u.write_info.dmabuf = dmabuf;     cd2401_debug_index = (cd2401_debug_index + 1 ) % CD2401_DEBUG_BUFFER_SIZE;}void cd2401_record_tx_isr_info(  unsigned char ch,  unsigned char status,  unsigned char initial_ier,  unsigned char final_ier,  rtems_unsigned8 txEmpty){   memset( &(cd2401_debug_buffer[cd2401_debug_index]), '\0', sizeof( struct cd2401_debug_info )  );  cd2401_debug_buffer[cd2401_debug_index].discriminant = CD2401_TX_ISR_INFO;  cd2401_debug_buffer[cd2401_debug_index].record_size =      cd2401_get_record_size( sizeof( struct cd2401_tx_isr_info ) );  cd2401_debug_buffer[cd2401_debug_index].u.tx_isr_info.channel = ch;  cd2401_debug_buffer[cd2401_debug_index].u.tx_isr_info.status = status;  cd2401_debug_buffer[cd2401_debug_index].u.tx_isr_info.initial_ier = initial_ier;  cd2401_debug_buffer[cd2401_debug_index].u.tx_isr_info.final_ier = final_ier;  cd2401_debug_buffer[cd2401_debug_index].u.tx_isr_info.txEmpty = txEmpty;    cd2401_debug_index = (cd2401_debug_index + 1 ) % CD2401_DEBUG_BUFFER_SIZE;}void cd2401_record_tx_isr_spurious_info(  unsigned char ch,  unsigned char status,  unsigned char initial_ier,  unsigned char final_ier,

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -