A. c語言中如何驗證常量'abcd'在內存中如何存放呢在gcc中,輸出『abcd』的結果是『c』
初學者很難搞懂這一點的,僅憑三言兩語是說不清的,這里的復雜性,我少說可以給你講上兩三天。不同的操作系統分配內存不同,不同的開發語言也是一樣,所以,你別想在這里一下子明白。
以c語言來說,分配內存和你的定義類型有關。輸出值是你賦值有關,好像是費話。
類型有很多種,賦值也一樣。
關鍵問題是出在賦值類型與定義類型不符,還有就是溢出(不考慮演算法邏輯錯誤);
通常研究這個是為排錯用的。
首先,要明白
一個位元組是一個byte就是8個bit,即 B
每一個byte在內存中都有自己的一個地址,由低到高,通常我們用十六進製表示。
所以,你通常會見到有這么寫的0xff 0xdd 0x3a這樣的,每一個代表佔用一個內存。
0xeeff像這樣的是佔用了兩個內存。
這樣就出現在有高地址與低地址之分,在不同的系統,語言中都可能存在不同。
int i=0xeeff
這樣,就有兩種可能 ,ee是高位,存放到高地址,ff是低位存放到低地址,
另一種是高位的ee存放到低地址里,仰慕位的ff存放到高地址里。
用以下代碼測試:
#include <stdio.h>
int main()
{
char *p,*q;
int i=0xeeff;
p=&i;
printf("add=0x%x,ch=0x%x\n",p,*p);
p++;
printf("add=0x%x,ch=0x%x\n",p,*p);
}
輸出:
add=0x000000,ch=0xeeff
add=0x000000,ch=0xff
add=0x000001,ch=0xee
真正地址不是這個,我只是表示一下。
查看內存中是什麼,通過指針來控制,設計你需要的測試代碼。
32位cpu內存地址訪問最大內存空間 32bit=0xFFFFFFFF=4G(約)
還有一些深的東西就不多說了。
你的問題中一會兒說常量,一會兒又說變數的,我還得猜的你問題。
再有,你看的書上說,我想你只是記憶吧,記的不全,你只問出一半問題來。
所以我也只能為你回答一半了。要是我把所有可能幫你設計一回,再講上講,看三五天我也寫不完了。
B. c語言中:一個文件夾下有 pgm.h main.c fct.c pm.c,都編譯好的,如何一起執行這三個文件
不可能說一起「執行」這三個文件,只能有一個入口點(main函數——現在有tmain wmain等但本質都是程序開始執行的起點)
只要放在一個工程里,有適當的include關系,編譯器能鏈接上裡面的函數
C. 在AVR GCC中如何使用C語言在程序空間申請常量數組就像在KEIL中使用CODE或者PCODE的功能。
GCC中把大數組存入flash區的方法大全
AVRGCC中將變數定義在flash空間的方法(大數據存儲)
(1)flash常量:
#include <avr\pgmspace.h>//須增加的頭文件
const prog_uchar FlashConst = 3; //定義uchar型的常量n定義在flash里(flash常量)
unsigned char RamVar; //定義無符號整型變數(Ram變數)
RamVar = pgm_read_byte(&FlashConst); //讀取flash常量到ram變數
(2)flash一維數據:
#include <avr\pgmspace.h>
const prog_uchar s[5] = { 1, 2, 3, 4, 5 };
unsigned char RamVar; //定義無符號整型變數(Ram變數)
RamVar = pgm_read_byte( &s[1] ); //讀取s[1]的值到RamVar, or RamVar = pgm_read_byte( s+1 );
(3)flash多維數據:
#include <avr\pgmspace.h>
const prog_uchar s[4][16] = { {14, 4,13, 1, 2,15,11, 8, 3,10, 6,12, 5, 9, 0, 7 },
{ 0,15, 7, 4,14, 2,13, 1,10, 6,12,11, 9, 5, 3, 8 },
{ 4, 1,14, 8,13, 6, 2,11,15,12, 9, 7, 3,10, 5, 0 },
{15,12, 8, 2, 4, 9, 1, 7, 5,11, 3,14,10, 0, 6,13 }
};
unsigned char RamVar[4],[16]; //定義無符號整型變數(Ram變數)
register char i, j;
for(i=0; i<4; ++)
{
for(j=0; j<16; j++)
{
RamVar[i][j] = pgm_read_byte( &s[i][j] ); //讀取數組s的值到RamVar
}//end for 2
}//end for 1
(4)擴展部分
avr對ram和flash是獨立編址的,ram是按8位編址,而flash卻按16位編址,讀ram和讀flash的匯編指令也是不同的。
類似flash數據類型還有:prog_void 、prog_char 、prog_int8_t、prog_uint8_t、prog_int16_t、prog_uint16_t、prog_int32_t、prog_uint32_t等。
讀取指令pgm_read_xxx宏定義其實就是一段包括了flash讀取指令的內聯匯編代碼。函數原型為:pgm_read_byte(address_short)、pgm_read_word(address_short)、 pgm_read_dword(address_short)、pgm_read_float(address_short)。括弧中是地址值。
D. 怎樣用C語言讀PGM如想文件(有原代碼更好)
將文件名後綴改成.c 或者直接滑鼠右擊文件,點擊「打開方式」,然後從列表中選擇C語言程序就可以了。
注意:如果你的C語言軟體沒有安裝到系統中,列表上是不會顯示的,這時要點擊下面的「瀏覽」然後找到C語言所在文件夾,選中後綴為「.exe」的程序才行。
E. 在讀取PGM圖像時,無法顯示24行掃圖像像素
ppm文件是一種圖像文件,有其自己的文件格式。ppm文件由兩個部分組成:第一個部分是三行ASCII碼,這個部分決定了圖像的存儲格式以及圖像的特徵;第二個部分就是圖像的數據部分,圖像就是由這個部分組成的。
ppm的第一部分由三行ASCII碼組成
第一行是P2/P3/P6
第二行是圖像的大小,先是列像素數,後是行像素數,中間有一個空格
第三行是一個介於1和65535之間的整數,而且必須是文本的,用來表示每一個像素的一個分量用幾個比特表示。
三行之後是圖像的數據流,從左到右,從上到下。在進行圖像數據存儲的時候,需要進行數據的格式,假如需要的像素值在0~255之間,那麼在進行數據文件保存的時候,所寫入文件的值就必須是以%c的形式輸入,而且數據之間沒有明顯的分離字元,圖像處理軟體會自動地識別這些像素的值,並給予處理。
PPM->Portable PixMap
PGM->Portable GreyMap
PBM->Portable BitMap
PBM支持單色圖(1個像素位)
PGM支持灰度圖形,能夠讀PBM圖形和PGM圖形,輸出PGM圖形
PPM支持真彩色圖形,可以讀上面所有格式,輸出PPM圖形
PPM圖形文件格式包括兩個部分,頭部分和圖象數據部分。頭部分由三部分組成,這三部分由回車或換行分割,但PPM的標准中是要求空格。第一行通常是P3或P6,說明是PPM格式;第二行是圖象的寬度和高度,用ASCII來表示;最後一部分是描述像素的最大顏色組成,這里允許描述超過一個位元組(0-255)的顏色值。另外可以在上面個部分的後面用#來追加註釋,注釋行是從#到該行末
F. c語言中怎麼讀取flash內容
flash是存儲晶元的一種,通過特定的程序可以修改裡面的數據。FLASH在電子以及半導體領域內往往表示Flash Memory的意思,即平時所說的「快閃記憶體」,全名叫Flash EEPROM Memory。
Flash存儲器又稱快閃記憶體,它結合了ROM和RAM的長處,不僅具備電子可擦除可編程(EEPROM)的性能,還可以快速讀取數據(NVRAM的優勢),使數據不會因為斷電而丟失。U盤和MP3里用的就是這種存儲器。在過去的20年裡,嵌入式系統一直使用ROM(EPROM)作為它們的存儲設備,然而近年來Flash全面代替了ROM(EPROM)在嵌入式系統中的地位,用作存儲Bootloader以及操作系統或者程序代碼,或者直接當硬碟使用(U盤)。
目前Flash主要有兩種NORFlash和NANDFlash。NORFlash的讀取和我們常見的SDRAM的讀取是一樣,用戶可以直接運行裝載在NORFLASH裡面的代碼,這樣可以減少SRAM的容量從而節約了成本。NANDFlash沒有採取內存的隨機讀取技術,它的讀取是以一次讀取一塊的形式來進行的,通常是一次讀取512個位元組,採用這種技術的Flash比較廉價。用戶不能直接運行NANDFlash上的代碼,因此好多使用NANDFlash的開發板除了使用NANDFlash以外,還加上了一塊小的NORFlash來運行啟動代碼。
一般小容量的用NORFlash,因為其讀取速度快,多用來存儲操作系統等重要信息,而大容量的用NANDFLASH,最常見的NANDFLASH應用是嵌入式系統採用的DOC(Disk On Chip)和我們通常用的「閃盤」,可以在線擦除。目前市面上的FLASH主要來自Intel,AMD,Fujitsu和Mxic,而生產NANDFlash的主要廠家有Samsung,Toshiba,Micron和Hynix。片內flash還是片外flash,spi介面還是其他的介面。ARM片子不一樣,答案就不一樣。根據flash手冊,按照手冊寫驅動。
G. 如何用C++讀取pgm的圖片,並在一個數組里
等待回答TOO
H. c語言 強制類型轉換 (unsigned char(*)(unsigned int))(PGM) 其中PGM是一個數組 這個最終轉換成什麼類型啊
函數指針類型,該指針能指向一個函數, 該函數返回值是unsigned char, 且帶有一個unsigned int的參數。
I. CUDA中 BMP圖像讀取
lz可以去查查bmp的格式,然後用c語言寫一個讀圖像的小函數,不是很麻煩。
也可以用opencv的函數來打開,不過要裝個opencv