linux有没有临界区代码的操作方法?
我有个很重要的代码段,不想被其他任何进程干扰,在调用这块代码段的时候希望linux内核停止调度
离线
加锁,关中断
离线
什么锁
我只知道关定时器中断
但是其他中断关了我怕影响
目前我还没找到如何关闭定时器中断的方法,只看到有关闭全局中断的方法
离线
这样的任务,还是推给单片机做吧
用inux要求严格的实时性,很难搞,而且破坏了系统响应
我整过步进电机控制,都很难做到精确,最后干脆用单片机
最近编辑记录 落雁 (2017-10-15 16:50:06)
离线
rtos有这种操作
其实我就一个spi通信部分不希望有其他的spi通信干扰
最近编辑记录 goodgoodstudy (2017-10-15 16:50:43)
离线
代码模拟的时序吗?
离线
代码模拟的时序吗?
不是软件模拟时序
7688那个spi的驱动老是有问题,我直接操作寄存器了
但是spi上面挂载了个spiflash,会和那个有冲突,不能保证我这边操作寄存器的时候,mtd驱动不进行操作
那个驱动程序也没见到有做这个事情,正常情况下在驱动程序中需要做这个读写保护的,实际上没有
离线
那么,你真是想多了
离线
我在测试的时候确实发现过情况,数据发送接收几万包的时候有出现接收不到的情况
我不太清楚是不是spi寄存器被其他进程改写了导致的
离线
但是,你要知道你的驱动是怎么工作的
你不要指望发个请求,就必然要能接收到
离线
我用驱动会出现我刚说的那种长期收发测试出现状况
离线
我用驱动会出现我刚说的那种长期收发测试出现状况
用了中断吧
离线
goodgoodstudy 说:我用驱动会出现我刚说的那种长期收发测试出现状况
用了中断吧
我这边没用中断,flash那边不清楚,中断要在驱动中注册的啊,我看到那个驱动程序也没用到中断
所以我准备采用在读写spi寄存器之前关闭定时器中断来关闭linux内核调度,在读取spi寄存器后开启定时器中断
这很麻烦,在rtos中就有关闭调度的方法,linux貌似没有
离线
落雁 说:goodgoodstudy 说:我用驱动会出现我刚说的那种长期收发测试出现状况
用了中断吧
我这边没用中断,flash那边不清楚,中断要在驱动中注册的啊,我看到那个驱动程序也没用到中断
所以我准备采用在读写spi寄存器之前关闭定时器中断来关闭linux内核调度,在读取spi寄存器后开启定时器中断
这很麻烦,在rtos中就有关闭调度的方法,linux貌似没有
用的同一个spi控制器的话,你确实要看看其他设备的驱动是否严谨。你最好与同一个总线上其他驱动保持机制一样。
这样,系统就帮你做好资源保护问题了。你要做的,就是保护自己代码,和复用
离线
goodgoodstudy 说:落雁 说:用了中断吧
我这边没用中断,flash那边不清楚,中断要在驱动中注册的啊,我看到那个驱动程序也没用到中断
所以我准备采用在读写spi寄存器之前关闭定时器中断来关闭linux内核调度,在读取spi寄存器后开启定时器中断
这很麻烦,在rtos中就有关闭调度的方法,linux貌似没有用的同一个spi控制器的话,你确实要看看其他设备的驱动是否严谨。你最好与同一个总线上其他驱动保持机制一样。
这样,系统就帮你做好资源保护问题了。你要做的,就是保护自己代码,和复用
正常情况下,复用寄存器的不同驱动程序在进行寄存器操作的时候,应该需要进行数据保护的
离线
落雁 说:goodgoodstudy 说:我这边没用中断,flash那边不清楚,中断要在驱动中注册的啊,我看到那个驱动程序也没用到中断
所以我准备采用在读写spi寄存器之前关闭定时器中断来关闭linux内核调度,在读取spi寄存器后开启定时器中断
这很麻烦,在rtos中就有关闭调度的方法,linux貌似没有用的同一个spi控制器的话,你确实要看看其他设备的驱动是否严谨。你最好与同一个总线上其他驱动保持机制一样。
这样,系统就帮你做好资源保护问题了。你要做的,就是保护自己代码,和复用正常情况下,复用寄存器的不同驱动程序在进行寄存器操作的时候,应该需要进行数据保护的
有一点你要注意,linux下的驱动,尤其是你这种与其他设备共享总线的情况,一定要遵循它的驱动框架。如果你直接操作寄存器,绕开其他设备遵循的框架,那么就很难保证资源被抢占了。
比如,大家都用r(){lock...unlock}读写总线下的设备。而你自己偏要自己一套,那你就要去读懂人家驱动每个细节做了啥。大家一个目的,都是保证我在用时,希望别人不要打扰,或是改了相关连的硬件资源
离线
对呀,我现在纠结的就是这个,谢谢大神解惑.
离线