如果一个任务正在运行某个公共函数时(如 Printf), 被另一个高优先级的任务抢占,那么当这个高优先级的任务也调用同一个公共函数时, 极有可能破坏原任务的数据。因为两个任务可能共用一套数据。为了防止这种情况发生, 常采用两种措施:可重入设计和互斥调用。
可重入函数中所有的变量均为局部变量, 局部变量在调用时临时分配空间, 所以不同的任务在不同的时刻调用该函数时, 它们的同一个局部变量所分配的存储空间并不相同(任务私有栈中), 互不干扰。 另外, 如果可重入函数调用了其他函数, 则这些被调用的函数也必须是可重入函数。
互斥调用稍后说明。 |
|