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++

3152

被折叠的 条评论
为什么被折叠?



