• C 中常用的操作


    1)

    /* Enable USB , PHY and use remote wake-up */
    #define _DRVUSB_ENABLE_USB()   outp32((&USBD->ATTR), 0x7D0)
    #define outp32(port,value)     *((volatile unsigned int *)(port))=value

    这个宏的作用是,将0x7D0的值设置到ATTR寄存器中。

    2)

    typedef void (*PFN_DRVUSB_INTCALLBACK)(void *);
    void * pVoid;
    if (pVoid != NULL)
        g_FnIntCallBack = (PFN_DRVUSB_INTCALLBACK)pVoid;
    
    /* 可以将方法的地址直接作为另一个方法的参数传入到方法中 */

    typedef void (*PFN_DRVUSB_INTCALLBACK)(void *);

    定义的是一个参数为空,返回值为空的方法指针类型

    3) 判断某一位,然后将改为取反

    if(abc & (1<< num))  /* num 是你想要更改的位的位置 */
      abc &= ~(1<<num);

    4) M0 ADC读电压

      1.给M0提供的电压必须比较稳定,可以使用一个LDO来稳压。添加LDO稳压,需要在LDO输入输出端,添加滤波电容,一般取27/47uF 都可以

      2.M0 ADC输入脚需要加入滤波电容,一般为100nF就可以了。

     5)

        pu32Loader = (uint32_t *)&loaderImageBase;
        for (i = 0; i < u32ImageSize; i += PAGE_SIZE)
        {
            DrvFMC_Erase(LDROM_BASE + i);    
            for (j = 0; j < PAGE_SIZE; j += 4)
            {
                DrvFMC_Write(LDROM_BASE + i + j, pu32Loader[(i + j) / 4]);
            }
        }

    上面一段代码将loaderImageBase地址强制转换成uint32_t 类型的指针

    这个uint32_t指针类型加上下标之后,可以当做数组来使用。例如

    char *p = "abcdef";
    此时p[2]值 为'c'。而p表示字符串"abcdef"的首地址,*p的值则相当于p[0],值为'a'。

    6) 单片机中的按键检测(32位单片机,NUC1xx为例)

    按键加滤波电容,加上拉电阻。将端口设置为输入模式,初始设置端口为0。

    按键按下则可以读出端口状态为1,可判断按键按下。如下例子:

        /* Up button open */
        SYS->P0_MFP.MFP6_AD6_MISO1 = 0;
        SYS->P0_MFP.ALT6_AD6_MISO1 = 0;
        DrvGPIO_Open(BUTTON_UP_PORT, BUTTON_UP_PIN, E_IO_INPUT);
    
        /* Read button state */
        return DrvGPIO_GetBit(BUTTON_UP_PORT, BUTTON_UP_PIN) == 0;
  • 相关阅读:
    C# 枚举、字符串、值的相互转换
    What's New in v2010 vol 2.5
    Using Oracle's Parallel Execution Features
    [zhuan]asp.net程序性能优化的七个方面 (c#(或vb.net)程序改进)
    ORACLE常用网址
    html中的块元素(block element)和内联元素(inline element)
    软件构架师的特点
    窗体信息处理函数讲解
    [xue]软件项目经理所必需具备的素质
    Gulp系列文章入门Gulp
  • 原文地址:https://www.cnblogs.com/-liszt/p/3650251.html
Copyright © 2020-2023  润新知