Chinaunix首页 | 论坛 | 博客
  • 博客访问: 484180
  • 博文数量: 55
  • 博客积分: 1867
  • 博客等级: 上尉
  • 技术积分: 587
  • 用 户 组: 普通用户
  • 注册时间: 2006-12-29 01:33
文章分类

全部博文(55)

文章存档

2013年(1)

2012年(2)

2011年(16)

2010年(11)

2009年(5)

2008年(10)

2007年(8)

2006年(2)

分类:

2006-12-29 04:29:53

文件:AvrcX_1.0.zip
大小:361KB
下载:下载
到今天为止,历时一个月,终于为AVR单片机写好了一个多任务系统,为将来的开发奠定了一点基础。同时打算将她开源到网络上,让感兴趣的人测试一下,同时也发现一些问题。

这个系统是参考了 Larry Barello 的 AvrX2.6f 而写成的,当然最大的区别除了 AvrX2.6f 是汇编语言的,而这个是C语言的外,基本的实现思路还是很大的不同。不过我非常感谢 Larry Barelo 贡献的代码,让我非常顺利的完成 Task context 的保存和恢复这一 C 不好处理的过程。为了体现这个系统的启发来自Avrx2.6,我也为她起了一个相近的名字,叫 AvrcX。我不知道 Larry Barelo 会不会因此而生气或者高兴。总之,谁让这家伙为他的系统起了一个很好的名字,把我最想用的字母 X 给用了。

这个系统是用AVR-GCC 4.0.2 写的。曾经我也找了很多其它编译工具,用起来都不顺手顺心,另外,本来就有写了开源的想法,总不能去用商业编译器吧。当然最主要的,还是觉得 GCC 的代码质量还是很高的,一开始我也尝试用汇编写了一些代码,发现 GCC 的 -Os 优化居然不比我的汇编代码多多少,甚至可以说,比我的汇编还高明, 于是我就下决心也不去找什么破解了,GCC 已经足够好了。

这个系统是一个多任务的调度系统,实时的? 我想可能吧,没有测试过,也不知道怎么测试。但我努力想着去把它实现成一个 priority preemtived 的系统,同时每个 Task 也受时间片控制。系统实现了 Semaphore, Mutex,Event 同步机制,当然还有 Timer queue, 不过我没有读懂 Larry Barello 的 AvrX 的 Timer queue 的思想,所以我按我的需求实现了另外一种东西,目的是要提供 waitObjectWithTimeout 这样的方法。系统还实现了一个基于 byte 的 FIFO,可以用作消息队列,或者I/O缓冲。

调度是基于三种 Queue, 运行队列 RunningQueue, 每一个 Monitor ( Semaphore, Mutex, Event) 上的 BlockedQueue,以及 TimerQueue, BlockedQueue 和 TimerQueue 里的 Task 处于 Blocked和 Delay 状态, 它们在条件满足时,被调度并有可能发生抢占。

在基本内核的基础上,我也写了 UART 的基础代码,用它发现了这个系统的很多问题和有趣的地方。

好吧,就写到这里...先放到网络上看看大家感兴趣吗。

顺便放两张,开发过程中的仿真和开发的图片


阅读(2874) | 评论(2) | 转发(0) |
0

上一篇:没有了

下一篇:千万小心 RSTDISBL 熔丝的使用

给主人留下些什么吧!~~

chinaunix网友2010-04-19 22:59:56

你好,请问你这个怎么用啊,我看着没有头文件的。急速教教我。 我QQ 13988372 谢谢啊