Commit Graph

35 Commits

Author SHA1 Message Date
nnhy 6a8c3da4d4 系统时钟虽然很重要,但是并非所有系统都需要用到系统时钟 2015-07-28 15:18:15 +00:00
nnhy 6b8f12b948 强化任务调度管理,为了精确统计任务时间做准备 2015-07-15 07:59:35 +00:00
nnhy d0b9ff5000 线程池部分完成,编译通过。考虑到维持多个线程在池里面会大量占用栈内存,不划算。因此暂停线程池开发 2014-10-19 04:35:45 +00:00
nnhy f5e1953c69 改善多线程的线程安全 2014-10-19 02:36:33 +00:00
nnhy f230628456 修真线程名称Name没有初始化形成野指针的BUG 2014-10-12 08:08:47 +00:00
Stone 8fd39cf5d1 OnEnd以后加上死循环,避免指针满天飞
每个线程默认0x100栈空间太小了,加大
2014-09-29 15:33:49 +00:00
Stone a0349d6d85 完善多线程模块,全面兼容STM32F0,仅仅是汇编指令有所不同 2014-09-29 13:36:42 +00:00
Stone 7b067ce7e4 进一步融合Sys和多线程调度,统一使用Sys.Start 2014-09-26 07:45:28 +00:00
Stone 087ba3c1b9 保护线程栈需要8+8=16个双字,原来少算了一个,导致STM32F1不可用。
在STM32F4可用估计是以破坏FPU寄存器为代价。
测试通过。
2014-09-26 06:58:33 +00:00
Stone d40b6d5ea0 默认初始化多线程 2014-09-25 15:15:44 +00:00
Stone 044acd716f 如果用空闲线程Idle驱动系统定时Sys.Start,可能出现Sleep导致线程挂起,然后没有可用线程供调度。
为此专门增加独立的Main线程。
2014-09-19 20:17:57 +00:00
Stone 6de7986f35 多线程调度与Sys定时调度联动,由多线程调度器的空闲线程负责驱动Sys.Start实现传统定时任务。要小心线程栈溢出
测试通过
2014-09-19 16:36:18 +00:00
Stone 187b4d7a21 如果有挂起的切换,则不再切换。否则切换时需要保存的栈会出错。
解决不停创建、销毁线程时,内存暴涨不消的问题。这个问题估计跟没法完全释放线程有关
2014-09-19 03:28:16 +00:00
Stone 6e0727217f 重构系统、时间、线程三者的关系,Sleep优先使用线程级睡眠 2014-09-18 16:33:14 +00:00
Stone cce81bf91c 优化建立就绪队列的操作,提升性能 2014-09-18 15:28:25 +00:00
Stone fe933042c6 每个线程结束时执行该方法,销毁线程。
测试通过,成功销毁Led线程
2014-09-18 09:24:11 +00:00
Stone 315fa99f8b StackSize保存完整的栈大小,包括用户部分和STK部分 2014-09-18 09:01:25 +00:00
Stone 33192897fe 增加线程栈溢出检测 2014-09-18 04:50:29 +00:00
Stone 5eff87f132 使用调度入口函数,测试通过。
小灯闪烁例程通过。
Idle例程出现异常
2014-09-17 21:04:25 +00:00
Stone 844cf441f5 当前线程栈的指针。需要保存线程栈,所以需要指针
测试通过
2014-09-17 19:45:31 +00:00
Stone 537ab2d480 Thread::Sleep/Suspend/Resume测试通过,挂起指定时间后可以恢复 2014-09-17 19:15:41 +00:00
Stone e3fdeb1009 删除无用的代码注释,测试通过 2014-09-17 18:09:37 +00:00
Stone 3a8bbe0d0b 重新整理PendSV_Handler实现,更好性能更好逻辑。
使用模版列表重构Thread链表实现
测试通过,单一小灯线程闪烁
2014-09-17 16:53:51 +00:00
Stone da0381de95 Thread增加日志输出,恢复使用4字节ID 2014-09-17 13:45:30 +00:00
Stone 71608df485 注释Thread.ID,它导致了对齐问题,堆栈溢出到隔壁。
每次时间片调度时,支持Sleep睡眠处理
2014-09-17 12:18:48 +00:00
Stone ffe948b038 增加基于线程调度的睡眠支持 2014-09-17 06:51:39 +00:00
Stone 7ea0d4b135 线程调度小灯闪烁成功,代码还需要进一步巩固 2014-09-16 19:42:57 +00:00
Stone b8ef6a8fd2 无法用纯C/C++实现整个中断,最主要的问题是它会编译生成压栈操作,使得函数内的栈操作出错 2014-09-16 19:30:58 +00:00
Stone e800e0d27f 已经可以主动调度任务,但是在时间片到来时无法正确调度。怀疑跟编译警告里面的2字节对齐有关 2014-09-16 19:22:06 +00:00
Stone 4698b4481f 抢占式任务调度,使用系统滴答作为时间分片提供源 2014-09-16 17:14:12 +00:00
Stone cb9a152edf 很多RTOS在这里设置PSP为0,然后这个函数最后是一个死循环。
其实,PSP为0以后,这个函数就无法正常退出了,我们把它设置为MSP,确保函数正常退出,外部死循环
2014-09-16 14:22:16 +00:00
Stone 5c239c4c51 2014-09-15 05:44:30 +00:00
Stone 0f5cd80398 通过PendSV_Handler实现任务切换,在线程栈的处理上还有问题 2014-09-14 12:32:34 +00:00
Stone a1c93b4a64 编译通过,未完成 2014-09-12 16:22:58 +00:00
Stone 26f51abc65 增加线程封装,基于优先级的时间片抢占式任务调度
编译未通过,诡异的错误
2014-09-10 19:34:24 +00:00