关于stm32移植ucosii的main函数,下载后实验现象是什么?

#include"ucos_ii.h"#include"stm32f10x.h"#defineLED_00#defineLED_11#defineLED_22#defin... #include "ucos_ii.h"
#include "stm32f10x.h"
#define LED_0 0
#define LED_1 1
#define LED_2 2
#define LED_3 3
static OS_STK startup_task_stk[STARTUP_TASK_STK_SIZE];
static OS_STK task1_stk[TASK1_STK_SIZE];
static OS_STK task2_stk[TASK2_STK_SIZE];
void led_init(void);
void led_on(uint32_t n);
void led_off(uint32_t n);
//static void delay(uint32_t ms);
static void systick_init(void);
static void startup_task(void *p_arg);
static void task1(void *p_arg);
static void task2(void *p_arg);
int main(void)
{
OSInit();
OSTaskCreate(startup_task, (void *)0, &startup_task_stk[STARTUP_TASK_STK_SIZE - 1],STARTUP_TASK_PRIO);
OSStart();
return 0;
}
void led_init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz;
GPIO_Init(GPIOD,&GPIO_InitStructure);
}
void led_on(uint32_t n)
{
switch(n)
{
case LED_0: GPIO_SetBits(GPIOD,GPIO_Pin_2); break;
case LED_1: GPIO_SetBits(GPIOD,GPIO_Pin_3); break;
case LED_2: GPIO_SetBits(GPIOD,GPIO_Pin_4); break;
case LED_3: GPIO_SetBits(GPIOD,GPIO_Pin_7); break;
default: break;
}
}
void led_off(uint32_t n)
{
switch(n)
{
case LED_0: GPIO_ResetBits(GPIOD,GPIO_Pin_2);break;
case LED_1: GPIO_ResetBits(GPIOD,GPIO_Pin_3);break;
case LED_2: GPIO_ResetBits(GPIOD,GPIO_Pin_4);break;
case LED_3: GPIO_ResetBits(GPIOD,GPIO_Pin_7);break;
default: break;
}
}
//static void delay(uint32_t ms)
//{
// uint32_t count =8000;
// while(ms--)
// {
// while(count--);
// count=8000;
// }
//}
static void systick_init(void)
{
RCC_ClocksTypeDef rcc_clocks;
RCC_GetClocksFreq(&rcc_clocks);
SysTick_Config(rcc_clocks.HCLK_Frequency/OS_TICKS_PER_SEC);
}

static void startup_task(void *p_arg)
{
systick_init();/*Initialize the SysTick.*/
led_init();
#if(OS_TASK_STAT_EN>0)
OSStatInit();/*Determine CPU capacity.*/
#endif
/*TODO:create application tasks here*/
OSTaskCreate(task1,(void *)0, &task1_stk[TASK1_STK_SIZE-1],TASK1_PRIO);
OSTaskCreate(task2,(void *)0, &task2_stk[TASK2_STK_SIZE-1],TASK2_PRIO);
OSTaskDel(OS_PRIO_SELF);
}
static void task1(void *p_arg)
{
while(1)
{
led_on(LED_0);
OSTimeDly(200);
led_off(LED_0);
OSTimeDly(200);
}
}
static void task2(void *p_arg)
{
while(1)
{
led_on(LED_1);
OSTimeDly(500);
led_off(LED_1);
OSTimeDly(500);
}
}
展开
 我来答
追悔七年
2013-11-07 · TA获得超过587个赞
知道小有建树答主
回答量:251
采纳率:66%
帮助的人:266万
展开全部
如果程序正确并可以通过编译,那么运行结果将是LED_0亮2秒灭2秒的闪烁,LED_1亮5秒灭5秒的闪烁。
不过我觉得这个程序有问题,你的uCOS应该跑不起来,这段程序中,systick_init
在startup_task中初始化,将导致startup_task线程虽然在main中创建了但不能被切换到,因为uCOS的系统滴答时钟都还没有启动。所以应该把systick_init放在main中第一个调用,保证在uCOS启动之前,系统滴答时钟已正常启动。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式