求助linux下任务调度的问题

时间:2022-01-05 07:53:47
之前在2440板子上裸机实现了这样的功能:
通过SPI、外部中断及几个普通的I/O口,接上一个无线通信模块(CC2420芯片,实现802.15.4协议),使两块板子之间能够进行802.15.4数据包交互。
代码中设定了一个定时器中断(us级),每隔一定的时间就会触发中断,在这个定时器中断服务程序中完成复杂的任务调度功能(自己定义了任务优先级、任务队列等等)。当收到数据包时会触发外部中断对数据包进行处理。
现在在板子上加载了LINUX操作系统,想把之前实现的这些功能在LINUX下实现,应该怎么来做?是否需要做一个驱动?之前通过定时器中断实现的任务调度是否可以交给操作系统来调度,如果可以这一步怎么来做?
刚刚接触LINUX,高手们帮忙看看,提供一些思路?能否提供一些相关的文章、例程?
我现在有两个思路,但感觉都不是很理想;一、把所有的功能做成一个模块,加载模块实现功能,但是感觉这么做的话,给板子加载操作系统没有什么特别大的意义。 二、把原先靠定时器中断管理的任务拆分成很多小任务然后交给Linux来管理,这样做可不可行,又怎么来做?
帮忙看一下,谢谢大家!

8 个解决方案

#1


一般将设备相关、协议相关部分编译成模块放到核心,使用的程序放在应用层...
既然已经有外部中断,那是用定时器中断来调度有什么特别的意义?

#2


外部中断是负责处理接收到的数据包的。定时器中断是用来管理实现802.15.4协议的各个任务的。

#3


那 802.15.4 有几个任务嘛

#4


查了一下代码,一共30几个任务需要加到任务队列中,这30几个任务现在在我们的代码中就是通过定时器中断来管理的,感觉太乱了,所以想着要交给操作系统来管理。

#5


呵呵,30多个任务啊,貌似任务切分的有点儿问题 ...
基本上所有的操作系统的 tcp/ip 协议栈处理都在核心,
你那个 802.15 的协议处理最好也作为核心模块加载
运行在核心空间吧...

#6


恩。问一下,怎样才查到tcp/ip之类的协议在linux下是怎么实现的?

#7


http://www.kernel.org 上有源码,比如最新的 linux-2.6.29.tar.bz2,解压后

linux-2.6.29/net/ipv4 和 ipv6 下就是

#8


扫了下以太网的代码,没看懂呵呵。
想看下源码里对这样一个具体的协议是怎样实现的,怎样来调度实现协议的任务,不知道我想了解的这些东西在哪个目录下?

#1


一般将设备相关、协议相关部分编译成模块放到核心,使用的程序放在应用层...
既然已经有外部中断,那是用定时器中断来调度有什么特别的意义?

#2


外部中断是负责处理接收到的数据包的。定时器中断是用来管理实现802.15.4协议的各个任务的。

#3


那 802.15.4 有几个任务嘛

#4


查了一下代码,一共30几个任务需要加到任务队列中,这30几个任务现在在我们的代码中就是通过定时器中断来管理的,感觉太乱了,所以想着要交给操作系统来管理。

#5


呵呵,30多个任务啊,貌似任务切分的有点儿问题 ...
基本上所有的操作系统的 tcp/ip 协议栈处理都在核心,
你那个 802.15 的协议处理最好也作为核心模块加载
运行在核心空间吧...

#6


恩。问一下,怎样才查到tcp/ip之类的协议在linux下是怎么实现的?

#7


http://www.kernel.org 上有源码,比如最新的 linux-2.6.29.tar.bz2,解压后

linux-2.6.29/net/ipv4 和 ipv6 下就是

#8


扫了下以太网的代码,没看懂呵呵。
想看下源码里对这样一个具体的协议是怎样实现的,怎样来调度实现协议的任务,不知道我想了解的这些东西在哪个目录下?