笔记

来源:互联网 发布:android直播rtmp源码 编辑:程序博客网 时间:2024/06/02 02:10

1. aw_gpio_trigger_connect 和 aw_int_connect 都是用于连接中断回调函数,前者使用引脚号连接偏向用于“上升沿/下降沿”等的触发中断,后者使用中断号连接偏向用于内部其他中断。两者可实现一样的效果。

2. RS232-TTL模块的RXD接开发板的RXD即可,其内部已将发送端接到RXD脚。

3. 串口异步中断模式(异步模式)在不使用FIORFLUSH的情况下将陆续接收之前获得的数据;通过返回值len来判断是否接收到数据。

4. FIORFLUSH将清除缓冲区曾接收到得所有数据。

5. 串口在使用aw_serial_read()接收数据时配置为SIO_MODE_POLL时接收不到数据。

6. 启动MI1062循环发送,串口(异步中断模式)能接收到数据,但一直为0。接收一次数据就FIORFLUSH也可以正确接收。

     使用单次发送就能正确接收。

7. 中断上下部,上部用于响应中断和配置中断(反应要快),下部用于中断处理函数(用于耗时较长)。

8. static和全局变量(静态存储区)、局部变量(栈,容量少,函数结束时释放)和 malloc和new(动态内存,堆,需要free或delete)

9. 结构体不能直接复制,只能传指针。为结构体里的结构体赋值可用#define定义一组初值。

10. 普通变量可以赋值给const,赋值之后其值不允许改变。

11. 本级为*p取下一级用“->”,本级为实体取下一级用“.”。

12. 指针加下标p[2] 相当于 *(p + 2)。

13. 给指针存数据,需先申请内存。

14. 数组名的地址本身是不可替换的,当作为函数的void *形参传到内部就会变成可改。

15. 如果一个结构体里有个变量指针,取其值需*(p->a),如果它是数组指针,则p->a[0]即可。

16. int a; char b; a = 0x80; b = 0x80; a和b并不相等,b会变成它的补码再存储。

17. unsigned若省略后一个关键字,大多数编译器都会认为是unsigned int

18. 指针是变量,那么变量也需要地址来存储。要修改指针的指向,那么就需要获得指针的地址。

19.声明一个指针,不能给它直接给它赋值,它必须要有指向,或者申请了内存,不然就是“野指针”。

20.类比函数要修改外部变量值需传入变量的指针,那么修改指针的指向,那么就应该传指针的指针。

21.C语言与字符串有关的函数:strstr判断某个字符串是否是另一个字符串的子集。strtol将字符串转化为数值。

22.函数指针也可用typedef

23. void * 只能存指针,强转*(int *)(void *)

24. 使用void * 应先把其赋值给具体类型的指针,如int*,然后就可以给指针存数据。

25. 任何回调函数都要有上下文,就是要保存中间变量。

26. *p指针,给p赋值可以直接获得变量的地址,这是毋庸置疑的。但是如果*p是形参,p的值是不可改变的(类比普通变量为形参),只能修改*p的值。而函数外部想获得函数内部的地址,那只能传入**p,然后修改*p的值,才能修改地址。外部通过*p即可取得修改后的地址。

27. char *p = "abc";字符串是不允许改变的,否则会产生意想不到的结果。

28. 不用的指针形参可用NULL来填充。

29. 不改变的数据加const关键字可存放在rodata,可实现多进程共享,运行时不占用ram。

30. 分配了内存而不释放称为内存泄漏,内存泄漏过多会导致内存不足。释放无效内存程序会崩溃。

31. 结构体赋值最好使用.XX = 来赋值,防止成员相对位置改变后引起赋值错误。

32. 当数组作为形参时,数组退化为指针,此时是无法获得该数组大小的。

33. volatile声明变量随时可能被意外修改,多线程中,变量可能会被其它线程修改,应加volatile修饰。

34. 在函数中创建线程,并往线程传入参数,有可能函数已执行完,导致参数被释放,线程得到的是一个随机的内容。

35. 遇到函数内有多处返回,且返回前需要做资源释放或解锁等,可用单入口单出口的结构,即goto

36. b[i] = a[i++] ,i在表达式结束后才++,所以b[i]和a[i]的i值一样。

37. 电脑串口传输的是RS232电平,范围为-10V~+10V。单片机的串口电平为TTL电平,范围为0~+5V。所以需要使用MX232芯片进行转换。USB转串口则需要加一个芯片将USB转化为RS232再通过MX232链接单片机。

38. 发现#define了,但是#ifdef #endif还是灰色的,原来是#ifdef #endif所在头文件没有被#include,所以导致无法识别。

0 0
原创粉丝点击