首页 > 其他分享 >嵌入式面试笔试刷题(day4)

嵌入式面试笔试刷题(day4)

时间:2023-08-05 10:02:12浏览次数:39  
标签:调用 函数 中断 day4 嵌入式 处理 处理程序 volatile 刷题

(文章目录)


前言

本篇文章继续为大家分享笔试和面试中的那些事。

一、中断的概念

中断是计算机系统中的一种机制,用于处理来自外部设备或内部事件的异步事件。当某个事件发生时,它会打断正在执行的程序,将控制权转移到特定的中断处理程序,然后在处理完中断后恢复原来的程序执行。

二、中断的优缺点是什么

1.优点

1.异步处理:中断机制允许外部设备或内部事件以异步的方式中断正在执行的程序。这使得计算机系统能够在等待事件发生的同时继续执行其他任务,提高了系统的效率和响应性。

2.实时响应:通过中断机制,系统可以立即响应重要的事件,如外部设备的输入、时钟中断等。这使得实时系统能够及时处理关键任务,保证任务的及时性和可靠性。

3.设备独立性:通过中断机制,不同的外部设备可以通过中断请求与系统进行通信,而不需要直接干预主处理器的操作。这为系统提供了设备独立性,使得系统更容易扩展和适应不同的硬件设备。

4.协作处理:中断机制允许系统在中断处理程序中执行操作,以响应和处理中断事件。这为系统提供了协作处理的能力,可以进行复杂的处理和决策,而不仅仅是简单的中断服务。

2.缺点

1.上下文切换开销:当中断发生时,系统需要保存和恢复当前执行现场(上下文)的信息,以便于中断处理程序的执行。这涉及到寄存器的保存和恢复、堆栈的切换等操作,会引入一定的开销和延迟。

2.系统复杂性:中断机制增加了系统的复杂性,需要设备驱动程序和中断处理程序等额外的软件支持。正确地管理和协调中断处理程序需要仔细的设计和调度策略,以避免冲突和资源竞争。

3.中断响应时间的不确定性:中断的异步性使得中断响应的时间具有一定的不确定性。当系统负荷过重或出现多个中断同时发生时,可能会导致中断响应时间的延迟,影响系统的实时性能。

三、软中断的概念什么时候用软中断

1.概念

软中断(Software Interrupt)是一种由软件指令(而非外部设备或内部事件)触发的中断。它是通过软件生成一个特定中断号来模拟硬件中断的方式。软中断通常用于内核与用户态之间的通信和系统调用。

2.什么时候用软中断

1.系统调用:用户程序需要访问操作系统提供的特权级功能时,可以通过软中断触发系统调用。用户程序通过指令将参数传递到指定的寄存器中,并执行触发软中断的指令。操作系统会在中断处理程序中对系统调用进行处理,并返回结果给用户程序。

2.异常处理:当发生异常情况(如除零错误、无效指令、内存访问错误等)时,可以通过软中断将控制权转移到异常处理程序中。异常处理程序会根据异常类型进行相应的处理,如错误报告、异常恢复等。

3.任务切换:在多任务操作系统中,任务切换可以通过软中断来实现。当系统调度器决定切换到另一个任务时,它可以通过触发软中断将控制权转移到调度器的中断处理程序中,以执行任务切换的相关操作。

四、软中断和函数调用的区别

1.实现机制:软中断是通过特定的中断指令(如int指令)来触发的,它会导致处理器从当前执行流中转移到中断处理程序中。而函数调用是通过普通的过程调用机制来实现的,调用者将控制权传递给被调用的函数,并等待函数执行完毕后再继续执行。

2.上下文切换:软中断的触发会导致当前执行流的切换,控制权转移到中断处理程序,中断处理程序执行完毕后再返回到原来的执行流中。这涉及了上下文的保存和恢复。而函数调用是在当前执行流中进行的,不涉及上下文切换。

3.用途:软中断通常用于操作系统内部的通信机制,如系统调用、异常处理、任务切换等。它们提供了对特权操作系统功能的访问。而函数调用通常用于模块化程序设计,将代码封装成可重用的功能单元进行调用。

4.权限级别:软中断常用于用户态到内核态的转换,需要访问操作系统的特权级功能。函数调用通常在同一特权级内部进行。

5.异步性:软中断可以作为异步事件的处理机制,因为软中断的触发是由外部事件或条件决定的。而函数调用通常是同步的,由程序的控制流进行决定。

五、一个函数,在main和中断中都要同时调用,这个函数要做什么设计

如果一个函数需要在主程序(main)和中断中都被调用,它应该被设计为一个可重入函数(reentrant function)。可重入函数是一种可以安全地被多个任务或中断同时调用的函数。

1.共享数据:确保函数内部使用的共享数据是可重入的。避免使用全局变量或静态变量,在函数内部使用局部变量或函数参数进行操作。

2.临界区保护:如果函数内部存在临界区(即在执行期间必须保证不被中断),需要使用合适的同步机制,例如中断屏蔽、互斥锁或原子操作等,来保护临界区的操作。

3.栈管理:确保函数在调用过程中正确地管理栈空间。在多任务或多中断环境中,每个任务或中断都有自己的栈空间,因此函数的递归调用或栈相关操作需谨慎处理,以防止栈溢出或混乱。

4.中断处理:考虑函数在中断上下文中的行为。中断上下文通常具有严格的时间限制和资源限制,因此在处理中断时应尽量减少对资源的占用和耗时操作。

5.可重入性测试:对设计的函数进行测试,模拟多个任务或中断同时调用的情况,确保函数能够正确、可靠地处理并产生预期的结果。

六、volatile 关键字常用例子

1.多线程共享变量:当多个线程共享同一个变量时,可以使用 volatile 关键字来确保对变量的修改在不同线程中是可见的。例如,在一个多线程的计数器中,可以使用 volatile 关键字修饰计数器变量,以确保各个线程能够及时获取到最新的计数值。

volatile int counter = 0;

2.中断标志:在中断处理中,可以使用 volatile 关键字来标记中断状态,以便其他代码可以及时响应中断请求。例如,在一个线程中设置中断标志,并在另一个线程中根据该标志来退出循环。

volatile boolean interruptFlag = false;
// ...

// 设置中断标志
interruptFlag = true;

// 在另一个线程中检查中断标志
while (!interruptFlag) {
    // 循环执行某些操作
}

3.访问硬件寄存器:在与硬件进行交互的代码中,可以使用 volatile 关键字来标记对寄存器的操作,以确保每次对寄存器的读写是实时可见的。这可以避免编译器过度优化或重排对寄存器的访问。

volatile uint32_t* hardwareRegister = (uint32_t*)0x12345678;
// ...

// 读取寄存器的值
uint32_t value = *hardwareRegister;

// 写入寄存器的值
*hardwareRegister = 0xABCD;

总结

本篇文章就讲解到这里,下篇文章继续讲解。

标签:调用,函数,中断,day4,嵌入式,处理,处理程序,volatile,刷题
From: https://blog.51cto.com/u_16153875/6973495

相关文章

  • 我的嵌入式Linux相关文章
    crosscompilerToolchain(交叉编译工具链)的建立构造嵌入式Linux(一):Kernel编译构造嵌入式Linux(二):vmlinux、vmlinuz和bzImage建立Host和Target的MTD工具[摘]嵌入式linux系统的开启Moblin:kernel编译和rpm打包(一):更换kernelMoblin:kernel编译和rpm打包(二):RPM打包X86的bootloader(一):......
  • [刷题笔记] CF607B Zuma
    Problem貌似还是某场cfdiv1的BDescription一个数组\(a\),每次可以消掉其中的一个回文串,求至少经过几次操作能消掉字符串\(s\)?Solution我们发现本题满足大区间包含小区间的特性,即通过小区间可以推出大区间,符合区间dp。考虑状态转移,枚举一个区间\(l,r\),如果\(a_l=a_r\)则答案......
  • [刷题笔记][算法模型总结] Luogu P1880 [NOI1995] 石子合并 || 区间dp之合并石子模型
    ProblemSolution本题还有一个弱化版,见LuoguP1775我们发现本题和弱化版唯一区别就是本题有环。我们先将弱化版的内容。EasyversionDescription弱化版是给定了好多堆石子,每相邻的两堆可以合并成一个大堆,每次合并会产生两个石头重量和的价值,最后会将若干堆石子合并为一堆。......
  • [刷题笔记] CF1132F Clear the String & [CQOI2007] 涂色
    Problem1Problem2双倍经验qwqDescription初始时数组为空,每次可以选择一个区间\(l-r\)将其赋为同一个值,赋的值可以覆盖,给定数组的目标形式,求至少经过多少次操作使得空数组变成目标形式。Solution我们发现每次选择一个区间,大区间包含小区间,小区间可以推到大区间。因此考虑区间......
  • 嵌入式面试刷题(day3)
    (文章目录)前言本篇文章我们继续讲解嵌入式面试刷题,给大家继续分享嵌入式中的面试笔试经验和技巧。一、怎么判断两个float是否相同在C语言中,可以使用以下代码来比较两个float类型的数据是否相同:#include<stdio.h>#include<math.h>intmain(){floata=1.234;......
  • 邹邹-Day4
    1.笔记PTEReadingandwriting   多选题  备考时间紧张可以放弃 选错倒扣分建议不是特别确定 就单选   正确率60--70%  RO FIB MC       找文章传达的主要内容         作者给到的信号 ......
  • 嵌入式与物联网:连接现实与数字世界的纽带
    随着科技的发展和智能化的进程,嵌入式系统和物联网技术逐渐融入到我们的日常生活中,成为连接现实世界和数字世界的重要纽带。本文将探讨嵌入式系统与物联网之间的关系,并通过关系图展示二者的紧密联系。一、嵌入式系统的基本概念嵌入式系统是一种特殊的计算机系统,通常被嵌入到其他设备......
  • 【备考实战】计算机二级Python刷题【一】
    时间报名时间:2023-8-31考试时间:2023-9-23第1题计算机完成一条指令所花费的时间称为一个A.执行时序B.存取周期C.执行速度D.指令周期参考解析参考解析:D[解析]一般把计算机完成一条指令所花费的时间称为-一个指令周期。指令周期越短,指令执行就越快。本题答案为D选项......
  • 嵌入式教程_电机控制:2-24 步进电机控制实验
    2-24步进电机控制实验实验目的本节视频的目的是掌握GPIO模拟输出PWM的方法,学习步进电机的控制原理,并实现步进电机的控制。实验原理先来看一下硬件原理图,可看到控制步进电机的管脚分别为:GPIO6[2]、GPIO6[3]、GPIO6[4]和GPIO1[15]。使用的是一路四相五线步进电机,使用的电机驱动芯片......
  • 数组双指针技巧汇总 [labuladong-刷题打卡 day2]
    https://labuladong.github.io/algo/challenge/ji-chu-tiao-zhan/day02/快慢指针26.删除有序数组中的重复项两个指针分别维护符合条件数组和待删除数组,当快指针移动时将符合条件元素插入已完成数组后即可。通过这两天对双指针的练习,可以发现很多双指针算法其实也是一种迭代算......