OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3897|回复: 25

诸如此类现象,应当如何调试。(新手勿近)

[复制链接]

56

主题

520

帖子

0

精华

高级会员

Rank: 4

积分
964
金钱
964
注册时间
2014-11-18
在线时间
160 小时
发表于 2016-8-17 10:10:09 | 显示全部楼层 |阅读模式
20金钱
本帖最后由 aiyeba 于 2016-8-19 09:58 编辑

[mw_shl_code=c,true]#include "led.h"
#include "delay.h"
#include "sys.h"
#include "lcd.h"
#include "usart.h"
#include "FreeRTOS.h"
#include "task.h"
#include "queue.h"




void Sys_Init(void);
void vLED1Task( void *pvParameters );
void vLED2Task( void *pvParameters );
void vLCDTask(void *pvParameters );



void PrvSetUpHardware(void);





int main(void)
{        
                             //Ñóê±oˉêy3õê¼»ˉ         
        Sys_Init();
        
        PrvSetUpHardware();

  printf("I Come in\r\n");
        xTaskCreate( vLED1Task, "LED1", 128, NULL, 2, NULL );
        
        xTaskCreate( vLED2Task, "LED2", 128, NULL, 2, NULL );
        
        xTaskCreate( vLCDTask, "LCD", 200, NULL, 3, NULL );
        
  vTaskStartScheduler();
  
        return 0;
}





void Sys_Init(void)
{
  delay_init();
}
//ó2¼t3õê¼»ˉè«2¿·ÅÔúÕaàï
void PrvSetUpHardware(void)
{
  LED_Init();                          //3õê¼»ˉóëLEDᬽóμÄó2¼t½ó¿ú
        LCD_Init();
        uart_init(115200);
}


//μÆμÄèÎÎñ
void vLED1Task( void *pvParameters )  
{  
  for( ;; )  
  {  
          printf("1\r\n");
    LED0=0;  
    vTaskDelay(1000);  
    LED0=1;  
    vTaskDelay(1000);  
  }  
}


void vLED2Task( void *pvParameters )
{
   for( ;; )  
  {
    printf("2\r\n");        
    LED1=0;  
    vTaskDelay(500);  
    LED1=1;  
    vTaskDelay(500);  
  }
}

void vLCDTask(void *pvParameters )
{
  unsigned char buff[]="I Love You STM32";
  for(;;)
  {
          printf("3\r\n");        
          LCD_ShowString(0,0,210,24,24,buff);
          vTaskDelay(30);
        }

}[/mw_shl_code]
上次做了一个FreeRTOS的移植实验,移植本身不难。几分钟就搞定了。简单的测试了一下流水灯。

在不使用定时器的时候下,实现了2盏灯的不同频率的闪烁。(其他办法也行,但是加入第三个任务的时候,严重的拖延时间)。


我直接说现象。 我设置三个任务       TaskLED0   TaskLED1  TaskLCD   
最后下载进去    perfect   

可是 问题来了。   断电后,重启的时候。什么都没有,也就是系统都起不来了。 那是不是复位问题呢?

按下复位键也不行。   然后我再次下载进去  能用。这一次我先不断电,而是按下复位键,发现系统又挂了。

期间,我考虑过栈大小问题,任务优先级问题等等。  我最后怀疑的是原子哥的LCD是不是存在系统级的设置?

这里我说的调试  是系统能跑,我放得打印信息都可以,但是按下复位键了 ,什么打印信息都没有了,我就不知道怎么找问题了。(我都是通过串口打印找问题的)

FreeRTOS跑马灯.zip

2.78 MB, 下载次数: 155

最佳答案

查看完整内容[请看2#楼]

uart_init(115200)放到LCD_Init()的前面看看,好像LCD_Init()里面用到了串口。 你的标题,我居然看成了新手请进
自己选择的路,成家前走完。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

30

主题

1170

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1993
金钱
1993
注册时间
2016-2-16
在线时间
527 小时
发表于 2016-8-17 10:10:10 | 显示全部楼层
本帖最后由 憨厚诚实大叔 于 2016-8-18 09:36 编辑

uart_init(115200)放到LCD_Init()的前面看看,好像LCD_Init()里面用到了串口。
你的标题,我居然看成了新手请进
回复

使用道具 举报

56

主题

520

帖子

0

精华

高级会员

Rank: 4

积分
964
金钱
964
注册时间
2014-11-18
在线时间
160 小时
 楼主| 发表于 2016-8-17 10:13:49 | 显示全部楼层
能决解这个问题的,都是我的老师。请受徒儿一拜。
自己选择的路,成家前走完。
回复

使用道具 举报

5

主题

121

帖子

0

精华

高级会员

Rank: 4

积分
620
金钱
620
注册时间
2016-1-26
在线时间
150 小时
发表于 2016-8-17 11:02:20 | 显示全部楼层
代码贴出来会更方便找到问题的
回复

使用道具 举报

6

主题

69

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1786
金钱
1786
注册时间
2015-4-20
在线时间
258 小时
发表于 2016-8-17 14:40:00 | 显示全部楼层
是不是把下载口和其他设备的IO复用了?
回复

使用道具 举报

56

主题

520

帖子

0

精华

高级会员

Rank: 4

积分
964
金钱
964
注册时间
2014-11-18
在线时间
160 小时
 楼主| 发表于 2016-8-17 15:05:13 | 显示全部楼层
潇潇熊 发表于 2016-8-17 14:40
是不是把下载口和其他设备的IO复用了?

能下载啊,下载后也能用。  但是复位键和断电重启  就什么都没有了。也就是没烧录一次 就不能断电和按复位键了
自己选择的路,成家前走完。
回复

使用道具 举报

0

主题

34

帖子

0

精华

高级会员

Rank: 4

积分
968
金钱
968
注册时间
2016-7-18
在线时间
109 小时
发表于 2016-8-17 17:49:34 | 显示全部楼层
复位电路有问题?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2016-8-17 19:58:05 | 显示全部楼层
帮顶
回复

使用道具 举报

56

主题

520

帖子

0

精华

高级会员

Rank: 4

积分
964
金钱
964
注册时间
2014-11-18
在线时间
160 小时
 楼主| 发表于 2016-8-18 08:47:51 | 显示全部楼层

原子哥没有研究一下FreeRTOS吗?  为什么你的LCD的实验加入进去会把系统杀死。

指按下复位键或者断电重启都跑不起来了   也就是main函数都进不去了。

用打印来调试的机会都没有了
自己选择的路,成家前走完。
回复

使用道具 举报

19

主题

702

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3339
金钱
3339
注册时间
2013-7-30
在线时间
708 小时
发表于 2016-8-18 08:53:53 | 显示全部楼层
Boot引脚状态?
思想很重要,无论做人还是编程!
我的技术公众号【微联智控工作室】
回复

使用道具 举报

9

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2016-8-1
在线时间
25 小时
发表于 2016-8-18 09:08:38 | 显示全部楼层
感觉到了对新手的歧视
回复

使用道具 举报

30

主题

1170

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1993
金钱
1993
注册时间
2016-2-16
在线时间
527 小时
发表于 2016-8-18 09:39:53 | 显示全部楼层
楼主楼主,能分享下你FreeRTOS的资料么,原子的ucos3给我感觉占空间太多,想换一个
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2016-8-18 22:39:35 | 显示全部楼层
aiyeba 发表于 2016-8-18 08:47
原子哥没有研究一下FreeRTOS吗?  为什么你的LCD的实验加入进去会把系统杀死。

指按下复位键或者断电 ...

我同事在研究
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

56

主题

520

帖子

0

精华

高级会员

Rank: 4

积分
964
金钱
964
注册时间
2014-11-18
在线时间
160 小时
 楼主| 发表于 2016-8-19 09:36:25 | 显示全部楼层
xinghongyc 发表于 2016-8-18 09:08
感觉到了对新手的歧视

我是不想让新手感觉STM32太难了,其实很简单的。鼓励新手,死怼32.
自己选择的路,成家前走完。
回复

使用道具 举报

56

主题

520

帖子

0

精华

高级会员

Rank: 4

积分
964
金钱
964
注册时间
2014-11-18
在线时间
160 小时
 楼主| 发表于 2016-8-19 09:54:31 | 显示全部楼层
憨厚诚实大叔 发表于 2016-8-18 09:34
uart_init(115200)放到LCD_Init()的前面看看,好像LCD_Init()里面用到了串口。
你的标题,我居然看成了新 ...

我试试,我之前试过,一定要屏蔽LCD初始化,复位键才不会异常。

当然,你说的这个问题,我之前没加串口的时候也这样。
自己选择的路,成家前走完。
回复

使用道具 举报

56

主题

520

帖子

0

精华

高级会员

Rank: 4

积分
964
金钱
964
注册时间
2014-11-18
在线时间
160 小时
 楼主| 发表于 2016-8-19 09:56:06 | 显示全部楼层
憨厚诚实大叔 发表于 2016-8-18 09:39
楼主楼主,能分享下你FreeRTOS的资料么,原子的ucos3给我感觉占空间太多,想换一个

你用ucosII啊,当然,FreeRTOS是真的小,就几个c文件,而且用起来超级爽。我在用FreeRTOS做智能锁的项目。
自己选择的路,成家前走完。
回复

使用道具 举报

56

主题

520

帖子

0

精华

高级会员

Rank: 4

积分
964
金钱
964
注册时间
2014-11-18
在线时间
160 小时
 楼主| 发表于 2016-8-19 09:57:16 | 显示全部楼层

我都接地了,难道你知道问题了。
自己选择的路,成家前走完。
回复

使用道具 举报

56

主题

520

帖子

0

精华

高级会员

Rank: 4

积分
964
金钱
964
注册时间
2014-11-18
在线时间
160 小时
 楼主| 发表于 2016-8-19 09:59:14 | 显示全部楼层
本帖最后由 aiyeba 于 2016-8-19 10:00 编辑
憨厚诚实大叔 发表于 2016-8-18 09:39
楼主楼主,能分享下你FreeRTOS的资料么,原子的ucos3给我感觉占空间太多,想换一个

其实就是添加一个FreeRTOS的文件  里面很多C文件   

然后移植的话 你修改几个参数就可以了   去百度一下吧   很简单的

上面我的工程里面有个FreeRTOS的文件   你移植一下就好了。
自己选择的路,成家前走完。
回复

使用道具 举报

56

主题

520

帖子

0

精华

高级会员

Rank: 4

积分
964
金钱
964
注册时间
2014-11-18
在线时间
160 小时
 楼主| 发表于 2016-8-20 13:41:02 | 显示全部楼层

原子哥啊,你LCD_Init()里面为什么要加打印呢? 也不说一声,
害的我以为是别的问题,找了一个礼拜。

不过我还是无法理解,为什么这个printf会卡死,是不是这个函数用的是那种while等待然后发送
的形式?
自己选择的路,成家前走完。
回复

使用道具 举报

56

主题

520

帖子

0

精华

高级会员

Rank: 4

积分
964
金钱
964
注册时间
2014-11-18
在线时间
160 小时
 楼主| 发表于 2016-8-20 13:42:08 | 显示全部楼层
憨厚诚实大叔 发表于 2016-8-17 10:10
uart_init(115200)放到LCD_Init()的前面看看,好像LCD_Init()里面用到了串口。
你的标题,我居然看成了新 ...

验证结果证明,你是对的。不愧是有一个太阳的大叔啊。
自己选择的路,成家前走完。
回复

使用道具 举报

84

主题

766

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2775
金钱
2775
注册时间
2015-6-1
在线时间
394 小时
发表于 2016-8-20 15:53:13 | 显示全部楼层
本帖最后由 yuzeyuan1 于 2016-8-20 15:54 编辑
aiyeba 发表于 2016-8-20 13:42
验证结果证明,你是对的。不愧是有一个太阳的大叔啊。

楼主,我有个问题。最初你说了刚下载进去时是OK的,程序可以跑是吧?这说明不是串口初始化的事啊。
我前几天遇到一个现象,不知道你有啥想法不,我还不知道为什么:
板子上有个的红色复位键,应该是接的芯片的reset脚,按下它可以复位。板子上还有一个PA0,当关机时按PA0也可以启动。两者都是从main函数的第一句话开始执行。
问题来了,我的代码中有待机唤醒部分,我先让它待机,就是最深度的休眠。然后按复位键开机,此时发现确实开机了,但是几秒后会卡死(发现是触发长按左键,自行关机了)。而按PA0开机就没问题,不会卡死(说明没触发长按左键,所以没有关机)。全程中我是没有按左键的,所以我认为复位键与PA0高电平触发会对板子产生两种不同的效果,换句话说就是会将某些脚自动置高或置低,因此触发了我长按左键的效果。
文中你说是刚烧写时没事,按复位键会卡死,那如果是按PA0,是不是就和我一样,直接跳过了你卡死那部分呢?楼主有没有兴趣试验一下?
要是看懂我在说啥的话,能不能顺便教教我为啥PA0和复位键,一个会触发“左键按下”、另一个就不会触 发“左键按下”。
自在随心
回复

使用道具 举报

56

主题

520

帖子

0

精华

高级会员

Rank: 4

积分
964
金钱
964
注册时间
2014-11-18
在线时间
160 小时
 楼主| 发表于 2016-8-20 16:14:48 | 显示全部楼层
yuzeyuan1 发表于 2016-8-20 15:53
楼主,我有个问题。最初你说了刚下载进去时是OK的,程序可以跑是吧?这说明不是串口初始化的事啊。
我前 ...

加我QQ吧  867051287
自己选择的路,成家前走完。
回复

使用道具 举报

56

主题

520

帖子

0

精华

高级会员

Rank: 4

积分
964
金钱
964
注册时间
2014-11-18
在线时间
160 小时
 楼主| 发表于 2016-8-20 17:33:51 | 显示全部楼层
憨厚诚实大叔 发表于 2016-8-17 10:10
uart_init(115200)放到LCD_Init()的前面看看,好像LCD_Init()里面用到了串口。
你的标题,我居然看成了新 ...

可是大叔,我不明白的是第一次为什么可以跑气来呢?
如果是LCD_Init()函数本身的问题,那么第一次下载进去后应该什么现象没有,但是
我的却是一切正常。
自己选择的路,成家前走完。
回复

使用道具 举报

84

主题

766

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2775
金钱
2775
注册时间
2015-6-1
在线时间
394 小时
发表于 2016-8-20 22:00:17 | 显示全部楼层
aiyeba 发表于 2016-8-20 16:14
加我QQ吧  867051287

qq验证需要回答问题。。。我的820250676,你加我吧
自在随心
回复

使用道具 举报

30

主题

1170

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1993
金钱
1993
注册时间
2016-2-16
在线时间
527 小时
发表于 2016-8-21 10:23:58 | 显示全部楼层
aiyeba 发表于 2016-8-20 13:41
原子哥啊,你LCD_Init()里面为什么要加打印呢? 也不说一声,
害的我以为是别的问题,找了一个礼拜。
...

你说的第一次跑成功,我也不清楚是怎回事。这个问题好像是以前有人遇到类似的问题,我恰好看见了,然后还有印象。
printf的数据打印,他重设定到串口1了,里面用了while等等TC标志
回复

使用道具 举报

30

主题

1170

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1993
金钱
1993
注册时间
2016-2-16
在线时间
527 小时
发表于 2016-8-21 10:24:52 | 显示全部楼层
自从我水到了1000积分后,就很少水经验了,也不想水经验了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-1 02:15

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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