论坛元老
- 积分
- 8204
- 金钱
- 8204
- 注册时间
- 2020-5-11
- 在线时间
- 3697 小时
|
楼主 |
发表于 2021-3-19 10:26:18
|
显示全部楼层
本帖最后由 LcwSwust 于 2024-7-19 11:09 编辑
13. int *p; *p=
指针未初始化就对指向的地址赋值,不知赋到哪去了。
14.使能了中断,却未写中断服务函数,可能出现死机、复位等现象。
15.有些中断是需要清标志的,若不清标志则会一直中断,主循环卡死。
16.八进制了解一下:010=8,数字前加个0就成8进制了,要小心。
17.编译器本身有BUG,如显示汉字字符串时,需打补丁,未破解的编译器还会有代码量限制。
18.处理串口数据帧时,串口中断里判断一帧完成后置标志,主循环检查到标志置位后清标志并处理数据,
但是在主循环处理数据前又来了新的数据,造成数据错乱。建议利用循环队列或乒乓操作防止当前数据被更新。
19.if(a<b<c) 应写成 if((a<b)&&(b<c))
20.main()最后不加while(1) ;
21. char* p1,p2;//想定义两个指针
p2=p1;//但实际上p2不是指针而是char
22. 函数入口参数的计算顺序不同:
- char test1(void)
- {
- uart_sendbyte(USART0,1);
- return 1;
- }
- char test2(void)
- {
- uart_sendbyte(USART0,2);
- return 2;
- }
- void test(char v1,char v2)
- {
- uart_sendbyte(USART0,v1*10+v2);
- }
复制代码 调用test(test1(),test2());时,51单片机会先发1再发2,STM32单片机则是先发2后发1.
23.单片机本身原因引起的BUG:在STC8A8K48单片机中,访问XDATA中的寄存器时,如果EAXFR未置位,将变成访问外部扩展RAM,影响P0、P2、WR、RD、ALE脚;
手册中未详细说明外部扩展RAM的开启条件。
|
|