⑴ 我用VHDL編寫1000行代碼,大概要佔多大的存儲空間,用fpga內部flash,只有1k,1k大概能寫幾千行代碼
這個與你代碼長度基本無關,綜合編譯工具會將代碼映射為硬體鏈接,而不是像單片機那樣的需要單條指令取指執行,在fpga內部是沒有代碼量這一說法的,存儲空間取決於你所寫的代碼所用到的資源情況,一般編譯工具會給出你的資源使用情況。
補充:如果是使用fpga搭建nios嵌入式系統的話,軟核部分的代碼量就需要你自己優化了,網上有些代碼量優化的方法,你可以看看。我看你的問題描述為 「使用vhdl編寫」 ,那應該不會是軟核程序了。
⑵ 用機器語言編寫程序和高級語言編寫的程序哪個存儲空間小,哪個更容易
計算機語言的種類非常的多,總的來說可以分成機器語言,匯編語言,高級語言三大類。電腦每做的一次動作,一個步驟,都是按照以經用計算機語言編好的程序來執行的,程序是計算機要執行的指令的集合,而程序全部都是用我們所掌握的語言來編寫的。所以人們要控制計算機一定要通過計算機語言向計算機發出命令。計算機所能識別的語言只有機器語言,即由0和1構成的代碼。但通常人們編程時,不採用機器語言,因為它非常難於記憶和識別。目前通用的編程語言有兩種形式匯編語言和高級語言。匯編語言的實質和機器語言是相同的,都是直接對硬體操作,只不過指令採用了英文縮寫的標識符,更容易識別和記憶。它同樣需要編程者將每一步具體的操作用命令的形式寫出來。匯編程序通常由三部分組成指令、偽指令和宏指令。匯編程序的每一句指令只能對應實際操作過程中的一個很細微的動作,例如移動、自增,因此匯編源程序一般比較冗長、復雜、容易出錯,而且使用匯編語言編程需要有的計算機專業知識,但匯編語言的優點也是顯而易見的,用匯編語言所能完成的操作不是一般高級語言所能實現的,而且源程序經匯編生成的可執行文件不僅比較小,而且執行速度很快。高級語言是目前絕大多數編程者的選擇⊥匯編語言相比,它不但將許多相關的機器指令合成為單條指令,並且去掉了與具體操作有關但與完成工作無關的細節,例如使用堆棧、寄存器等,這樣就大大簡化了程序中的指令。同時,由於省略了很多細節,編程者也就不需要有太多的專業知識。高級語言主要是相對於匯編語言而言,它並不是特指某一種具體的語言,而是包括了很多編程語言,如目前流行的vb、vc、foxpro、delphi等,這些語言的語法、命令格式都各不相同。高級語言所編制的程序不能直接被計算機識別,必須經過轉換才能被執行,按轉換方式可將它們分為兩類解釋類執行方式類似於我們日常生活中的同聲翻譯」,應用程序源代碼一邊由相應語言的解釋器翻譯」成目標代碼(機器語言),一邊執行,因此效率比較低,而且不能生成可獨立執行的可執行文件,應用程序不能脫離其解釋器,但這種方式比較靈活,可以動態地調整、修改應用程序。編譯類編譯是指在應用源程序執行之前,就將程序源代碼翻譯」成目標代碼(機器語言),因此其目標程序可以脫離其語言環境獨立執行,使用比較方便、效率較高。但應用程序一旦需要修改,必須先修改源代碼,再重新編譯生成新的目標文件(*.obj)才能執行,只有目標文件而沒有源代碼,修改很不方便。現在大多數的編程語言都是編譯型的,例如visualc++、visualfoxpro、delphi等。
⑶ 51程序,編譯不過去
變數精簡一下,不要都用全局變數,能用局部的就定義成局部,並且盡量定義成idata。有些布爾量定義的使用不要用位元組,要定義到BIT區,還有函數嵌套不要太多層。實在不行,你把程序發出來,大家看看。
⑷ C++ 編譯程序內存過大
調用函數時,盡量用「引用傳遞」作為參數, 而不是直接把矩陣本身作為參數傳進去,這樣在內存中只有一個 P 和 Q的拷貝。
另外,看得出,這兩個矩陣光存一份就已經很大了。如果連把它們讀入到內存里都沒辦法的話,就最好考慮給自己的機器加內存條了。
不增加內存,那麼降低存儲空間的需求,就得增加時間復雜度。你可以把矩陣存儲在多個硬碟文件里,這樣每次讀一部分到內存然後處理一些,存回去。最後再一點點拼出來最後結果。
⑸ 編譯時分配內存和運行時分配內存
編譯其實只是一個掃描過程,進行詞法語法檢查,代碼優化而已,編譯程序越好,程序運行的時候越高效。
我想你說的「編譯時分配內存」是指「編譯時賦初值」,它只是形成一個文本,檢查無錯誤,並沒有分配內存空間。
當你運行時,系統才把程序導入內存。一個進程(即運行中的程序)在主要包括以下五個分區:
棧、堆、bss、data、code
代碼(編譯後的二進制代碼)放在code區,代碼中生成的各種變數、常量按不同類型分別存放在其它四個區。系統依照代碼順序執行,然後依照代碼方案改變或調用數據,這就是一個程序的運行過程。
⑹ 大家幫忙看看,這是在編譯msp430時出的錯誤,但是程序沒有超內存
你好,請打開msp430晶元對應的xcl文件,iar下面的。
請先搞清楚這個文件裡面的,每一個參數的含義,然後就明白了,430的這些內存映射都在這個文件中。
比如"-Z(CODE)就是表面,代碼的存儲空間。INTVEC就是表面中斷向量。
⑺ 請各位大大們幫幫忙,萬分感激,如果順利解決,我還可以加分
首先,在語言習慣上我建議你這樣寫:
ORG 0000H
LJMP START
START:
MOV 30H,#0A3H
MOV A,30H
ANL A,#0F0H
MOV 31H,A
MOV A,30H
ANL A,#0FH
MOV 32H,A
END
其次,這斷程序是沒有絕對性錯誤的,樓上所回答的有錯誤,ORG所指明的是程序存放的地址,它屬於ROM。而寄存器屬於RAM。它們是不同的存儲器。不會有所沖突。這也是51單片機的特性。RAM中的20H以前的都是寄存器。20H到30H之間的是位定址單位。30H以後是自由堆棧空間。一般都要將SP指名30H以後。才不會出現不必要的錯誤。樓主這斷程序用來學習調試是可以的。但你所提的問題,其實不是問題。下面我給你講解一下:
51單片機工作時是一直處於運行狀態的。就算你的程序運行結束它也還是要繼續運行一些「空閑指令」,這也就是為什麼每個Keil工程中都會添加一個「STARTUP.A51」文件的原因。
STARTUP.A51中就有這種讓單片機一直運行的語句:
IDATALOOP:
MOV @R0,A
DJNZ R0,IDATALOOP。
所以你在學習單片機的時候,不能把WINDOWS裡面調試程序的一些理解帶過來。
到些問題答畢。
如果還有什麼問題,可以與我交流一下。
還有就是,記得給分。
⑻ 單片機中類型為什麼會影響代碼空間(CODE MEMORY)(50分送上)
在C語言定義的變數,如int、char等等,定義時看似簡單,事實上編譯器要花費很大的代碼為它們分配存儲空間,它們是在R0-R7里按指定的格式分配的。要實現這些分配,就要在C語言編譯成匯編語言時轉換出許多程序代碼。因為在匯編語言里可沒有整型、實型、字元型的區別,都是8位的位元組形式。C語言轉換成匯編時,要為不同的數據類型分配存儲空間,還是用程序代碼完成的。所以有經驗的程序員是盡量避免占據空間大的數據格式。 舉例:usinged char型 變數占的空間1位元組,但代碼的長度為16位元組; char型 變數占的空間1位元組,但代碼的長度為54位元組; usinged int 型 變數占的空間1位元組,但代碼的長度為147位元組; long型 變數占的空間1位元組,但代碼的長度為425位元組; 等等。也就是說非得這么多的程序代碼,單片機才能把它識別成這種類型的數據。 樓主所說的數據空間的大小是何意? 每種變數占據的數據空間是固定的呀? 程序編譯後的數據空間? 這句話不通。數據空間存放的是程序運行中不斷變化的數,存放的數據量是由程序的運行狀態決定的。樓主的意思是按不同的方式定義的數據,程序一開始運行時數據空間放了多少數據嗎?數據存儲器里的數一般是初始化數組、定義全局變數的初值這一類數,由定義時的前綴決定是否放數據寄存器。如果定義了data 或Xdata等,就把它放在數據空間。定義了code就放在程序空間。
⑼ 單片機中類型為什麼會影響代碼空間(CODE MEMORY)(50分送上)
在C語言定義的變數,如int、char等等,定義時看似簡單,事實上編譯器要花費很大的代碼為它們分配存儲空間,它們是在R0-R7里按指定的格式分配的。要實現這些分配,就要在C語言編譯成匯編語言時轉換出許多程序代碼。因為在匯編語言里可沒有整型、實型、字元型的區別,都是8位的位元組形式。C語言轉換成匯編時,要為不同的數據類型分配存儲空間,還是用程序代碼完成的。所以有經驗的程序員是盡量避免占據空間大的數據格式。
舉例:usinged char型 變數占的空間1位元組,但代碼的長度為16位元組;
char型 變數占的空間1位元組,但代碼的長度為54位元組;
usinged int 型 變數占的空間1位元組,但代碼的長度為147位元組;
long型 變數占的空間1位元組,但代碼的長度為425位元組;
等等。也就是說非得這么多的程序代碼,單片機才能把它識別成這種類型的數據。
樓主所說的數據空間的大小是何意?
每種變數占據的數據空間是固定的呀?
程序編譯後的數據空間?
這句話不通。數據空間存放的是程序運行中不斷變化的數,存放的數據量是由程序的運行狀態決定的。樓主的意思是按不同的方式定義的數據,程序一開始運行時數據空間放了多少數據嗎?數據存儲器里的數一般是初始化數組、定義全局變數的初值這一類數,由定義時的前綴決定是否放數據寄存器。如果定義了data 或Xdata等,就把它放在數據空間。定義了code就放在程序空間。
⑽ c語言哪些占程序空間哪些占內存空間
一個由C/C++編譯的程序佔用的內存分別為以下四個部分:
程序代碼區:存放程序的二進制代碼。
靜態數據區:存放程序運行期間用到的數據。其存儲空間是在編譯時分配的,在整個程序執行期間靜態數據區中的數據一直存在,程序結束後由系統釋放。
動態內存區(也稱棧):也存放程序運行期間用到的數據,其存儲空間在程序運行期間由編譯器自動分配釋放,其生命周期短於程序的運行期。
堆區:由程序員分配釋放,若程序員不釋放,程序結束時可能由系統回收。
以上內容抄自課本《C語言與程序設計》(電子工業出版社)