嵌入式每日八股1.24
一个函数,在main和中断中都要同时调用,这个函数要做什么设计?
如果你希望在main
函数和中断处理函数中都调用同一个函数,你需要设计一个可重入函数。可重入函数是一种可以安全地在多个并发上下文中调用的函数。
可重入函数是指在多个任务(线程)同时调用时,不会产生竞态条件或数据污染的函数。
在C语言中,可重入函数具备以下特点:
-
不使用或修改全局变量:可重入函数不依赖于全局变量或共享状态,而是通过函数参数和局部变量来存储和处理数据。这样可以确保多个任务同时调用函数时不会相互干扰或出现数据冲突。
-
不依赖于静态数据结构:可重入函数避免使用静态数据结构(如静态数组、静态指针),因为这些结构在多个任务之间共享时可能会引发竞态条件。
-
本地数据的保存和恢复:可重入函数需要在函数内部临时保存和恢复局部变量的状态,以防止多个任务之间的互相影响。可以通过栈帧或函数调用时的参数传递来实现。
-
使用可重入的库函数:可重入函数还应该使用其他可重入函数或线程安全的库函数,以确保整个调用链路中不会出现竞态条件或数据冲突。
常见的可重入函数包括标准C库中的大多数函数,例如strlen
、memcpy
、sprintf
等。这些函数之所以可重入,是因为它们只操作传入的参数和本地变量,而不使用全局变量或静态数据结构。
需要注意的是,可重入函数并不一定是线程安全的。虽然可重入函数可以在多个任务之间共享,但在多线程环境下,需要采取额外的措施来保护共享资源,例如使用互斥锁或其他同步机制。
【嵌入式八股】精华版 https://www.nowcoder.com/creation/manager/columnDetail/0rOeJm
【嵌入式八股】一、语言篇https://www.nowcoder.com/creation/manager/columnDetail/mwQPeM
【嵌入式八股】二、计算机基础篇https://www.nowcoder.com/creation/manager/columnDetail/Mg5Lym
【嵌入式八股】三、硬件篇https://www.nowcoder.com/creation/manager/columnDetail/MRVDlM
【嵌入式八股】四、嵌入式Linux篇https://www.nowcoder.com/creation/manager/columnDetail/MQ2bb0