采用别人移植好的代码。即所需函数已写好。 准备工作:
1、ucos ii源码
2、stm32库
步骤:
1、建工程。
工程目录为:
2、配置ucos ii
在os_cfg.h中配置相关功能
3、修改相关函数
ucos ii需要一个定时器,在stm32中采用systick定时器,因此需要配置systick定时器
void SysTick_Configuration(void)
{
//关计数
SysTick_CounterCmd(SysTick_Counter_Disable);
//关中断
SysTick_ITConfig(DISABLE);
//配置SysTick的时钟源 此时为AHB时钟
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);
//配置指系统句柄的优先级(Systick句柄 3号抢占优先级,0号子优先级)
NVIC_SystemHandlerPriorityConfig(SystemHandler_SysTick, 3, 0);
//设置重载值1ms中断 HCLK=8M时
SysTick_SetReload(800000);
//使能Systick中断
SysTick_ITConfig(ENABLE);
//使能Systick计数即启动计数
SysTick_CounterCmd(SysTick_Counter_Enable);
}
需要systick定时器中断,在中断里面调用ucos的相关函数,以此来作为ucos的时钟。
void SysTickHandler(void)
{
OS_CPU_SR cpu_sr;
// OS_ENTER_CRITICAL(); //保存全局中断标志,关总中断
// OSIntNesting++;
// OS_EXIT_CRITICAL(); //恢复全局中断标志
OSIntEnter();
OSTimeTick();
OSIntExit();
}
配置pendsv函数
ucos通过pendsv来实现任务调试,因此需要在启动代码中更改pendsv
将原来的PendSV改为
OSPendSV
否则,系统会卡在
OSStartHang
B OSStartHang ; Should never get here
处。
|