我正在用C开发一个相当复杂的微控制器应用程序,我对如何在不同任务/线程之间“链接”我的共享数据而不耦合它们有一些疑问。
到目前为止,我一直使用时间片调度程序来运行我的应用程序,因此不需要数据保护。但我想让应用程序正确,我想让它为以后的多线程操作系统做好准备。
我试图通过使用与我正在使用的实际系统完全不同的系统来简化我的问题。我无法添加图片,因为我是新用户,但我会尝试解释一下:
我们有 4 个任务/线程:3 个输入线程,它们通过硬件抽象层 (HAL) 从不同的传感器读取一些传感器数据。收集的传感器数据存储在任务域中(即:它们不会是全局的!!)。现在我们也有 1 个输出任务,我们称之为“调节器”。调节器必须使用(读取)从所有 3 个传感器收集的传感器数据才能生成正确的输出。
问题:Regulator 如何在不与其他任务耦合的情况下读取存储在不同输入任务中的收集数据?
调节器必须只通过引用知道输入任务及其数据(即:没有#includes,没有耦合)。
到目前为止,Regulator 都有一个指向每个所需传感器数据的指针,并且该指针是在初始化时设置的。由于数据保护,这在多线程应用程序中不起作用。
我可以getSensorValue()
为每个传感器值创建一些使用信号量的函数,然后使用函数指针将它们链接到 Regulator。但这会占用大量内存!有没有更优雅的方式来做到这一点?我只是在寻找输入。
我希望这一切都是可以理解的:)