fs4412开发板学习笔记(五)

作业1:
输入10个整数,按从小到大的顺序输出(选择排序)
每轮排序在未排序的集合中找到(最小/最大),将找到的数与未排序的
第一个数交换位置。

5    4   3   2   1       i = 0 = min
1   4   3   2   5       i+1
1   2   3   4   5
1   2   3   4   5

作业2:
从前有个人叫约瑟夫不幸入狱,监狱枪毙犯人。让33个犯人围成一个圈,
从1-7报数,数到7的出列枪毙,最后只有一个人能活下来。聪敏的约瑟夫稍加
计算活下来了,问这个位置在哪?(编程解决问题)
12
需要思考的问题
1)数组是连续的线性结构,如何构成一个环?
数组下标 k
if ( k > 32 )
k = 0;
2)如何处理死去的犯人?
for (i = 0; i < 7; i++) { //从1-7报数
if (criminal == DEAD) {
i–;
}
}

作业3:输出如下图形:
* 5 1
*** 4 3
***** 3 5
******* 2 7
********* 1 9
*********** 0 11
i=0
5-i 2*i+1

********* 1 9
******* 2 7
***** 3 5
*** 4 3
* 5 1
i=0
i+1 9-2*i

逻辑推理题:(不必写代码)
1、怎样分财宝?
有两位探险家穿越沙漠,甲携带5瓶水,乙携带3瓶水,计划8天走出沙漠,
甲乙二人约定每天每人喝半瓶水。
在旅程刚开始(水还未损耗时),二人碰上一个富商,该富商说他家就在沙漠
另一端(即甲乙二人+的目的地),如果甲乙二人能护送他顺利到家,则会分给
甲乙二人一笔巨额财宝。
由于多了一个人,所以每天每人喝1/3瓶水。
8天后,三人成功穿越沙漠。富商兑现诺言,按甲乙二人携带的水量,
按5:3的比例分给二人一笔财宝。此时甲说:“您的分配方式不公平”。
问:富商的分配方式是否公平?若不公平,则正确的分配方式应该是多少?
7:1
8/3 甲 7/3 已 1/3
2、哪一瓶为毒药?
现有100瓶液体已经编好号,其中99瓶为水,1瓶为毒药。
毒药的外观、性状、气味等与水完全相同。若小白鼠饮下毒药,
则会在24小时后死亡。
现在需要找出哪瓶为毒药,但是由于时间紧迫,只有1天时间,
为了加快验证速度,我们给你7只小白鼠。
问:设计一种给小白鼠喂食液体的验证方案,在24小时之后立即找出哪瓶为毒药

1 0 0 0 0 0 0 0 1
2 0 0 0 0 0 0 1 0
3 0 0 0 0 0 0 1 1
4 0 0 0 0 0 1 0 0
5 0 0 0 0 0 1 0 1

3、球的重量?
有8个球,其中一个比另外的要略重。现在只有一个天枰,在不使用砝码的情况
下最少需要称几次,才能找出这个球? 2次
三组 3 3 2

4.沙漠中的尸体?
一个人被发现死在沙漠里,手中捏这一个火柴,周围没有任何足迹,也没有其他
线索。他是怎么死的呢?

===================================================================================
1.结构体 struct
我们学过的数据类型(int、char、float等)是C语言提供的基本数据类型。
【1】什么是结构体
用户自定的一种构造类型。
用于保存不同数据类型的数据的一种构造类型。在结构体中包含了若干不同类型的
和不同含义的数据项(相同也可以),将这些数据综合起来反映某个信息。

【2】定义/声明结构体类型
struct 结构体名 {
数据类型 成员1;
数据类型 成员2;
数据类型 成员3;

数据类型 成员n;
};
注意:

  1. 花括号包含的内容 称为 “成员列表”
  2. 用";"作为每个成员的结束符,整个结构体定义也用分号作为结束符
  3. 成员的数据类型既可以是基本数据类型,也可是构造类型(数组、结构体、共用体、枚举)
    eg: 定义员工结构体类型 (姓名、工号、年龄、工资、家庭住址)
    struct worker {
    char name[32];
    int id;
    int age;
    float salary;
    char address[64];
    };

【3】定义结构体变量
数据类型 变量;

struct 结构体名 变量名;

eg :
struct worker stuff;

练习:声明以下结构体类型及变量
1)学生成绩单:成员表列包括:学生学号、学生姓名、语文成绩、数学成绩、英语成绩
struct Score {
int id;
char name[32];
float chinese;
float math;
float english;
};
struct Score score;

2)产品生产批号:成员表列包括:产品批次、产品生产日期(年、月、日)、产地
struct Date {
int year;
int month;
int day;
};

struct Goods {int  pici;char chandi[32];struct Date riqi;
}struct Goods goods;

【4】结构体变量的使用
因为结构是一个整体,不能给整个结构体赋值,只能给结构成员赋值。
struct Goods goods;
goods = {20200909, luan, {2020,9,9}}; 错误❌
引用结构体的成员 :
结构体变量名.成员名 //“.” 成员运算符
eg:
struct Date riqi;
riqi.year = 2020;
riqi.month = 9;
riqi.day = 9;

注意:
1)如果结构体的成员本身也是一个结构,需要使用成员运算符一级一级找到最低的一级成员赋值。
struct Goods goods;
goods.riqi.year = 2020;
goods.riqi.month = 9;
goods.riqi.day = 9;
2)如果两个结构体变量类型相同可以相互赋值
struct worker stuff;
struct worker manger;
stuff = manger;

练习:
键盘上输入两个学生的信息,输入的信息的信息保存在结构体中。比较两个学生的成绩高低。
出成绩高的学生信息,如果两个学生成绩相等则两个学生的信息都输出
(学号、姓名、成绩、年龄)

【5】结构体数组
如果数组内存储的数据都是结构,则该数组是结构体数组
定义结构体数组 :
数据类型 数组名[元素个数];
struct 结构体名 数组名[元素个数];
eg :
struct student stu[10];
引用结构体数组元素
数组名[下标]
eg:
stu[0];
引用结构体数组元素的成员
数组名[下标].成员名
eg:
stu[0].age = 20;


1.FS4412 开发板
【1】核心板(高速设备)
SOC Samsung Exynos4412(ARM)
Flash Emmc(4/8G)
RAM 1G
电源管理单元(unit)
【2】外围板(低速设备)
串口(serial)
网卡(DM9000)
蜂鸣器(beep)
LED灯
LCD显示器
红外接收器
DS18B20 温度传感器
KEY
拨码开关(设置开发板的启动方式)
SD卡
USB接口
电源 & 开关

2.系统移植(Linux 操作系统)
2.1 串口调试
先安装CH340 USB转串口驱动
使用串口调试工具 (以putty为例)
connection type -> Serial
Serial line -> COM3 (根据自身电脑)
speed -> 115200
Saved session ->

2.2 网络配置 (使用网络传输数据)
【1】配置ubuntu的网络
1) sudo vim /etc/network/interfaces //网络配置文件
2) 修改文件内容
auto eth0 //设置以太网卡
iface eth0 inet static //设置静态IP
address 192.168.1.3 //设置IP地址
netmask 255.255.255.0 //设置子网掩码
gateway 192.168.1.1 //设置网关的IP
3) sudo /etc/init.d/networking restart //重启网络服务使配置生效
4) 虚拟机->设置->网络适配器->桥接模式
5) ifconfig //查看网络配置
注意:不要连接无线网络

【2】配置开发板的网络
Uboot (universal boot loader) 通用引导程序
相当于PC中的BIOS 负责引导 操作系统启动(初始化设备 …)
使用者需要使用uboot的指令与 uboot进行交互

  1. printenv (print environment variable) 打印环境变量
  2. setenv (set environment variable) 设置环境变量
    示例:bootdelay=3 //启动延时 3s
    setenv bootdelay 2 //设置启动延时 2s
  3. saveenv (save environment variable) 保存环境变量

uboot 网络设置
setenv ipaddr 192.168.1.2 //设置开发板IP
setenv netmask 255.255.255.0 //设置子网掩码
setenv gatewayip 192.168.1.1 //设置网关IP
setenv serverip 192.168.1.3 //设置服务器IP
saveenv

网络测试
ping 192.168.1.3
显示结果
host 192.168.1.3 is alive 代表成功
host 192.168.1.3 is not alive 代表成功

2.2 设置tftp服务
tftp 简单文本传输协议
开发板可以使用tftp服务从ubuntu中下载操作系统 启动需要的文件
uImage //Linux系统的镜像文件
exynos4412-fs4412.dtb //设备树
1)准备工作
sudo mkdir /tftpboot
sudo chmod 777 /tftpboot -R
将 开发板镜像\uImage //Linux系统的镜像文件
exynos4412-fs4412.dtb //设备树
拷贝到/tftpboot
sudo chmod 777 /tftpboot -R

2)ubuntu下的配置打开配置文件sudo vim /etc/default/tftpd-hpa 修改配置文件的第4和第6行# /etc/default/tftpd-hpaTFTP_USERNAME="tftp"TFTP_DIRECTORY="/tftpboot"TFTP_ADDRESS="0.0.0.0:69"TFTP_OPTIONS="--secure -c"重启配置服务,使配置生效 sudo /etc/init.d/tftpd-hpa restart
3)开发板的配置 下载 uImage  //Linux 压缩内核镜像exynos4412-fs4412.dtb  //设备树setenv bootcmd tftp 41000000 uImage\;tftp 42000000 exynos4412-fs4412.dtb\;bootm 41000000 - 42000000saveenv

2.3 设置nfs服务
nfs (network file system) 网络文件系统
开发板可以通过nfs与ubuntu共享文件系统(方便代码调试)
1)准备工作
sudo mkdir /source
sudo chmod 777 /source -R
将 开发板镜像\rootfs.tar.gz 拷贝到 /source
cd /source
tar -xvf rootfs.tar.gz //解压压缩包
sudo chmod 777 /source -R
2)Ubuntu下的配置
打开配置文件
sudo vim /etc/exports
修改文件内容 (注意只需要修改最后一行即可)
# /etc/exports: the access control list for filesystems which may be exported
# to NFS clients. See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4 gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes gss/krb5i(rw,sync,no_subtree_check)
#
/source/rootfs *(rw,sync,no_subtree_check)
重启配置服务,使配置生效
sudo /etc/init.d/nfs-kernel-server restart
3)开发板的配置
挂载Linux根文件系统
setenv bootargs root=/dev/nfs nfsroot=192.168.1.3:/source/rootfs ip=192.168.1.2 init=/linuxrc console=ttySAC2,115200 rw
saveenv

完场以上所有配置后,重启开发板,不要打断开发板启动,即可看到Linux成功运行

3.设置交叉编译环境
step 1: 将gcc-4.6.4.tar.xz 拷贝到虚拟机中并解压
fs@ubuntu:~$ tar -xvf gcc-4.6.4.tar.xz
step 2: 将解压的好的文件gcc-4.6.4 剪切到/目录并重命名为toolchain
fs@ubuntu:~$ mv gcc-4.6.4 toolchain
fs@ubuntu:~$ sudo mv toolchain /
step 3: 修改文件权限
fs@ubuntu:~$ sudo chmod 777 /toolchain -R
step 4: 打开配置文件并修改
fs@ubuntu:~$ sudo vim /etc/bash.bashrc
在最后一行新建一行
export PATH=PATH:/toolchain/binstep5:重加加载脚本配置文件fs@ubuntu:PATH:/toolchain/bin step 5: 重加加载脚本配置文件 fs@ubuntu:~PATH:/toolchain/binstep5:重加加载脚本配置文件fs@ubuntu:  source /etc/bash.bashrc
检查是否配置成功
fs@ubuntu:~$ arm-n
如果能够自动补全
fs@ubuntu:~$ arm-none-linux-gnueabi-

今日作业
根据笔记完成笔记上的所有配置

华清远见fs4412开发板学习笔记(五)相关推荐

  1. 华清远见fs4412开发板学习笔记(二)

    fs4412开发板学习笔记(二) Linux 1.终端操作 1)打开终端 ctrl + alt + t 2)放大 ctrl + shift + "+" 3)缩小 ctrl + &q ...

  2. 华清远见fs4412开发板学习笔记(四)

    fs4412开发板学习笔记(四) 今天的课程安排 1.复习 1.1 VIM 编辑器 [1] vim + filename 打开 [2] 工作模式 命令模式 编辑模式 底行模式 [3] 模式切换 命令- ...

  3. STM32MP1系列教程连载-华清远见FS-MP1A开发板使用

    STM32MP1系列教程连载-华清远见FS-MP1A开发板使用 1.1 FS_MP1A硬件资源介绍 FS-MP1A采用STM32MP157A处理器.STM32MP157A是基于Cortex-A7 32 ...

  4. 华清远见ARM开发培训班

       课程背景 ATC的英文全称是Approved Training Center,即授权培训中心.ARM ATC就是指ARM公司授权的培训中心.目前ARM公司在包括英国.德国.美国.日本.韩国.台湾 ...

  5. 阿里云HaaS100物联网开发板学习笔记(六)做个智能灯---一个完整的开发例子

    摘要:本篇文章将前期几个专题综合起来,基于阿里云HaaS100的新固件设计制作一个智能灯.这个智能灯由云平台.手机APP端和设备端组成,基本上涵盖了一个物联网小项目所需的主要步骤. 目录 1.在阿里云 ...

  6. 阿里云HaaS100物联网开发板学习笔记(二)硬件控制初步--让小灯闪烁起来

    摘要:无论是哪种开发板,要想开发特定的功能,必先从GPIO开始,HaaS100开发也是一样.如果仅仅利用HaaS100的联网功能,那简直是太浪费了.HaaS100拥有其他开发板所具备的所有的功能,比如 ...

  7. 阿里云HaaS100物联网开发板学习笔记(四)轻应用初步--用javascript连接阿里云物联网平台

    摘要:本篇文章讲解如何使用JavaScript"轻应用"连接阿里云物联网平台并上报一个数据.仍然延续前几篇文章的结构,从安装软件环境开始讲,以使零基础的同学看了本篇文章之后,也能够 ...

  8. 阿里云HaaS100物联网开发板学习笔记(三)轻应用初步--用js让小灯闪烁起来

    摘要:能让JavaScript应用运行在haas100开发板上,这实在是太酷了,这种方式被阿里云称之为"轻应用".本文带各位从零开始,先了解啥是轻应用,然后搭建环境,再一步步将一个 ...

  9. 涂鸦LZ201-CN开发板学习笔记(一)

    涂鸦LZ201-CN开发板学习笔记(一) 前言 一.引出 二.准备流程 1.购买开发板 2.创建产品 (1)创建产品 (2)功能定义 (3)设备交互 (4)硬件开发 3.检查开发板 第一步: 第二步: ...

最新文章

  1. 关于static修饰符
  2. CentOS7编译安装MySQL5.7之后安装mysql-devel出错解决方案
  3. 关于GPU-driver for linux的资料
  4. bank holiday in uk 2020
  5. 使用C语言进行面向对象的开发--GObject入门[5]
  6. spin lock自旋锁
  7. 配置NTP网络时间服务
  8. 洛谷——P1897 电梯里的爱情(两种解法:普通方法、桶排序方法)
  9. 复旦提出LReasoner: 用于文本逻辑推理的逻辑驱动上下文扩展和数据增强方法
  10. 「leetcode」104559:求树的最大深度
  11. 客户说发货慢怎么回复_买家投诉卖家物流送货慢怎么处理
  12. 软考高项优秀范文——论信息系统项目的风险管理
  13. latch: cache buffers chains问题分析
  14. 阿里高级技术专家:成长路上如何破局?
  15. SQLZOO附加题练习 - Window functions
  16. 6.2 病毒机制与组成结构
  17. 通过TextSwitcher实现广告栏内容动画切换
  18. 利用Python进行数据分析笔记-pandas建模(Patsy篇)
  19. c++读取wav音频方法
  20. HBase快速导入巨量数据—— Bulk Loading

热门文章

  1. 脉冲神经网络基础性知识
  2. java 标识符,分隔符,关键字
  3. Python 爬虫 (二)
  4. 死锁oracle rac,利用LOGMINER进行RAC环境下的死锁分析——转载
  5. Linux查ip查不到(Centos8)
  6. Echarts进度条式的柱状图
  7. Android多媒体(音乐播放器)
  8. 聊天室(长连接)开发-最近一个项目总结
  9. Mysql5.7, 千万数据快速插入解决方案( JDBC方式, 百秒搞定!!!)
  10. 学习笔记17 差分方程