查看: 3108|回复: 4

[MQX] MQX+k60的问题

[复制链接]

该用户从未签到

15

主题

194

帖子

0

高级会员

Rank: 4

积分
551
最后登录
1970-1-1
发表于 2014-11-26 21:46:15 | 显示全部楼层 |阅读模式
应用层主任务运行一段时间后莫名停止了,一会上传我的代码和截图
我知道答案 目前已有4人回答
回复

使用道具 举报

该用户从未签到

15

主题

194

帖子

0

高级会员

Rank: 4

积分
551
最后登录
1970-1-1
 楼主| 发表于 2014-11-26 21:47:47 | 显示全部楼层
  1. #include "mqx.h"
  2. #include "bsp.h"

  3. void main_task(uint32_t);

  4. const TASK_TEMPLATE_STRUCT  MQX_template_list[] =
  5. {
  6.     /* Task Index, Function,  Stack, Priority, Name,   Attributes,          Param, Time Slice */
  7.     { 1,           main_task, 2500,  6,        "main", MQX_AUTO_START_TASK, 0,     0 },
  8.     { 0 }
  9. };

  10. void main_task(uint32_t initial_data)
  11. {
  12.     LWGPIO_STRUCT                         led_PTB16, led_PTB17, led_PTB18, led_PTB19;
  13.     FILE_PTR                              uart_fd;
  14.     uint32_t                                 error;
  15.     uint32_t                                 ser_opts = IO_SERIAL_NON_BLOCKING;
  16.         uint8_t                             buff[100] = {0};
  17.         uint32_t                count  = 0;
  18.         uint32_t                                n = 0;
  19.       
  20.         if(!lwgpio_init(&led_PTB16, (GPIO_PORT_B | GPIO_PIN16), LWGPIO_DIR_OUTPUT, LWGPIO_VALUE_NOCHANGE))
  21.         {
  22.                 printf("Initializing LED1 GPIO as output failed.\n");
  23.                 _task_block();
  24.         }
  25.             
  26.         if(!lwgpio_init(&led_PTB17, (GPIO_PORT_B | GPIO_PIN17), LWGPIO_DIR_OUTPUT, LWGPIO_VALUE_NOCHANGE))
  27.         {
  28.                 printf("Initializing LED1 GPIO as output failed.\n");
  29.                 _task_block();
  30.         }
  31.        
  32.         if(!lwgpio_init(&led_PTB18, (GPIO_PORT_B | GPIO_PIN18), LWGPIO_DIR_OUTPUT, LWGPIO_VALUE_NOCHANGE))
  33.         {
  34.                 printf("Initializing LED1 GPIO as output failed.\n");
  35.                 _task_block();
  36.         }
  37.             
  38.         if(!lwgpio_init(&led_PTB19, (GPIO_PORT_B | GPIO_PIN19), LWGPIO_DIR_OUTPUT, LWGPIO_VALUE_NOCHANGE))
  39.         {
  40.                 printf("Initializing LED1 GPIO as output failed.\n");
  41.                 _task_block();
  42.         }

  43.     lwgpio_set_functionality(&led_PTB16, 1);
  44.     lwgpio_set_functionality(&led_PTB17, 1);
  45.     lwgpio_set_functionality(&led_PTB18, 1);
  46.     lwgpio_set_functionality(&led_PTB19, 1);

  47.     lwgpio_set_value(&led_PTB16, LWGPIO_VALUE_HIGH);
  48.     lwgpio_set_value(&led_PTB17, LWGPIO_VALUE_HIGH);
  49.     lwgpio_set_value(&led_PTB18, LWGPIO_VALUE_HIGH);
  50.     lwgpio_set_value(&led_PTB19, LWGPIO_VALUE_HIGH);
  51.    
  52.         uart_fd = fopen("ittyc:", "w+");
  53.         if(uart_fd == NULL)
  54.         {
  55.                 fprintf(stderr, "Fatal Error: Unable to open device %s\n", "ittyb:");
  56.                 _task_block();
  57.         }

  58.         //下面这段加上之后,while(1)内最后一个端口翻转之后就会出现主现在阻塞!!!!!
  59.         ioctl(uart_fd, IO_IOCTL_DEVICE_IDENTIFY, &error);
  60.         if(error != IO_DEV_TYPE_PHYS_SERIAL_INTERRUPT)
  61.         {
  62.                 fprintf(stderr, "Fatal Error: Device is not interrupt driven serial line.\n");
  63.                 _task_block();
  64.         }
  65.        
  66.         error = ioctl(uart_fd, IO_IOCTL_SERIAL_SET_FLAGS, &ser_opts);
  67.         if(error != MQX_OK)
  68.         {
  69.                 fputs("Fatal Error: ioctl(). \n", stderr);
  70.                 _task_block();
  71.         }

  72.     while (TRUE)
  73.     {   
  74.             lwgpio_toggle_value(&led_PTB16);
  75.             lwgpio_toggle_value(&led_PTB17);
  76.             lwgpio_toggle_value(&led_PTB18);
  77.             lwgpio_toggle_value(&led_PTB19);
  78.             _time_delay(200);
  79.            
  80.     }
  81. }
复制代码


回复 支持 反对

使用道具 举报

该用户从未签到

15

主题

194

帖子

0

高级会员

Rank: 4

积分
551
最后登录
1970-1-1
 楼主| 发表于 2014-11-26 21:54:01 | 显示全部楼层

本来这部分代码仅仅是为了读取串口属性的,不知道为何,只要一加上这个ioctl,在while(1)里面的最后一个lwgpio_toggle_value(&led_PTB19);执行完之后,主任务就会立马停下,进入空闲任务,永远也回不到主任务
主任务停下.jpg
如果我注释掉lwgpio_toggle_value(&led_PTB19),那么主任务就停在lwgpio_toggle_value(&led_PTB18);
希望技术支持明天看到这个帖子能够予以回复,谢谢
回复 支持 反对

使用道具 举报

该用户从未签到

15

主题

194

帖子

0

高级会员

Rank: 4

积分
551
最后登录
1970-1-1
 楼主| 发表于 2014-11-26 21:55:30 | 显示全部楼层
楼上居然少了张图片。异常部分代码图片 疑惑的代码部分.jpg
不懂这个函数,对应用层造成了什么影响
回复 支持 反对

使用道具 举报

该用户从未签到

15

主题

194

帖子

0

高级会员

Rank: 4

积分
551
最后登录
1970-1-1
 楼主| 发表于 2014-11-26 22:08:49 | 显示全部楼层
程序执行到while(1)内最后一个lwgpio_toggle_value();时候就会进入空闲任务,不会再出来。。。这是现象。
程序死的最后一步.jpg

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-9-12 06:02 , Processed in 0.095785 second(s), 26 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表