在中断服务程序中(C语言编的,TC下编译的)不能调用像printf,fprintf,putc这样的函数,会得到一些意想不到的结果。那么如果想在中断服务程序中实现将数据保存到文件和在屏幕显示出来该怎么办呢?
向各位请教啊。
将数据保存到文件和在屏幕显示出来
这种活不能在中断服务程序做吧,太慢了。
可以考虑写数据到内存,然后在中断服务程序结束之后把数据读出来。
我是在DOS下用中断法从串口接收数据,你说的这种方法我之前也做过,这样做对数据的处理肯定是有延迟的,另外在数据传输速率很高的时候会有数据丢失的情况。如传输速率是200HZ.所以我才想在中断服务程序中将它实现。
你在中断程序中直接做肯定更容易丢数据,这种需求是绝对不能这么做的,你可以设计个队列,中断程序里只要把数据塞到队列里,其他都不管,然后中断外读取队列的数据保存或者显示,这样肯定是不会丢数据的,不过是有些延迟的,有延迟也可以通过设计有优先级的队列来保证重要的数据优先处理,这样可以保证处理质量
先将数据保存,然后在中断退出后的在去显示。printf函数不可重入
在中断服务程序中保存你要显示的内容(其实不只是显示,显示内容可以在中断内放入预先定义好的数组内),只要记录即将执行的动作就可以了。中断结束后,再执行你要执行的动作,无论是显示还是其他的什么都可以!
在中断服务程序内不要执行不可重入的函数,不要进行浮点运算。。。
回复 8楼 fklfkl 的帖子
一种ADT模型,简单说就是 先进先出FIFO。
简单理解,数据像排队的人一样,先到的,先扔进去,然后也是最先出去的。
可以用数组或者链表实现。
就那麽回事而已。别想得太复杂。
其实你完全可以按照自己的协议来处理数据,反正是你存的,你按照一样的方法来读一点问题都没有。