杰理科技 - 嵌入式软件工程师 - 笔试
❗❗如果本文对您有帮助,请不要吝啬您的评论、点赞、收藏与小花,这对我非常重要!谢谢!❗❗
本文所涉及的题目均为基于个人学习和理解重新表述的内容,仅供学习交流之用,不代表任何实际考试题目。如有雷同,纯属巧合。
岗位:嵌入式软件工程师
题型:11 道问答题,60 分钟,总分 110 分
1、问答题
1.1
简述在嵌入式学习中遇到的一个问题(可多个)及处理过程?
解答(抛砖引玉,非标准答案):
问题:
我自己写 RTOS 内核的过程中,发现任务调度不正常,会在心跳函数中出现卡死现象
处理过程:
- 首先尝试使用 Keil 软件的 Debug 模式定位发生错误的程序
- 发现程序会卡在
HardFault_Handler
中断处理函数(非法内存访问、堆栈溢出或者除零等操作)- 尝试打断点进定位发生错误的程序
- 经过逐步排查我发现一旦执行 RTOS 的心跳函数就会触发
HardFault
中断- 逐行查看程序后发现可能访问了不该访问的地址
- 聚焦到就绪链表数组的下标上
- 利用 printf 打印访问时的数组下标,发现不正常
- 思考不正常的原因,先创建任务再启动 RTOS 心跳
- 将启动 RTOS 心跳的定时器移动到启动 RTOS 调度器函数中
1.2
链表节点声明如下:
struct ListNode {
int num;
float score;
struct ListNode* m_pNext;
};
请补充以下函数实现链表反转 ListNode* ReverseList(struct ListNode* pHead)
解答:
struct ListNode* ReverseList(struct ListNode* pHead)
{
struct ListNode* prev = NULL;
struct ListNode* current = pHead;
struct ListNode* next = NULL;
while (current != NULL) {
next = current->m_pNext;
current->m_pNext = prev;
prev = current;
current = next;
}
return prev;
}
1.3
在一个 2ms 的定时器里,请写一个函数可以控制灯实现以下几种状态
- 亮 200ms,灭 800ms
- 亮 200ms,灭 200ms
- 亮 500ms,灭 4.5s
解答:
#include <stido.h>
static int count = 0;
static int mode = 0;
static int state = 0;
void setLightState(bool state) {
// 控制灯的亮灭,state为true时亮,false时灭
}
void my_2ms_timer() {
count++;
switch (mode) {
// 模式0
case 0:
if (state == 0 && count >= 400) {
setLightState(true);
state = 1;
count = 0;
} else if (state == 1 && count >= 100) {
setLightState(false);
state = 0;
count = 0;
}
break;
// 模式1
case 1:
if (state == 0 && count >= 100) {
setLightState(true);
state = 1;
count
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
嵌入式软件名企笔/面试真题合集 文章被收录于专栏
欢迎来到我的专栏,在这里,我将整理并分享2024年各大企业的真实笔试/面试真题,帮助求职者了解考试趋势和嵌入式常见考点。无论你是准备面试,还是希望提升自己的专业知识,这里都能为你提供宝贵的参考和学习资源。