#ifndef SHELL_NON_BLOCKING_MODE #define SHELL_NON_BLOCKING_MODE SERIAL_MANAGER_NON_BLOCKING_MODE
时间: 2024-08-14 14:04:46 浏览: 102
#ifndef SHELL_NON_BLOCKING_MODE是一个预处理器宏指令,在C/C++编程中,它通常用于条件编译。当`#define`后面的SHELL_NON_BLOCKING_MODE等于SERIAL_MANAGER_NON_BLOCKING_MODE时,这行表明程序正在启用非阻塞模式。在这种模式下,串口管理相关的函数会采用非阻塞I/O操作,使得程序可以同时处理其他任务而不会因为等待输入输出而暂停。
换句话说,如果你在编写一个涉及串口通信的程序,并且设置了这个常量,那么所有的串口交互操作将不会阻塞主进程,而是变为立即返回,除非有数据实际可用。这对于实时性和响应速度要求高的系统特别有用。
相关问题
#ifndef __IIC_H #define __IIC_H #include "usart.h" //IO·½ÏòÉèÖà #define SDA_IN() {GPIOB->CRL&=0XFFFFF0FF;GPIOB->CRL|=(u32)8<<8;} #define SDA_OUT() {GPIOB->CRL&=0XFFFFF0FF;GPIOB->CRL|=(u32)3<<8;}改为在stm32g070xx单片机的代码
当然,下面是在stm32g070xx单片机的代码:
```c
#ifndef __IIC_H
#define __IIC_H
#include "main.h"
// IIC GPIO定义
#define I2C_SCL_PIN GPIO_PIN_6
#define I2C_SCL_PORT GPIOB
#define I2C_SDA_PIN GPIO_PIN_7
#define I2C_SDA_PORT GPIOB
// IIC读写方向
#define I2C_DIRECTION_TRANSMITTER 0
#define I2C_DIRECTION_RECEIVER 1
// IIC读写返回值
#define I2C_ACK 1
#define I2C_NACK 0
// IIC初始化
void I2C_Init(void);
// IIC开始信号
void I2C_Start(void);
// IIC停止信号
void I2C_Stop(void);
// IIC发送数据
void I2C_SendByte(uint8_t byte);
// IIC接收数据
uint8_t I2C_ReceiveByte(uint8_t ack);
// IIC等待应答信号
uint8_t I2C_WaitAck(void);
// IIC发送应答信号
void I2C_SendAck(uint8_t ack);
// SDA口设置为输入模式
#define SDA_IN() {I2C_SDA_PORT->MODER &= ~(GPIO_MODER_MODE7_Msk);\
I2C_SDA_PORT->MODER |= (GPIO_MODER_MODE7_0);}
// SDA口设置为输出模式
#define SDA_OUT() {I2C_SDA_PORT->MODER &= ~(GPIO_MODER_MODE7_Msk);\
I2C_SDA_PORT->MODER |= (GPIO_MODER_MODE7_0);\
I2C_SDA_PORT->OTYPER &= ~(GPIO_OTYPER_OT7_Msk);}
#endif
```
这段代码包含了IIC通信所需的宏定义和函数声明,同时也包含了GPIO的定义。在初始化函数中,需要初始化IIC的GPIO口为推挽输出模式,并将SCL和SDA口拉高。在发送数据时需要先发送起始信号,然后发送数据,最后发送停止信号。在接收数据时需要等待应答信号,然后接收数据,最后发送应答信号。在SDA_IN和SDA_OUT宏定义中,SDA口的设置也做了相应的修改。
对以下功能代码注释,头文件#ifndef __FSR_H #define __FSR_H #include "sys.h" typedef unsigned short u8; #define FSR_GPIO GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_15) #define KEY_PRESS 1 void FSR_IO_Init(void); u8 FSR_Scan(u8); #endif,c文件#include "bflb_mtimer.h" #include "board.h" #include "FSR.h" #include "sys.h" #include "delay.h" void FSR_IO_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOC, &GPIO_InitStructure); GPIO_SetBits(GPIOC,GPIO_Pin_15); } u8 FSR_Scan(u8 mode) { static u8 key_up=1; if(mode)key_up=1; if(key_up&&FSR_GPIO==0) { delay_ms(10); key_up=0; if(FSR_GPIO==0)return KEY_PRESS; }else if(FSR_GPIO==1)key_up=1; return 0; },给出可复制代码
头文件 FSR.h:
```
#ifndef __FSR_H
#define __FSR_H
#include "sys.h" // 引入系统头文件
typedef unsigned short u8; // 定义 unsigned short 类型的别名 u8
#define FSR_GPIO GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_15) // 定义宏 FSR_GPIO,读取 GPIOC 的第 15 个引脚的输入状态
#define KEY_PRESS 1 // 定义宏 KEY_PRESS,值为 1
void FSR_IO_Init(void); // 声明函数 FSR_IO_Init,无返回值,无参数
u8 FSR_Scan(u8); // 声明函数 FSR_Scan,返回值为 u8 类型,参数为 u8 类型
#endif
```
c 文件 FSR.c:
```
#include "bflb_mtimer.h"
#include "board.h"
#include "FSR.h"
#include "sys.h"
#include "delay.h"
void FSR_IO_Init(void) {
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_SetBits(GPIOC,GPIO_Pin_15);
}
u8 FSR_Scan(u8 mode) {
static u8 key_up=1;
if(mode)key_up=1;
if(key_up&&FSR_GPIO==0) {
delay_ms(10);
key_up=0;
if(FSR_GPIO==0)return KEY_PRESS;
}else if(FSR_GPIO==1)key_up=1;
return 0;
}
```
阅读全文