[问题] while(*p)是啥意思?

楼主: wtchen (没有存在感的人)   2015-05-27 00:44:42
这是我在"一步步写嵌入式操作系统"看到的:
#define UFCON0 ((volatile unsigned int*)(0x50000020))
void helloworld(void) {
const char *p = "helloworld\n";
while (*p) {
*UFCON0 = *p++;
};
while(1);
}
请问这边的while (*p)是啥意思?
还有为啥while结束要加;?(不是{}后不用加?)
while(1)这边不就是无线循环吗?
这整个程式在干嘛?
PS: 我试着用gcc编译过(main里面呼叫这函式),
可是run不起来(Segmentation fault (core dumped))
感谢。
作者: narsilx (反正我们都是训练用猴子)   2015-05-27 00:54:00
为什么不在你的板子上跑呢?
楼主: wtchen (没有存在感的人)   2015-05-27 01:20:00
我只是照著书做,可是跑不起来...
作者: james732 (好人超)   2015-05-27 01:31:00
字串最后会以0结尾,所以最后会while(0)而结束
作者: yvb   2015-05-27 02:15:00
搞错重点了吧.那只是用来呈现编译操作的一段程式,内容不重要.
楼主: wtchen (没有存在感的人)   2015-05-27 02:23:00
我大概懂了,当*p有东西的时候while就会继续可我不懂为何*UFCON0 = *p++;这行会导致Segmentation faul以c/c++的角度来看,这行出了啥事?
作者: Qbsuran (Qbsuran)   2015-05-27 02:29:00
应该是你跑程式的环境跟编译的架构不同
楼主: wtchen (没有存在感的人)   2015-05-27 02:35:00
问题是我跑emulator也起不来~~
作者: Killercat (杀人猫™)   2015-05-27 03:25:00
架构不同,你的0x5000020在你的runtime不见得是合法你要查一下板子的驱动配给你的是哪个虚拟位置也有一种可能是你板子先导驱动忘了跑....
作者: yvb   2015-05-27 04:29:00
看一下你抄来这段程式, 即原书代码2-1, 原文紧接着的段落,就说明该位址, 是 s3c2410这块板子的 串口FIFO寄存器地址 了.不知你的 emulator 是什么硬件的 emulator ?
作者: descent (“雄辩是银,沉默是金”)   2015-05-27 09:22:00
作者: WYchuang (爱赖床的黄金猎犬)   2015-05-27 10:40:00
... 会出现Segmentation Fault 代表你是在Linux下面吧?
作者: Ebergies (火神)   2015-05-27 10:44:00
你的 emulator 也还是可能和书上的不同啊...
楼主: wtchen (没有存在感的人)   2015-05-27 15:38:00
我用qemu-arm,请问要如何看内存位置合不合法?
作者: suhorng ( )   2015-05-27 17:56:00
应该要完全模拟那块板子吧要再没作业系统下跑吗?
楼主: wtchen (没有存在感的人)   2015-05-27 19:40:00
要模拟raspberry pi的话要怎么看?(抱歉我初学)感谢descent的连结,了了
作者: yvb   2015-05-27 20:32:00
WY大和su大突破盲点了...
作者: descent (“雄辩是银,沉默是金”)   2015-05-28 15:26:00
http://goo.gl/tHcssJ for raspberry pi
楼主: wtchen (没有存在感的人)   2015-05-31 16:19:00
感谢

Links booklink

Contact Us: admin [ a t ] ucptt.com