有电脑了

    继12月5日回到电控学院,坐在方老师旁边之后,今天我终于有台式机了。新屏幕好大个,快没地方放了。不过有一台已经不错了,配置还可以,P4 3.0G, 256M RAM, 74G Harddisk。虽然和楼上比,还是差了很多,不过做课题还是够用的。就是内存好小,据说原来有512M的,被借掉一半,先将就看看吧。不信就自己解决吧,还不是太贵。
    总的感觉,可以开始干活了。

升级

唉,没办法。
 
离开实验室了,可是事情还要做。本本的内存就这样不够了。
 
又搞了一条,现在已经是1.5G的内存在跑,还跑不出来,我也没办法了!

找到感觉了!

    难以形容昨天下午的感觉,一种激动但是无处发泄的冲动。
 
    我自己的课题叫做CANopen的主站设计。需要在ARM或者DSP中实现。无论是谁,都是单线程的CPU,而且老师说不要操作系统。想来想去,主站要求的功能很灵活,也需要很多并行进程。
 
    传统的做法是一个死循环,和单片机一样,在死循环内执行各个部分的函数,只要循环够短,各个函数可以看成是并行。
 
    然而,我觉得这有问题。一个循环时间是所有函数执行的集合。尽管函数可以足够短,短到进去就出来,然而整个循环结构仍然固定,必须转一圈才能回来。当整个系统的功能比较确定的时候,好像没有什么问题。但是主站需要响应所有从站的实时请求,请求很可能并发,而且没有规律,这样的死循环难以达到这种灵活性。我要打破它!
 
    前天晚上参考别人的从站代码发现需要建立数据队列将来不及处理的对象保存起来以待处理。我想到自己也需要这样。进而,函数为何不能放进队列。如果把函数看成指针,将函数指针和函数入口出口也放到一个结构里,统一结构体的架构,函数也能放进队列。
   
    函数是什么?不就是任务的代表吗?既然有办法将任务放入队列,我为何不能选择不同的函数执行?这是昨天下午的想法。
    进而,不同任务有触发条件和优先级,将这些保存到保存函数的结构体,形成任务结构体,将一个任务相关的所有信息放入一个对象结构体中,我就能完成等待对象队列,执行对象队列。
   
     感觉到了吗?我能完成一个动态任务分配机制了!只用作一个判断消息和优先级的调度程序,不停地将任务从等待队列放到执行队列,将任务从执行队列拿出来执行,所有放入等待队列的任务会自动执行而不用系统级状态机的参与。这样,优先级高的任务会自动地获得执行权,从而根本打破传统死循环的架构。
 
     而其他的东西,中断,检测,主状态机只需要负责将新的任务放入队列,判断状态,设置标志位的任务。而且,主状态机和检测根本也就是一个永远执行的任务,也在执行队列当中,定时会自动执行。
 
     这样一来,整个结构就活了,我根本不用考虑死循环的构成,任务调度机会动态决定谁去执行。剩下的事,只是写不同函数,把他们封装成任务就可以了!
 
     想到这,我就忍不住了。这根本就是操作系统里任务调度的优先算法。我要在单线程中实现操作系统的任务调度,借用任务调度的想法实现动态事件的执行。
 
     我知道让其他人理解这个很难,编程在最开始也会很困难,根本没人敢这么干,但是我决定要试一试。下周五是我做CANopen的理解汇报,我决定要作一个大的Proposal,花它一个多小时让组里的成员明白我要干什么。如果真的成了,我感觉,这将是一个突破性的东东,至少对我是这样。

正式开始在十层上班