[問題] 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