高级会员
- 积分
- 697
- 金钱
- 697
- 注册时间
- 2017-1-7
- 在线时间
- 75 小时
|
2金钱
程序如下 int main(void)
{
OS_ERR err;
CPU_SR_ALLOC();
delay_init(); //延时初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //中断分组配置
uart_init(115200); //串口波特率设置
LED_Init(); //LED初始化
USART2_Config(115200); //串口2初始化及波特率设置
USART3_Config(115200); //串口3初始化及波特率设置
UART4_Config(115200); //串口4初始化及波特率设置
UART5_Config(115200); //串口5初始化及波特率设置
connect_wlan(); //开机发送AT ,检测是否有WLAN信号*
OSInit(&err); //初始化UCOSIII
OS_CRITICAL_ENTER();//进入临界区
//创建开始任务
OSTaskCreate((OS_TCB * )&StartTaskTCB, //任务控制块
(CPU_CHAR * )"start task", //任务名字
(OS_TASK_PTR )start_task, //任务函数
(void * )0, //传递给任务函数的参数
(OS_PRIO )START_TASK_PRIO, //任务优先级
(CPU_STK * )&START_TASK_STK[0], //任务堆栈基地址
(CPU_STK_SIZE)START_STK_SIZE/10, //任务堆栈深度限位
(CPU_STK_SIZE)START_STK_SIZE, //任务堆栈大小
(OS_MSG_QTY )0, //任务内部消息队列能够接收的最大消息数目,为0时禁止接收消息
(OS_TICK )0, //当使能时间片轮转时的时间片长度,为0时为默认长度,
(void * )0, //用户补充的存储区
(OS_OPT )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR, //任务选项
(OS_ERR * )&err); //存放该函数错误时的返回值
OS_CRITICAL_EXIT(); //退出临界区
OSStart(&err); //开启UCOSIII ,这个函数之后任务调度器才起作用
while(1);
}
在程序初始化的connect_wlan()中调用了delay_ms(10),因为在OSStart(&err) 之前,那调用delay_ms(10)会不会触发任务调度?
|
-
UCOSIII初始化
最佳答案
查看完整内容[请看2#楼]
不会产生任务切换,因为任务调度器会检测系统是否运行,只有OSStart()才会使能系统运行标志位,
所以不会产生调度,而且原子的delay_ms在延时前会检测系统是否已经启动,综上所述不会运行切换
|