《智能家居系统》1

	在经过三个星期的实习中,我们做了一个基于ubantu软件上的Linux系统编程的智能家居系统。
	在此,总结一下。

  • ls —》查看当前目录下的所有的目录和文件

     ls -l ---》查看当前目录下的所有的目录和文件详细信息
    
  • cd —》切换当前路径

     cd /      进入根目录
     cd ~	  进入家目录
     cd 	  进入家目录
     cd /home/gec  进入家目录
     cd -	  返回上一次所在的路径
     cd ..	  进入上一级目录
     cd .      进入当前目录
     cd ..  -->上一级目录
     cd .   -->当前目录
     cd/   ---》只有在路径最前面时才有效
    
  • touch —》创建文件

     touch 文件名
     touch 1.txt  ---》创建一个叫1.txt的文件
    
  • mkdir —》创建目录

     mkdir 目录名
     mkdir test  ---》创建一个叫test的目录
    
  • vi、vim —》编辑文件 —》不能使用window里面的快捷键

     vi 文件名
     1、如果文件不存在,则新建文件后,进入编辑模式
    
     2、如果文件存在,则直接进入编辑模式
    
     	按Esc,输入i进入真正的编辑模式
     	按Esc,输入  :q! , 强制退出,不保存
     	按Esc,输入  :wq ,保存再退出
    
  • gedit —》编辑文件

     1、如果文件不存在,则新建文件后,进入编辑模式
    
     2、如果文件存在,则直接进入编辑模式
    
  • cat —》打印文件里面的内容输入到屏幕上

     cat 文件名
    

一、什么是嵌入式系统(ARM+linux)

	以计算机技术为基础(软件+硬件),软件和硬件是可以裁剪的,在成本、体积、功耗、功能、稳定性等参数有严格要求的计算机系统。
	嵌入式系统是软硬件结合的,专用的计算机系统。

1、嵌入式硬件的组成

处理器:----执行代码、处理数据。常见的处理器的架构:x86、ARM、MIPS、RISC-V、......
        (51单片机----微控制器,不是微处理器)
S5P6818--ARM---Cortex-A53*8---1.5GHz

内存:存放正在运行的程序和正在处理的数据。(掉电丢失)
DDR3 1GB


硬盘:存放代码和数据(永久保存)
    eMMC电子硬盘  8GB


输出设备:液晶屏、VGA、LED灯、蜂鸣器、.....



输入设备:键盘、按键、触摸屏、摄像头、触摸板、.....


通信接口:网络、串口、I2C、SPI、.....

2、嵌入式软件

1)启动引导程序----bios
u-boot----通用的启动引导程序。初始化硬件平台、加载并启动操作系统内核。

2)操纵系统内核----Linux内核
Linux的优点:
免费的、开源的、资料多、系统功能丰富、稳定性好、系统可裁剪、...

3)应用程序

二、嵌入式开发环境的搭建

1、SecureCRT ------ 串口终端助手(GEC6818的控制台)

2、VMware-player(VMware-workstation)
虚拟机软件----在windows虚拟一台PC机,我们在虚拟的PC运行linux系统

3、ubuntu16.04

三、嵌入式开发环境

PC ---->ubuntu-16.04 + arm-linux-gcc
GEC6818 ----> 运行交叉编译好的程序

1.开发环境中的交叉编译器
bobeyfeng@ubuntu:/$ arm- —>+Tab键补全

arm-linux-addr2line                       arm-linux-gprof                           arm-none-linux-gnueabi-gcc
arm-linux-ar                              arm-linux-ld                              arm-none-linux-gnueabi-gcc-5.4.0
arm-linux-as                              arm-linux-ld.bfd                          arm-none-linux-gnueabi-gcc-5.4.0.br_real
arm-linux-c++                             arm-linux-nm                              arm-none-linux-gnueabi-gcc-ar
arm-linux-c++.br_real                     arm-linux-objcopy                         arm-none-linux-gnueabi-gcc.br_real
arm-linux-cc                              arm-linux-objdump                         arm-none-linux-gnueabi-gcc-nm
arm-linux-cc.br_real                      arm-linux-ranlib                          arm-none-linux-gnueabi-gcc-ranlib
arm-linux-c++filt                         arm-linux-readelf                         arm-none-linux-gnueabi-gcov
arm-linux-cpp                             arm-linux-size                            arm-none-linux-gnueabi-gcov-tool
arm-linux-cpp.br_real                     arm-linux-strings                         arm-none-linux-gnueabi-gfortran
arm-linux-elfedit                         arm-linux-strip                           arm-none-linux-gnueabi-gfortran.br_real
arm-linux-g++                             arm-none-linux-gnueabi-addr2line          arm-none-linux-gnueabi-gprof
arm-linux-g++.br_real                     arm-none-linux-gnueabi-ar                 arm-none-linux-gnueabi-ld
arm-linux-gcc                             arm-none-linux-gnueabi-as                 arm-none-linux-gnueabi-ld.bfd
arm-linux-gcc-5.4.0                       arm-none-linux-gnueabi-c++                arm-none-linux-gnueabi-nm
arm-linux-gcc-5.4.0.br_real               arm-none-linux-gnueabi-c++.br_real        arm-none-linux-gnueabi-objcopy
arm-linux-gcc-ar                          arm-none-linux-gnueabi-cc                 arm-none-linux-gnueabi-objdump
arm-linux-gcc.br_real                     arm-none-linux-gnueabi-cc.br_real         arm-none-linux-gnueabi-ranlib
arm-linux-gcc-nm                          arm-none-linux-gnueabi-c++filt            arm-none-linux-gnueabi-readelf
arm-linux-gcc-ranlib                      arm-none-linux-gnueabi-cpp                arm-none-linux-gnueabi-size
arm-linux-gcov                            arm-none-linux-gnueabi-cpp.br_real        arm-none-linux-gnueabi-strings
arm-linux-gcov-tool                       arm-none-linux-gnueabi-elfedit            arm-none-linux-gnueabi-strip
arm-linux-gfortran                        arm-none-linux-gnueabi-g++                
arm-linux-gfortran.br_real                arm-none-linux-gnueabi-g++.br_real        

2.交叉编译器的版本
bobeyfeng@ubuntu:/$ arm-linux-gcc -v
Using built-in specs.

    COLLECT_GCC=/usr/local/arm/5.4.0/usr/bin/arm-linux-gcc.br_real
    COLLECT_LTO_WRAPPER=/usr/local/arm/5.4.0/usr/bin/../libexec/gcc/arm-none-linux-gnueabi/5.4.0/lto-wrapper
    Target: arm-none-linux-gnueabi
    Configured with: ./configure --prefix=/home/geclab/buildroot-2016.11/output/host/usr --sysconfdir=/home/geclab/buildroot-2016.11/output/host/etc --enable-static --target=arm-none-linux-gnueabi --with-sysroot=/home/geclab/buildroot-2016.11/output/host/usr/arm-none-linux-gnueabi/sysroot --disable-__cxa_atexit --with-gnu-ld --disable-libssp --disable-multilib --with-gmp=/home/geclab/buildroot-2016.11/output/host/usr --with-mpc=/home/geclab/buildroot-2016.11/output/host/usr --with-mpfr=/home/geclab/buildroot-2016.11/output/host/usr --with-pkgversion='Buildroot 2016.11' --with-bugurl=http://bugs.buildroot.net/ --disable-libquadmath --enable-tls --disable-libmudflap --enable-threads --without-isl --without-cloog --with-float=soft --disable-decimal-float --with-abi=aapcs-linux --with-cpu=cortex-a15 --with-float=soft --with-mode=arm --enable-languages=c,c++,fortran --with-build-time-tools=/home/geclab/buildroot-2016.11/output/host/usr/arm-none-linux-gnueabi/bin --enable-shared --disable-libgomp
    Thread model: posix
    gcc version 5.4.0 (Buildroot 2016.11) 

3.编写一个测试程序

   #include <stdio.h>
   
   int main(void)
   {
   	printf("sizeof char = %lu\n",sizeof(char)); //字符、字节
   	printf("sizeof short = %lu\n",sizeof(short));//半字、短整型
   	printf("sizeof int = %lu\n",sizeof(int));//字
   	printf("sizeof long = %lu\n",sizeof(long));//双字、长整型
   	return 0;
   }

4、设置windows和linux的共享路径

bobeyfeng@ubuntu:/mnt/hgfs/day1$ cd /mnt/hgfs/day1/demo/
bobeyfeng@ubuntu:/mnt/hgfs/day1/demo$ ls
test1.c

5、编译C程序
1)使用gcc来编译---->可以在x86平台

bobeyfeng@ubuntu:/mnt/hgfs/day1/demo$ gcc test1.c -o test

bobeyfeng@ubuntu:/mnt/hgfs/day1/demo$ file test
test: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/l, for GNU/Linux 2.6.32, BuildID[sha1]=799c7badc28ceb21e0fbe2763184d82fb07e2e6e, not stripped


bobeyfeng@ubuntu:/mnt/hgfs/day1/demo$ ./test
sizeof char = 1
sizeof short = 2
sizeof int = 4
sizeof long = 8

2)使用交叉编译器来编译程序
arm-linux-gcc ----->嵌入式平台上运行的程序

bobeyfeng@ubuntu:/mnt/hgfs/day1/demo$ arm-linux-gcc -o test test1.c
bobeyfeng@ubuntu:/mnt/hgfs/day1/demo$ arm-linux-gcc -o test test1.c
bobeyfeng@ubuntu:/mnt/hgfs/day1/demo$ file test
test: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-, for GNU/Linux 3.2.0, not stripped

将test执行文件下载到GEC6818开班
[root@GEC6818 /]#cd /          ----->去linux根目录
[root@GEC6818 /]#mkdir test    ----->创建test目录
[root@GEC6818 /]#cd test  ---->进入test目录
[root@GEC6818 /test]#ls  ---- 查看test目录下的文件

[root@GEC6818 /test]#rx test

C

发送test的方法:secure CRT—>传输—>发送xmodem—>选择test文件—>发送

修改test的权限,给他以可执行权限

[root@GEC6818 /test]#chmod 777 test

[root@GEC6818 /test]#./test
sizeof char = 1
sizeof short = 2
sizeof int = 4
sizeof long = 4

注意:long数据的大小是处理器的位数一致的。或者说和运行平台的位数保持一致。

做小练习:

char *p=“hello world\n”;
sizeof§=??
strlen§=??
深刻理解:sizeof()和strlen()的区别是什么?

====================================================================================================================================

四、液晶屏显示(单色)

1.液晶屏的结构
像素:800*480
尺寸:7inch
色位:32bits ------>一个像素点是有32bits的数据组成,4个字节有ARGB组成:A—透明度(未用)、R—red,G–Green,B–blue
红-----0x00FF0000
绿-----0x0000FF00
蓝-----0x000000FF
黑-----0x00FFFFFF
白-----0x00000000

2、使LCD显示单色

定义一个存放颜色的数组:
int lcd_buf[800480];
int i;
for(i=0;i<800
480;i++)
lcd_buf[i]=0x0000FF00;
需要解决的问题:
将lcd_buf[]写到液晶屏上。液晶屏就会显示纯绿色。

1)打开液晶屏
在linux系统中,“一切皆文件”。液晶屏的驱动也是一个文件。
/dev/fb0

bobeyfeng@ubuntu:/mnt/hgfs/day1/demo$ man 3 open

#include <sys/stat.h>
#include <fcntl.h>

int open(const char *path, int oflag);
参数说明:
const char *path----要打开的文件的文件名,需要带有文件的路径。如:"/dev/fb0"
int oflag ----- 文件的访问属性:O_RDONLY、O_RDWR、O_WRONLY
返回值:
打开成功,返回一个文件描述符(文件的ID,是唯一的,每打开一个文件,都会得到一个文件描述符,文件描述符是一个正整数)
打开失败,返回-1,并给系统返回一个负数的错误码。

例:

	int fd_lcd;
	fd_lcd = open("/dev/fb0", O_WRONLY);
	if(fd_lcd == -1)
	{
		perror("open /dev/fb0");
		return -1;
	}

2)向液晶屏这个文件写入颜色数据
#include <unistd.h>
ssize_t write(int fildes, const void *buf, size_t nbyte);
参数说明:
int fildes ---- 写入文件的文件描述符,open函数的返回值。
const void *buf -----要写入的文件的地址
size_t nbyte ---- 写入文件的大小
返回值:
正确写入的字节数。

例:
write(fd_lcd, lcd_buf,8004804);//sizeof(lcd_buf);

3)关闭液晶屏
#include <unistd.h>

   int close(int fildes);

例:
close(fd_lcd);

作业:
小项目:LCD检测程序,循环显示颜色。
循环中使用延时函数:sleep(2)//睡眠延时2秒
arm-linux-gcc -o test test.c

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WeSiGJ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值