本帖最后由 wang0225 于 2011-8-18 13:11 编辑
LOOK志愿者获奖感言
根据菜农大叔的指示,写篇获奖感言!我的语文水平有限,写的不好望大家见谅!思来想去,我觉得还是说下我是怎么认识LOOK的吧!
我到现在为止接触NUC120这个单片机已经有2个月啦,刚开始是老大给的一个项目!也算是赶鸭子上架吧,以前玩的是8位机。我现在还记得刚进大群(菜农注解:QQ群12047788)时的第一个问题,当时的的UART收发不正常,原因现在觉得不是问题,可在当时确实相当迷茫!记得有句话说的好啊:成功的结果大体相同,但通往成功的过程中的失败是不同的!
我就是在大群里知道LOOK这个RTOS的,在21IC论坛上下载啦一些资料,从一无所知的菜鸟到现在的懂点的菜鸟!到现在我还记得Lee老师给我讲的软件安装遇到的问题!从怎样建立一个LOOK工程学起,当时写的第一个LOOK就是建立两个任务:一个流水灯和一个闪烁灯。程序如下:
#include "LED.h"
#include "NUC1xx.h"
#include "NUC1xxM051Seriescfg.h"
// 任务类 task_LED1_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_LED2_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);
}
}
#ifdef LOOK_SCHEDULING_PRIORITY
instantiate::task<task_LED1_t, LOOK_STACK_SIZE> task_LED1(0);
instantiate::task<task_LED2_t, LOOK_STACK_SIZE> task_LED2(0);
#else
instantiate::task<task_LED1_t, LOOK_STACK_SIZE> task_LED1;
instantiate::task<task_LED2_t, LOOK_STACK_SIZE> task_LED2;
#endif
这个程序很简单,对应在菜农大叔助学板上的现象就是LED1以一定的频率闪烁,LED2-LED3-LED4依次显示。
当我把程序调试成功后,我这个菜鸟的心情是相当激动啊!我和LOOK就这样look啦,哈哈。
RTOS可以让我更加专注单个任务,而较少关心任务间的逻辑,试想这个如果用裸机来写的话,我的考虑的就多啦!打个比方吧:用裸机来写程序就好像我们平时做饭一样,从买菜,洗菜,到炒菜等等都需要我们来考虑,而用LOOK这个RTOS我们只需要关心买菜啦。哈哈,说的不对,请指出!一个菜你放到任务里就好啦,哈哈。当然任务间的同步啦,信息传递啦,这个还是要的,但就对相对独立的任务而言,好处就不言而喻啦。像上面这个程序我就只需要吧流水灯的程序写好放到一个任务里,把闪烁灯的程序写好放到另一个任务里就OK啦。
初始化我认为LOOK更加方便啦,还以上面的例子说起, 只需要在图中把PA的2,3,4,5设置成输出即可,简单吧,哈哈!
再后来有幸当上LOOK志愿者,在此谢谢大叔!谢谢帮助过我的朋友们!说啦这么多,希望对有些人有用。祝大家每天进步!
工程见附件! |