初级会员
- 积分
- 97
- 金钱
- 97
- 注册时间
- 2015-8-10
- 在线时间
- 16 小时
|
10金钱
本帖最后由 liuxy236@tom.com 于 2017-1-5 20:45 编辑
UCOSII 移植到F0, 因为功耗的原因,系统主频采用8M 内部晶振,无倍频, 先弄了2个灯交替闪烁,发现 启动系统后15秒左右 灯才开始闪,原以为是主频的问题,更换为48M ,发现还是要延迟3秒才能交替工作,统计任务也关闭掉(未使用统计任务),调试中发现进入闪灯任务的OSdelay(100)函数后 可能进行了任务切换,空闲任务的OSIdleCtr 再跳变,约15秒后才能进行正常的闪灯,实在找不到什么原因,大侠们有遇到这个情况吗?
void Start_Task(void* pdata)
{
OS_CPU_SR cpu_sr;
OSDelay_init(); //时钟节拍初始化,函数调用原子delay.c文件
OS_ENTER_CRITICAL();
OSTaskCreate(LCD_Task,
(void *)0,
(OS_STK *)&LCD_TASK_STK[LCD_TASK_STK_SIZE - 1],
LCD_TASK_PRIO
);
OS_EXIT_CRITICAL();
OSTaskSuspend(OS_PRIO_SELF);
// OSTaskDel(OS_PRIO_SELF);
}
void LCD_Task(void* pdata)
{
while(1)
{
BACKLIGHT_OFF;
OSTimeDly(100); 程序执行到这里后观察空闲任务的计数变量OSIdleCtr,发现快速跳变,一直到15秒后恢复执行下面的代码,之后就正常循环执行while内代码
BACKLIGHT_ON;
OSTimeDly(100);
}
}
int main(void)
{
OS_CPU_SR cpu_sr;
Blight_Init();
OSInit();
OS_ENTER_CRITICAL();
OSTaskCreate(Start_Task,
(void *)0,
(OS_STK *)&START_TASK_STK[START_TASK_STK_SIZE - 1],
START_TASK_PRIO
);
OS_EXIT_CRITICAL();
OSStart();
return 0;
}
|
|