同步、互斥、阻塞

发布时间:2024-07-31  

实现

使驱动程序只能同时被一个应用程序操作。

   

幕后:m+1

①把变量m加载到寄存器

②执行寄存器运算,并把运算结果保存到

③把运算结果写回内存

 

单任务系统

当应用程序open某个驱动时,只需使用一个全局变量标记,再有其他应用程序打开这个驱动时,则直接退出(打开失败)。

   

多任务系统

  1. 由于修改变量的值,并不是一步到位的,而是需要使用多个指令,才能完成最终的操作;

 

当app1执行完①(未真正修改到存储于内存的变量),cpu紧接着执行app2部分的指令,将导致两个app读到的f_open值是一样的(设初次打开),那么将导致驱动在同一时间内,并不是被唯一的app操作!

 

在多任务系统中,实现使驱动程序只能同时被一个应用程序操作的方法:原子操作、信号量

1. 原子操作

原子操作指的是在执行过程中不会被别的代码路径所中断的操作。

常用原子操作函数举例:

atomic_t v = ATOMIC_INIT(0); //定义原子变量v并初始化为0

atomic_read(atomic_t *v); //返回原子变量的值

void atomic_inc(atomic_t *v); //原子变量增加1

void atomic_dec(atomic_t *v); //原子变量减少1

int atomic_dec_and_test(atomic_t *v); //自减操作后测试其是否为0,为0则返回true,否则返回false。

   

2. 信号量

信号量(semaphore)是用于保护临界区的一种常用方法,只有得到信号量的进程才能执行临界区代码。

当获取不到信号量时,进程进入休眠等待状态。

   

定义信号量

struct semaphore sem;

初始化信号量

void sema_init (struct semaphore *sem, int val);

void init_MUTEX(struct semaphore *sem);//初始化为0

   

static DECLARE_MUTEX(button_lock); //定义互斥锁

   

获得信号量

void down(struct semaphore * sem);

int down_interruptible(struct semaphore * sem);

int down_trylock(struct semaphore * sem);

释放信号量

void up(struct semaphore * sem);

   

3. 阻塞

阻塞操作

是指在执行设备操作时若不能获得资源则挂起进程,直到满足可操作的条件后再进行操作。

被挂起的进程进入休眠状态,被从调度器的运行队列移走,直到等待的条件被满足。

   

非阻塞操作


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    双电机驱动的结构及工作原理;双电机驱动是一个坐标轴提供了两种控制方式,串联控制和同步控制。串联控制仅对主电机轴执行位置控制,对副电机轴仅执行转矩控制,因此这种控制也称转矩串联控制。(简易)同步控制......
    如何实现多伺服电机同步控制?;在印刷机械行业中,多电机的同步控制是一个非常重要的问题。由于印刷产品的特殊工艺要求,尤其是对于多色印刷,为了保证印刷套印精度(一般≤0.05mm),要求......
    的,那么就可以在该变频器控制的轴上添加同步编码器,以此当作输入轴:同步编码器轴。 再比如另一种情况,假设三菱PLC模块QD77MS控制的16轴需要进行同步控制,但是主轴是来自其他模块控制......
    压、VIN电源引脚最高可耐受60 V工作电压,同时降低额外的系统电源电压需求。ADP1972集成诸如精确使能、引脚可选降压/升压工作模式、带可编程相移的内部和外部同步控制、可编程最大占空比,以及......
    部分运用美国国家仪器公司的LabVIEW图形化编程软件,仪器驱动器完成对某一特定仪器控制与通信的软件程序,并由计算机进行数据的存储和分析。 2.3 系统功能 电子测量工作站以系统同步控制模块为电路核心,控制各个仪器和功能模块同步......
    上更加灵活,而且可以实现非常精准的位置控制,但是步进电机的转速和输出功率相对较低,也需要较高的电源电压和电流来实现其最大输出。   步进电机通常有两种控制方式:全步控制和微步控制。全步控制是通过给定定子上线圈的电流方向来控制......
    CODESYS可视化案例—双轴位置同步控制;在运动控制过程中,有时需要控制两个运动轴在某个特定位置进行调整,最终主从轴在另外一个特定的位置达到运动的同步。 这样的控制......
    ,而控制SDRAM属于同步控制同步和异步的区别是同步方式需要一个专门的时钟控制引脚。 FMC配置中未用到引脚均可以继续用作通用I/O模式或者其它复用功能,仅需不配置FMC复用即可。 STM32H7驱动......
    基于labview平台和PID模拟控制器实现双电机同步控制系统的设计;1.引言 颤振试飞历来是飞机试飞最后关注的课题,因为它直接影响飞行安全。在颤振试飞实验中,颤振......
    步进电机控制方法、原理和功率计算;  步进电机通常有两种控制方式:全步控制和微步控制。全步控制是通过给定定子上线圈的电流方向来控制步进电机的运动,从而让转子逐步旋转。微步控制则是在全步控制......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>