tag:blogger.com,1999:blog-3550204829234352390.post1355515020548969943..comments2024-03-27T09:13:48.546+08:00Comments on 研發養成所 ( Bridan's Blog - 4rdp, For R&D Person ): NXT 無法使用遞歸 (Recursion)Bridanhttp://www.blogger.com/profile/17055047757114667099noreply@blogger.comBlogger8125tag:blogger.com,1999:blog-3550204829234352390.post-11007889194286106792009-12-10T23:36:39.416+08:002009-12-10T23:36:39.416+08:000319 您好,
這是編譯器 (Compiler) 的設計問題,編譯器的用途是將你所寫的程式文字,...0319 您好,<br /><br />這是編譯器 (Compiler) 的設計問題,編譯器的用途是將你所寫的程式文字,轉換為可執行機械碼,設計良好的編譯器,不會有程式位置次序問題。<br /><br />NXC 編譯器設計,它是循序編譯,因為 task A 先編譯而 task B 還沒編譯,所以編譯 Start B 這一行時,編譯器不認識 task B 因此產生錯誤。<br /><br />如果 task A 與 task B 位置對調,那麼就沒問題。<br /><br />專業的高級編譯器處理這種問題,會先產生中繼檔,task A 編譯連結 (Link) 時,會搜尋中繼檔內 task B 是否存在,這樣就可以解決程式位置問題。<br /><br />知道這樣,在 NXC 還未改善前,寫程式時應避開這類狀況。Bridanhttps://www.blogger.com/profile/17055047757114667099noreply@blogger.comtag:blogger.com,1999:blog-3550204829234352390.post-90640799483930953812009-12-10T08:05:40.245+08:002009-12-10T08:05:40.245+08:00謝謝這麼詳盡的解答,感謝!
另外請教老師,task為何在順序上也有很多限制?
譬如說,為何只能上...謝謝這麼詳盡的解答,感謝!<br /><br />另外請教老師,task為何在順序上也有很多限制?<br /><br />譬如說,為何只能上面的task不能start下面的task?<br /><br />task A()<br />{<br />start B;<br />}<br /><br />task B()<br />{<br />...<br />}<br />這樣task在排序上常常出現問題?謝謝!0319https://www.blogger.com/profile/15083046897535256357noreply@blogger.comtag:blogger.com,1999:blog-3550204829234352390.post-67479370892781487062009-12-09T00:25:53.352+08:002009-12-09T00:25:53.352+08:000319 您好
這個程式無法編譯,最主要的原因是受 NXT 韌體限制,詳細內容會另外專文討論,這裡...0319 您好<br /><br />這個程式無法編譯,最主要的原因是受 NXT 韌體限制,詳細內容會另外專文討論,這裡先簡單回覆原因。<br /><br />NXT 的 OS 以及 你的程式,平時都是儲存在 flash 記憶體,執行時,你的程式會被搬移到 RAM 上去跑,這塊規劃的記憶體空間大小是固定的,你的程式使用多少變數,OS 就配給多少記憶空間給你的程式,不會提供多餘記憶體。<br /><br />一般 OS 執行副程式時會額外需求記憶空間,這會佔用堆疊,以確保副程式執行完畢,可以回到原來主程式,您提供的例子,兩程式相互呼叫,這樣堆疊會被永無止境新增佔用,最後所有 RAM 被這兩程式完全佔用,連OS 的空間也不會放過,如果這樣的程式是可以被執行的話,NXT 就會發生當機。<br /><br />所以 NXT OS 禁止 recursion,同樣配合NXT 開發工具程式都會被限制,不然跑錯程式,造成 NXT 當機無法使用,反而造成更多"民怨"!Bridanhttps://www.blogger.com/profile/17055047757114667099noreply@blogger.comtag:blogger.com,1999:blog-3550204829234352390.post-20359991636991314572009-12-08T15:56:41.055+08:002009-12-08T15:56:41.055+08:00您好想請問LEGO NXC裡面為何不能這樣寫?compile過不去?
task A()
{
sta...您好想請問LEGO NXC裡面為何不能這樣寫?compile過不去?<br /><br />task A()<br />{<br />start main;<br />}<br /><br />task main()<br />{<br />start A;<br />}<br /><br />因為在網路上找資料找很久,後來發現這個好網站,於是跟您請教,謝謝!0319https://www.blogger.com/profile/15083046897535256357noreply@blogger.comtag:blogger.com,1999:blog-3550204829234352390.post-39482199844504318282009-09-08T22:07:21.414+08:002009-09-08T22:07:21.414+08:00原來是邱老師蒞臨,有失遠迎!
太客氣了,NXT 方面您是專家,日後有機會想當面請教。
對於 FO...原來是邱老師蒞臨,有失遠迎!<br /><br />太客氣了,NXT 方面您是專家,日後有機會想當面請教。<br /><br />對於 FORTRAN 等"古代"電腦程式語言,有空閒時,我會一一補充介紹,讓大家懷舊參考。 ^_^Bridanhttps://www.blogger.com/profile/17055047757114667099noreply@blogger.comtag:blogger.com,1999:blog-3550204829234352390.post-64723785619310828512009-09-06T21:53:14.744+08:002009-09-06T21:53:14.744+08:00我是探奇自然科學教室啦!
不是設計高手.....
真要透露年齡的話,我在國中時有用過『小神通』B...我是探奇自然科學教室啦!<br /><br />不是設計高手.....<br /><br />真要透露年齡的話,我在國中時有用過『小神通』BASIC。 <br /><br />啊!年紀大了總是會回想當年....^_^Unknownhttps://www.blogger.com/profile/17678833238704223581noreply@blogger.comtag:blogger.com,1999:blog-3550204829234352390.post-49736513006840606982009-09-06T17:38:38.145+08:002009-09-06T17:38:38.145+08:00Hunter Chiou,
謝謝您的補充說明,不過由此可知,您也是 NXT 程式設計高手。
另外...Hunter Chiou,<br /><br />謝謝您的補充說明,不過由此可知,您也是 NXT 程式設計高手。<br /><br />另外,從 FORTRAN 也些許透露出年齡 ... ^_^Bridanhttps://www.blogger.com/profile/17055047757114667099noreply@blogger.comtag:blogger.com,1999:blog-3550204829234352390.post-37691119276921628892009-09-05T22:46:09.078+08:002009-09-05T22:46:09.078+08:00根據John Hansen的說法是NXT的韌體不支援recursion。所以NXC也沒辦法使用rec...根據John Hansen的說法是NXT的韌體不支援recursion。所以NXC也沒辦法使用recursion。<br />(RobotC也沒有支援recursion)<br /><br />我想應該可以試著用疊代法解決問題。<br /><br />看來需要好好地再學一次『數值分析』<br /><br />Turbo PASCAL....真古老的東西。<br /><br />也讓我想起Fortran...... ^_^邱信仁https://www.blogger.com/profile/15900449400866292721noreply@blogger.com