看板 C_and_CPP 關於我們 聯絡資訊
這是我在"一步步寫嵌入式操作系統"看到的: #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)) 感謝。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 86.200.140.23 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1432658685.A.B3D.html
narsilx: 為甚麼不在你的板子上跑呢? 05/27 00:54
wtchen: 我只是照著書做,可是跑不起來... 05/27 01:20
james732: 字串最後會以0結尾,所以最後會while(0)而結束 05/27 01:31
yvb: 搞錯重點了吧.那只是用來呈現編譯操作的一段程式,內容不重要. 05/27 02:15
wtchen: 我大概懂了,當*p有東西的時候while就會繼續 05/27 02:23
wtchen: 可我不懂為何*UFCON0 = *p++;這行會導致Segmentation faul 05/27 02:23
wtchen: 以c/c++的角度來看,這行出了啥事? 05/27 02:24
Qbsuran: 應該是你跑程式的環境跟編譯的架構不同 05/27 02:29
wtchen: 問題是我跑emulator也起不來~~ 05/27 02:35
Killercat: 架構不同,你的0x5000020在你的runtime不見得是合法 05/27 03:25
Killercat: 你要查一下板子的驅動配給你的是哪個虛擬位置 05/27 03:25
Killercat: 也有一種可能是你板子先導驅動忘了跑.... 05/27 03:26
yvb: 看一下你抄來這段程式, 即原書代碼2-1, 原文緊接著的段落, 05/27 04:29
yvb: 就說明該位址, 是 s3c2410這塊板子的 串口FIFO寄存器地址 了. 05/27 04:34
yvb: 不知你的 emulator 是什麼硬體的 emulator ? 05/27 04:42
descent: http://goo.gl/4YuWZd 參考一下 05/27 09:22
WYchuang: ... 會出現Segmentation Fault 代表你是在Linux下面吧? 05/27 10:40
Ebergies: 你的 emulator 也還是可能和書上的不同啊... 05/27 10:44
wtchen: 我用qemu-arm,請問要如何看記憶體位置合不合法? 05/27 15:38
suhorng: 應該要完全模擬那塊板子吧 05/27 17:56
suhorng: 要再沒作業系統下跑嗎? 05/27 17:56
wtchen: 要模擬raspberry pi的話要怎麼看?(抱歉我初學) 05/27 19:40
wtchen: 感謝descent的連結,了了 05/27 20:17
yvb: WY大和su大突破盲點了... 05/27 20:32
descent: http://goo.gl/tHcssJ for raspberry pi 05/28 15:26
wtchen: 感謝 05/31 16:19