这个应该是比较经常用到的东西,一直以为没有什么高深的东西,但是今天一用还是出了些问题。

 

之前都是直接通过iocontrol来读取,但是这些都是app主动来读,就是说app什么也不用管只知道自己的目的,比如来读取某个模块的一个寄存器的值。今天的情况是某个外设是通过i2c方式来和cpu通信,并且该外设会自动发一些消息过来。由于i2c和该外设我在驱动中都以同等地位的驱动方式实现。所以要将外设的消息主动发送给应用程序。

 

就该问题,首先想到的是postmessage,以该函数通过广播的方式发送消息,但是发现该函数只能传递整数,当然地址也可以看成一个整数来传递,但是这样做了之后应用程序挂掉了,我传给应用程序的地址是在驱动中申请的一个buffer。之后又想到了callbackfunction,该方法也是同样的命运,因为callback函数的地址是这个app空间的,另外一个app想通过驱动来调用这个callback是不行的。

 

最后的实现办法是,缓存信息,通过事件通知appapp再通过iocontrol来读取缓存中的数据。这个办法可以实现目前的需求,但是也同样存在一个问题,就是等待事件的app只有一个,如果多个app都想要这些数据就麻烦了。