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

1.FreeRTOS使用,是自己移植的吗,移植过程中设置了多少个任务?

答:是自己移植的,从官网下载的包根据手册移植的。

主要涉及以下几个任务:

  • 主任务:负责系统初始化和创建其他任务。
  • 创建队列任务
  • 点灯任务:点亮LED任务。
  • 通信任务:处理网络通信或串口通信。
  • 用户界面任务:更新显示和处理用户输入。
  • 数据处理任务:执行数据分析或控制算法。

2.如何进入中断?

答:①先理解中断向量表

②然后进行中断初始化

③使能全局中断

④发生中断事件,触发中断

3.指针和引用的区别?

答:①指针有固定的空间大小,在32位系统中是4字节,引用是原始变量的一个别名,大小是原变量的大小。指针需要解引用才可以对指向的变量进行操作。而对引用的修改会直接改变引用所指向的变量。

②指针可以有const指针,但没有const引1用。 指针有多级指针,引用不存在多级引用。在使用指针过程中,可以改变其指向的对象,但引用一旦被初始化就只能是一个对象的引用,不能改变。

③引1用声明时必须初始化为另一变量。指针声明和初始化可以分开,允许只声明不初始化,使用时再指向具体变量,指针可以指向空值,但不存在指向空值的引用,引用必须初始化为具体变量的别名

4.普通局部变量、普通全局变量、静态局部变量、静态全局变量的区别?

答:普通局部变量:存在栈区,如果不初始化,变量内容随机,只在定义所在的复合语句中有效,复合语句结束,变量空间释放;

普通全局变量:存放在全局区,若不初始话值为0,进程结束空间才会被释放,能被当前源文件或其他源文件使用,只是其他源文件使用的时候,记得使用 extern 修饰;
静态局部变量:存在全局区、不初始化内容为0、整个进程结束空间才被释放,只能在定义所在的复合语句中有效;

静态全局变量:存在全局区、不初始化内容为0、整个进程结束空间被释放,只能被当前源文件使用。

特性指针     引用
声明符号*&
初始化可选必须
重新绑定可以不可以
空值可以为 NULL不可以
内存管理需要手动管理由绑定变量生命周期管理
算术运算可以不可以

 

5.TCP和UDP区别?

特性TCPUDP
连接性面向连接无连接
可靠性可靠传输,确保数据完整和顺序不可靠传输,数据可能丢失、重复或乱序
数据传输方式面向流面向报文
速度较慢,提供可靠性保证较快,不保证可靠性
流量控制和拥塞控制有流量控制和拥塞控制无流量控制和拥塞控制
头部开销较大(20 字节)较小(8 字节)
使用场景文件传输、电子邮件、Web 浏览视频会议、在线游戏、直播、DNS 查询

 

6.堆和栈的区别?

特性堆(Heap)栈(Stack)
内存分配动态分布静态分配或自动分配
管理方式程序员显式管理编译器自动管理
速度较慢非常快
内存碎片容易产生不容易产生
生命周期程序员控制作用域决定
大小通常较大,受系统可用内存限制通常较小,受操作系统预设限制
适用场景动态数据结构(链表、树、图等)函数调用、局部变量、临时变量
内存泄漏容易发生不容易发生

7.链表和数组的区别?

答:①数组内存连续,链表内存不连续。

②数组访问速度比链表快。
③链表增加删除操作比数组快。

8.请说一下内存的栈区、静态区、堆区区别?

答:①栈区:存放局部变量,在执行函数的时候,局部变量的存储单元会在栈上创建,函数执行完自动释放。
②静态区:主要存放 static 静态变量、全局变量、常量,这些内存在编译的时候就已经分配好了内存,声明周期是整个程序的开始到结束。
③堆区:堆区由程序员手动申请与释放,程序在运行的时候使用内存分配函数(如 malloc)来申请,使用完后再使用(如 free)来释放堆中被程序申请使用的内存在程序主动释放前将一直有效。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值