8962上FreeRTOS的demo在9B96上运行时,vTaskCreate创建成功,但任务没有执行。Y ?

2019-03-24 16:00发布

  以下代码是我基于8962的FreeRTOS的demo程序的main函数而修改的。
1:  TCP协议栈基于uIP, 在8962的板子上运行良好;
2:  然后移植到9b96的板子上时,运行到创建vTask_uIP时,虽然返回值表示任务创建成功,但是该任务并没有执行。
     任务中的打印消息没有,ping也不通
3:  然后我把这个函数vuIP_Task()直接放在main函数中调用,结果网络就通了,ping通,数据收发正常。

    基于这个现象,是不是操作系统的任务上下文切换没有进行?

   我知道9B96的ROM上集成了SafeRTOS, 但是我没有使用它,不知道我使用的FreeRTOS是
   不是与这个有冲突?? 我觉得不应该吧。。

    很困惑,求各位同行帮忙分析解决。。 代码信息不够的,我会再贴出来。

  1. int main( void )
  2. {
  3. signed taskResult;

  4. prvSetupHardware();
  5. /* Create the queue used by the OLED task.  Messages for display on the OLED
  6. are received via this queue. */
  7. //xOLEDQueue = xQueueCreate( mainOLED_QUEUE_SIZE, sizeof( xOLEDMessage ) );

  8. /* 初始化串口 */
  9. InitUart();

  10. /* 初始化文件系统 */
  11. InitFatfs();

  12. /* Create the uIP task if running on a processor that includes a MAC and
  13. PHY. */
  14. if( SysCtlPeripheralPresent( SYSCTL_PERIPH_ETH ) )
  15. {               /* 70 x 3 x 12*/
  16.   taskResult = xTaskCreate( vuIP_Task, ( signed portCHAR * ) "uIP", mainBASIC_WEB_STACK_SIZE*12, NULL, mainCHECK_TASK_PRIORITY - 1, NULL );
  17.   if (taskResult == pdPASS)
  18.   {
  19.    UARTprintf("Create uIP Task Success! ");
  20.   }
  21.   else
  22.    UARTprintf("Create uIP Task Failed! ");
  23. }        

  24. /* Create SD_Card task --nike */                                    /* 70 x 3 x 6*/
  25. //xTaskCreate(vStartSDCardTasks, ( signed portCHAR * ) "SD_Card", mainBASIC_WEB_STACK_SIZE, NULL, 0, NULL );
  26. #if 0
  27. /* i2s play task */                                                /* 70 x 3 x 1*/
  28. xTaskCreate(vStartI2STasks, ( signed portCHAR * ) "I2s_play", mainBASIC_WEB_STACK_SIZE*3, NULL, 0, NULL );
  29.   
  30. /* i2s record task */                                                 /* 70 x 3 x 1*/
  31. xTaskCreate(i2s_record_task, ( signed portCHAR * ) "I2s_record", mainBASIC_WEB_STACK_SIZE*3, NULL, 0, NULL );
  32. #endif
  33. /* 初始化watchdog */
  34. InitWatchDog();

  35. /* 初始化PCF8563  */
  36. InitPCF8563();

  37. /* 按键中断测试例程 */
  38. GPIO_E_Test();

  39. /* 其他GPIO中断初始化 */


  40. /* The suicide tasks must be created last as they need to know how many
  41. tasks were running prior to their creation in order to ascertain whether
  42. or not the correct/expected number of tasks are running at any given time. */
  43.     //vCreateSuicidalTasks( mainCREATOR_TASK_PRIORITY );
  44. /* Configure the high frequency interrupt used to measure the interrupt
  45. jitter time.  The Keil port does not yet include the
  46. configKERNEL_INTERRUPT_PRIORITY functionality so cannot perform this test. */
  47. #ifndef RVDS_ARMCM3_LM3S102
  48. {
  49.   vSetupTimer();
  50. }
  51. #endif

  52. /* Start the scheduler. */
  53. vTaskStartScheduler();
  54.     /* Will only get here if there was insufficient memory to create the idle
  55.     task. */
  56. return 0;
  57. }
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
1条回答
jkhu
2019-03-25 00:16
< 先把无关的外设初始化注释掉试试,可能初始化出问题,造成没能进入任务调度。

一周热门 更多>

相关问题

    相关文章