郭天祥的 單片機書 足矣 裡面還有光碟 郭天祥講的 10天學會單片機。我們老師只推薦這一本。容易看懂。
⑵ 程序代碼開發中怎樣才能提高我們的開發效率呢
提高開發效率可以從以下幾個方面進行學習。
首先多多學習開源項目,分析別人的代碼架構,吸取對方優秀的編程思想,理解後下次開發用上
第二:記住系統提供給我們的快速開發的方法,常用的方法都有日期函數,字元串函數,文件函數等,比如下面的函數:
一個不透明的結構, 它指向一條線程並間接(通過該線程)引用了整個 Lu a 解釋器的狀態。 L ua 庫是完全可重入的: 它沒有任何全局變數。 狀態機所有的信息都可以通過這個結構訪問到。
這個結構的指針必須作為第一個參數傳遞給每一個庫函數。 l ua_newstate 是一個例外, 這個函數會從頭創建一個 L ua 狀態機。
l。a_status
返回線程 L 的狀態。
正常的線程狀態是 0 (LUA_OK)。 當線程用 lua_resume 執行完畢並拋出了一個錯誤時, 狀態值是錯誤碼。 如果線程被掛起,狀態為 LUA_YIELD 。
你只能在狀態為 LUA_OK 的線程中調用函數。 你可以延續一個狀態為 LUA_OK 的線程 (用於開始新協程)或是狀態為 LUA_YIELD 的線程 (用於延續協程)。
lu a_stringtonumber
size_t lu a_stringtonumber (l ua_State *L, const char *s);
將一個零結尾的字元串 s 轉換為一個數字, 將這個數字壓棧,並返回字元串的總長度(即長度加一)。 轉換的結果可能是整數也可能是浮點數, 這取決於 Lua 的轉換語法(。 這個字元串可以有前置和後置的空格以及符號。 如果字元串並非一個有效的數字,返回 0 並不把任何東西壓棧。 (注意,這個結果可以當成一個布爾量使用,為真即轉換成功。)
lu a_toboolean
int lu a_toboolean (lu a_State *L, int index);
把給定索引處的 Lu a 值轉換為一個 C 中的布爾量( 0 或是 1 )。 和 L ua 中做的所有測試一樣, lua_toboolean 會把任何不同於 false 和 nil 的值當作真返回; 否則就返回假。 (如果你想只接收真正的 boolean 值, 就需要使用 lua_isboolean 來測試值的類型。)
lu a_tocfunction
lu a_CFunction lua_tocfunction (lu a_State *L, int index);
把給定索引處的 L ua 值轉換為一個 C 函數。 這個值必須是一個 C 函數; 如果不是就返回 NULL 。
lu a_tointeger
lua_Integer l ua_tointeger (lu a_State *L, int index);
等價於調用 l ua_tointegerx, 其參數 isnum 為 NULL。
lu a_tointegerx
l ua_Integer lua_tointegerx (lua_State *L, int index, int *isnum);
將給定索引處的 L。a 值轉換為帶符號的整數類型 lu a_Integer。 這個 Lu a 值必須是一個整數,或是一個可以被轉換為整數 (3)的數字或字元串; 否則,lua_tointegerx 返回 0 。
如果 isnum 不是 NULL, *isnum 會被設為操作是否成功。
lu a_tolstring
const char *lu a_tolstring (lu a_State *L, int index, size_t *len);
把給定索引處的 Lua 值轉換為一個 C 字元串。 如果 len 不為 NULL , 它還把字元串長度設到 *len 中。 這個 L ua 值必須是一個字元串或是一個數字; 否則返回返回 NULL 。 如果值是一個數字, lua_tolstring 還會 把堆棧中的那個值的實際類型轉換為一個字元串。 (當遍歷一張表的時候, 若把 lua_tolstring 作用在鍵上, 這個轉換有可能導致 lua_next 弄錯。)
lua_tolstring 返回一個已對齊指針 指向 Lua 狀態機中的字元串。 這個字元串總能保證 ( C 要求的)最後一個字元為零 ('\0') , 而且它允許在字元串內包含多個這樣的零。
因為 Lua 中可能發生垃圾收集, 所以不保證 lua_tolstring 返回的指針, 在對應的值從堆棧中移除後依然有效。
⑶ 老師,您好,我現在在學習51單片機,在讀一些實例,該如何深入的掌握它還有,以後我還想學習avr和arm,
1讀一些開發板帶的實例,同時學習c語言相關知識,包括一些編程思想,如狀態機,時間片觸發等等
2上論壇做一下開源的小作品,ouravr挺好的,不只是avr的。
3如果環境好的話這時就可接一些小的項目,主要是在老師的指導下作,可以積累些實際經驗,經驗指的是用哪個片子穩定,pcb如何畫等等
4現在就可以學arm了,主要是學習下操作系統如ucos等等,還有fatfs文件系統,ucgui。
這你就可以知道mp3,或者一些儀表或控制板的工作的原理
5如果你很強再學arm9這個級別的東西吧,反正我是不會了,感覺像是計算機人學的,反正挺困難的
至於avr應該在51熟了的基礎上,一兩周就能搞定。
ps:avr片子挺貴的,如果不是工作建議還是買51自己做東西吧
⑷ 如何提高單片機,
單片機控制大部分是面向硬體的,關於這些物理硬體的控制,最重要的就是調節速度和精度,表現在單片機內部演算法上,我認為就是時間和空間的合理運用,而這些對演算法的要求是什麼呢,或者說作為單片機開發者來說,應該怎麼樣考慮自己的單片機程序呢?
第一,程序結構
我知道你肯定不會想去仔細研究數據結構,那太抽象了。在這里我直接告訴你,基於「狀態機」的程序結構更加適合單片機,確切的說是有限狀態機。狀態機編程技術將直接促使你解決程序的時間問題,並且程序結構可大可小,普通狀態機和層次式狀態機能讓你對絕大多數項目手到擒來。當然狀態機編程技術也是需要學習的,但這比你直接去學數據結構要輕松的多。
第二,使用適合的演算法
我們編程時要明白一個道理,再多復雜的演算法也不能證明你的程序是一個好程序,那什麼才是呢?是簡潔明了和可靠穩定。大道至簡放在編程上不是一句空話,同樣一個冒泡排序演算法,有的人寫出來死板的很,有的人卻能獨具效率,這是對演算法的理解高度不同。我認為與其學習更為復雜的控制演算法,不如加深自己對現有演算法的理解。通樣的PID演算法程序,有的人能加上積分分離,有的人能用上環境自適應,這裡面差別不可謂不大啊。
最後希望你能早日從自己的工作中形成自己獨到的理解,精益求精。
⑸ 自己學編程3個月了,感覺越來越瓶頸,不照葫蘆畫瓢寫不出來
JS本就是個先天殘廢的語言,能把DOM操作好就行了。。。真要搞大一點的項目,你有更好的語言可以學。。。
由於JS的諸多劣根性,不面向對象,弱類型,動態語言。。。其實靠學習JS,很難養成邏輯思維。。我相信錄制視頻的那個老師,在只學過JS,而沒學過其他語言的時期,也是寫不出2048的。。。
其實編程語言的特性和設計模式有很多,而JS的語言劣根性,導致其只具備了其中最基礎的部分。。。稍微高級一些的東西。。在JS里其實是沒有的。。所以JS即便學得再精。。。其實編程思想依然只是小學生水平。。。
比如繼承,多態,委託,工廠模式,觀察者模式,單例模式,二叉樹,行為樹,狀態機,等等。。。如果只是通過學習JS,而不接觸一門強類型,面向對象語言的話,這些特性,永遠都無法涉足。。。所謂編程思想,也就止步於小學生水平了。。
這里推薦C#。。。為什麼?因為它是未來JS改進方向的參照原形。。。2.0版的JAVASCRIPT,基本就可以看作是C#的山寨版。。。ECMA的JS改進計劃,就是讓JS越來越像C#。。當你學到這一步,會接觸到一個叫unity 3d的東西,到時候你自然就能做出2048了。。。甚至你可以做出一個CS之類的3D游戲來。。。
不過這是以後的事情了。。。學習是一個循序漸進的過程,沒有誰是一步登天的。。在學習JS的階段,能把DOM操作好就足夠了。。。這才是JS的本分。。。不需要指望JS再去干那些「與自己無關的事情」。。。那些都是一群學了JAVA,C#或者C++的老東西們,跑回JS的新手圈炫技裝逼的產物而已。。。。。。。
⑹ labview中常用的程序結構有哪幾種
三種範式:面向過程、面向事件,面向對象;
六種模式:標准狀態機、消息隊列、生產者/消費者(事件)、生產者/消費者(數據)、用戶界面事件處理、主/從
詳見《LabVIEW編程思想》
⑺ 中斷按鍵與普通按鍵有什麼區別按鍵狀態機編程利用了什麼思想
公證案件以普通按鍵有什麼區別?案件狀況疾病禁用有什麼意思?這個東東啊?建議古龍了,就這樣沒什麼區別案件狀態它的按鍵不是一樣的嗎?只不過他這個,有好壞的有好多各種各樣的,所以就案件的區別也沒有什麼叫他跪就有那個按鍵就稍微好一點點。質量好一點。
⑻ 如何學好OpenGl
首先:
OpenGl的編程思想與別的語言不太一樣,正如每本書都會說的一樣OpenGl是一個狀態機。
所以,掌握OpenGl的原理特別重要。
這里推薦兩本書:一本是老一點的紅寶書《OpenGl編程指南》(一般都會推介這本書),另一本我覺的《OpenGl超級寶典》不錯,案例多,講的也不錯,後起之秀吧。
一般學習過程是:從基本的二維畫圖開始,理解OpenGl裡面不同的坐標,然後在擴展到三維,然後在學高級的載入3D,紋理等。