郑州轻工业学院 嵌入式软件 电子相册实训报告

更新时间:2023-10-21 08:30:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

nfs服务器的挂载命令

sudo mount -t nfs -o tcp 172.21.2.178:/home/akaedu/ziliao /mnt

ctrl + alt + t 开启新终端的快捷按键

window 下是集成开发环境

linux下:

安装命令

sudo apt-get install vim gcc gdb

编辑器 vim 编写源代码 按i编辑模式 按Esc命令模式 按Esc以后键入: :w 保存文件但不退出 write :wq 保存并且退出 write and quit :q! 强制退出,不保存文件 quit yy 复制一行 移动光标到某一行, 再按下p表示粘贴 3yy 从光标当前行开始,复制总共3行, 按下p表示粘贴 dd 剪切一行 移动光标到某一行, 再按下p表示粘贴 3dd 从光标当前行开始剪切3行, 再移动光标到某行,按下p表示粘贴 u undo,回退当前操作。 8G 定位到第8行 :8 定位到第8行 1G 到文件最开头 GG 到文件结尾 gg=G 自动排版 % 自动匹配相应的花括号 :vsp 文件名 垂直拆分,并排显示2个文件 ctrl+ww 垂直拆分的两个窗口之间切换光标焦点

编译器 gcc 编译源代码,生成可执行文件。 gcc hello.c 生成a.out可执行文件 gcc hello.c -o app 生成app可执行文件 执行 ./app 或者 ./a.out

调试器 gdb 调试错误 gcc hello.c -o app -g gdb app gdb命令:

l 1 从第1行列出程序源码 list (列表) b 6 在第6行上下断点 break(暂停) i b 显示断点信息 info break r 执行程序 run n 单行执行一句 next quit 退出程序的调试 c 从断点处继续执行下去,直到碰到断点,或程序结束 continue

shell命令: echo $PATH 输出 PATH环境变量的值,这些值是目录的路径,linux会自动查找这些路径中的程序,这里面不包含当前路径。 pwd 得到当前路径名称 program working directory 程序当前工作路径

大家区分一个概念:

1.标准C库函数 printf 2.系统调用 mmap 如果想要区分一个函数到底是上一层的C库函数,还是底层的系统调用,或者想查阅函数的帮助信息 执行命令 man 函数名 man 3 printf 这是manpage工具的作用。

manpages会把命令或函数的分类列出来: 1 ==> shell命令 2 ==>系统调用 3 ==>C库函数

第一个模块 图片显示

/dev/fb0 framebuffer 帧缓冲

像素点 屏幕分辨率 1024x768-32bit 1024表示横向有1024列像素点 768表示纵向有768行像素点

32位色 表示颜色总共有2的32次方种颜色(真彩色) 每一个像素点的颜色都保存为4个字节的一个整数。

对于分辨率1024x768-32的一屏图像(一帧),需要有1024x768x32/8个字节大小的缓冲区来保存每一个像素点的颜色数据。

帧缓冲是Linux操作系统的一个图像显示接口,可以方便程序员用很直观简单的方式在屏幕上显示图像,而不用去关心底层的设备驱动怎样去操作显卡硬件设备。

char *p; p+1

unsigned short int * p; p+1

unsigned int * p; p+1

帧缓冲的结构:

上层 应用程序(用户地址空间0G-3G) || \\/ 系统调用(system call) || \\/

中间层 Linux操作系统内核(内核地址空间3G-4G) || \\/ 帧缓冲接口层 || \\/ 显卡驱动 || \\/

底层 显卡硬件设备 (把图像输出到显示器屏幕上)

(x,y) ==> p[y*w+x] (对帧缓冲的操作:让指针p指向这段缓冲区的开头,然后把指针p当成数组去操作 p[y*w+x])

(依据arr[3]#include

<===> *(arr+3) 对数组的操作,实质上是在操作一个指针)

RGB24 [RGB]

0xFF 00 00 红点 0x00FF00 绿点 R G B R G B

RGB32 [xRGB] x表示透明度(x=0表示不透明 x=FF表示透明 x=0~FF之间表示半透明) 0x00FF0000 红点 x R G B

RGB16 [RGB565] R高5位,G中间6位 , B低5位 (常见) 0xf800 红点 0x07E0 绿点 0x001F 蓝点 二进制 1111 1000 0000 0000 0000 0111 1110 0000

RGB16 [RGB1555] 很少用

条件短路:

int a=4; int b=10;

if((a++ > 6) && (a++ < 6)) b = 2;

printf(\

文件i/o:

C库函数fopen权限 \\\\ \\

系统调用open访问权限 含义 O_WRONLY | O_CREAT | 只写,不存在就创建,存在就O_TRUNC 截断大小为0 O_RDONLY O_RDWR 只读 可读,可写,文件流初始位置在文件开头 O_RDONLY | O_WRONLY | 可读,可写,文件不存在就创O_CREAT |O_TRUNC 建,存在就截断为0 O_WRONLY | O_CREAT | 写,追加,文件不存在建立新O_APPEND 文件 O_RDWR | O_CREAT | 读,写,追加,文件不存在创O_APPEND 建 mmap 文件映射(memory map) void *mmap(void *addr,size_t length , int prot , int flags,int fd, off_t offset) 一个参数 addr 是一个地址值,提示操作系统把文件内容映射在该地址上。但是一般由操作系统自由分配,一般传递参数为NULL. 二参数 length 表示映射的内存区域的长度,通常也代表要映射的文件的长度。 三参数 prot 表示映射之后内存应的访问权限,有读,写,执行,不可访问四个权限 四参数 flags ,表示映射的方式: MAP_SHARED 共享内存映射。 映射是进程间共享的,对同一个文件的共享映射,如果一个进程也会看到修改之后的结果。同时对内存映射的修改,会回写到硬盘文件当中。 MAP_PRIVATE 私有映射。映射是进程私有的,不共享。每一个进程的都会对文件有一个副本,只有在进程需要写数据到映射内存中时才会复制自己映射拷贝)

对映射内存的修改不会回写会硬盘,调用mmap后文件内容是否发生改变是无法确定的 。 五参数 fd,需要映射的文件描述符。用open系统调用得到。 六参数 offset,映射文件的起始位置想对于文件的偏移

小问题:main函数的两个参数平时可以忽略不写,但是在我们要处理命令行参数时,需

要写上main函数的参数一个参数(#include )是int agrc,表示命令行参数的

个数,另一个参数char *agrv[],表示命令行参数的具体内容

程序: gcc mycp.c -o mycp 生成一个可执行程序,程序是一个文件,它是静态的,储存在硬盘上

进程: ./mycp 当我们在shell终端上执行命令时,shell终端会帮我们把硬盘数据读取到内存是一个正在执行状态的程序,他是一个动态的过程,位于内存当中,进程可以同时运行多个。

shell 父进程创建子进程参数由父进程shell获取并传递。

计算机当中的零: 数值 0; 字符'0'; 字符串结尾 ‘\\0’; 指针 NULL; void * 类型。

设备文件和普通的文件不一样,设备文件是一种特殊的文件,他不像普通文件,数据是存放在硬盘上的,而而设备文件是没有数据的,读设备文件不会从硬盘上去读任何设备,因为读设备相当于读设备 设备文件: /dev/fb0 代表显卡 /dev/dsp 代表声卡 /dev/input/mice 代表鼠标 /dev/sda 代表硬盘 /dev/sdb1 代表U盘 /dev/hdc 代表光驱·

ioctl函数,是硬件设备的io控制函数,可以向设备发送一些特殊的控制命令,

比如向显卡发送FBIOGET_VSCREENINFO(FB IO GET _ V SCREENINFO)意思是获取显卡

可变的工作参数(GET Variable INFO),

FBIOGET_FSCREENINFO(FB IO GET _ V_SCREENINFO)为显卡固定参数 显卡的可变工作参数:屏幕的分辨率

本文来源:https://www.bwwdw.com/article/62pf.html

Top