常用C语言语句bluesea

来源:互联网 发布:php简单代码 编辑:程序博客网 时间:2024/05/27 02:28

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

原创粉丝点击