🤓
blog-article
  • Introduction
  • 面试题
    • 1. 输入url发生了什么
  • Personal Works
    • 1. 简单的Web图床
  • CSS动画笔记
    • 1.transition 属性
    • 2.transition 实例
  • css 笔记
    • 1. box-shadow 阴影
    • 2. columns 设置列宽和列数
    • 3. 伪元素after与before
  • html 笔记
    • 1. 不常用的h5标签杂记
  • webpack4
    • 1. 文档学习记录
    • 2. 加载CSS
    • 3. 加载less
    • 4. 加载sass
    • 5. 根据浏览器自动添加css前缀
    • 6. 图片文件处理
    • 7. 字体文件处理
    • 8. 引入jQuery
    • 9. 打包HTML文件
    • 10. 分离css插件
    • 11. babel简单使用
    • 12. 清理旧打包文件插件
    • 13. 拷贝静态资源
  • javascript
    • 1. js获取某年某月的天数
  • npm
    • 2. JSON.stringify()完整用法
    • 1. 入门篇
    • 2. 进阶篇
  • Node.js
    • 1. 使用koa-body中间件后ctx.request.body内容为空
    • 2. uni-app使用Node+Koa2接收上传的文件
  • SQL
    • 1. 查询
    • 2. 插入
    • 3. 修改
    • 4. 删除
    • 5. 期末复习
  • Git
    • 1. git add命令后出现another git process...问题
    • 2. 将文件从暂存区移除
  • vue-cli
    • 1. vue-cli(脚手架)引入vue.config.js文件后热更新失效,每次保存都会刷新页面
  • uni-app
    • 1. uni-app中不使用scroll-view组件,监听页面滑直底部事件
  • 设计模式
    • 创建型模式
    • 单例模式
    • 工厂模式
    • 抽象工厂模式
  • Spring boot
    • 1. 使用自定义参数注解获取 token 中User数据
  • IDEA
    • 1. 设置maven项目的默认配置
  • Linux
    • 1.常用命令
    • 2.常用基础命令2
    • 3.linux目录介绍
    • 4. vi编辑器使用
    • 5.用户管理
    • 6. 文件属性与权限操作
    • 7. 文件归档与解压缩
    • 8. gcc的基本用法
    • 9. gdb调试器的基本用法
    • 10. Makefile基本用法
  • shell
    • shell与crontab定时器的结合
    • 1. shell 变量与常见符号
    • 2. shell中的四则运算符
    • 3. 条件判断
    • 4. 输入输出
    • 5. 输出彩色的内容
    • 6. 流程控制
    • 7. 函数
  • Docker
  • 嵌入式系统给结构及原理
  • 学校课程笔记
    • 1. java EE 复习
    • 2. 马原复习论述题
    • 3. 嵌入式软件技术复习
    • 4. 嵌入式操作系统复习
    • 5. 马原选择题
    • 6. 马原辨析题
    • 7. 马原材料题
    • 8. 计网学习笔记
    • 9. 计网复习
      • 1. 第一章
Powered by GitBook
On this page
  • 简述题(作业1)
  • linux下C开发(作业2)
  • gdb调试(实验1)
  • gcc 编译生成动态库/静态库
  • 1.静态库生成
  • 2.动态库生成
  • makefile(作业3/实验2)
  • shell编程题目
  • 概念

Was this helpful?

  1. 学校课程笔记

3. 嵌入式软件技术复习

简述题(作业1)

嵌入式软件技术基础-作业1

1.查阅资料回答嵌入式操作系统有哪几类,并分别举例说明

分时系统

  • Unix

顺序系统

  • Dos

全能操作系统(Rich OS):

  • linux

  • Android

  • IOS

  • Symbian

实时操作系统

  • VxWorks

  • 嵌入式linux

  • Windows CE

  • FreeRTOS

  • RT-Threads

  • uC/OS-II

    2、查阅资料回答如下(嵌入式)处理器有什么特点?并分别举例说明

  • 稳定性强

  • 环境适应性强

  • 体积小

  • 集成功能较多

  • 支持实时多任务

  • 具有存储区保护功能

  • 功耗低

举例:Power PC、ARM

3、简述嵌入式系统开发调试方式有哪几种,如何针对这几种方式搭建开发环境?

  • 模拟器方式

  • 交叉调试

  • 非交叉调试

  • 在线仿真器方式

  • 监控器方式

  • 在线调试器方式

4、常见的嵌入式系统开发方法有哪几种?并比较这几种开发方法的优缺点

  • 面向硬件开发

    • 优点:可以对程序进行实时仿真和测试,可以直接针对硬件进行调试

    • 缺点:需要购买硬件调试工具(如ICE),调试时必需有目标系统

  • 面向操作系统开发

    • 优点:不需要购买硬件调试工具,节省开发成本。最为重要的是,通过使用模拟器和仿真器,可以在没有目标系统的情况下完成相应的开发工作,便于多人同时进行开发工作 

    • 缺点:只能基于操作系统进行应用程序和驱动程序的开发

  • 通过vmware虚拟机:对于低配置的PC不太友好

  • 通过仿真软件:无法达到真机100%的效果

  • 通过安装真机环境:对新手不友好,需要一定时间去熟悉

linux下C开发(作业2)

1.请在linux环境下编写一个程序,使用结构定义

struct student{
    int no; /* 学号 */
    char name[64]; /* 名称 */
    float  height; /* 身高 */
};

要求创建3个学生定义,并给三个学生的三个成员都赋上值,写一个show函数依次把所有学生信息显示,要求用vi编辑,并用gcc在Linux下编译,测试通过。提示:创建一个工程student目录,将结构体类型、show()函数原型写到show.h,将show()定义写到show.c里,main()写到main.c 里,.h文件放在include目录下,.c 放到source目录下。

show.h

struct student{
    int no;
    char name[64];
    float height;
};
void show(const struct student stu);

show.c

#include<stdio.h>
#include"./show.h"
void show(const struct student stu){
    printf("%d--%s--%f\n",stu.no,stu.name,stu.height);
}

main.c

#include<stdio.h>
#include"./show.h"
int main(){
    struct student stu={1,"小明",170.2};
    show(stu);
    return 0;
}

gdb调试(实验1)

编译链接生成可执行程序,在程序编译链接的过程中注意加上 -g 选项。

gcc -g test.c -o main

gdb调试生成的可执行程序

gdb main

gdb命令

  • 显示源代码

    l
    # 或者
    list
  • 设置断点

    b lineNumber
    # 或者
    break lineNumber
  • 查看断点信息

    info break
  • 执行程序

    r
    # 或者
    run
  • 单步执行(两种)

    n
    # 或者
    next
  • 继续运行

    c
    # 或者
    continue
  • 查看变量值

    p varName
    # 或者
    print varName
  • 修改变量值

    set varName=newValue
  • 查看函数调用堆栈情况

    bt
  • 查看寄存器值

    info registers
  • 显示反汇编

    disassemble functionName

gcc 编译生成动态库/静态库

1.静态库生成

# 生成hello.o文件
gcc -c -I ../include hello.c
# 生成镜态库libhello.a
ar -rcs libhello.a hello.o
# 调用静态库生成可执行文件main
gcc main.c -static -I ../include -L ../lib -lhello  -o main

2.动态库生成

# 生成动态库文件libhello.so
gcc hello.c -I../include -fPIC -shared -o libhello.so
# 调用动态库编译连接生成可执行程序main
gcc main.c -I ../include -L ../lib -lhello -o main

makefile(作业3/实验2)

demo1目录结构

├── include
│   └── hello.h
├── lib
│   ├── hello.c
│   ├── hello.o
│   ├── libhello.a
│   ├── libhello.so
│   └── Makefile
└── src
    ├── main
    ├── main.c
    └── Makefile

静态库生成Makefile

libhello.a:hello.o
    ar -rcs libhello.a hello.o
hello.o:hello.c
    gcc -c -I../include hello.c

调用静态库makefile生成可执行文件Makefile

main:main.c libhello.a
     gcc main.c -static -I ../include -L ../lib -lhello  -o main 

libhello.a:
    cd ./../lib && make libhello.a

demo2目录结构

├── hellofirst
│   ├── hellofirst.c
│   ├── hellofirst.h
│   ├── hellofirst.h.gch
│   ├── hellofirst.o
│   └── Makefile
├── hellosecond
│   ├── hellosecond.c
│   ├── hellosecond.h
│   └── Makefile
├── include
│   ├── hellofirst.h
│   └── hellosecond.h
├── lib
│   ├── libhellofirst.a
│   └── libhellosecond.so
├── main
├── Makefile
└── twohellos.c

静态库

libhellofirst.a:hello.o
    ar -rcs ../lib/libhellofirst.a *.o

hello.o:hellofirst.c
    gcc -c hellofirst.c
clean:
    rm *.o

动态库

main:hellosecond.c
    gcc hellosecond.c -fPIC -shared -o ../lib/libhellosecond.so

根目录Makefile调用 子目录Makefile

main:twohellos.c libhellofirst.a libhellosecond.so
    gcc twohellos.c -L ./lib/  -lhellofirst -lhellosecond -o main
libhellofirst.a:
    cd hellofirst && make
libhellosecond.so:
    cd hellosecond && make
clean:
    rm ./hellofirst/*.o ./lib/*.a ./lib/*.so

shell编程题目

试编写一个Shell程序,该程序能接收用户从键盘输入的50个整数,然后求出其总和、最大值及最小值。

sum=0
max=0
min=0
index=0
read nums
for num in $nums
do 
    # 最值初始化
    if [ $index -eq 0 ]
    then
        max=$num
        min=$num
    else
        # 判断当前值是否最大值
        if [ $max -lt $num ]
        then
            max=$num
        fi
        # 判断当前值是否为最小值
        if [ $min -gt $num ]
        then
            min=$num
        fi
    fi
    # 求和
    sum=`expr $sum + $num`

    # index++
    index=`expr $index + 1`
done
# 输出结果
echo "max:$max"
echo "min:$min"
echo "sum:$sum"

判断一个文件是不是字符设备文件,如果是则将其拷贝到/dev目录下

read filepath
if [ -c $filepath ]
then
    mv $filepath /dev
else
    echo "no"
fi

实现自动在/home目录下添加50个账号的功能,账号名称为stud1至stud50

i=1
while [ $i -le 50 ]
do
    # echo "stud$i"
    useradd "stud$i"
    i=`expr $i + 1`
done

概念

总线结构

  • 哈佛结构

  • 冯*诺依曼结构

CISC&RISC

  • 复杂指令集计算机(Complex Instruction Set Computer)

  • 精简指令集计算机(Reduced Instruction Set Computer)

大端存储与小端存储 0x12345678

  • 大端存储:字或半字的高位对应内存地址中的低地址

  • 小端存储:高位数对应高地址

存储器管理单元MMU

  • 将虚地址转换成物理地址。

  • 对存储器访问权限的控制。

交叉编译

把在宿主机(开发环境)上编写的高级语言程序编译成可以运行在目标机(生产环境))上的代码,即在宿主机上能够编译生成另一种CPU(嵌入式微处理器)上的二进制程序。

嵌入式系统的开发模式

  • 面向硬件

  • 面向操作系统

什么是嵌入式系统?嵌入式系统主要的特点是什么?

嵌入式系统是以应用为中心,以计算机技术为基础,软件硬件可裁减,适于应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。

  • 稳定性强

  • 环境适应性强

  • 体积小

  • 集成功能较多

  • 支持实时多任务

  • 具有存储区保护功能

  • 功耗低

嵌入式处理器主要有哪几类?分别有什么特点?

  • 嵌入式微处理器(MPU):运算器、控制器

  • 嵌入式微控制器(MCU):片内ROM、RAM、总线、I/O口、计数器、看门狗、AD、DA、Flash

  • 数字信号处理器(DSP):哈佛结构,适用于FFT变换、谱分析、数字滤波等操作,用于音频、视频处理

  • 片上系统(SOC):USB、GPRS、GPS、IEEE1394、蓝牙,可靠性强、开发时间短

  • 嵌入式微处理器(MPU):Am186/88、386EX

  • 嵌入式微控制器(MCU):8051、P51XA

  • 数字信号处理器(DSP):TMS320系列、DSP56200系列

  • 片上系统(SOC):M-core、CC2430

BootLoader

  • 在嵌入式系统中,没有像BIOS那样的固件程序,整个系统的加载启动完全由BootLoader完成。

  • BootLoader是操作系统内核之前运行的一段小程序。

    通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射,从而将系统的软硬件环境设置成一个合适的状态,然后加载操作系统内核并运行。

  • 特点

    • 严重地依赖于硬件而实现。

  • 分类

    • 按照功能复杂程度(是否含有Monitor)划分;

    • 按照处理器体系结构划分

Previous2. 马原复习论述题Next4. 嵌入式操作系统复习

Last updated 5 years ago

Was this helpful?

图片
图片
图片
图片
图片
图片
图片
图片
图片
图片
图片