Linux|嵌入式硬件初步使用

引语

记录学习路程,抛砖引玉。如有更好的算法或者出现错误,欢迎指点。

案例

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  1. 三色循环变换
  2. 法国国旗(上例的实操)
  3. 德国国旗
  4. 显示bmp位图

过程

  1. 编写C文件
  2. 通过虚拟机打开的Ubuntu里编译成可执行文件
  3. 串口连接嵌入式硬件和电脑,使用secureCRT写入嵌入式硬件
  4. 执行文件

虚拟机Ubuntu

先设置共享文件夹(本例为ub2)然后把C文件放文件夹里,接着去虚拟机里面设置共享文件夹
注:有些电脑文件夹默认不共享,要另外设置
如下设置:
在这里插入图片描述

在这里插入图片描述

1)Ctrl+Alt+t打开terminal 命令行
gec@ubuntu:~$ cd /mnt/hgfs/ub2/
注意:
cd ---- 去到那个目录的一个命令
/ ----根目录
/mnt/hgfs/ ---- 设置好的共享文件夹都在这个路径下
ub2----设置好的共享文件夹

2)查看共享文件夹下的文件
gec@ubuntu:/mnt/hgfs/ub2$ ls
colors.c dg.c fg.c lx.bmp main.c tp.c
3)编译程序
arm-linux-gcc -o name name.c(比如德国国旗就是dg dg.c,下同)
或者:
arm-linux-gcc name.c -o name

编译完成后文件夹会对应生成相应的可执行文件

串口终端软件secureCRT

相关参数COM1(根据电脑接口情况),115200,8N1,取消流控
串口连接好嵌入式硬件后打开终端软件
在这里插入图片描述

设置参数
在这里插入图片描述
连接完成
在这里插入图片描述
快捷键Ctrl+C进行格式化
1)创建一个test文件夹

[root@GEC6818 /]#rm /test -r
[root@GEC6818 /]#mkdir /test

2)进入test目录
[root@GEC6818 /]#cd ./test

3)查看test目录文件
[root@GEC6818 /test]#ls
[root@GEC6818 /test]#

4)使用rx命令下载Ubuntu编译好的可执行文件
[root@GEC6818 /test]#rx name(比如德国国旗就是dg,下同)
C

secureCRT—>传输—>发送Xmodem—>选择name文件

CCCCCCCCCC
开始 xmodem 传输。 按 Ctrl+C 取消。
100% 5 KB 5 KB/s 00:00:01 0 Errors

5)再次查看test目录文件
[root@GEC6818 /test]#ls
dg
6)修改文件的权限
[root@GEC6818 /test]#chmod 777 name

7)执行文件

[root@GEC6818 /test]#./name

C文件代码

三色循环

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>

int main(void)
{
	
	int fd_lcd;
	int lcd_buf[800*480]; //显存。int -- 4B
	
	
	fd_lcd = open("/dev/fb0", O_WRONLY);
	if(fd_lcd == -1)
	{
		perror("open lcd");
		return -1;
	}
	printf("fd_lcd = %d\n", fd_lcd);
	while(1)
	{
	//green
	for(int i=0;i<800*480;i++)
		lcd_buf[i] = 0x0000FF00;//green

	write(fd_lcd,lcd_buf,sizeof(lcd_buf)); //800*480*4
	sleep(1);
	int ret;
	ret = lseek(fd_lcd, 0, SEEK_SET);
	if(ret == -1)
	{
		perror("lseek lcd"); //根据系统返回的errno输出错误原因。
	}
	//red
	for(int i=0;i<800*480;i++)
		lcd_buf[i] = 0x00FF0000;//red

	write(fd_lcd,lcd_buf,sizeof(lcd_buf)); //800*480*4
	sleep(1);
	
	ret = lseek(fd_lcd, 0, SEEK_SET);
	if(ret == -1)
	{
		perror("lseek lcd"); //根据系统返回的errno输出错误原因。
	}	
	//blue
	for(int i=0;i<800*480;i++)
		lcd_buf[i] = 0x000000FF;//red

	write(fd_lcd,lcd_buf,sizeof(lcd_buf)); //800*480*4
	sleep(1);	
	ret = lseek(fd_lcd, 0, SEEK_SET);
	if(ret == -1)
	{
		perror("lseek lcd"); //根据系统返回的errno输出错误原因。
	}
	}
	close(fd_lcd);
	
	return 0;
}

法国国旗

略(可查看往期,不想重复)

德国国旗

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>

int main(void)
{
	int fd_lcd;
	int lcd_buf[800*480]; //显存。int -- 4B
	int j,i;
	fd_lcd = open("/dev/fb0", O_WRONLY);
	if(fd_lcd == -1)
	{
		perror("open lcd");
		return -1;
	}
	printf("fd_lcd = %d\n", fd_lcd);
	
	for(i=0;i<800*160;i++)	lcd_buf[i]=0x00000000;
	for(i=800*160;i<800*320;i++)  lcd_buf[i]=0x00FF0000;
	for(i=800*320;i<800*480;i++) lcd_buf[i]=0x00FFD700;
	
	write(fd_lcd,lcd_buf,sizeof(lcd_buf));
	close(fd_lcd);
	return 0;
}

显示bmp位图

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>

int main(void)
{
	int fd_lcd;
	int fd_bmp;
	int lcd_buf[800*480]; //显存。int -- 4B
	int j,i;
	int ret;
	char bmp_buf[800*480*3];
	fd_bmp=open("./lx.bmp",O_RDONLY);//打开相应的位图,位图要放在同位置处
	if(fd_bmp==-1)
	{
		perror("open bmp");
		return -1;
	}
	ret =lseek(fd_bmp,54,SEEK_SET);
	if(ret==-1)
	{
		perror("lseek lcd");
	}
	read(fd_bmp,bmp_buf,sizeof(bmp_buf));
	close(fd_bmp);
	
	fd_lcd = open("/dev/fb0", O_WRONLY);
	if(fd_lcd == -1)
	{
		perror("open lcd");
		return -1;
	}
	printf("fd_lcd = %d\n", fd_lcd);
	
	for(i=0;i<800*480;i++)
	{
		lcd_buf[i]=(0x00<<24)+(bmp_buf[3*i+2]<<16)+(bmp_buf[3*i+1]<<8)+(bmp_buf[3*i]<<0);
	}
	write(fd_lcd,lcd_buf,sizeof(lcd_buf));
	close(fd_lcd);
	return 0;
}

  • 7
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值