嵌入式软件面试记录(4)

一、简述一下你所了解的CAN和LIN通讯?

答:(1)CAN总线

我当时的回答:

CAN总线全称控制器局域网,是串行通信网络,普遍用于车身上的通信,主要有多主工作方式,非破坏性仲裁机制,系统的柔软性,通信速度,远程数据请求,信息广播这几种特性,协议帧有数据帧,遥控帧(远程帧),错误帧,过载帧,帧间隔,其中数据帧,遥控帧(远程帧)常用。

大概就简单说了一下吧,然后后面又问了我一些帧结构的问题以及报文过滤的问题,帧结构基本上都是概念,过滤问题不是很懂就不做详细说明了,后面等我多用用后应该会得出新的理解。

(2)LIN通讯

我的回答:就简单说了一下报文帧的组成,分为报头和响应,报头又分为间隔场,同步场,标识符场,响应又分为数据场和校验和场。  LIN比较简单所以面试官没特别为为难我。

(后续会根据自己的理解做两期比较详细的LIN和CAN通讯的解释)

二、了解bootloader吗,了解的话如何通过bootloader让代码从中间开始运行?

答:了解,

1. 编写两段代码,一段运行完成后进入 Bootloader 等待,另一段则由 Bootloader 加 载并执行。 2. 在第一段代码中通过某种方式将第二段代 码的镜像文件保存至 Flash 或其他存储设备中。

3. 当第一段代码运行完毕后,跳转到 Bootloader 程序,等待第二段代码的加载请求。

4. 用户通过某个操作触发 Bootloader 加载第 二段代码的请求,在 Bootloader 内部进行镜 像文件的加载,并将第二段代码的入口地址作为参数传递给第一段代码。

5. 第一段代码接收到入口地址参数后,跳转 到第二段代码的入口地址处,从而实现让第二 段代码从中间开始运行。 需要注意的是,在实现这个方法时需要考虑多 个问题,例如如何将第二段代码的镜像文件保 存到 Flash 中,以及如何进行镜像文件的加载 和跳转。同时也需要对具体硬件平台和开发环 境进行适配,以确保代码能够正确运行。

三、平常使用什么方法进行调试程序以及排除bug?

1.串口打印调试

2.使用调试器(Debugger)

3.逻辑分析仪和示波器

四、一个参数既可以是const还可以是volatile 吗?

可以,(1)const:表示变量的值不能被改变。

(2)volatile:表示变量的值可能会被意外地改变,比如由硬件或其他并发线程修改,编译器不能对该变量进行优化假设(如缓存变量值)。

(3)当一个变量既是 const 又是 volatile 时,意味着程序不能改变这个变量的值(因为它是 const),但是它的值可以在任何时候由外部因素(例如硬件或操作系统)改变(因为它是 volatile)。

(4)一个例子是只读的状态寄存器。它 是 volatile 因为它可能被意想不到地改变。 它是 const 因为程序不应该试图去修改它.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值