当前位置: 首页 > article >正文

【鸿蒙开发】Hi3861学习笔记- GPIO

00. 目录

文章目录

    • 00. 目录
    • 01. GPIO概述
    • 02. GPIO运行机制
    • 03. GPIO相关类型
      • 3.1 hi_io_name
      • 3.2 hi_io_func_gpio
      • 3.3 hi_io_pull
      • 3.4 hi_gpio_value
      • 3.5 hi_gpio_dir
      • 3.6 hi_gpio_int_type
      • 3.7 hi_gpio_int_polarity
    • 04. GPIO相关函数
      • 4.1 hi_gpio_init
      • 4.2 hi_io_set_func
      • 4.3 hi_io_set_pull
      • 4.4 hi_gpio_set_dir
      • 4.5 hi_gpio_set_ouput_val
      • 4.6 hi_gpio_get_input_val
    • 05. 延时函数
    • 06. 附录

01. GPIO概述

功能简介

GPIO(General-purpose input/output)即通用型输入输出。通常,GPIO控制器通过分组的方式管理所有GPIO管脚,每组GPIO有一个或多个寄存器与之关联,通过读写寄存器完成对GPIO管脚的操作。

基本概念

GPIO又俗称为I/O口,I指的是输入(in),O指的是输出(out)。可以通过软件来控制其输入和输出,即I/O控制。

  • GPIO输入

    输入是检测各个引脚上的电平状态,高电平或者低电平状态。常见的输入模式有:模拟输入、浮空输入、上拉输入、下拉输入。

  • GPIO输出

    输出是当需要控制引脚电平的高低时需要用到输出功能。常见的输出模式有:开漏输出、推挽输出、复用开漏输出、复用推挽输出。

02. GPIO运行机制

在HDF框架中,同类型设备对象较多时(可能同时存在十几个同类型配置器),若采用独立服务模式,则需要配置更多的设备节点,且相关服务会占据更多的内存资源。相反,采用统一服务模式可以使用一个设备服务作为管理器,统一处理所有同类型对象的外部访问(这会在配置文件中有所体现),实现便捷管理和节约资源的目的。GPIO模块采用统一服务模式(如图1所示)。

在统一模式下,所有的控制器都被核心层统一管理,并由核心层统一发布一个服务供接口层,因此这种模式下驱动无需再为每个控制器发布服务。

GPIO模块各分层作用:

  • 接口层:提供操作GPIO管脚的标准方法。
  • 核心层:提供GPIO管脚资源匹配,GPIO管脚控制器的添加、移除以及管理的能力,通过钩子函数与适配层交互,供芯片厂家快速接入HDF框架。
  • 适配层:由驱动适配者将钩子函数的功能实例化,实现与硬件相关的具体功能。

GPIO统一服务模式结构图
在这里插入图片描述

03. GPIO相关类型

相关类型在hi_io.h或者hi_gpio.h文件中

3.1 hi_io_name

/**
 * @ingroup iot_io
 *
 * GPIO pin ID. CNcomment:IO硬件管脚编号。CNend
 */
typedef enum {
    HI_IO_NAME_GPIO_0,     /**< GPIO0 */
    HI_IO_NAME_GPIO_1,     /**< GPIO1 */
    HI_IO_NAME_GPIO_2,     /**< GPIO2 */
    HI_IO_NAME_GPIO_3,     /**< GPIO3 */
    HI_IO_NAME_GPIO_4,     /**< GPIO4 */
    HI_IO_NAME_GPIO_5,     /**< GPIO5 */
    HI_IO_NAME_GPIO_6,     /**< GPIO6 */
    HI_IO_NAME_GPIO_7,     /**< GPIO7 */
    HI_IO_NAME_GPIO_8,     /**< GPIO8 */
    HI_IO_NAME_GPIO_9,     /**< GPIO9 */
    HI_IO_NAME_GPIO_10,    /**< GPIO10 */
    HI_IO_NAME_GPIO_11,    /**< GPIO11 */
    HI_IO_NAME_GPIO_12,    /**< GPIO12 */
    HI_IO_NAME_GPIO_13,    /**< GPIO13 */
    HI_IO_NAME_GPIO_14,    /**< GPIO14 */
    HI_IO_NAME_SFC_CSN,    /**< SFC_CSN */
    HI_IO_NAME_SFC_IO1,    /**< SFC_IO1 */
    HI_IO_NAME_SFC_IO2,    /**< SFC_IO2 */
    HI_IO_NAME_SFC_IO0,    /**< SFC_IO0 */
    HI_IO_NAME_SFC_CLK,    /**< SFC_CLK */
    HI_IO_NAME_SFC_IO3,    /**< SFC_IO3 */
    HI_IO_NAME_MAX,
} hi_io_name;

3.2 hi_io_func_gpio

/**
 * @ingroup iot_io
 *
 * GPIO_0 pin function.CNcomment:GPIO_0管脚功能。CNend
 */
typedef enum {
    HI_IO_FUNC_GPIO_0_GPIO,
    HI_IO_FUNC_GPIO_0_UART1_TXD = 2,
    HI_IO_FUNC_GPIO_0_SPI1_CK,
    HI_IO_FUNC_GPIO_0_JTAG_TDO,
    HI_IO_FUNC_GPIO_0_PWM3_OUT,
    HI_IO_FUNC_GPIO_0_I2C1_SDA,
} hi_io_func_gpio_0;

/**
* @ingroup iot_io
*
* GPIO_1 pin function.CNcomment:GPIO_1管脚功能。CNend
*/
typedef enum {
    HI_IO_FUNC_GPIO_1_GPIO,
    HI_IO_FUNC_GPIO_1_UART1_RXD = 2,
    HI_IO_FUNC_GPIO_1_SPI1_RXD,
    HI_IO_FUNC_GPIO_1_JTAG_TCK,
    HI_IO_FUNC_GPIO_1_PWM4_OUT,
    HI_IO_FUNC_GPIO_1_I2C1_SCL,
    HI_IO_FUNC_GPIO_1_BT_FREQ,
} hi_io_func_gpio_1;

/**
* @ingroup iot_io
*
* GPIO_2 pin function.CNcomment:GPIO_2管脚功能。CNend
*/
typedef enum {
    HI_IO_FUNC_GPIO_2_GPIO,
    HI_IO_FUNC_GPIO_2_UART1_RTS_N = 2,
    HI_IO_FUNC_GPIO_2_SPI1_TXD,
    HI_IO_FUNC_GPIO_2_JTAG_TRSTN,
    HI_IO_FUNC_GPIO_2_PWM2_OUT,
    HI_IO_FUNC_GPIO_2_SSI_CLK = 7,
} hi_io_func_gpio_2;

/**
* @ingroup iot_io
*
* GPIO_3 pin function.CNcomment:GPIO_3管脚功能。CNend
*/
typedef enum {
    HI_IO_FUNC_GPIO_3_GPIO,
    HI_IO_FUNC_GPIO_3_UART0_TXD,
    HI_IO_FUNC_GPIO_3_UART1_CTS_N,
    HI_IO_FUNC_GPIO_3_SPI1_CSN,
    HI_IO_FUNC_GPIO_3_JTAG_TDI,
    HI_IO_FUNC_GPIO_3_PWM5_OUT,
    HI_IO_FUNC_GPIO_3_I2C1_SDA,
    HI_IO_FUNC_GPIO_3_SSI_DATA,
} hi_io_func_gpio_3;

/**
* @ingroup iot_io
*
* GPIO_4 pin function.CNcomment:GPIO_4管脚功能。CNend
*/
typedef enum {
    HI_IO_FUNC_GPIO_4_GPIO,
    HI_IO_FUNC_GPIO_4_UART0_RXD = 2,
    HI_IO_FUNC_GPIO_4_JTAG_TMS = 4,
    HI_IO_FUNC_GPIO_4_PWM1_OUT,
    HI_IO_FUNC_GPIO_4_I2C1_SCL,
} hi_io_func_gpio_4;

/**
* @ingroup iot_io
*
* GPIO_5 pin function.CNcomment:GPIO_5管脚功能。CNend
*/
typedef enum {
    HI_IO_FUNC_GPIO_5_GPIO,
    HI_IO_FUNC_GPIO_5_UART1_RXD = 2,
    HI_IO_FUNC_GPIO_5_SPI0_CSN,
    HI_IO_FUNC_GPIO_5_PWM2_OUT = 5,
    HI_IO_FUNC_GPIO_5_I2S0_MCLK,
    HI_IO_FUNC_GPIO_5_BT_STATUS,
} hi_io_func_gpio_5;

/**
* @ingroup iot_io
*
* GPIO_6 pin function.CNcomment:GPIO_6管脚功能。CNend
*/
typedef enum {
    HI_IO_FUNC_GPIO_6_GPIO,
    HI_IO_FUNC_GPIO_6_UART1_TXD = 2,
    HI_IO_FUNC_GPIO_6_SPI0_CK,
    HI_IO_FUNC_GPIO_6_PWM3_OUT = 5,
    HI_IO_FUNC_GPIO_6_I2S0_TX,
    HI_IO_FUNC_GPIO_6_COEX_SWITCH,
} hi_io_func_gpio_6;

/**
* @ingroup iot_io
*
* GPIO_7 pin function.CNcomment:GPIO_7管脚功能。CNend
*/
typedef enum {
    HI_IO_FUNC_GPIO_7_GPIO,
    HI_IO_FUNC_GPIO_7_UART1_CTS_N = 2,
    HI_IO_FUNC_GPIO_7_SPI0_RXD,
    HI_IO_FUNC_GPIO_7_PWM0_OUT = 5,
    HI_IO_FUNC_GPIO_7_I2S0_BCLK,
    HI_IO_FUNC_GPIO_7_BT_ACTIVE,
} hi_io_func_gpio_7;

/**
* @ingroup iot_io
*
* GPIO_8 pin function.CNcomment:GPIO_8管脚功能。CNend
*/
typedef enum {
    HI_IO_FUNC_GPIO_8_GPIO,
    HI_IO_FUNC_GPIO_8_UART1_RTS_N = 2,
    HI_IO_FUNC_GPIO_8_SPI0_TXD,
    HI_IO_FUNC_GPIO_8_PWM1_OUT = 5,
    HI_IO_FUNC_GPIO_8_I2S0_WS,
    HI_IO_FUNC_GPIO_8_WLAN_ACTIVE,
} hi_io_func_gpio_8;

/**
* @ingroup iot_io
*
* GPIO_9 pin function.CNcomment:GPIO_9管脚功能。CNend
*/
typedef enum {
    HI_IO_FUNC_GPIO_9_GPIO,
    HI_IO_FUNC_GPIO_9_I2C0_SCL,
    HI_IO_FUNC_GPIO_9_UART2_RTS_N,
    HI_IO_FUNC_GPIO_9_SDIO_D2,
    HI_IO_FUNC_GPIO_9_SPI0_TXD,
    HI_IO_FUNC_GPIO_9_PWM0_OUT,
    HI_IO_FUNC_GPIO_9_I2S0_MCLK = 7,
} hi_io_func_gpio_9;

/**
* @ingroup iot_io
*
* GPIO_10 pin function.CNcomment:GPIO_10管脚功能。CNend
*/
typedef enum {
    HI_IO_FUNC_GPIO_10_GPIO,
    HI_IO_FUNC_GPIO_10_I2C0_SDA,
    HI_IO_FUNC_GPIO_10_UART2_CTS_N,
    HI_IO_FUNC_GPIO_10_SDIO_D3,
    HI_IO_FUNC_GPIO_10_SPI0_CK,
    HI_IO_FUNC_GPIO_10_PWM1_OUT,
    HI_IO_FUNC_GPIO_10_I2S0_TX = 7,
} hi_io_func_gpio_10;

/**
* @ingroup iot_io
*
* GPIO_11 pin function.CNcomment:GPIO_11管脚功能。CNend
*/
typedef enum {
    HI_IO_FUNC_GPIO_11_GPIO,
    HI_IO_FUNC_GPIO_11_UART2_TXD = 2,
    HI_IO_FUNC_GPIO_11_SDIO_CMD,
    HI_IO_FUNC_GPIO_11_SPI0_RXD,
    HI_IO_FUNC_GPIO_11_PWM2_OUT,
    HI_IO_FUNC_GPIO_11_RF_TX_EN_EXT,
    HI_IO_FUNC_GPIO_11_I2S0_RX,
} hi_io_func_gpio_11;

/**
* @ingroup iot_io
*
* GPIO_12 pin function.CNcomment:GPIO_12管脚功能。CNend
*/
typedef enum {
    HI_IO_FUNC_GPIO_12_GPIO,
    HI_IO_FUNC_GPIO_12_UART2_RXD = 2,
    HI_IO_FUNC_GPIO_12_SDIO_CLK,
    HI_IO_FUNC_GPIO_12_SPI0_CSN,
    HI_IO_FUNC_GPIO_12_PWM3_OUT,
    HI_IO_FUNC_GPIO_12_RF_RX_EN_EXT,
    HI_IO_FUNC_GPIO_12_I2S0_BCLK,
} hi_io_func_gpio_12;

/**
* @ingroup iot_io
*
* GPIO_13 pin function.CNcomment:GPIO_13管脚功能。CNend
*/
typedef enum {
    HI_IO_FUNC_GPIO_13_SSI_DATA,
    HI_IO_FUNC_GPIO_13_UART0_TXD,
    HI_IO_FUNC_GPIO_13_UART2_RTS_N,
    HI_IO_FUNC_GPIO_13_SDIO_D0,
    HI_IO_FUNC_GPIO_13_GPIO,
    HI_IO_FUNC_GPIO_13_PWM4_OUT,
    HI_IO_FUNC_GPIO_13_I2C0_SDA,
    HI_IO_FUNC_GPIO_13_I2S0_WS,
} hi_io_func_gpio_13;

/**
* @ingroup iot_io
*
* GPIO_14 pin function.CNcomment:GPIO_14管脚功能。CNend
*/
typedef enum {
    HI_IO_FUNC_GPIO_14_SSI_CLK,
    HI_IO_FUNC_GPIO_14_UART0_RXD,
    HI_IO_FUNC_GPIO_14_UART2_CTS_N,
    HI_IO_FUNC_GPIO_14_SDIO_D1,
    HI_IO_FUNC_GPIO_14_GPIO,
    HI_IO_FUNC_GPIO_14_PWM5_OUT,
    HI_IO_FUNC_GPIO_14_I2C0_SCL,
} hi_io_func_gpio_14;

3.3 hi_io_pull

/**
 * @ingroup iot_io
 *
 * GPIO pull-up configuration.CNcomment:IO上下拉功能CNend
 */
typedef enum {
    HI_IO_PULL_NONE,    /**< Disabled.CNcomment:无拉CNend */
    HI_IO_PULL_UP,      /**< Pull-up enabled.CNcomment:上拉CNend */
    HI_IO_PULL_DOWN,    /**< Pull-down enabled.CNcomment:下拉CNend */
    HI_IO_PULL_MAX,     /**< Invalid.CNcomment:无效值CNend */
} hi_io_pull;

3.4 hi_gpio_value

/**
* @ingroup iot_gpio
*
* I/O level. CNcomment:GPIO电平状态。CNend
*/
typedef enum {
    HI_GPIO_VALUE0 = 0,      /**< Low level.CNcomment:低电平CNend*/
    HI_GPIO_VALUE1           /**< High level.CNcomment:高电平CNend*/
} hi_gpio_value;

3.5 hi_gpio_dir

/**
* @ingroup iot_gpio
*
* I/O direction. CNcomment:GPIO方向。CNend
*/
typedef enum {
    HI_GPIO_DIR_IN = 0,       /**< Input.CNcomment:输入方向CNend*/
    HI_GPIO_DIR_OUT           /**< Output.CNcomment:输出方向CNend*/
} hi_gpio_dir;

3.6 hi_gpio_int_type

/**
* @ingroup iot_gpio
*
* I/O interrupt trigger mode. This bit is used with HI_GPIO_INT_POLARITY.
CNcomment:GPIO中断触发方式,与hi_gpio_int_polarity配合使用。CNend
*/
typedef enum {
    HI_INT_TYPE_LEVEL = 0, /**< The interrupt is triggered in level-sensitive mode. CNcomment:电平触发中断CNend */
    HI_INT_TYPE_EDGE   /**< Interrupt triggered at the rising edge or falling edge.CNcomment:边沿触发中断CNend */
} hi_gpio_int_type;

3.7 hi_gpio_int_polarity

/**
* @ingroup iot_gpio
*
* I/O interrupt polarity. This pin is used with HI_GPIO_INT.
CNcomment:IO中断极性,与hi_gpio_int_type配合使用。CNend
*/
typedef enum {
    HI_GPIO_EDGE_FALL_LEVEL_LOW = 0,  /**< Interrupt triggered at low level or falling edge.
                                         CNcomment:低电平或下降沿触发中断CNend */
    HI_GPIO_EDGE_RISE_LEVEL_HIGH      /**< Interrupt triggered at high level or rising edge.
                                         CNcomment:高电平或上升沿触发中断CNend */
} hi_gpio_int_polarity;

04. GPIO相关函数

GPIO 相关 API 函数文件在 D:\hi3861_hdu_iot_application\src\device\hisilicon\hispark_pegasus\sdk_liteos\include\hi_gpio.h中,如下:

4.1 hi_gpio_init

/**
* @ingroup  iot_gpio
* @brief  Initializes GPIO module.CNcomment:GPIO模块初始化。CNend
*
* @par 描述:
*           Initializes GPIO module.CNcomment:GPIO模块初始化。CNend
*
* @attention
* @li This API needs to be invoked during initialization to enable the GPIO interrupt so that the I/O interrupt
*     can be responded.CNcomment:需要在初始化阶段调用该接口使能GPIO中断,使得IO中断可以得到响应。CNend
* @li This interface cannot be invoked repeatedly. It can be invoked only once in the initialization phase.
CNcomment:该接口不支持重复调用,只能在初始化阶段调用一次。CNend
*
* @param  None
*
* @retval #0       Success.
* @retval #Other   Failure. For details, see hi_errno.h.
* @par 依赖:
*           @li hi_gpio.h:Describes GPIO APIs.CNcomment:文件用于描述GPIO相关接口。CNend
* @see  None
*/
hi_u32 hi_gpio_init(hi_void);

4.2 hi_io_set_func

/**
* @ingroup  iot_io
* @brief Sets the I/O multiplexing.CNcomment:配置某个IO的复用功能。CNend
*
* @par 描述:
*           Sets the I/O multiplexing.CNcomment:配置某个IO的复用功能。CNend
*
* @attention None
* @param  id  [IN] type #hi_io_name,I/O index.CNcomment:硬件管脚。CNend
* @param  val [IN] type #hi_u8,I/O multiplexing.See the functions below: CNcomment:IO复用功能。
根据待设置的硬件管脚,从如下枚举中选择相应功能。CNend
                        hi_io_func_gpio_0,
                        hi_io_func_gpio_1,
                        hi_io_func_gpio_2,
                        hi_io_func_gpio_3,
                        hi_io_func_gpio_4,
                        hi_io_func_gpio_5,
                        hi_io_func_gpio_6,
                        hi_io_func_gpio_7,
                        hi_io_func_gpio_8,
                        hi_io_func_gpio_9,
                        hi_io_func_gpio_10,
                        hi_io_func_gpio_11,
                        hi_io_func_gpio_12,
                        hi_io_func_gpio_13,
                        hi_io_func_gpio_14,
                        hi_io_func_sfc_csn,
                        hi_io_func_sfc_io_1,
                        hi_io_func_sfc_io_2,
                        hi_io_func_sfc_io_0,
                        hi_io_func_sfc_clk,
                        hi_io_func_sfc_io_3
*
* @retval 0       Success
* @retval #HI_ERR_GPIO_INVALID_PARAMETER     Failure. Input invalid.
* @par 依赖:
*           @li hi_io.h:Describes I/O APIs.CNcomment:文件用于描述IO相关接口。CNend
* @see  hi_io_get_func。
*/
hi_u32 hi_io_set_func(hi_io_name id, hi_u8 val);
功能:
	主要功能是设置指定 GPIO 引脚的功能

参数:
	id:指定的 IO 号
	val:配置的复用功能

返回值:
    0 成功,1 失败    

4.3 hi_io_set_pull

/**
* @ingroup  iot_io
* @brief Enables the I/O pull-up.CNcomment:设置某个IO上下拉功能。CNend
*
* @par 描述:
*           Enables the I/O pull-up.CNcomment:设置某个IO上下拉功能。CNend
*
* @attention None
* @param  id  [IN]  type #hi_io_name,I/O index.CNcomment:硬件管脚。CNend
* @param  val [IN]  type #hi_io_pull,I/O pull-up enable.CNcomment:待设置的上下拉状态。CNend
*
* @retval 0       Success
* @retval #HI_ERR_GPIO_INVALID_PARAMETER     Failure. Input invalid.
* @par 依赖:
*           @li hi_io.h:Describes I/O APIs.CNcomment:文件用于描述IO相关接口。CNend
* @see  hi_io_get_pull。
*/
hi_u32 hi_io_set_pull(hi_io_name id, hi_io_pull val);
功能:
	设置指定 IO 的管脚上下拉
参数:
	id:指定的 IO 号
	dir:GPIO 管脚上下拉     
返回值:
    0 成功,1 失败        

4.4 hi_gpio_set_dir

/**
* @ingroup  iot_gpio
* @brief  Sets the direction of a single I/O pin.CNcomment:设置某个GPIO管脚方向。CNend
*
* @par 描述:
*           Sets the direction of a single I/O pin.CNcomment:设置某个GPIO管脚方向。CNend
*
* @attention None
* @param  id [IN]    type #hi_gpio_idx,I/O index.CNcomment:GPIO索引。CNend
* @param  dir   [IN] type #hi_gpio_dir,I/O direction.CNcomment:GPIO方向。CNend
*
* @retval #0       Success.
* @retval #Other   Failure. For details, see hi_errno.h.
* @par 依赖:
*           @li hi_gpio.h:Describes GPIO APIs.CNcomment:文件用于描述GPIO相关接口。CNend
* @see  hi_gpio_get_dir
*/
hi_u32 hi_gpio_set_dir(hi_gpio_idx id, hi_gpio_dir dir);
功能:
	设置指定 IO 的管脚方向
参数:
	id:指定的 IO 号
	dir:GPIO 管脚方向    
        
返回值:
    0 成功,1 失败

4.5 hi_gpio_set_ouput_val

/**
* @ingroup  iot_gpio
* @brief  Sets the output level of a single I/O pin.CNcomment:设置单个GPIO管脚输出电平状态。CNend
*
* @par 描述:
*           Sets the output level of a single I/O pin.CNcomment:设置单个GPIO管脚输出电平状态。CNend
*
* @attention None
*
* @param  id [IN]    type #hi_gpio_idx,I/O index.CNcomment:GPIO索引。CNend
* @param  val [IN] type #hi_gpio_value,output value. CNcomment:输出值。CNend
*                 @li 0:low level.CNcomment:低电平。CNend
*                 @li 1:high level.CNcomment:高电平。CNend
*
* @retval #0       Success.
* @retval #Other   Failure. For details, see hi_errno.h.
* @par 依赖:
*           @li hi_gpio.h:Describes GPIO APIs.CNcomment:文件用于描述GPIO相关接口。CNend
* @see  hi_gpio_get_input_val。
*/
hi_u32 hi_gpio_set_ouput_val(hi_gpio_idx id, hi_gpio_value val);
功能:
	设置指定 IO 的输出电平
        
参数:
	id:指定的 IO 号
	val:GPIO 管脚输出电平,0 为低电平,1 为高电平   
返回值:
   	0 成功,1 失败

4.6 hi_gpio_get_input_val

/**
* @ingroup  iot_gpio
* @brief  Obtains the input level of a single I/O pin.CNcomment:获取某个IO管脚输入电平状态。CNend
*
* @par 描述:
*           Obtains the input level of a single I/O pin.CNcomment:获取某个IO管脚输入电平状态。CNend
*
* @attention None
* @param  id  [IN]  type #hi_gpio_idx,I/O index.CNcomment:GPIO索引。CNend
* @param  val [OUT] type #hi_gpio_value*,Output value.CNcomment:输出值。CNend
*                 @li 0:low level.CNcomment:低电平。CNend
*                 @li 1:high level.CNcomment:高电平。CNend
*
* @retval #0       Success.
* @retval #Other   Failure. For details, see hi_errno.h.
* @par 依赖:
*           @li hi_gpio.h:Describes GPIO APIs.CNcomment:文件用于描述GPIO相关接口。CNend
* @see  None
*/
hi_u32 hi_gpio_get_input_val(hi_gpio_idx id, hi_gpio_value *val);
功能:
	读取指定 GPIO 管脚的高低电平
参数:
	id:指定的 IO 号
	val:返回读取的 GPIO 管脚电平值的指针,可定义一个变量接收。
返回值:
	0 成功,1 失败        
        

05. 延时函数

usleep 函数用于实现微秒级的延时,sleep 函数用于实现秒级的延时。它是 POSIX 标准的一部分,常用于 Unix、Linux 等操作系统,但在嵌入式系统中也可能通过兼容层或底层实现来提供。使用时需要添加<unistd.h>头文件。

函数原型:void usleep(unsigned long usec);

参数:usec 表示需要延时的微秒数。

函数原型:void sleep(unsigned long sec);

参数:sec 表示需要延时的毫秒数。

06. 附录


http://www.kler.cn/a/581049.html

相关文章:

  • Android 滑块开关 自定义Switch
  • 解决Element UI的el-date-picker组件默认值为当天日期但选择后不回显的问题
  • 每天一道算法题【蓝桥杯】【在排序数组中查找元素的第一个位置和最后一个位置】
  • 【MySQL篇】MySQL基本查询详解
  • 【推荐项目】Java的廊坊城市公交查询网站
  • 光谱相机检测肉类新鲜度的原理
  • 查看端口被占用命令
  • VMware安装Windows server 2016
  • # 如何确认elementary os (linux)使用的是Wayland而不是x11?
  • 【C语言】结构体篇
  • 联核科技AGV无人叉车能给企业带来哪些效益?
  • 【面试】JVM
  • 计算机考研C语言
  • C++设计模式-工厂模式:从原理、适用场景、使用方法,常见问题和解决方案深度解析
  • 工作记录 2017-01-04
  • 【CXX】6 内置绑定
  • Redis--Set类型
  • JVM、MySQL常见面试题(尽力局)
  • vue3中的深度选择器
  • Python----数据可视化(Seaborn合集:介绍,应用,绘图,使用FacetGrid绘图)