共2条
1/1 1 跳转至页
COS,II μCOS-II下的第一个例程?
问
《深入浅出ARM7—LPC213X/214X(下)》中的μCOS-II下的第一个例程,简要附在下面:
……
int main (void)
{
OSInit();
OSTaskCreate(Task1, (void *)0, &TaskStartStk[TASK_STK_SIZE - 1], 0);
OSStart();
return 0;
}
*********************************************************************************************************
** 任务1-Task1() 键盘扫描(具有去抖动功能)
*********************************************************************************************************
void Task1(void *pdata)
{ ……
for (;;) //(1)
{
OSTimeDly(OS_TICKS_PER_SEC / 50); /* 延时20毫秒 */ //(2)
if (GetKey() != KEY1) /* GetKey用于获取键盘当前状态 */
continue; /* 不是KEY1不理会 */
OSTimeDly(OS_TICKS_PER_SEC / 50); /* 延时20毫秒,用于去抖 */ //(3)
if (GetKey() != KEY1) /* 还是KEY1才正确 */
continue;
OSTaskCreate(Task2, (void *)0, &TaskStk[TASK_STK_SIZE - 1], 10); //(4)
while (GetKey() != 0) /* 等待松开按键 */
{
OSTimeDly(OS_TICKS_PER_SEC / 50); /* 延时20毫秒 */ //(5)
}
}
}
*********************************************************************************************************
** 任务2-Task2() 蜂鸣器鸣叫
*********************************************************************************************************
void Task2(void *pdata)
{ ……
BeeMoo(); /* 使蜂鸣器鸣叫 */
OSTimeDly(OS_TICKS_PER_SEC / 8); /* 延时 */
BeeNoMoo(); /* 使蜂鸣器停止鸣叫 */
OSTimeDly(OS_TICKS_PER_SEC / 4); /* 延时 */
BeeMoo(); /* 使蜂鸣器鸣叫 */
OSTimeDly(OS_TICKS_PER_SEC / 8); /* 延时 */
BeeNoMoo(); /* 使蜂鸣器停止鸣叫 */
OSTaskDel(OS_PRIO_SELF); /* 删除自己 */
}
为什么每次运行这个程序,在程序开始时蜂鸣器总要蜂鸣两声?没有键按下,Task1为何能运行建立任务的代码?
答 1: re注意:
在我们的EasyARM2131开发板的按键松开时是高电平,按下才是低电平。
当不按下按键的情况下,运行程序,Task2已经被Task1建立了,所以程序开始运行后,Task2运行(蜂鸣器总会响两声),然后Task2被删除。当按键按下后,Task1,再次重新建立Task2。 答 2: 改动
您说的对,(GetKey() != KEY1)是如果键按下,while (GetKey() != 0)是当无间按下时,这可以解释程序开始即蜂鸣两次。但新的问题是:
如果把(4)处建立Task2的语句移到(5)的后面,如下:
……
while (GetKey() != 0) /* 等待松开按键 */
{
OSTimeDly(OS_TICKS_PER_SEC / 50); /* 延时20毫秒 */ //(5)
}
OSTaskCreate(Task2, (void *)0, &TaskStk[TASK_STK_SIZE - 1], 10); //(4)
……
为什么程序开始运行就不再有2次蜂鸣,蜂鸣完全由按键触发?
……
int main (void)
{
OSInit();
OSTaskCreate(Task1, (void *)0, &TaskStartStk[TASK_STK_SIZE - 1], 0);
OSStart();
return 0;
}
*********************************************************************************************************
** 任务1-Task1() 键盘扫描(具有去抖动功能)
*********************************************************************************************************
void Task1(void *pdata)
{ ……
for (;;) //(1)
{
OSTimeDly(OS_TICKS_PER_SEC / 50); /* 延时20毫秒 */ //(2)
if (GetKey() != KEY1) /* GetKey用于获取键盘当前状态 */
continue; /* 不是KEY1不理会 */
OSTimeDly(OS_TICKS_PER_SEC / 50); /* 延时20毫秒,用于去抖 */ //(3)
if (GetKey() != KEY1) /* 还是KEY1才正确 */
continue;
OSTaskCreate(Task2, (void *)0, &TaskStk[TASK_STK_SIZE - 1], 10); //(4)
while (GetKey() != 0) /* 等待松开按键 */
{
OSTimeDly(OS_TICKS_PER_SEC / 50); /* 延时20毫秒 */ //(5)
}
}
}
*********************************************************************************************************
** 任务2-Task2() 蜂鸣器鸣叫
*********************************************************************************************************
void Task2(void *pdata)
{ ……
BeeMoo(); /* 使蜂鸣器鸣叫 */
OSTimeDly(OS_TICKS_PER_SEC / 8); /* 延时 */
BeeNoMoo(); /* 使蜂鸣器停止鸣叫 */
OSTimeDly(OS_TICKS_PER_SEC / 4); /* 延时 */
BeeMoo(); /* 使蜂鸣器鸣叫 */
OSTimeDly(OS_TICKS_PER_SEC / 8); /* 延时 */
BeeNoMoo(); /* 使蜂鸣器停止鸣叫 */
OSTaskDel(OS_PRIO_SELF); /* 删除自己 */
}
为什么每次运行这个程序,在程序开始时蜂鸣器总要蜂鸣两声?没有键按下,Task1为何能运行建立任务的代码?
答 1: re注意:
在我们的EasyARM2131开发板的按键松开时是高电平,按下才是低电平。
当不按下按键的情况下,运行程序,Task2已经被Task1建立了,所以程序开始运行后,Task2运行(蜂鸣器总会响两声),然后Task2被删除。当按键按下后,Task1,再次重新建立Task2。 答 2: 改动
您说的对,(GetKey() != KEY1)是如果键按下,while (GetKey() != 0)是当无间按下时,这可以解释程序开始即蜂鸣两次。但新的问题是:
如果把(4)处建立Task2的语句移到(5)的后面,如下:
……
while (GetKey() != 0) /* 等待松开按键 */
{
OSTimeDly(OS_TICKS_PER_SEC / 50); /* 延时20毫秒 */ //(5)
}
OSTaskCreate(Task2, (void *)0, &TaskStk[TASK_STK_SIZE - 1], 10); //(4)
……
为什么程序开始运行就不再有2次蜂鸣,蜂鸣完全由按键触发?
共2条
1/1 1 跳转至页
回复
| 有奖活动 | |
|---|---|
| 2026年“我要开发板活动”第三季,开始了! | |
| 硬核工程师专属补给计划——填盲盒 | |
| “我踩过的那些坑”主题活动——第002期 | |
| 【EEPW电子工程师创研计划】技术变现通道已开启~ | |
| 发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
| 【EEPW在线】E起听工程师的声音! | |
| 高校联络员开始招募啦!有惊喜!! | |
| 【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
我要赚赏金打赏帖 |
|
|---|---|
| 以启明云端ESP32P4开发板实现TF卡读写功能被打赏¥28元 | |
| 【分享开发笔记,赚取电动螺丝刀】树莓派5串口UART0配置被打赏¥25元 | |
| 【STM32F103ZET6】17:分享在Rtos项目中断管理的使用经验被打赏¥23元 | |
| 【STM32F103ZET6】16:分享在中断中恢复串口任务,遇到的问题被打赏¥31元 | |
| 在FireBeetle2ESP32-C5上实现温度大气压检测及显示被打赏¥21元 | |
| 【分享开发笔记,赚取电动螺丝刀】SAME51双串口收发配置被打赏¥27元 | |
| Chaos-nano操作系统在手持式VOC检测设备上的应用被打赏¥37元 | |
| 【分享开发笔记,赚取电动螺丝刀】关于在导入第三方库lib时,wchart类型冲突的原因及解决方案被打赏¥30元 | |
| 在FireBeetle2ESP32-C5上实现温湿度检测和显示被打赏¥20元 | |
| 在FireBeetle2ESP32-C5上实现光照强度检测及显示被打赏¥21元 | |
我要赚赏金
