打印
[LOOK]

Look多任务与Delay

[复制链接]
3214|17
手机看帖
扫描二维码
随时随地手机跟帖
沙发
lzlz70707|  楼主 | 2011-5-14 00:06 | 只看该作者
本帖最后由 hotpower 于 2011-5-15 00:49 编辑

Look多任务与Delay
主讲:John Lee
地点:菜农新唐M0技术交流
John Lee<j.y.lee@yeah.net> 20:26:22 大家好
lxyppc(19148022) 20:26:33 老师好
hothot(176419557) 20:26:32
大侠永恒(472764312) 20:26:37
舍我其谁(609051974) 20:26:44
John Lee<j.y.lee@yeah.net> 20:27:49
今天我们先简单讨论一下look任务的创建,然后就讨论两个任务如何同步。
雁塔菜农<hotwc3@qq.com> 20:27:56
抽完烟了
John Lee<j.y.lee@yeah.net> 20:29:02
look的任务,需要定义一个“类”。
雁塔菜农<hotwc3@qq.com> 20:29:33
https://bbs.21ic.com/icview-235067-1-1.html
John Lee<j.y.lee@yeah.net> 20:29:44
这个类存储了任务的控制块(TCB)
雁塔菜农<hotwc3@qq.com> 20:29:43
用这个例程讲
John Lee<j.y.lee@yeah.net> 20:35:07
就如同其他rtos的“任务函数”一样
John Lee<j.y.lee@yeah.net> 20:35:58
在routine()中,用户需要实现任务处理逻辑。
Lee<j.y.lee@yeah.net> 20:37:09
定义好了任务,接下来就需要创建任务的实例。
雁塔菜农<hotwc3@qq.com> 20:37:49
老师这些都是在H文件里做事吧
John Lee<j.y.lee@yeah.net> 20:38:09
简单地说,创建任务实例,就是为任务分配tcb、和任务栈的存储空间。
John Lee<j.y.lee@yeah.net> 20:38:54
定义任务类应该放在头文件中。
雁塔菜农<hotwc3@qq.com> 20:39:04
提问:任务栈的存储空间每个任务可以自定义长度吗?
大侠永恒(472764312) 20:39:17
TCB=task control block

使用特权

评论回复
板凳
lzlz70707|  楼主 | 2011-5-14 00:06 | 只看该作者
John Lee<j.y.lee@yeah.net> 20:39:38
可以,稍后会讲到。
John Lee<j.y.lee@yeah.net> 20:41:00
在普通的rtos中,创建任务由一个函数来进行,如ucos的OSCreateTask()
John Lee<j.y.lee@yeah.net> 20:42:17
create task需要几个参数:任务函数,栈地址,栈长度,优先级等等。
John Lee<j.y.lee@yeah.net> 20:42:48
栈地址空间需要预先分配
John Lee<j.y.lee@yeah.net> 20:44:06
而look为了简化这些琐事,使用了一个模板(instantiate::task)来完成所有的工作。
John Lee<j.y.lee@yeah.net> 20:44:46
这样,只需要一句,就可以完成任务实例的创建。
John Lee<j.y.lee@yeah.net> 20:45:10
instantiate::task<task_led1_t, LOOK_STACK_SIZE> task_led1;
John Lee<j.y.lee@yeah.net> 20:45:26
大家不要被吓到。
John Lee<j.y.lee@yeah.net> 20:45:41
这是“定式”,照抄即可。
大侠永恒(472764312) 20:45:56
老农被吓到了..........
John Lee<j.y.lee@yeah.net> 20:47:26
这个模板的使用(创建任务)方式:
instantiate::task<用户任务类,需要的任务栈长度> 任务实例名;
John Lee<j.y.lee@yeah.net> 20:48:10
实例名,可以简单地理解为“变量名”。
John Lee<j.y.lee@yeah.net> 20:49:33
用户任务类,就是前面讲到的,从task_t派生的用户任务类,
John Lee<j.y.lee@yeah.net> 20:50:21
任务栈长度,是为这个任务分配的栈空间长度。
John Lee<j.y.lee@yeah.net> 20:51:39
任务创建就这些内容。
John Lee<j.y.lee@yeah.net> 20:51:46
Any question ?
jutyy(360600219) 20:52:23
任务栈长度,多少合适
John Lee<j.y.lee@yeah.net> 20:53:18
这个不好说,主要看任务的函数调用深度,和局部变量的多少。
John Lee<j.y.lee@yeah.net> 20:53:47
如果RAM够大,可以定义大一些。
John Lee<j.y.lee@yeah.net> 20:54:24
先跑跑,如果没有问题,再逐步减小。
lxyppc(19148022) 20:55:47
可以做个Memory Usage检查的功能出来
John Lee<j.y.lee@yeah.net> 20:55:57

使用特权

评论回复
地板
lzlz70707|  楼主 | 2011-5-14 00:06 | 只看该作者
是的。
John Lee<j.y.lee@yeah.net> 20:56:11
这些功能是可以以后扩充的。
John Lee<j.y.lee@yeah.net> 20:57:05
Any question ?
大侠永恒(472764312) 20:57:24
没了
John Lee<j.y.lee@yeah.net> 20:58:08
好,我们讨论一下任务间同步。
John Lee<j.y.lee@yeah.net> 20:58:59
例子就用菜农老哥的帖子里的例子。
John Lee<j.y.lee@yeah.net> 21:00:40
// 任务类 task_led_t 的例程
void task_led1_t::routine()
{
    // TODO: 在此编写 task_led_t 例程的内容
    uint32_t data = ~0b1000;
    while (true) {
        // TODO: 在此编写 task_led_t 例程的内容
        data &= 0b111000;
        data <<= 1;
        data += data >> 3;
        GPIOAs.DMASK.Regs = ~0b111000;
        GPIOAs.DOUT.Regs = data;
        delay(LOOK_TICKS_PER_SEC / 2);
    }
}

// 任务类 task_led_t 的例程
void task_led2_t::routine()
{
    // TODO: 在此编写 task_led_t 例程的内容
    uint32_t data = 0b100;
    while (true) {
        // TODO: 在此编写 task_led_t 例程的内容
        GPIOAs.DMASK.Regs = ~0b100;
        GPIOAs.DOUT.Regs = data;
        data ^= 0b100;
        delay(LOOK_TICKS_PER_SEC / 10);
    }
}


John Lee<j.y.lee@yeah.net> 21:01:01

使用特权

评论回复
5
lzlz70707|  楼主 | 2011-5-14 00:07 | 只看该作者
其它不重要的部分就不列出了。
大侠永恒(472764312) 21:01:15
一个流水灯 一个闪烁灯 是么
John Lee<j.y.lee@yeah.net> 21:01:24
是的。
John Lee<j.y.lee@yeah.net> 21:02:10
GPIOA2闪烁。GPIOA3,4,5轮转。
John Lee<j.y.lee@yeah.net> 21:02:49
这个例子使用了两个任务: task_led1_t和task_led2_t。
雁塔菜农<hotwc3@qq.com> 21:03:06
这是2个任务的例程,有些代表性
John Lee<j.y.lee@yeah.net> 21:03:11
但例子中,这两个任务是无关的。
雁塔菜农<hotwc3@qq.com> 21:03:41
让大家感觉一样不裸奔的
John Lee<j.y.lee@yeah.net> 21:04:04
各自完成各自的逻辑,互不干扰。
雁塔菜农<hotwc3@qq.com> 21:04:14
不裸奔是什么感觉
John Lee<j.y.lee@yeah.net> 21:05:18
这两个任务routine()中的程序内容,大家有什么问题么?
John Lee<j.y.lee@yeah.net> 21:05:56
很简单的,完全是C的逻辑。
jutyy(360600219) 21:07:14
想知道怎么运行的,先运行哪一个啊。还是轮流调用的啊
John Lee<j.y.lee@yeah.net> 21:07:39
好,问得好。
雁塔菜农<hotwc3@qq.com> 21:07:45
讲讲 delay()
雁塔菜农<hotwc3@qq.com> 21:22:58
今天的LOOK课就是2个任务的例程
雁塔菜农<hotwc3@qq.com> 21:23:50
两个任务独立
雁塔菜农<hotwc3@qq.com> 21:24:22
OS的好处就是少操心,专注任务里的处理
雁塔菜农<hotwc3@qq.com> 21:25:01
任务运行的次序肯定由任务的优先级决定
雁塔菜农<hotwc3@qq.com> 21:26:14
任务里注意是用 while(1)封死的
雁塔菜农<hotwc3@qq.com> 21:26:50
所以没玩过 OS的人估计对这个最为好奇
雁塔菜农<hotwc3@qq.com> 21:27:10
while(1){}就是一个死循环
雁塔菜农<hotwc3@qq.com> 21:27:44

使用特权

评论回复
6
lzlz70707|  楼主 | 2011-5-14 00:07 | 只看该作者
本帖最后由 hotpower 于 2011-5-14 11:05 编辑

一个任务在运行,另一个任务如何运行呢???
agllero(859419016) 21:28:28
时间片
雁塔菜农<hotwc3@qq.com> 21:28:30
继续
agllero(859419016) 21:28:45
轮换
baud@乾坤大挪移(907153057) 21:28:49
切换
lxyppc(19148022) 21:29:01
都 没缓过气来
baud@乾坤大挪移(907153057) 21:29:32
怎么注销任务呢
baud@乾坤大挪移(907153057) 21:30:19
说错了 是结束任务
阿亮(315196767) 21:30:40
菜农捏?、
agllero(859419016) 21:30:43
没事干了就挂起了吧
雁塔菜农<hotwc3@qq.com> 21:30:47 抽烟完毕
outman(8451494) 21:30:53 OS就是一些寄存器搬来搬去,切换来切换去,uCOS作者写的序言
雁塔菜农<hotwc3@qq.com> 21:31:01
阿亮(315196767) 21:31:09 一个任务在运行,另一个任务如何运行呢???
雁塔菜农<hotwc3@qq.com> 21:31:08 估计是行家
outman(8451494) 21:31:21 从C来看就是从一个while(1)到另一个while(1)
baud@乾坤大挪移(907153057) 21:31:48 我猜的
雁塔菜农<hotwc3@qq.com> 21:31:56 从C来看就是从一个while(1)到另一个while(1)
七种武器(68148457) 21:32:12 时间片轮换吧?
阿亮(315196767) 21:32:12 求解答

使用特权

评论回复
7
lzlz70707|  楼主 | 2011-5-14 00:07 | 只看该作者
本帖最后由 hotpower 于 2011-5-14 11:07 编辑

雁塔菜农<hotwc3@qq.com> 21:32:10 whilw(1)是跑不出去的
七种武器(68148457) 21:32:22 RTOS里面有提到
阿亮(315196767) 21:32:36 能通俗点不?
雁塔菜农<hotwc3@qq.com> 21:32:56 大家看这个例程中都有一个 delay()
七种武器(68148457) 21:33:15 定时器从1跑到10,1到10对应10个任务
outman(8451494) 21:33:17 schedule()  调度,while(1)是跑不出来,但是schedule()会把它整体搬迁下去
雁塔菜农<hotwc3@qq.com> 21:33:35  这就是关键的所在
雁塔菜农<hotwc3@qq.com> 21:34:01 裸奔实际是协作式的
雁塔菜农<hotwc3@qq.com> 21:34:37 必须大家谦让才能正常工作
agllero(859419016) 21:35:05 传球似的
阿亮(315196767) 21:35:30 协作是怎么实现的呢?
雁塔菜农<hotwc3@qq.com> 21:35:37 在裸奔里,delay()就是代码运行时间的叠加baud@乾坤大挪移(907153057) 21:35:43 每个任务都有自己的时间
雁塔菜农<hotwc3@qq.com> 21:35:47 即延时
outman(8451494) 21:35:51 时间片轮转是最简单的OS,优先级调度OS复杂些
阿亮(315196767) 21:35:56
outman(8451494) 21:36:21 Keil自带的RTX OS就是时间片的
baud@乾坤大挪移(907153057) 21:36:22 linux就有优先级
雁塔菜农<hotwc3@qq.com> 21:36:29 delay()占用了CPU的所有时间
outman(8451494) 21:36:35 uCOS是优先级的
雁塔菜农<hotwc3@qq.com> 21:36:50 LOOK有多种算法
雁塔菜农<hotwc3@qq.com> 21:37:11

使用特权

评论回复
8
lzlz70707|  楼主 | 2011-5-14 00:08 | 只看该作者
所以俺讲的和老师肯定是不一样的
雁塔菜农<hotwc3@qq.com> 21:49:26
他是作者,俺和大家一样是学者”~~~
七种武器(68148457) 21:50:15

要是某个任务没有delay()呢?
雁塔菜农<hotwc3@qq.com> 21:50:18
大家注意,任务里一定要用  while(1)封口
大侠永恒(472764312) 21:50:26
那就不delay
雁塔菜农<hotwc3@qq.com> 21:50:26

雁塔菜农<hotwc3@qq.com> 21:50:28
!!!
雁塔菜农<hotwc3@qq.com> 21:50:51
假若这个例程都没有delay()
大侠永恒(472764312) 21:51:22
那还怎么闪了.........
雁塔菜农<hotwc3@qq.com> 21:51:31
那么在协作式中,若同级任务就会独占
雁塔菜农<hotwc3@qq.com> 21:51:48
即一个任务永远工作
雁塔菜农<hotwc3@qq.com> 21:52:06
另一个任务永远迷糊
agllero(859419016) 21:52:26
延时时间有啥讲究吗
雁塔菜农<hotwc3@qq.com> 21:52:35
在时间片的调度算法中
雁塔菜农<hotwc3@qq.com> 21:52:53
这两个任务将平分时间
John Lee<j.y.lee@yeah.net> 21:53:20
来了。
雁塔菜农<hotwc3@qq.com> 21:53:16
file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\ksohtml\wps_clip_image-11174.png
雁塔菜农<hotwc3@qq.com> 21:53:25
哈哈
雁塔菜农<hotwc3@qq.com> 21:53:30
老师辛苦了
John Lee<j.y.lee@yeah.net> 21:53:38
根据任务需要而定。
七种武器(68148457) 21:54:05
多个任务的delay()要怎么协调?

使用特权

评论回复
9
lzlz70707|  楼主 | 2011-5-14 00:08 | 只看该作者
时间窗口会不会有错开或者重叠?
John Lee<j.y.lee@yeah.net> 21:54:05
哪里哪里。
雁塔菜农<hotwc3@qq.com> 21:54:05
老师看看俺上面讲的误导了没有
John Lee<j.y.lee@yeah.net> 21:54:17
没有,很好。
舍我其谁(609051974) 21:54:49
file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\ksohtml\wps_clip_image-11213.png
舍我其谁(609051974) 21:55:03
李老师
John Lee<j.y.lee@yeah.net> 21:55:16
多任务,一般不能用delay()来协调(同步)。
舍我其谁(609051974) 21:55:24
你和菜农2人搞过课堂网站吧
雁塔菜农<hotwc3@qq.com> 21:55:20
首先要转变裸奔之观念
爱河(834436962) 21:55:30
是不是每个任务用到deley()时,就冻结,然后等任务分配器,等时间到时重新把他唤醒
John Lee<j.y.lee@yeah.net> 21:55:42
差不多。
爱河(834436962) 21:56:19
如果两个任务同级,同时到呢?
John Lee<j.y.lee@yeah.net> 21:56:27
我画了一个图,大家看看:

使用特权

评论回复
10
lzlz70707|  楼主 | 2011-5-14 00:09 | 只看该作者
file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\ksohtml\wps_clip_image-11272.png
John Lee<j.y.lee@yeah.net> 21:57:23
这个图就是CPU控制权转移的流程。
雁塔菜农<hotwc3@qq.com> 21:57:21
老师刚画的,真辛苦
雁塔菜农<hotwc3@qq.com> 21:58:52
这个例程idle() 永远运行不了吧
John Lee<j.y.lee@yeah.net> 21:59:28
不,相反,这个例程的大部分时间被idle消耗了。
雁塔菜农<hotwc3@qq.com> 21:59:47
当都是delay(),明白了
John Lee<j.y.lee@yeah.net> 21:59:58
每个任务的执行时间是很短暂的。
雁塔菜农<hotwc3@qq.com> 21:59:58

John Lee<j.y.lee@yeah.net> 22:00:12
然后就调用了delay();
雁塔菜农<hotwc3@qq.com> 22:00:13
刚想通,被老师秒杀了~~~

使用特权

评论回复
11
lzlz70707|  楼主 | 2011-5-14 00:09 | 只看该作者
雁塔菜农<hotwc3@qq.com> 22:01:25
老师讲讲idle()里可以自己覆盖它吧

爱河(834436962) 22:01:33
不过像I2C这类的东西,delay()的时间不长,但是写一个字节要delay()很多次的,咋弄
John Lee<j.y.lee@yeah.net> 22:02:26
不建议在OS中使用I/O模拟。
雁塔菜农<hotwc3@qq.com> 22:02:23
这是小延时,比节拍时间短的多
John Lee<j.y.lee@yeah.net> 22:02:33
对。
爱河(834436962) 22:03:14
不用I/O模拟也是要时时返回,等待啊
雁塔菜农<hotwc3@qq.com> 22:03:24
如何处理这种小延时的问题???
John Lee<j.y.lee@yeah.net> 22:03:32
即使你定义每个tick周期是1/1000s,也比那些小延时大多了。
雁塔菜农<hotwc3@qq.com> 22:04:16
for()???
爱河(834436962) 22:04:21
同菜农问
John Lee<j.y.lee@yeah.net> 22:04:53
最好还是使用专用硬件接口。
爱河(834436962) 22:05:27
专用硬件接口也是要等待判断的
雁塔菜农<hotwc3@qq.com> 22:05:34
我们假定需要几个 NOP的延时
John Lee<j.y.lee@yeah.net> 22:05:42
硬件有中断。
John Lee<j.y.lee@yeah.net> 22:06:16
有中断,任务就不至于忙等待
雁塔菜农<hotwc3@qq.com> 22:06:58
有些是没有的,如操作LCD里需要等待一会,感觉自己用 for(int i = 0, i <=250;i++)
爱河(834436962) 22:07:04
在中断来临之前咱干啥
还没切换到另外一个程序就中断了咋办
John Lee<j.y.lee@yeah.net> 22:07:11
任务可以在启动硬件操作后,转入阻塞,让出CPU。硬件操作完成后,会发出中断,中断可以唤醒任务。
爱河(834436962) 22:08:05
那么任务将有两个领导安排?
John Lee<j.y.lee@yeah.net> 22:08:10
如果是太短的硬件操作,只能忙等
雁塔菜农<hotwc3@qq.com> 22:08:47

使用特权

评论回复
12
lzlz70707|  楼主 | 2011-5-14 00:10 | 只看该作者
忙等”=for(int i = 0, i <=250;i++);

雁塔菜农<hotwc3@qq.com> 22:08:49
???
John Lee<j.y.lee@yeah.net> 22:08:58

爱河(834436962) 22:09:14
不对啊
雁塔菜农<hotwc3@qq.com> 22:09:13
明白了
雁塔菜农<hotwc3@qq.com> 22:09:17
对的
爱河(834436962) 22:09:43
菜农那个把等待时间定死了
agllero(859419016) 22:09:45
这里的delay for是俩嘛事?
雁塔菜农<hotwc3@qq.com> 22:09:49
只要不要超过节拍的时间
John Lee<j.y.lee@yeah.net> 22:10:23
假设OS切换任务的开销为10us,而硬件操作后,20us就完成了,发出中断;那么这种情况,就不宜阻塞任务。
雁塔菜农<hotwc3@qq.com> 22:10:20
一个不占用CPU时间,后者占用
爱河(834436962) 22:10:55
还不如直接等判中断到来呢
John Lee<j.y.lee@yeah.net> 22:11:00

爱河(834436962) 22:11:51
一直查询,比中断效率高
John Lee<j.y.lee@yeah.net> 22:11:55
切换,是为了省出CPU时间给其它任务,如果省不出时间,就不宜切换。
爱河(834436962) 22:12:23

雁塔菜农<hotwc3@qq.com> 22:12:36
裸奔里,不主张在中断里太长,一个设置标志由主循环里接着处理
雁塔菜农<hotwc3@qq.com> 22:13:00
LOOK如何实现
雁塔菜农<hotwc3@qq.com> 22:13:24
file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\ksohtml\wps_clip_image-11422.png
John Lee<j.y.lee@yeah.net> 22:13:31
简单,这是所有OS都需要处理的。
雁塔菜农<hotwc3@qq.com> 22:13:35

使用特权

评论回复
13
lzlz70707|  楼主 | 2011-5-14 00:10 | 只看该作者
中断实际就是切换
John Lee<j.y.lee@yeah.net> 22:13:52
一个一个来。
雁塔菜农<hotwc3@qq.com> 22:13:55
好的
爱河(834436962) 22:14:03
在任务很多的时候,OS调度的时候是否占用很多资源啊
John Lee<j.y.lee@yeah.net> 22:14:25
先回答这个:file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\ksohtml\wps_clip_image-11452.png
John Lee<j.y.lee@yeah.net> 22:15:12
如果硬件操作后,1秒后中断才到来,就不能傻等了。
爱河(834436962) 22:16:42
我说的那个查询指在很短时间的延时,例如IIC的操作
John Lee<j.y.lee@yeah.net> 22:17:11
雁塔菜农<hotwc3@qq.com>  22:12:36
裸奔里,不主张在中断里太长,一个设置标志由主循环里接着处理
----------------------
rtos一般的处理方法,是操作同步对象,例如post semaphore等等。任务就可以唤醒了。
John Lee<j.y.lee@yeah.net> 22:17:31
爱河(834436962)  22:16:42
我说的那个查询指在很短时间的延时,例如IIC的操作
------------------
只有忙等。
John Lee<j.y.lee@yeah.net> 22:17:53
如果时序要求严格,还需要关闭中断。
John Lee<j.y.lee@yeah.net> 22:18:46
但这样会造成整个系统中断响应速度降低。
John Lee<j.y.lee@yeah.net> 22:19:36
所以,在RTOS环境中,尽量避免io模拟。
雁塔菜农<hotwc3@qq.com> 22:20:04
关闭中断就等于OS自残了
John Lee<j.y.lee@yeah.net> 22:20:20
如果确需io,则要仔细评估对整个系统的影响。
爱河(834436962) 22:20:23
看到很多库里有查询时用wihle(。。。)
如果由于某些原因,或中断关了,在死循环里出不来了,这些因素考虑了没?
雁塔菜农<hotwc3@qq.com> 22:20:22
当然随后会打开的
雁塔菜农<hotwc3@qq.com> 22:20:58
file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\ksohtml\wps_clip_image-1342.png

使用特权

评论回复
14
lzlz70707|  楼主 | 2011-5-14 00:10 | 只看该作者
雁塔菜农<hotwc3@qq.com> 22:21:29
关中断时间我认为应该小于节拍中断时间
John Lee<j.y.lee@yeah.net> 22:21:41
爱河(834436962)  22:20:23
看到很多库里有查询时用wihle(。。。)
如果由于某些原因,或中断关了,在死循环里出不来了,这些因素考虑了没?
----------------------
如果真有这样的库,建议你不要用。
雁塔菜农<hotwc3@qq.com> 22:21:54
否则应该用Delay()
John Lee<j.y.lee@yeah.net> 22:22:07
在裸奔时,一样有问题。
John Lee<j.y.lee@yeah.net>  22:22:24
这是库的质量低劣。
John Lee<j.y.lee@yeah.net>  22:22:56
任何代码在死循环时,一定要考虑超时问题。
雁塔菜农<hotwc3@qq.com>  22:23:00
所以库和OS要衔接好
雁塔菜农<hotwc3@qq.com>  22:23:23
对,超时处理
John Lee<j.y.lee@yeah.net>  22:24:40
Any question?
大侠永恒(472764312)  22:25:44
file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\ksohtml\wps_clip_image-11543.png
美好人生(761688039)  22:26:09
file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\ksohtml\wps_clip_image-7386.png

使用特权

评论回复
15
lzlz70707|  楼主 | 2011-5-14 00:11 | 只看该作者
再附上一个PDF 嘿嘿

Look多任务与Delay.pdf

265.44 KB

使用特权

评论回复
16
Swallow_0322| | 2011-5-14 07:51 | 只看该作者
顶!实况转播呀!:P

使用特权

评论回复
17
liwenji87| | 2011-5-14 12:03 | 只看该作者
支持
学习一下!!!

使用特权

评论回复
18
hotpower| | 2011-5-15 16:21 | 只看该作者
需要一些具有代表性的例程。
这样才能多体验裸奔和os的不同和各自的特点。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

264

帖子

5

粉丝