BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / embedded-system / #4736同步于 2009/5/8
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Embedded_System机器人发帖

[求助]linux下任务调度

jennymasar
2009/5/8镜像同步18 回复
之前在2440板子上裸机实现了这样的功能: 通过SPI、外部中断及几个普通的I/O口,接上一个无线通信模块(CC2420芯片,实现802.15.4协议),使两块板子之间能够进行802.15.4数据包交互。 代码中设定了一个定时器中断(us级),每隔一定的时间就会触发中断,在这个定时器中断服务程序中完成复杂的任务调度功能(自己定义了任务优先级、任务队列等等)。当收到数据包时会触发外部中断对数据包进行处理。 现在在板子上加载了LINUX操作系统,想把之前实现的这些功能在LINUX下实现,应该怎么来做?是否需要做一个驱动?之前通过定时器中断实现的任务调度是否可以交给操作系统来调度,如果可以这一步怎么来做? 刚刚接触LINUX,高手们帮忙看看,提供一些思路?
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
gonewind83机器人#1 · 2009/5/8
没有搞过Linux系统下的驱动,不过个人觉得这个和硬件平台相关吧,如果硬件的兼容性很好,那么可能不需要自己再写驱动。 不过,可以确定的一点是:如果想把你的功能放在Linux系统中完成,那么最好将你原来在ISR里面做的事情拆分出来,分成多个任务,在中断服务程序里可以使用msgQ、Pipe、信号量之类的进行任务间通信,让Linux系统去调度你的这些任务。在中断里尽可能少的做事情,要确定使用以上东西时不要发生阻塞。 后人继续补充吧……
jennymasar机器人#2 · 2009/5/8
驱动如果需要的话,实现起来应该不是很复杂。 我刚开始想的是把所有的功能做成一个模块,加载模块实现功能,但是感觉这么做的话,给板子加载操作系统没有什么特别大的意义。 现在不知道原来用来进行任务调度的定时器中断不知道还需不需要?代码中任务调度还是挺复杂的,很多任务,各任务之间又有嵌套。任务调度应该怎么来实现?刚接触Linux,还不太明白Linux下的任务调度怎么来实现,主要是不太明白如果把任务拆分成很多小任务然后交给Linux来管理,这样的想法可不可行,又怎么来做? 有没有相关的文章、例子给推荐一下? 谢谢gonewind83!!先补一下你说的相关知识。
mmgroup机器人#3 · 2009/5/8
能上linux的板子为啥要用802.15.4...有点小疑惑
jennymasar机器人#4 · 2009/5/8
【 在 mmgroup 的大作中提到: 】 : 能上linux的板子为啥要用802.15.4...有点小疑惑 实验室的节点,802.15.4适合用于低速无线个域网,好像官方是这么说的。 节点之间通信用802.15.4。
lester98机器人#5 · 2009/5/8
【 在 jennymasar 的大作中提到: 】 : 之前在2440板子上裸机实现了这样的功能: : 通过SPI、外部中断及几个普通的I/O口,接上一个无线通信模块(CC2420芯片,实现802.15.4协议),使两块板子之间能够进行802.15.4数据包交互。 : 代码中设定了一个定时器中断(us级),每隔一定的时间就会触发中断,在这个定时器中断服务程序中完成复杂的任务调度功能(自己定义了任务优先级、任务队列等等)。当收到数据包时会触发外部中断对数据包进行处理。 : ................... SPI的驱动肯定是必须得了,收到数据触发中断可能SPI控制器就有这个功能吧 你的需求如果对实时性要求不是太高,比如10ms以下,那么linux搞这个相比裸跑肯定很轻松,就写一个多线程的程序就行了.你描述的具体的内容我没做过,但是我想APUE中多线程同步方面的知识是需要好好了解的
lester98机器人#6 · 2009/5/8
【 在 jennymasar 的大作中提到: 】 : 驱动如果需要的话,实现起来应该不是很复杂。 : 我刚开始想的是把所有的功能做成一个模块,加载模块实现功能,但是感觉这么做的话,给板子加载操作系统没有什么特别大的意义。 : 现在不知道原来用来进行任务调度的定时器中断不知道还需不需要?代码中任务调度还是挺复杂的,很多任务,各任务之间又有嵌套。任务调度应该怎么来实现?刚接触Linux,还不太明白Linux下的任务调度怎么来实现,主要是不太明白如果把任务拆分成很多小任务然后交给Linux来管理,这样的想法可不可行,又怎么来做? : ................... linux下面有相关机制,对应有相应的内核代码以及系统调用. 交给linux做开发会方便很多啊
jennymasar机器人#7 · 2009/5/8
听你们这么一说感觉我的这个想法还是可行的。NND,需要补的东西很多啊。 有什么推荐的书、资料吗?谢谢! 【 在 lester98 的大作中提到: 】 : SPI的驱动肯定是必须得了,收到数据触发中断可能SPI控制器就有这个功能吧 : 你的需求如果对实时性要求不是太高,比如10ms以下,那么linux搞这个相比裸跑肯定很轻松,就写一个多线程的程序就行了.你描述的具体的内容我没做过,但是我想APUE中多线程同步方面的知识是需要好好了解的 看来需要补的知识很多啊,
jklbupt机器人#8 · 2009/5/8
定时器中断(us级)在linux下实现是不现实的,不知道你的开发板的linux内核版本是那个?高版本的话一般都实现了SPI总线驱动,可以直接使用,有了SPI的驱动,控制2420的其他信号线的驱动还是要自已实现的,我这边也做zigbee有空可以站内信给我.
lester98机器人#9 · 2009/5/11
我觉得主要是SPI,定时器中断和多线程同步这三块吧,SPI貌似你很懂了,定时器中断我没有弄过,多线程同步可以看看APUE,也可以在网上搜一下,最好找个类似的程序模仿一下就比较轻松了 【 在 jennymasar (holy shit) 的大作中提到: 】 : 听你们这么一说感觉我的这个想法还是可行的。NND,需要补的东西很多啊。 : 有什么推荐的书、资料吗?谢谢! : 看来需要补的知识很多啊, : ...................