整理下近期遇到的笔试

1.问题:嵌入式系统中,_____机制用于管理内存的动态分配与释放。

答案:

  • 内存管理单元(MMU):在复杂的嵌入式系统中,MMU 可以提供虚拟内存支持,实现内存的动态分配、保护和映射。

  • 内存保护单元(MPU):在一些对实时性要求较高的嵌入式系统中,MPU 用于提供内存保护,但通常不涉及虚拟内存管理。

  • 动态内存分配器:在一些简单的嵌入式系统中,可能使用特定的动态内存分配算法(如首次适应、最佳适应等)来管理内存的分配与释放

2.0XAD转换成十进制的数为___;

答案:A=10,在高16位;D=13,在低16位

10*16+13=160+13=163

3.在RTOS中,任务间通信的常见方法?

答案:队列,信号量,事件标志组,邮箱,互斥量

4.C语言中,堆栈的特点是____;队列的特点是_____

答案:后进先出LIFO;先进先出FIFO

例题:

单片机系统出现中断时执行
PUSH R1
PUSH R7
PUSH R2

那么这几个寄存器出栈的顺序是?

答案: R2;R7;R1

5.机器人的运动学是研究机器人末端执行器___和___与关节空间之间的关系?

答案:位置;姿态

6.软件设计阶段的输出主要是___;

答案:设计规格说明书(或称软件设计文档)。

7.对于循环队列中,队头指针和队尾指针之间的关系;

答案:队头指针可以大于队尾指针,也可以小于队尾指针(当入队或者出队数量超过当前空余位置或者当前数量时,就会发送回绕的现象。入队超过队列长度会覆盖原有的数据)

8.下面哪种存储器中的内容只能读出,不能改写?

  • ROM(Read-Only Memory):出厂后内容固定,无法改写,只能读取。

  • PROM(Programmable Read-Only Memory):可一次性编程,但写完后也不能再改。

  • EPROM:可用紫外线擦除后重写。

  • EEPROM:可电擦除、反复重写。

  • 可以从名字简单判断:R = read  ;O =only ; P=可编程 ; E=擦除

9.MDI方式是指什么?

答案:手动输入方式 ---MDI = Manual Data Input(手动数据输入)

10:那个不是嵌入式操作系统的特点?

答案:交互性

交互性:丰富的图形界面、用户输入

嵌入式系统通常追求:占用资源少,高可靠性,低成本

11:ARM指令中LDR,STR,MOV,ADD表示什么含义?

答案:LDR(Load Register) 把内存数据加载到寄存器

STR(Store Register) 把寄存器数据加载到内存中

MOV:把数或者另外一个寄存器值赋值给目标寄存器 

         MOV R0, #5      ; R0 ← 5

ADD:把两个操作数相加 ADD R0, R1, R2    ; R0 ← R1 + R2

12:C语言中长整型long在内存中占___字节

  答案:4字节----如果没有指明是32bit还是64bit,那就默认为32bit  4字节

13:假设我们已经在 ImageNet 数据集(物体识别)上训练好了一个卷积神经网络。然后给这张卷积神经网络输入一张全白的图片。对于这个输入的输出结果,任何种类的物体的可能性都是一样的,对吗?

答案:不对

全白输入对所有神经元都是相同的常数激活,经过各层权重后,网络输出的 logits/scores 并不相等,因此 softmax 后的类别概率不会是均匀分布,即“任何种类的可能性都一样”这一说法不成立。

14:字符串从中间翻转

// 函数:翻转字符串中间部分
void reverse_middle(char *str, int left_len, int right_len) {
    int len = strlen(str); //读取字符串长度
    
    // 计算中间部分的起始和结束索引
    int start = left_len;
    int end = len - right_len - 1;  //需要翻转的个数

    // 边界检查
    if (start >= end) return;  // 中间部分不存在或长度为0

    // 翻转中间部分
    while (start < end) {		//while判断 只有当()里面为真,才会执行,否则跳过
        char temp = str[start];
        str[start] = str[end];
        str[end] = temp;
        start++;
        end--;
    }
}



用字符数组 char str[] = "ABCDEFGH"; 举例,调用 reverse_middle(str, 2, 2); 即跳过左边 2 个、右边 2 个,变成 "ab fedc gh"  

思路:先读取字符串长度--strlen函数

需要做边界检查

判断条件是 start < end ;说明已经开始重叠了

每执行一次啊是start ++,end---;想中间靠拢

15:移除数组中的重复元素---题目:给定有序数组 nums,原地删除重复元素,返回新长度。


#include <stdio.h>

int removeDuplicates (int *nums ,int numsSize)
{
	if(numsSize == 0) return 0;
	int i = 0;
	for(int j=1;j<numsSize;j++)
	{
		if(nums[j] != nums[i]){
			i++;
			nums[i] = nums[j] ; //以i为最后结果的存储情况
		}
	}
	
	return i+1;
}

思路:双指针的方法----慢指针i,用来保存最后需要输出的数,及不重复个数和存放在数组中的地址

快指针:j  快指针 - 遍历整个数组

对比的思路:有序数组,不担心后面会小于前面的情况

原始: [1, 1, 2, 2, 3]
      i  j  → 跳过(相同)
      i     j → 发现新元素2
         i  j → 把2放在i位置
         i     j → 跳过(相同)
         i        j → 发现新元素3
            i     j → 把3放在i位置

相同跳过:i不自加,j自加到新的位置

如果不相同:i自加,并将j当前的值赋值给i,j++

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值