13.typedef

本文详细介绍了C语言中typedef关键字的使用方法及其与#define的区别。通过具体示例展示了如何利用typedef为现有数据类型定义新的名称,简化复杂类型的声明,并提高代码的可读性和可维护性。

typedef为C语言的关键字,作用是为一种数据类型(基本类型或自定义数据类型)定义一个新名字,不能创建新类型

  1. 与#define不同,typedef仅限于数据类型,而不是能是表达式或具体的值
  2. #define发生在预处理,typedef发生在编译阶段
#include <stdio.h>

typedef int INT;
typedef char BYTE;
typedef BYTE T_BYTE;
typedef unsigned char UBYTE;

typedef struct type
{
	UBYTE a;
	INT b;
	T_BYTE c;
}TYPE, *PTYPE;

struct studentsInfoList
{
	char name[20];
	char sex;
};
//取一个别名
typedef struct studentsInfoList sinfo;

int main()
{
    sinfo student;
	TYPE t;
	t.a = 254;
	t.b = 10;
	t.c = 'c';

	PTYPE p = &t;
	printf("%u, %d, %c\n", p->a, p->b, p->c);

	return 0;
}

 

<think> 我们正在查看的是位于 `Iplatform/packages/private/bluetopia-profiles/src/profiles_gatt/sample/LinuxBLE` 目录下的文件,这个目录是一个示例实现,主要展示了如何在Linux平台上使用Bluetopia协议栈的GATT服务。重点在于`bthost`模块,该模块是示例中的蓝牙主机实现。 下面逐一解释目录中的每个文件: 1. **at.h**:AT命令解析头文件。定义了解析AT命令(常用于串口通信控制蓝牙模块)的函数和数据结构。 2. **btchecker**:可执行脚本或程序。可能用于检查蓝牙环境或测试蓝牙功能(具体功能需看内容,通常为测试工具)。 3. **bthost.c**:蓝牙主机实现的核心源文件。包含GATT客户端操作、事件处理、连接管理等逻辑。 4. **bthost.h**:`bthost.c`的头文件,声明外部可用的函数和数据结构。 5. **bt_version**:文件或脚本。可能包含蓝牙协议栈版本信息,用于编译时确定版本。 6. **LinuxBLE.mak**:Makefile文件,用于Linux平台编译该模块。定义编译规则和依赖。 7. **Makefile**:主Makefile,通常调用`LinuxBLE.mak`或定义编译规则。 8. **manu.c**:厂商自定义命令或功能实现。可能包含特定于厂商的蓝牙配置或测试命令。 9. **manu.h**:`manu.c`的头文件。 10. **rf.c**:射频(Radio Frequency)测试功能实现。用于蓝牙射频性能测试(如发射功率、接收灵敏度等)。 11. **rf.h**:`rf.c`的头文件。 12. **typedef.h**:自定义类型定义文件。定义项目中使用的基本数据类型(如UINT8、UINT16等)以增强可移植性。 13. **uart.c**:串口通信实现。用于通过UART与蓝牙控制器通信(如果使用HCI UART传输层)。 14. **uart.h**:`uart.c`的头文件。 15. **util.c**:工具函数集。包含字符串处理、日志打印、内存管理等辅助函数。 16. **util.h**:`util.c`的头文件。 ### 重点模块:bthost(GATT客户端示例) #### 功能概述 `bthost`模块实现了一个简易的蓝牙主机(Central)功能,包括: - 设备扫描与发现 - GATT服务发现 - 特征值读写 - 通知/指示的启用与处理 #### 关键代码解析(bthost.c): 1. **设备扫描**: ```c BT_GAP_StartDeviceDiscovery(..., discovery_callback); ``` 扫描结果通过回调函数`discovery_callback`返回设备地址、RSSI和广播数据。 2. **服务发现**: ```c BT_GATT_DiscoverPrimaryServices(..., service_discovery_callback); ``` 连接后,通过该函数发现设备支持的服务。 3. **特征值操作**: - 读特征值:`BT_GATT_ReadCharacteristicValue` - 写特征值:`BT_GATT_WriteCharacteristicValue` - 启用通知:通过写入CCCD描述符(0x2902)为1 4. **事件处理**: ```c static void gatt_event_callback(BT_GATT_Event_Data_t *EventData) { switch(EventData->EventType) { case BT_GATT_CHARACTERISTIC_VALUE_NOTIFICATION_EVENT: // 处理通知数据 break; } } ``` #### 使用流程示例: ```mermaid sequenceDiagram 手机App->>bthost: 启动扫描 bthost->>蓝牙设备: 发送扫描请求 蓝牙设备-->>bthost: 广播包响应 bthost->>手机App: 上报设备信息 手机App->>bthost: 连接设备A bthost->>蓝牙设备A: 建立连接 bthost->>蓝牙设备A: 发现服务 蓝牙设备A-->>bthost: 返回服务列表 bthost->>手机App: 显示服务/特征值 手机App->>bthost: 读取电池特征值 bthost->>蓝牙设备A: 发送读请求 蓝牙设备A-->>bthost: 返回电池电量(80%) ``` ### 开发意义: 该示例为开发者提供: - 蓝牙主机端开发模板 - GATT操作标准流程参考 - 跨平台移植基础(通过抽象UART/工具函数) §§相关问题§§ 1. 在bthost.c中,如何处理GATT服务的发现流程? 2. 如何通过bthost模块启用蓝牙设备的通知功能? 3. rf.c文件中的射频测试功能通常包含哪些测试项? 4. 在LinuxBLE示例中,uart.c的作用是什么?是否必须使用UART与蓝牙控制器通信? </think>### LinuxBLE 示例目录文件解析 您列出的目录 `Iplatform/packages/private/bluetopia-profiles/src/profiles_gatt/sample/LinuxBLE` 是一个**蓝牙主机(BTHost)实现示例**,主要用于演示如何在 Linux 平台上实现 GATT 客户端功能。以下是各文件的具体作用: #### 核心功能文件 1. **bthost.c** - **主实现文件**:包含蓝牙主机核心逻辑 - 功能: ```c /* 伪代码示例 */ void BTHost_Init() // 初始化蓝牙协议栈 void BTHost_Scan() // 启动设备扫描 void GATT_DiscoverServices() // 发现GATT服务 void HandleNotifications() // 处理特征值通知 ``` 2. **bthost.h** - 头文件:声明 `bthost.c` 中的公共接口和数据结构 - 关键定义: ```c typedef struct { BD_ADDR_t dev_addr; // 蓝牙设备地址 uint16_t conn_handle; // 连接句柄 } BTHost_Device_t; ``` #### 硬件抽象层 3. **uart.c** - UART 串口驱动实现:用于与蓝牙控制器通信(HCI 传输层) - 核心函数: ```c int UART_SendHCICommand(uint8_t *pkt, size_t len) // 发送HCI命令 void UART_ReceiveCallback(uint8_t *data) // 接收数据回调 ``` 4. **uart.h** - 串口头文件:定义 UART 配置参数和接口原型 #### 测试与工具 5. **btchecker** - **可执行测试工具**:用于验证蓝牙功能 - 典型测试项: ```bash ./btchecker --scan # 测试设备扫描 ./btchecker --read-char # 测试特征值读取 ``` 6. **rf.c & rf.h** - 射频测试模块:提供蓝牙射频性能测试功能 - 支持命令: ```c RF_StartTxTest() // 启动发射测试 RF_GetRSSI() // 获取信号强度 ``` #### 辅助模块 7. **util.c & util.h** - 工具函数集: ```c void HexDump(uint8_t *data) // 十六进制数据打印 uint16_t SwapEndian16(uint16_t val) // 字节序转换 ``` 8. **typedef.h** - 跨平台类型定义: ```c typedef unsigned char uint8_t; typedef unsigned short uint16_t; ``` 9. **manu.c & manu.h** - 厂商自定义命令实现:用于扩展私有协议 - 示例: ```c MANU_SendCustomCommand() // 发送厂商特定指令 ``` #### 构建系统 10. **Makefile & LinuxBLE.mak** - 构建脚本:包含编译规则和依赖关系 - 典型编译流程: ```bash make -f LinuxBLE.mak # 使用指定规则编译 make clean # 清理构建产物 ``` 11. **bt_version** - 版本标识文件:记录协议栈版本信息 - 内容示例: ``` Bluetopia_v3.2.1_LinuxBLE BuildDate: 2023-07-15 ``` #### AT 命令模块 12. **at.h** - AT 命令解析器:用于通过串口调试蓝牙模块 - 支持命令: ``` AT+SCAN // 启动扫描 AT+CONN=AA:BB:CC:DD:EE:FF // 连接设备 ``` ### 关键模块交互流程 ```mermaid graph LR A[btchecker] -->|调用| B(bthost.c) B -->|依赖| C[uart.c] C -->|物理传输| D[蓝牙控制器] B -->|工具函数| E[util.c] B -->|测试命令| F[rf.c] B -->|自定义协议| G[manu.c] ``` ### 开发实践建议 1. **移植要点**: ```c // 步骤: // 1. 实现uart.c中的硬件适配层 // 2. 在bthost.c中注册事件回调 void BTHost_RegisterEventCallback(BT_Event_CB_t cb); // 3. 初始化协议栈 BT_STATUS_t status = BT_InitializeStack(); ``` 2. **典型工作流**: ```bash # 编译示例 make -f LinuxBLE.mak # 运行测试 ./btchecker --scan ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值