我正在尝试实现一个微控制器的模拟。这个模拟并不是要精确地表示某个特定微控制器的时钟周期,而是检查代码的总体正确性。
我考虑让一个“主线程”执行正常代码,另一个线程执行ISR代码。每当需要运行ISR时,ISR线程会暂停“主线程”。
当然,我希望有一个阻止中断的功能。我想通过使用互斥锁来解决这个问题,ISR线程在执行ISR代码时持有该锁,而主线程在“中断被阻止”的情况下持有该锁。
这样就可以通过终止主线程(并启动执行POR函数的新线程)来实现POR(上电复位)。
Windows API提供了必要的函数。但似乎无法在Linux上使用posix线程实现以上功能。
我不想改变实际的硬件无关微控制器代码。因此,在检查挂起中断的任何事项之前插入任何内容都不是一个选择。
在非规范点接收中断是可取的,因为这也会发生在微控制器上(除非你阻止中断)。
在Linux上有一种暂停另一个线程的方法吗?(调试器肯定以某种方式使用了该选项。)
请不要告诉我这是个坏主意。我知道在大多数情况下这是真的。但主要代码不使用标准库或锁/互斥锁/信号量。
我考虑让一个“主线程”执行正常代码,另一个线程执行ISR代码。每当需要运行ISR时,ISR线程会暂停“主线程”。
当然,我希望有一个阻止中断的功能。我想通过使用互斥锁来解决这个问题,ISR线程在执行ISR代码时持有该锁,而主线程在“中断被阻止”的情况下持有该锁。
这样就可以通过终止主线程(并启动执行POR函数的新线程)来实现POR(上电复位)。
Windows API提供了必要的函数。但似乎无法在Linux上使用posix线程实现以上功能。
我不想改变实际的硬件无关微控制器代码。因此,在检查挂起中断的任何事项之前插入任何内容都不是一个选择。
在非规范点接收中断是可取的,因为这也会发生在微控制器上(除非你阻止中断)。
在Linux上有一种暂停另一个线程的方法吗?(调试器肯定以某种方式使用了该选项。)
请不要告诉我这是个坏主意。我知道在大多数情况下这是真的。但主要代码不使用标准库或锁/互斥锁/信号量。