1.STM32中为什么得有看门狗,看门狗的作用是什么以及存在的意义?

    在STM32等嵌入式系统中,看门狗(Watchdog)是一种硬件计时器,它的存在主要是为了增强系统的可靠性。看门狗的作用是监视系统运行状态,当系统出现故障或陷入死循环时,看门狗能够自动重置系统,使其恢复到正常工作状态。

   具体来说,看门狗定时器会周期性地向处理器发送信号,如果处理器在设定的时间内没有对看门狗进行喂狗(即给看门狗计时器重新加载计数值),看门狗就会认为系统发生了故障,从而触发系统复位。这样可以防止由于软件漏洞或其他原因导致的系统死机或无响应情况,提高系统的稳定性和可靠性。

   因此,看门狗的存在意义在于保障嵌入式系统的稳定性和可靠性,防止系统因为意外情况而无法正常工作,特别是在一些对系统稳定性要求较高的场景下,如工业控制、汽车电子等领域。

2.互斥和同步的意义?

       互斥和同步是计算机科学中非常重要的概念,它们的存在意义在于确保多个并发执行的程序或线程能够正确、有序地共享资源,避免出现数据竞争和不确定的行为。

  1. 互斥(Mutual Exclusion):

    • 互斥用于确保在同一时刻只有一个线程访问共享资源,防止多个线程同时修改共享数据导致数据不一致性。通过使用锁(mutex)、信号量等机制来实现互斥,可以保证对共享资源的访问是排他的,从而避免竞争条件和冲突。
  2. 同步(Synchronization):

    • 同步用于协调多个线程之间的执行顺序,以确保它们按照预期的顺序进行操作。比如在生产者-消费者问题中,同步机制可以确保生产者不会向已满的缓冲区添加数据,消费者也不会从空的缓冲区读取数据,从而避免数据的丢失或错误。

      互斥和同步的意义在于帮助我们构建并发程序时,确保多个线程之间能够按照既定的规则共享资源和协作,避免出现竞争条件、死锁、活锁等问题,保证程序的正确性和可靠性。在多线程编程和并发控制中,合理地运用互斥和同步机制能够提高程序的安全性和性能,减少错误和异常情况的发生。

3.Freertos的任务通知是用来干什么?

      FreeRTOS的任务通知是一种用于任务间通信和同步的机制。它可以让任务之间相互通知和等待,以实现任务之间的协作和同步。

任务通知可以通过设置和清除标志位的方式来实现。当一个任务需要通知其他任务时,它可以使用任务通知将特定的标志位置位,表示某种事件或状态的改变。其他任务可以通过等待任务通知,并检查相应的标志位来知道事件或状态的改变,并做出相应的响应。

任务通知可以用于以下场景:

  1. 任务间同步:一个任务可以等待另一个任务完成某个操作,然后再继续执行。
  2. 事件通知:一个任务可以通知其他任务某个事件的发生,其他任务可以根据事件来执行相应的操作。
  3. 数据传递:任务可以通过任务通知传递数据,例如通过设置标志位表示某些数据已准备好并可被读取。

      任务通知是FreeRTOS中一种轻量级的通信机制,与其他同步原语(如信号量和消息队列)相比,它具有更低的开销和更高的实时性。

4.Linux进程和线程分别具有不同的同步方式。下面是它们的常见同步方式?

  1. 进程同步方式:

    • 信号量(semaphore):进程可以使用信号量来同步对共享资源的访问。通过对信号量进行等待(wait)和发送(post)操作,进程可以实现互斥访问和同步。
    • 互斥锁(mutex):进程可以使用互斥锁来保护临界区,确保同时只有一个进程能够进入临界区执行代码。
    • 条件变量(condition variable):进程可以使用条件变量来实现进程间的等待和通知机制,用于在特定条件下进行线程的阻塞和唤醒。
  2. 线程同步方式:

    • 互斥锁(mutex):线程可以使用互斥锁来保护临界区,确保同时只有一个线程能够进入临界区执行代码。
    • 条件变量(condition variable):线程可以使用条件变量来实现线程间的等待和通知机制,用于在特定条件下进行线程的阻塞和唤醒。
    • 屏障(barrier):多个线程可以通过屏障来同步它们的执行。当所有线程都达到屏障点时,它们才能继续执行后续的代码。

       需要注意的是,进程间的同步方式可以用于线程间的同步,因为线程是在同一进程空间中运行的。但是线程间的同步方式不能用于跨进程的同步,因为不同进程之间的地址空间是独立的。在跨进程同步的情况下,可以使用进程间通信(IPC)机制,如管道、消息队列、共享内存等。

5.STM32什么应用场景会用到中断? 

      STM32微控制器的中断机制在很多应用场景下都非常有用。以下是一些常见的应用场景:

  1. 外部输入事件处理:当需要处理外部输入事件时,如按键、触摸屏、传感器等,可以使用外部中断。当外部事件触发时,中断会立即响应,从而及时处理事件。

  2. 定时器应用:定时器是STM32微控制器中常见的外设,可以用于定时任务、周期性任务和精确时间测量。通过设置定时器中断,可以在指定时间间隔内触发中断,并执行相应的操作。

  3. 串口通信:在串口通信中,接收和发送数据通常使用中断驱动的方式。当接收到新数据或发送缓冲区为空时,中断会触发,通过中断服务程序进行数据接收和发送的处理。

  4. 外设状态监测:某些外设(如ADC、DMA等)可以通过中断方式进行状态监测。当采样完成、数据传输完成等事件发生时,中断可以被触发,以便及时处理采集到的数据或启动下一次传输。

  5. 实时任务处理:在实时系统中,某些关键任务需要及时响应和处理。通过设置高优先级的中断服务程序,可以保证这些任务得到及时处理,提高系统的实时性。

       这只是一些常见的应用场景,实际上,STM32中断机制非常灵活,可以根据具体需求进行配置和使用。根据不同的应用,中断可以在多个外设之间进行优先级管理和协同工作,实现复杂的系统功能。

 

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐