常用C语言语句bluesea

    技术2025-09-08  67

    bluesea

    1.sizeof用法:

      UART1Write((u8*)"Starting.....",sizeof("Starting.....")) ;

       void UART1Write(u8* data,u16 len)

     

    2.struct用法

       a.寄存器作为结构体,struct中含enum

     

      typedef enum {DISABLE = 0, ENABLE = !DISABLE} FunctionalState;

          typedef struct{  uint16_t CAN_Prescaler;   /*!< Specifies the length of a time quantum. It ranges from 1 to 1024. */    uint8_t CAN_Mode;         /*!< Specifies the CAN operating mode.                                 This parameter can be a value of @ref CAN_operating_mode */

      uint8_t CAN_SJW;          /*!< Specifies the maximum number of time quanta the CAN hardware                                 is allowed to lengthen or shorten a bit to perform resynchronization.                                 This parameter can be a value of @ref CAN_synchronisation_jump_width */

      uint8_t CAN_BS1;          /*!< Specifies the number of time quanta in Bit Segment 1.                                 This parameter can be a value of @ref CAN_time_quantum_in_bit_segment_1 */

      uint8_t CAN_BS2;          /*!< Specifies the number of time quanta in Bit Segment 2.                                 This parameter can be a value of @ref CAN_time_quantum_in_bit_segment_2 */    FunctionalState CAN_TTCM; /*!< Enable or disable the time triggered communication mode.                                 This parameter can be set either to ENABLE or DISABLE. */    FunctionalState CAN_ABOM;  /*!< Enable or disable the automatic bus-off management.                                 This parameter can be set either to ENABLE or DISABLE. */

      FunctionalState CAN_AWUM;  /*!< Enable or disable the automatic wake-up mode.                                  This parameter can be set either to ENABLE or DISABLE. */

      FunctionalState CAN_NART;  /*!< Enable or disable the no-automatic retransmission mode.                                 This parameter can be set either to ENABLE or DISABLE. */

      FunctionalState CAN_RFLM;  /*!< Enable or disable the Receive FIFO Locked mode.                                 This parameter can be set either to ENABLE or DISABLE. */

      FunctionalState CAN_TXFP;  /*!< Enable or disable the transmit FIFO priority.                                 This parameter can be set either to ENABLE or DISABLE. */} CAN_InitTypeDef;

     

      CAN_InitTypeDef        CAN_InitStructure;

      CAN_InitStructure.CAN_TTCM=DISABLE;  CAN_InitStructure.CAN_ABOM=DISABLE;  CAN_InitStructure.CAN_AWUM=DISABLE;  CAN_InitStructure.CAN_NART=DISABLE;  CAN_InitStructure.CAN_RFLM=DISABLE;  CAN_InitStructure.CAN_TXFP=DISABLE;  CAN_InitStructure.CAN_Mode=CAN_Mode_LoopBack;  CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;  CAN_InitStructure.CAN_BS1=CAN_BS1_8tq;  CAN_InitStructure.CAN_BS2=CAN_BS2_7tq;  CAN_InitStructure.CAN_Prescaler=5;

     

     再看这段程序对应的底层函数

     if (CAN_InitStruct->CAN_TTCM == ENABLE)    {      CANx->MCR |= MCR_TTCM;    }    else    {      CANx->MCR &= ~MCR_TTCM;    }

    #define MCR_TTCM     ((uint32_t)0x00000080) /* time triggered communication */

    CANx:uint8_t CAN_Init(CAN_TypeDef* CANx, CAN_InitTypeDef* CAN_InitStruct)

     

    再看看共用体内嵌结构体,

        typedef unsigned char byte;

     typedef union

         {     byte Byte;     struct {              byte PS0         :1;                                       /* Prescale Divisor Select Bit 0 */              byte PS1         :1;                                       /* Prescale Divisor Select Bit 1 */              byte PS2         :1;                                       /* Prescale Divisor Select Bit 2 */              byte CLKSA       :1;                                       /* Clock Source Select A */              byte CLKSB       :1;                                       /* Clock Source Select B */              byte CPWMS       :1;                                       /* Center-Aligned PWM Select */              byte TOIE        :1;                                       /* Timer Overflow Interrupt Enable */              byte TOF         :1;                                       /* Timer Overflow Flag */              } Bits;    struct {             byte grpPS   :3;             byte grpCLKSx :2;             byte         :1;             byte         :1;             byte         :1;           } MergedBits;     } TPM1SCSTR;

     

    extern volatile TPM1SCSTR _TPM1SC @0x00000020;

    volatile TPM1SCSTR _TPM1SC;  #define TPM1SC                          _TPM1SC.Byte#define TPM1SC_PS0                      _TPM1SC.Bits.PS0#define TPM1SC_PS1                      _TPM1SC.Bits.PS1#define TPM1SC_PS2                      _TPM1SC.Bits.PS2#define TPM1SC_CLKSA                    _TPM1SC.Bits.CLKSA#define TPM1SC_CLKSB                    _TPM1SC.Bits.CLKSB#define TPM1SC_CPWMS                    _TPM1SC.Bits.CPWMS#define TPM1SC_TOIE                     _TPM1SC.Bits.TOIE#define TPM1SC_TOF                      _TPM1SC.Bits.TOF#define TPM1SC_PS                       _TPM1SC.MergedBits.grpPS#define TPM1SC_CLKSx                    _TPM1SC.MergedBits.grpCLKSx

    #define TPM1SC_PS0_MASK                 1#define TPM1SC_PS1_MASK                 2#define TPM1SC_PS2_MASK                 4#define TPM1SC_CLKSA_MASK               8#define TPM1SC_CLKSB_MASK               16#define TPM1SC_CPWMS_MASK               32#define TPM1SC_TOIE_MASK                64#define TPM1SC_TOF_MASK                 128#define TPM1SC_PS_MASK                  7#define TPM1SC_PS_BITNUM                0#define TPM1SC_CLKSx_MASK               24#define TPM1SC_CLKSx_BITNUM             3

     

     

     

    3.#ifndef #define #endif的用法

      http://blog.ednchina.com/tianlebo/14358/message.aspx

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    最新回复(0)