GEC6818的学习
此次学习,是本人在学校的实训课的记录。
嵌入式处理器
作用:软件的执行、数据的处理、硬件的控制。
处理器的型号:S5P6818;厂家:samsung;架构:ARM;开发板的名字:GEC6818
什么是ARM? 1、ARM--Advanced RISC Machine 高级的精简指令集计算机的机器
2、ARM是一种处理器的架构(除了ARM架构:x64/x86、MIPS、RISC-V)
3、ARM是一种32位的单片机(AT32),也可以是一种64的处理器(手机处理器)
4、ARM是一家公司的名字,中文名安谋。
常见的ARM的系列:1、Cortex-M系列,包括内核Cortex-M0、Cortex-M3(STM32F103)、Cortex-M4(AT32F435)---主要是作为32位的单片机
2、Cortex-A系列,包括Cortex-A53(S5P6818)、Cortex-A55、Cortex-A72 ---- 主要是作为64位的处理器
总结:综合实训项目使用的开发板GEC6818,开发板上的处理器S5P6818,处理器的架构是ARM架构、S5P6818是ARM的Cortex-A系列处理器,该处理器使用的ARM内核是Cortex-A53。S5P6818处理器主频1.4GHz,处理器是8核64位的处理器。
嵌入式Linux系统启动顺序
运行一个启动引导程序(u-boot)—>加载并运行Linux内核—>挂载根文件系统—>启动应用程序。
开发板入门使用
安装交叉编译环境
因为用的是arm架构,而不是x86。所以我们需要利用arm-linux-gcc来编译文件,再将.out可执行文件移植到单片机上。
arm-linux-gcc demo1.c -o demo2 //demo1.c 源文件 demo2目标生成文件
文件上传
(1)使用RS232串口将电脑与单片机相连,通过串口工具进行通信(我这里使用的是SecureCRT),按下CTRL+C进入命令行模式。
(2)开发板端接收文件
[root@GEC6818 /test]#rx demo2
C
(3)PC机端发送文件
开始 xmodem 传输。 按 Ctrl+C 取消。
100% 7 KB 7 KB/s 00:00:01 0 Errors
[root@GEC6818 /test]#
(4)给demo2执行权限
[root@GEC6818 /test]#chmod 777 demo2
液晶屏单色显示
液晶屏参数
1.尺寸,显示区域对角线的长度:7inch
2.分辨率,液晶屏横向和纵向的像素点的个数:800*480
像素点,液晶屏是有一个个像素点组成的,每个像素点是液晶屏显示控制的最小单位,不同的像素点显示不同的颜色,组成图像。
3.色位,每个像素点由多少位的数据来描述。通过液晶屏都是24bits,其中Red占8bits,Green占8bits,Blue占8bits。
4.显存,存放液晶屏显示内容的内存区,显存一般和系统内存共用,在显存中,每个像素点使用了4个字节,其中3个字节是RGB各占一个字节;另外一个字节可以不用。这样800 * 480液晶屏显存的大小=800 * 480 * (3+1)=800 * 480 * 4=1536000B
代码展示
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#define red 0x00FF0000
#define green 0x0000FF00
#define blue 0x000000FF
#define black 0x00000000
#define white 0x00FFFFFF
int main(void)
{
int fd_lcd;
int lcd_buf[800*480];
int color[]={red,green,blue,black,white};
int colo_count = sizeof(color) / sizeof(color[0]);
fd_lcd = open("/dev/fb0", O_RDWR); //设备文件是:/dev/fb0 打开
if(fd_lcd == -1 )
{
perror("open lcd ");
return -1;
}
printf("fd_lcd =%d\n", fd_lcd);
while (1)
{
for (int j = 0; j < color_count; j++)
{
lseek(fd_lcd, 0, SEEK_SET);
for (int i = 0; i < 800 * 480; i++)
{
lcd_buf[i] = color[j];
}
write(fd_lcd, lcd_buf, sizeof(lcd_buf));
sleep(1);
}
}
close(fd_lcd);
return 0;
}