建立连接
BLE中必须是 Master 发起连接请求,过程如下:
Master 收到广播后发送 CONNECT_IND, 然后连接就建立完成。后面就是开始发送数据包。
Connection Parameter Update Procedure 是一个 GAP 的 Procedure,允许 Central 或者 Peripheral 在连接后是可以更新连接参数。一般原厂会提供相关 GAP 的 API, 例如我司的 API 就是
1 | int inb_conn_param_update(int conidx, inb_conn_param_update_t *p_upd) |
而GAP下面的layer如果实现,则是分为3种情况:
Central 要更新连接参数,但 Central 或 Peripheral 有一个不支持 Connection Parameters Request Procedure,则 Central 用 Link Layer 的 Connection Update procedure 来更新参数。Master 发送 LL_CONECTION_UPDATE_IND 来更新连接参数。
面试时发现很多公司喜欢考一些数组和指针相关的问题。比较常见的是下面这个:
1 | /* main.c */ |
问题是这段代码是否可以正常运行?
最近还碰到个题目是这样的:
1 | int a[5] = {1, 2, 3, 4, 5}; |
这段代码的输出是什么?
本文例子大多出自GCC的文档 GCC Macro Doc
Object-like marco 只会在使用时才会完全展开。
#define TABLESIZE BUFSIZE
#define BUFSIZE 1024
TABLESIZE
==> BUFSIZE
==> 1024
##Function-like Macros
function-like macro 只会在后面有 () 才会展开。
1 | extern void foo(void); |
注意如果定义了宏 foo(), 而又想定义foo函数,可以采用下面的做法。
1 | #define foo() //inline function here |