当前位置:首页 » 编程语言 » c语言读取pgm
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言读取pgm

发布时间: 2022-06-01 18:12:54

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内容

  1. 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。

  2. 片内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