牧原二面(技术面)【C语言问题偏多】

牧原共三面,二面为技术面,应聘的岗位为屠宰事业部嵌入式软件方向,主要问到项目经历和C语言基础知识偏多

目录

1.简述一下项目中用到的SPI、UART通信协议

2.为什么用电机模块,电机的工作原理

3.什么是指针,有什么用

4.指针多大,指针偏移量和什么有关

5.指针函数和函数指针的作用和区别

6.32位机器,结构体指针中成员有char、int、short各一个,指针步长为多少

7.#include后面使用尖括号<>和双引号""的区别

8.结构体和联合体的作用和区别

9.gcc编译过程

10.堆和栈的作用和区别

11.进程和线程的作用和区别、包含关系

12.GPIO的输入输出模式

13.什么是中断,中断的过程和作用

14.什么是看门狗,看门狗的过程和作用

15.STM32最小系统板包括什么部分

16.const和static的作用和区别

17.如果有1000万预算,但是项目一直没有实质起色和成果,作为项目负责人你会怎么做?

18.如果项目初期攻坚内容比较复杂,公司也没有奖金支持,你会怎么缓解员工压力和焦躁?


1.简述一下项目中用到的SPI、UART通信协议

一文吃透常见通讯协议(SPI、IIC、UART、CAN)[面试重点]-CSDN博客

2.为什么用电机模块,电机的工作原理

步进电机是一种将电脉冲信号转换成相应角位移或线位移的电动机。每输入一个脉冲信号,转子就转动一个角度或前进一步,其输出的角位移或线位移与输入的脉冲数成正比,转速与脉冲频率成正比。

通俗易懂的说:就是给不同的项轮流通电,在电磁感应的作用下,每次产生一个很小的角位移,连贯起来就带动了电机的转动,从而驱动负载。
STM32驱动步进电机(原理、程序、解决电机只震动不转动问题)_stm32步进电机-CSDN博客

3.什么是指针,有什么用

在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址的内存单元。

4.指针多大,指针偏移量和什么有关

(C语言)指针初识(1)——指针概念及指针类型_指针类型是什么意思-CSDN博客

1、指针就是地址,是内存中一个最小单元的编号

2、口语中的指针其实指的是指针变量,是用来存放内存地址的变量

3、指针变量里面存放的是地址,而通过这个地址,就可以找到一个内存单元

指针的大小:在32位平台是4个字节,64位平台是8个字节(x86-->32位环境,x64-->64位环境)

指针的地址偏移量和保存这个地址的指针类型有关。
指针的类型占有的内存空间,就是 指针加1 的地址偏移量。

5.指针函数和函数指针的作用和区别

函数指针和指针函数用法和区别-CSDN博客

指针函数,简单的来说,就是一个返回指针的函数,其本质是一个函数,而该函数的返回值是一个指针。

函数指针,其本质是一个指针变量,该指针指向这个函数。总结来说,函数指针就是指向函数的指针。

定义不同
指针函数本质是一个函数,其返回值为指针。
函数指针本质是一个指针,其指向一个函数。

写法不同
指针函数:int* fun(int x,int y);
函数指针:int (*fun)(int x,int y);
可以简单粗暴的理解为,指针函数的*是属于数据类型的,而函数指针的星号是属于函数名的。
再简单一点,可以这样辨别两者:函数名带括号的就是函数指针,否则就是指针函数。

和此问题类似的还有指针数组和数组指针的问题:

指针数组与数组指针详解_指针数组和数组指针-CSDN博客

6.32位机器,结构体指针中成员有char、int、short各一个,指针步长为多少

C语言各变量类型占字节数_c语言各种变量所占字节_大山很山的博客-CSDN博客

7.#include后面使用尖括号<>和双引号""的区别

#include使用引号“”和尖括号<>的区别?-CSDN博客

系统自带的头文件用尖括号括起来,这样编译器会在系统文件目录下查找。 

用户自定义的文件用双引号括起来,编译器首先会在用户目录下查找,然后在到C++安装目录(比如VC中可以指定和修改库文件查找路径,Unix和Linux中可以通过环境变量来设定)中查找,最后在系统文件中查找。

#include "文件名"命令则是先在当前文件所在的目录搜索是否有符合的文件,如果没有再到Include文件夹里去找对应的文件。因此,无论这个文件是C++提供的还是自己编写的,使用#include "文件名"命令一定是正确的。

8.结构体和联合体的作用和区别

结构体(struct)和联合体(union)的区别_结构体和联合体的区别-CSDN博客

结构体struct:各成员各自拥有自己的内存,各自使用互不干涉,同时存在的,遵循内存对齐原则。一个struct变量的总长度等于所有成员的长度之和。

联合体union:各成员共用一块内存空间,并且同时只有一个成员可以得到这块内存的使用权(对该内存的读写),各变量共用一个内存首地址。因而,联合体比结构体更节约内存。一个union变量的总长度至少能容纳最大的成员变量,而且要满足是所有成员变量类型大小的整数倍。不允许对联合体变量名直接赋值或其他操作。

关于结构体大小的计算

9.gcc编译过程

gcc编译的四个过程:预处理、编译、汇编、链接
gcc在执行编译工作的时,分为以下四个过程:
1.预处理,生成.i的文件
2.将预处理后的文件转换成汇编语言,生成.s文件
3.汇编变为目标代码(机器代码),生成.o的文件
4.连接目标代码,生成可执行程序

10.堆和栈的作用和区别

详讲堆和栈的区别基础应用篇_堆栈什么时候下使用-CSDN博客

(1)管理方式不同。栈由操作系统自动分配释放,无需我们手动控制;堆的申请和释放工作由程序员控制,容易产生内存泄漏;

(2)空间大小不同。每个进程拥有的栈的大小要远远小于堆的大小。理论上,程序员可申请的堆大小为虚拟内存的大小,进程栈的大小 64bits 的 Windows 默认 1MB,64bits 的 Linux 默认 10MB;

(3)生长方向不同。堆的生长方向向上,内存地址由低到高;栈的生长方向向下,内存地址由高到低。

(4)分配方式不同。堆都是动态分配的,没有静态分配的堆。栈有2种分配方式:静态分配和动态分配。静态分配是由操作系统完成的,比如局部变量的分配。动态分配由alloca函数进行分配,但是栈的动态分配和堆是不同的,他的动态分配是由操作系统进行释放,无需我们手工实现。

(5)分配效率不同。栈由操作系统自动分配,会在硬件层级对栈提供支持:分配专门的寄存器存放栈的地址,压栈出栈都有专门的指令执行,这就决定了栈的效率比较高。堆则是由C/C++提供的库函数或运算符来完成申请与管理,实现机制较为复杂,频繁的内存申请容易产生内存碎片。显然,堆的效率比栈要低得多。

(6)存放内容不同。栈存放的内容,函数返回地址、相关参数、局部变量和寄存器内容等。当主函数调用另外一个函数的时候,要对当前函数执行断点进行保存,需要使用栈来实现,首先入栈的是主函数下一条语句的地址,即扩展指针寄存器的内容(EIP),然后是当前栈帧的底部地址,即扩展基址指针寄存器内容(EBP),再然后是被调函数的实参等,一般情况下是按照从右向左的顺序入栈,之后是被调函数的局部变量,注意静态变量是存放在数据段或者BSS段,是不入栈的。出栈的顺序正好相反,最终栈顶指向主函数下一条语句的地址,主程序又从该地址开始执行。堆,一般情况堆顶使用一个字节的空间来存放堆的大小,而堆中具体存放内容是由程序员来填充的。

11.进程和线程的作用和区别、包含关系

进程和线程的区别(超详细)-CSDN博客

进程:是一个在内存中运行的应用程序。每个进程都有自己独立的一块内存空间,一个进程可以有多个线程,比如在Windows系统中,一个运行的xx.exe就是一个进程。

线程:是进程中的一个执行任务(控制单元),负责当前进程中程序的执行。一个进程至少有一个线程,一个进程可以运行多个线程,多个线程可共享数据。

进程包含线程。

12.GPIO的输入输出模式

STM32入门-GPIO端口的八种工作模式-CSDN博客

13.什么是中断,中断的过程和作用

什么是中断:中断是指CPU在执行当前程序时系统出现了某种状况,使得CPU必须停止当前程序,而去执行另一段程序来处理的出现的紧急事务,处理结束后CPU再返回到原先暂停的程序继续执行,这个过程就称为中断。

中断的作用:使得计算机系统具备应对对处理突发事件的能力,使其能及时响应紧急事件提高处理器效率,如果没有中断系统,CPU就只能按照原来的程序编写的先后顺序,对各个外设进行查询和处理,即轮询工作方式,轮询方法貌似公平,但实际工作效率却很低。

中断的过程:
1. 保存现场
2. 执行具体的中断服务程序
3. 从中断服务返回
4. 恢复现场

14.什么是看门狗,看门狗的过程和作用

初学STM32之看门狗_stm32 watchdog_好运小枣的博客-CSDN博客

单片机在工作中常常会受到来自外界电磁场的干扰,造成程序跑飞,而陷入死循环,程序的正常运行被打断,使得系统无法正常工作,造成整个系统陷入停滞状态。所以为了对单片运行状态进行实时监测,便产生了一种专门用于检测单片机程序运行状态的模块或者芯片,俗称看门狗(watchdog)看门狗的作用就是在程序跑飞的情况下,系统复位,程序重新执行。

嵌入式系统的软件看门狗和硬件看门狗_软件看门狗 程序框图-CSDN博客

15.STM32最小系统板包括什么部分

主要由单片机、晶振电路、复位电路三部分构成。

晶振电路:主时钟晶振、RTC时钟晶振

外围电路:+5V转3.3V稳压电路、 状态指示灯、 SWD烧录接口、USB电源接口

16.const和static的作用和区别

【精选】static和const的作用与区别_const static-CSDN博客

const定义的常量在超出其作用域之后其空间会被释放,而static定义的静态变量在函数执行后不会释放其存储空间。

17.如果有1000万预算,但是项目一直没有实质起色和成果,作为项目负责人你会怎么做?

18.如果项目初期攻坚内容比较复杂,公司也没有奖金支持,你会怎么缓解员工压力和焦躁?

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值