打印

遇到一个非常奇怪的问题,请高手看下

[复制链接]
1747|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
442490720|  楼主 | 2012-3-16 01:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM32F103ZE 的处理器,只配置好了串口;执行如下代码:

u8 *cerr1 ;
while(1)
  {   
      printf("aaaaa");
      *cerr1=0;
      printf("bbbbb");
  }

在电脑上在串口就只能收到aaaaa;死活收不到 bbbbb;
于是我打开滴答定时器,每个节拍向串口发个字符,发现STM32执行*cerr1=0;后就死机
串口就死不到任何东西了!!!!!!!
沙发
sjnh| | 2012-3-16 08:04 | 只看该作者
定义指针,使用要初始化,不然就是野指针,不知道指向哪里,直接赋值会出问题
指向无法访问的位置、或者乱改了内部数据都会死机

使用特权

评论回复
板凳
lllaaa| | 2012-3-16 08:25 | 只看该作者
最基本的c语言问题啊。指针要指向合法的内存空间
u8 aaa;
u8 *cerr1= &aaa;

使用特权

评论回复
地板
logokfu| | 2012-3-16 08:31 | 只看该作者
同意!

使用特权

评论回复
5
acgean| | 2012-3-16 08:50 | 只看该作者
u8 * ;
全局变量, 通常是0初始化的。
很可能 cerr1 指向的是 0 地址, 非法地址, 就转入 Fault 异常了, 下面的指令就不会再执行了。
使用野指针, 可是 C 的大忌!希望楼主规范地编写程序!

使用特权

评论回复
6
haixiang811| | 2012-3-16 09:09 | 只看该作者
同意

使用特权

评论回复
7
442490720|  楼主 | 2012-3-16 19:01 | 只看该作者
一下班就改程序试了,果然如楼上各位专家所说,惭愧惭愧,没几年C语言还给老师,我捣鼓了到半夜一点多,没搞明白,你们一说,豁然开朗.感谢各位热心的网友.

使用特权

评论回复
8
张文XXX| | 2012-3-16 22:42 | 只看该作者
学习了

使用特权

评论回复
9
arm菜鸟人| | 2012-3-17 19:52 | 只看该作者
跟着学习。

使用特权

评论回复
10
王紫豪| | 2012-3-17 21:44 | 只看该作者
野指针啦

使用特权

评论回复
11
Simon21ic| | 2012-3-17 21:53 | 只看该作者
HardFault了

使用特权

评论回复
12
哲哲55| | 2012-3-18 21:34 | 只看该作者
指針用好了很好用,
用不好的話害死人。

使用特权

评论回复
13
jxmzzr| | 2012-3-19 10:33 | 只看该作者
指针不仅仅是C语言的灵魂,运用得好更是事半功倍,让你写出的程序更简洁,反之嘛~~~呵呵。学习了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

87

主题

178

帖子

1

粉丝