您尚未登录。

楼主 #1 2017-10-15 16:46:47

goodgoodstudy
会员
注册时间: 2017-09-15
已发帖子: 61
积分: 61

linux有没有临界区代码的操作方法?

linux有没有临界区代码的操作方法?
我有个很重要的代码段,不想被其他任何进程干扰,在调用这块代码段的时候希望linux内核停止调度

离线

#2 2017-10-15 16:47:17

落雁
会员
注册时间: 2017-09-06
已发帖子: 62
积分: 62

Re: linux有没有临界区代码的操作方法?

加锁,关中断

离线

楼主 #3 2017-10-15 16:47:57

goodgoodstudy
会员
注册时间: 2017-09-15
已发帖子: 61
积分: 61

Re: linux有没有临界区代码的操作方法?

什么锁
我只知道关定时器中断
但是其他中断关了我怕影响
目前我还没找到如何关闭定时器中断的方法,只看到有关闭全局中断的方法

离线

#4 2017-10-15 16:49:04

落雁
会员
注册时间: 2017-09-06
已发帖子: 62
积分: 62

Re: linux有没有临界区代码的操作方法?

这样的任务,还是推给单片机做吧
用inux要求严格的实时性,很难搞,而且破坏了系统响应
我整过步进电机控制,都很难做到精确,最后干脆用单片机

最近编辑记录 落雁 (2017-10-15 16:50:06)

离线

楼主 #5 2017-10-15 16:49:41

goodgoodstudy
会员
注册时间: 2017-09-15
已发帖子: 61
积分: 61

Re: linux有没有临界区代码的操作方法?

rtos有这种操作
其实我就一个spi通信部分不希望有其他的spi通信干扰

最近编辑记录 goodgoodstudy (2017-10-15 16:50:43)

离线

#6 2017-10-15 16:50:59

落雁
会员
注册时间: 2017-09-06
已发帖子: 62
积分: 62

Re: linux有没有临界区代码的操作方法?

代码模拟的时序吗?

离线

楼主 #7 2017-10-15 16:51:43

goodgoodstudy
会员
注册时间: 2017-09-15
已发帖子: 61
积分: 61

Re: linux有没有临界区代码的操作方法?

落雁 说:

代码模拟的时序吗?

不是软件模拟时序
7688那个spi的驱动老是有问题,我直接操作寄存器了
但是spi上面挂载了个spiflash,会和那个有冲突,不能保证我这边操作寄存器的时候,mtd驱动不进行操作
那个驱动程序也没见到有做这个事情,正常情况下在驱动程序中需要做这个读写保护的,实际上没有

离线

#8 2017-10-15 16:52:09

落雁
会员
注册时间: 2017-09-06
已发帖子: 62
积分: 62

Re: linux有没有临界区代码的操作方法?

那么,你真是想多了

离线

楼主 #9 2017-10-15 16:52:48

goodgoodstudy
会员
注册时间: 2017-09-15
已发帖子: 61
积分: 61

Re: linux有没有临界区代码的操作方法?

我在测试的时候确实发现过情况,数据发送接收几万包的时候有出现接收不到的情况
我不太清楚是不是spi寄存器被其他进程改写了导致的

离线

#10 2017-10-15 16:53:11

落雁
会员
注册时间: 2017-09-06
已发帖子: 62
积分: 62

Re: linux有没有临界区代码的操作方法?

但是,你要知道你的驱动是怎么工作的
你不要指望发个请求,就必然要能接收到

离线

楼主 #11 2017-10-15 16:54:09

goodgoodstudy
会员
注册时间: 2017-09-15
已发帖子: 61
积分: 61

Re: linux有没有临界区代码的操作方法?

我用驱动会出现我刚说的那种长期收发测试出现状况

离线

#12 2017-10-15 16:54:38

落雁
会员
注册时间: 2017-09-06
已发帖子: 62
积分: 62

Re: linux有没有临界区代码的操作方法?

goodgoodstudy 说:

我用驱动会出现我刚说的那种长期收发测试出现状况

用了中断吧

离线

楼主 #13 2017-10-15 16:55:22

goodgoodstudy
会员
注册时间: 2017-09-15
已发帖子: 61
积分: 61

Re: linux有没有临界区代码的操作方法?

落雁 说:
goodgoodstudy 说:

我用驱动会出现我刚说的那种长期收发测试出现状况

用了中断吧

我这边没用中断,flash那边不清楚,中断要在驱动中注册的啊,我看到那个驱动程序也没用到中断
所以我准备采用在读写spi寄存器之前关闭定时器中断来关闭linux内核调度,在读取spi寄存器后开启定时器中断
这很麻烦,在rtos中就有关闭调度的方法,linux貌似没有

离线

#14 2017-10-15 16:55:39

落雁
会员
注册时间: 2017-09-06
已发帖子: 62
积分: 62

Re: linux有没有临界区代码的操作方法?

goodgoodstudy 说:
落雁 说:
goodgoodstudy 说:

我用驱动会出现我刚说的那种长期收发测试出现状况

用了中断吧

我这边没用中断,flash那边不清楚,中断要在驱动中注册的啊,我看到那个驱动程序也没用到中断
所以我准备采用在读写spi寄存器之前关闭定时器中断来关闭linux内核调度,在读取spi寄存器后开启定时器中断
这很麻烦,在rtos中就有关闭调度的方法,linux貌似没有

用的同一个spi控制器的话,你确实要看看其他设备的驱动是否严谨。你最好与同一个总线上其他驱动保持机制一样。
这样,系统就帮你做好资源保护问题了。你要做的,就是保护自己代码,和复用

离线

楼主 #15 2017-10-15 16:57:13

goodgoodstudy
会员
注册时间: 2017-09-15
已发帖子: 61
积分: 61

Re: linux有没有临界区代码的操作方法?

落雁 说:
goodgoodstudy 说:
落雁 说:

用了中断吧

我这边没用中断,flash那边不清楚,中断要在驱动中注册的啊,我看到那个驱动程序也没用到中断
所以我准备采用在读写spi寄存器之前关闭定时器中断来关闭linux内核调度,在读取spi寄存器后开启定时器中断
这很麻烦,在rtos中就有关闭调度的方法,linux貌似没有

用的同一个spi控制器的话,你确实要看看其他设备的驱动是否严谨。你最好与同一个总线上其他驱动保持机制一样。
这样,系统就帮你做好资源保护问题了。你要做的,就是保护自己代码,和复用

正常情况下,复用寄存器的不同驱动程序在进行寄存器操作的时候,应该需要进行数据保护的

离线

#16 2017-10-15 16:57:35

落雁
会员
注册时间: 2017-09-06
已发帖子: 62
积分: 62

Re: linux有没有临界区代码的操作方法?

goodgoodstudy 说:
落雁 说:
goodgoodstudy 说:

我这边没用中断,flash那边不清楚,中断要在驱动中注册的啊,我看到那个驱动程序也没用到中断
所以我准备采用在读写spi寄存器之前关闭定时器中断来关闭linux内核调度,在读取spi寄存器后开启定时器中断
这很麻烦,在rtos中就有关闭调度的方法,linux貌似没有

用的同一个spi控制器的话,你确实要看看其他设备的驱动是否严谨。你最好与同一个总线上其他驱动保持机制一样。
这样,系统就帮你做好资源保护问题了。你要做的,就是保护自己代码,和复用

正常情况下,复用寄存器的不同驱动程序在进行寄存器操作的时候,应该需要进行数据保护的

有一点你要注意,linux下的驱动,尤其是你这种与其他设备共享总线的情况,一定要遵循它的驱动框架。如果你直接操作寄存器,绕开其他设备遵循的框架,那么就很难保证资源被抢占了。
比如,大家都用r(){lock...unlock}读写总线下的设备。而你自己偏要自己一套,那你就要去读懂人家驱动每个细节做了啥。大家一个目的,都是保证我在用时,希望别人不要打扰,或是改了相关连的硬件资源

离线

楼主 #17 2017-10-15 16:58:16

goodgoodstudy
会员
注册时间: 2017-09-15
已发帖子: 61
积分: 61

Re: linux有没有临界区代码的操作方法?

对呀,我现在纠结的就是这个,谢谢大神解惑.

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn