知识点梳理 :
1.嵌入式操作系统 Linux wince…
2.嵌入式IO操作 嵌入式系统编程 网络编程
3.相关中间件 蓝牙 wifi zigbee 等
4.核心竞争力 掌握一款 你熟悉芯片 stm32 arm A系列智能芯片

day01上午—linux基本命令

一、文件编辑

1.1笔记

常用工具
1.编辑器 用于编写文本 .c .txt .sh
1.gedit 非常适用于初学者 它的使用方式 和 Windows下的 笔记本比较相似

gedit 空格 文件名.c
gedit 1.c 打开1.c 文件 如果该文件不存在 就创建该文件
使用方式和笔记本相同

2.vi/vim 强大编辑器

普通模式 当我们进入到文件时默认是普通模式

普通模式 ——》 编辑模式 按i键 在屏幕左下方提示 insert 单词 意味你已经进入编辑模式
编辑模式 ——》 普通模式 按ESC
普通模式 ——》 命令模式 按 shitf + : w :保存 q 退出 q!强制退出 wq 保存并退出

两种方法 找到一种适合自己的 学会并使用
2.编译器 把计算机高级语言 c c++ 转换成 机器cpu 可以识别的 二进制文本
GCC 把c语言转换成二进制文本
编译的方法 :
gcc 2.c -o 2
把计算机高级语言 转换成 二进制文件 目标文件 2
gcc 会检查2.c 语法有没有问题 语言没问题才会生产 目标文件 2
如果语法有问题 会报错语法问题
执行该文件
./2 ./二进制文件

1.2课堂练习

  1. vi test.c #写C文件
  2. gcc -o test test.c #编译成二进制文件
  3. ./test #运行编译的文件

image.png

二、常用操作

1.cp copy 复制粘贴文件
cp 6.txt 7.txt 把6.txt 内容复制一遍 到7.txt里
cp 123/ 789/ -r 注意 :如果复制的是目录文件 后面加参数 -r

2.mv 重新命名 两个文件的位置相同 路径是一样的
mv 123/ wubin/ 把123文件名字改成wubin
mv 移动 两个文件的位置不同 路径不一样
gec@ubuntu:~$ mv 1.c Desktop/ 把1.c 移动到Desktop/ 这个目录里
gec@ubuntu:~$ mv 789/ Desktop/
gec@ubuntu:~$ mv huaguang/ Desktop/ 把 huaguang/ 这个文件夹 移动到 Desktop/这个目录里
压缩命令
tar -zcvf 555.tar.gz 1.c 2.c 3.c
压缩格式 对应参数 压缩后生产文件名 所以被压缩的文件
解压命令
tar -zxvf 555.tar.gz -C Desktop/
解压命令 对应的参数 需要解压的文件 指定路径 你要解压的路径

day01下午—

一:环境准备

硬件开发平台 : ARM-A53 粤嵌6818型号开发板
摄像头 、串口等
1.领开发板 淘宝
image.png
软件开发环境 : Linux 操作系统 Ubuntu
tftf 网络传输
CRT 终端辅助工具
2.安装驱动
image.pngimage.png右键更新驱动,重启电脑
3.解压文件到D盘
image.png
image.pngimage.png

二、Linux下编程

image.png
查看man手册 (学原理)

  1. man open #显示的是open(1),也就是从最前面的section开始
  2. man 2 open #查看open系统调用
  3. 4.文件的操作方法 Linux 系统IO
  4. 1.打开文件的操作 open
  5. 2.写入文件的操作 write
  6. 3.读取文件的操作 read
  7. 4.关闭文件的操作 close
  8. 我们可以从Linux 的函数手册中获取函数的相关信息
  9. Linux 函数手册 manual --- > man 手册
  10. Linux man函数手册分为9 每一页内容各不相同
  11. 1 Executable programs or shell commands
  12. 2 System calls (functions provided by the kernel)
  13. 3 Library calls (functions within program libraries)
  14. 4 Special files (usually found in /dev)
  15. 5 File formats and conventions eg /etc/passwd
  16. 6 Games
  17. 7 Miscellaneous (including macro packages and conventions), e.g.
  18. man(7), groff(7)
  19. 8 System administration commands (usually only for root)
  20. 9 Kernel routines [Non standard]
  21. 输入 man 2 open
  22. 第一步 函数的功能
  23. open, creat - open and possibly create a file or device
  24. 第二步 函数的头文件
  25. #include <sys/types.h>
  26. #include <sys/stat.h>
  27. #include <fcntl.h>
  28. 第三步 函数的原型
  29. int open(const char *pathname, int flags);
  30. int open(const char *pathname, int flags, mode_t mode);
  31. 第四步 函数参数的分析和使用
  32. const char *pathname Given a pathname for a file, 路径名
  33. 给我你将要打开文件的路径和文件名
  34. int flags The argument flags must include one of the following access modes:
  35. O_RDONLY, O_WRONLY, or O_RDWR.
  36. flags 参数必须是以下情况之一
  37. O_RDONLY, 只读
  38. O_WRONLY, 只写
  39. O_RDWR. 读写
  40. 第五步 返回值
  41. 成功 返回新的文件描述符
  42. 失败 -1
  43. 输入 man 2 write
  44. 第一步 函数的功能
  45. write to a file descriptor
  46. 向文件描述符写入数据流
  47. 第二步 函数的头文件
  48. #include <unistd.h>
  49. 第三步 函数的原型
  50. ssize_t write(int fd, const void *buf, size_t count);
  51. 第四步 函数参数的分析和使用
  52. int fd 文件描述符 往哪个文件写入数据
  53. const void *buf 写入的数据内容
  54. size_t count 最多能写入多少数据
  55. 第五步 返回值
  56. On success, the number of bytes written is returned
  57. 成功 返回写入具体的字节数
  58. On error, -1
  59. 失败返回 -1

写lcd.c(让开发板屏幕显示绿色)

  1. #include <stdio.h>
  2. #include <sys/types.h>
  3. #include <sys/stat.h>
  4. #include <fcntl.h>
  5. #include <unistd.h>
  6. // 第一步 打开LCD屏幕 /dev fb0 (lcd屏幕硬件)
  7. // 第二步 把像素点数据写入到lcd驱动文件中
  8. // 第三步 关闭LCD屏幕
  9. int main()
  10. {
  11. // 第一步 打开LCD屏幕 /dev fb0 (lcd屏幕硬件)
  12. int lcd_fd; // 文件描述符 file descriptor
  13. lcd_fd = open("/dev/fb0", O_WRONLY);
  14. if(lcd_fd == -1)
  15. {
  16. printf("open lcd failed\n");
  17. }
  18. // 把像素点数据写入到lcd驱动文件中 我们把所有的像素点都赋值绿色 54FF9F
  19. // gec6818型号显示屏 分辨率 800*480
  20. int colorbuf[800*480];
  21. int i;
  22. for(i = 0; i < 800 * 480; i++)
  23. {
  24. colorbuf[i] = 0x54FF9F; //绿色的RGB十六进制值
  25. //以0x开头的颜色值和#开头的颜色值都是16位进制的
  26. }
  27. // lcd_fd 代表lcd屏幕 也是我们将要写入数据的文件
  28. // colorbuf 代表我们将要写入的像素点数据
  29. // size_t count 我们要写入多少数据
  30. write(lcd_fd, colorbuf, 800*480*4); //int类型占4字节
  31. //第三步 关闭LCD屏幕
  32. close(lcd_fd);
  33. return 0;
  34. }
  1. gedit lcd.c
  2. arm-linux-gcc lcd.c -o lcd1 #交叉编译

安装arm-linux-gcc

三、把文件从 Ubuntu 传送到 开发板上的方法

1.一定先生成二进制可执行文件 lcd1
2.把可执行文件 复制到 windows下
3.在开发板上(CRT) 输入 rx lcd1
把文件拖进 弹框内 选择 xmodel
或者
选择弹框上 传输 选择 xmodel 选择你要传送的文件
4.在开发板上执行二进制文件
chmod 777 lcd #添加权限
./lcd

四、进阶

屏幕显示三色旗
屏幕显示彩虹

  1. #include <stdio.h>
  2. #include <sys/types.h>
  3. #include <sys/stat.h>
  4. #include <fcntl.h>
  5. #include <unistd.h>
  6. // 第一步 打开LCD屏幕 /dev fb0 (lcd屏幕硬件)
  7. // 第二步 把像素点数据写入到lcd驱动文件中
  8. // 第三步 关闭LCD屏幕
  9. int main()
  10. {
  11. // 第一步 打开LCD屏幕 /dev fb0 (lcd屏幕硬件)
  12. int lcd_fd; // 文件描述符 file descriptor
  13. lcd_fd = open("/dev/fb0", O_WRONLY);
  14. if(lcd_fd == -1)
  15. {
  16. printf("open lcd failed\n");
  17. return 0;
  18. }
  19. // 把像素点数据写入到lcd驱动文件中 我们把所有的像素点都赋值绿色 54FF9F
  20. int colorbuf[800*480];
  21. int i;
  22. int index = 0;
  23. int color_list[9] = {0xF5DEB3, 0xFF0000, 0xFF7F00, 0xFFFF00, 0x00FF00, 0x00FFFF, 0x0000FF, 0x8B00FF, 0xF5DEB3};
  24. for(i = 0; i < 800 * 480; i++)
  25. {
  26. int color = 0;
  27. int y = i/800;
  28. int x = i%800;
  29. int y2 = y-479;
  30. int x2 = x-400;
  31. if (y2*y2+x2*x2 > 460*460){
  32. index = 0;
  33. }else if(y2*y2+x2*x2 > 430*430){
  34. index = 1;
  35. }else if(y2*y2+x2*x2 > 400*400){
  36. index = 2;
  37. }else if(y2*y2+x2*x2 > 370*370){
  38. index = 3;
  39. }else if(y2*y2+x2*x2 > 340*340){
  40. index = 4;
  41. }else if(y2*y2+x2*x2 > 310*310){
  42. index = 5;
  43. }else if(y2*y2+x2*x2 > 280*280){
  44. index = 6;
  45. }else if(y2*y2+x2*x2 > 250*250){
  46. index = 7;
  47. }else{
  48. index = 8;
  49. }
  50. colorbuf[i] = color_list[index];
  51. }
  52. // lcd_fd 代表lcd屏幕 也是我们将要写入数据的文件
  53. // colorbuf 代表我们将要写入的像素点数据
  54. // size_t count 我们要写入多少数据
  55. write(lcd_fd, colorbuf, 800*480*4);
  56. //第三步 关闭LCD屏幕
  57. close(lcd_fd);
  58. return 0;
  59. }