OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 11411|回复: 7

UCOS-II移植到STM32F407VG后的问题

[复制链接]

1

主题

3

帖子

0

精华

新手入门

积分
27
金钱
27
注册时间
2013-3-20
在线时间
0 小时
发表于 2013-3-20 09:34:20 | 显示全部楼层 |阅读模式
    这两天移植了UCOS-II到STM32F407VG中,出现以下问题,希望大家能帮忙解决一下:
    我在系统中创建了两个任务,分别是让两个不同的LED灯以不同的频率闪烁,如下:
static  void  App_Task1(void *p_arg)
{
(void)p_arg;
GPIO_Configuration();
while(1)
{
 GPIOD->BSRRL = GPIO_Pin_15;//输出高电平
 OSTimeDly(200);
 GPIOD->BSRRH = GPIO_Pin_15;//输出低电平
OSTimeDly(200);
}
}
static  void  App_Task2(void *p_arg)
{
(void)p_arg;
//OSTaskSuspend(OS_PRIO_SELF);
GPIO_Configuration_Add();
while(1)
{
 GPIOD->BSRRL = GPIO_Pin_14;//输出高电平
          OSTimeDly(800);
 GPIOD->BSRRH = GPIO_Pin_14;//输出低电平
  //delay(400);
  OSTimeDly(800);
}
}
     我现在的问题是,如果将第二个任务中的
OSTimeDly(800)替换成单纯的延时delay(400)的话,就会出现这样的情况:任务一中使用的OSTimeDly(200)能够释放CPU的使用权,使得CPU能够执行任务优先级较低的任务二,但是程序就一直在任务二里面执行,而且灯能够闪烁,但再也回不到任务一了!当然,因为我第二个任务用的是delay(400),并没有释放CPU。可问题是,我在第二个任务中如果用的是OSTimeDly(800)来延时,CPU依然能够被释放去执行任务二,但是程序运行就死在了OSTimeDly(800)里面了。我曾经试过单步调试,也同样可以调试看到,程序从任务一调到任务二后一直在OSTimeDly(800)里面死循环。另外,我在调用OSInit()和OS_CPU_SysTickInit()后,立刻使用OSTimeDly(10)来进行延时,程序依然死在了OSTimeDly(10)里面。究竟是什么原因导致这样的呢?原子大哥请帮帮忙,谢谢啦!我的OS_CPU_SysTickInit()里面是这样写的:

void  OS_CPU_SysTickInit (void)
{
    OS_CPU_SR  cpu_sr =0;
    while(SysTick_Config(OS_CPU_SysTickClkFreq() / OS_TICKS_PER_SEC)!=0);
    OS_ENTER_CRITICAL(); 
    OSIntNesting++;
    OS_EXIT_CRITICAL();
    OSTimeTick();       
    OSIntExit();         
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
27
金钱
27
注册时间
2013-3-20
在线时间
0 小时
 楼主| 发表于 2013-3-20 10:00:52 | 显示全部楼层
另外,我再加多一个说明,好让大家更能理解我的问题所在,我在单步调试的时候,程序到了OSTimeDly里面然后是循环,可以看到,程序是一直在OS_TaskIdle()这个函数里面死循环的!还有啊,原子大哥,我也是华南理工大学的,是你师弟,麻烦了哈!
回复 支持 反对

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
27
金钱
27
注册时间
2013-3-20
在线时间
0 小时
 楼主| 发表于 2013-3-20 11:06:04 | 显示全部楼层
谢谢原子哥,我的问题自己解决了,还是谢谢你!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2013-3-20 12:24:39 | 显示全部楼层
回复【3楼】huangjinyu2013:
---------------------------------
这个真不好意思了,呵呵...
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

12

主题

126

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
281
金钱
281
注册时间
2013-1-5
在线时间
22 小时
发表于 2013-5-22 14:05:31 | 显示全部楼层
楼主知道这个变量类型在哪定义的不:RCC_ClocksTypeDef?
天道酬勤
回复 支持 反对

使用道具 举报

26

主题

261

帖子

1

精华

高级会员

Rank: 4

积分
734
金钱
734
注册时间
2013-11-1
在线时间
28 小时
发表于 2015-1-5 10:19:23 | 显示全部楼层
回复【3楼】huangjinyu2013:
---------------------------------
怎么解决的啊,怎么不说说
回复 支持 反对

使用道具 举报

70

主题

6697

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
12691
金钱
12691
注册时间
2012-11-26
在线时间
3710 小时
发表于 2015-1-5 11:07:16 | 显示全部楼层
回复【6楼】zhao305149619:
---------------------------------
你的delay函数要么用OS自带的,要么用原子的delay并且一定要使能OS

否则不会进行调度  就死在里面了
学无止境
回复 支持 反对

使用道具 举报

26

主题

261

帖子

1

精华

高级会员

Rank: 4

积分
734
金钱
734
注册时间
2013-11-1
在线时间
28 小时
发表于 2015-1-5 12:47:57 | 显示全部楼层
回复【7楼】jermy_z:
---------------------------------
使能os?什么意思?能详细一点吗?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 13:34

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表