今天又遇到经典coroutine模式。
在timer isr里实现dallas单总线,你怎么写C代码?
当然用状态机是一种方式,尤其是用函数指针当state的更显得高级,但是都不如你先写一个blocking模式的伪码,然后在每一次reschedule定时器后,给下一行加一个标签,把标签的名字也定义在一个enum类型里,把这个enum值赋给一个表示continue位置的变量,然后return退出ISR。
在isr函数入口处switch continue位置,直接goto到指定位置继续运行;最后这个函数里所有的局部变量都拎出来放在外面变成static的,欧了。
如果你认真读过Knuth的taocp第一本,你就会记得他振聋发聩的说过,(stack-based) function是coroutine的一种特例。
++++
如果你把所有的相关static变量塞进一个结构体,作为context传递给isr函数,如果你再把这个isr函数的
登录后可查看完整内容,参与讨论!
立即登录