硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3892|回复: 19
收起左侧

[MDK] 不知道为何,使用 keil 编译的工程无法下载在单片机里面 ?

  [复制链接]

612

主题

3064

回帖

4920

积分

至尊会员

积分
4920
发表于 2018-3-31 19:31:54 | 显示全部楼层 |阅读模式
不知道为何,使用 keil 编译的工程无法下载在单片机里面 ?

但是使用 iar 编译就完全没有问题,工程都是同一个工程,只是使用的 编译器不同而已,仿真器也都是一样的

使用keil 下载工程,到最后出现如下提示:
121212.png
回复

使用道具 举报

1

主题

109

回帖

112

积分

初级会员

固件開發工程師

积分
112
QQ
发表于 2018-3-31 21:07:08 | 显示全部楼层
看起来是下载设置出现问题。
检查下下载的算法。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107265
QQ
发表于 2018-4-1 10:11:42 | 显示全部楼层
回复

使用道具 举报

612

主题

3064

回帖

4920

积分

至尊会员

积分
4920
 楼主| 发表于 2018-4-1 21:31:24 | 显示全部楼层
eric2013 发表于 2018-4-1 10:11
我遇到过一次同样的错误

http://www.armbbs.cn/forum.php?mod=viewthread&tid=21712&extra=page%3D1% ...

终于折腾好了,编译器优化设置如下即可

keil 死机.png

最下面的那个复选框 不要选择即可,另外优化级别设置为 0
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107265
QQ
发表于 2018-4-2 01:40:36 | 显示全部楼层
hpdell 发表于 2018-4-1 21:31
终于折腾好了,编译器优化设置如下即可

这个稍有点神奇了,最下面的复选框一定要选上,是用于删除冗余函数的,要不增加你的Flash消耗。
回复

使用道具 举报

612

主题

3064

回帖

4920

积分

至尊会员

积分
4920
 楼主| 发表于 2018-4-2 09:55:38 | 显示全部楼层
本帖最后由 hpdell 于 2018-4-2 10:14 编辑
eric2013 发表于 2018-4-2 01:40
这个稍有点神奇了,最下面的复选框一定要选上,是用于删除冗余函数的,要不增加你的Flash消耗。
最下面的那个框框我测试了很多次,只要勾上程序下载、仿真都不行,无意中取消想
试试看,结果神奇般的就好了,而且下载速度可以达到 4M/s 且稳定,具体原因我目前也不清楚啊,貌似都快折腾 2-3天了啊,

有没有可能还是我的 程序有分配不合理(或者是协调不好)的情况造成的 ??  我目前使用 了 FreeRTOS + lwip + emwin 功能,

但是如果说是没有协调的话,那么使用 iar 又是完全正常的,从来没有出现过不能够下载程序或者仿真的情况。

现在还是有的萌萌的感觉,
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107265
QQ
发表于 2018-4-3 01:41:23 | 显示全部楼层
hpdell 发表于 2018-4-2 09:55
最下面的那个框框我测试了很多次,只要勾上程序下载、仿真都不行,无意中取消想
试试看,结果神奇般的就好 ...

也有可能是你下载器的问题,重新开电脑好了。
回复

使用道具 举报

612

主题

3064

回帖

4920

积分

至尊会员

积分
4920
 楼主| 发表于 2018-4-3 11:05:51 | 显示全部楼层
本帖最后由 hpdell 于 2018-4-3 11:07 编辑
eric2013 发表于 2018-4-3 01:41
也有可能是你下载器的问题,重新开电脑好了。

下载器我使用 jlink v9, stlink 都试过了,结果都是一样的,电脑也重新启动过了

另外发现如果程序有点问题就不能够下载了,也不能够仿真调试了,

使用iar进行调试、下载都没有,也就是使用iar编译器把程序调试好后再使用 keil 就可以正常下载了,感觉这个 问题很纠结啊,使用keil调试程序时,没有任何提示,直接就进入上面的错误了,根本无法进行调试了 ???
我的 单片机的 flash 地址是从 0x0820 0000 开始的,前面的 128KB 留给单片机系统升级使用,估计跟这个 地址应该也没有多大关系吧 ????

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107265
QQ
发表于 2018-4-3 14:27:36 | 显示全部楼层
hpdell 发表于 2018-4-3 11:05
下载器我使用 jlink v9, stlink 都试过了,结果都是一样的,电脑也重新启动过了

另外发现如果程序有点 ...

估计有一点关系吧。
回复

使用道具 举报

612

主题

3064

回帖

4920

积分

至尊会员

积分
4920
 楼主| 发表于 2018-4-6 12:28:32 | 显示全部楼层
本帖最后由 hpdell 于 2018-4-6 12:34 编辑
eric2013 发表于 2018-4-3 14:27
估计有一点关系吧。

你好,关于这个不能够使用 keil 进行下载程序,目前最新的发现描述如下,同时你们也帮忙想想看到底是哪里出了问题啊 ?

具体描述如下:

建立 gui 运行任务,优先级设置为 4,
其他任务优先级均设置为 3,
使用 xTaskCreate 这个函数一共创建了 3个任务,gui任务是使用 xTaskCreate 这个函数创建的
另外有3个使用 osThreadCreate  这个函数为 lwip 建立了3个任务,这3个任务的优先级均设置为 0

系统使用 FreeRTOS v9.0.0

static void vTaskGUI(void *pvParameters)   // 建立 gui 任务,
{
  ( void )pvParameters;                  /* 避免编译器告警 */
        
  GUI_SetBkColor(GUI_BLUE);
        GUI_Clear();        
        #if   0
                /*
                说明:
                不知道为什么,此处必须需要播放一个音乐文件后,lwip 才能够自动获取到ip地址及 keil 编译器能够下载程序?
                iar 编译器如果没有此播放文件,可以正常下载程序,但是lwip不能够自动获取到ip地址 ??
                播放歌曲任意一个即可
                keil 编译器优化等级设置为 0
                */
        //        audio_play_song("0:__Music/Flac/陈慧娴-千千阙歌-44K-16bit-bit-192K.flac") ;
        //        GUI_Clear();
               
        //        audio_play_song("0:__Music/Ape/刘涛-伤了心的女人怎么了.ape") ;
        //        GUI_Clear();
          audio_play_song("0:__Music/Wave/任盈盈 - 没了心的爱 16bit-48K-Stereo.wav");
                GUI_Clear();
        //        audio_play_song("0:__Music/Mp3/005说再见不应该在秋天栗雅馨王子月.mp3");
        //        GUI_Clear();        

        #else
        /*
        sws_play_song
        文件名:任盈盈 - 没了心的爱 16bit-48K-Stereo.sws 这个是不存在的,
        此函数没有任何意义,只是为了能够使用 keil 编译器时,能够正常下载程序,切记,
        如果没有此函数,那么使用keil编译器下载程序时会失败,具体原因待以后再查???
        自动获取 dhcp 功能,有时不能够得到 ip 地址,这个问题以后再查 ?
        2018.04.06     add
        */
  audio_play_song("0:__Music/Wave/任盈盈 - 没了心的爱 16bit-48K-Stereo.sws");
        GUI_Clear();
        #endif
        
  while(1)
  {
                        TCA6424_KeyScan();
                        GT911_STemWinScan();               
      MainTask();   
      GUI_Delay(10);
  }
}






static void AppTaskCreate (void)
{
        
    LWIP_FREERTOS_Init();

        xTaskCreate( vTask_2,                    /* 任务函数  */
                                 "vTask_2",                  /* 任务名    */
                                 1024,                         /* 任务栈大小,单位word,也就是4字节 */
                                 NULL,                        /* 任务参数  */
                                 3,                           /* (数值越小优先级越低,这个跟 uCOS 相反) 1
                                                                         最高任务不能够大于所定义的任务优先级最大值
                                                                         configMAX_PRIORITIES - 1
                                                                  */
                                 &xHandleTaskUART ); /* 任务句柄  */

        xTaskCreate( vTaskKEY,                    /* 任务函数  */
                                 "vTaskKEY",                  /* 任务名    */
                                 1024,                         /* 任务栈大小,单位word,也就是4字节 */
                                 NULL,                        /* 任务参数  */
                                 3,                           /* (数值越小优先级越低,这个跟 uCOS 相反)
                                                                         最高任务不能够大于所定义的任务优先级最大值
                                                                         configMAX_PRIORITIES - 1
                                                                  */
                                 &xHandleTaskKEY ); /* 任务句柄  */
                                                                 
        xTaskCreate( vTaskGUI,                    /* 任务函数  */
                                 "vTaskGUI",                  /* 任务名    */
                                 1024,                         /* 任务栈大小,单位word,也就是4字节 */
                                 NULL,                        /* 任务参数  */
                                 4, //configMAX_PRIORITIES - 1,                           
                                          /* (数值越小优先级越低,这个跟 uCOS 相反)
                                                                         最高任务不能够大于所定义的任务优先级最大值
                                                                         configMAX_PRIORITIES - 1
                                                                  */
                                 &xHandleTaskGUI ); /* 任务句柄  */                                                                 
}









回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107265
QQ
发表于 2018-4-6 15:16:45 | 显示全部楼层
hpdell 发表于 2018-4-6 12:28
你好,关于这个不能够使用 keil 进行下载程序,目前最新的发现描述如下,同时你们也帮忙想想看到底是哪里 ...

一般这种问题的原因都比较简单。

设置你的GUI任务为最低用户任务优先级,另外先屏蔽GUI里面执行的功能看看。
回复

使用道具 举报

612

主题

3064

回帖

4920

积分

至尊会员

积分
4920
 楼主| 发表于 2018-6-1 00:09:49 | 显示全部楼层
eric2013 发表于 2018-4-6 15:16
一般这种问题的原因都比较简单。

设置你的GUI任务为最低用户任务优先级,另外先屏蔽GUI里面执行的功能 ...

你好,我把 gui 的任务优先级设置为 1,貌似 gui 的任务不能够运行

只能设置为根其他任务一样的优先级或者更高的优先级才行,这是何故啊 ??
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107265
QQ
发表于 2018-6-1 02:45:32 | 显示全部楼层
hpdell 发表于 2018-6-1 00:09
你好,我把 gui 的任务优先级设置为 1,貌似 gui 的任务不能够运行

只能设置为根其他任务一样的优先级 ...

这个就是你整个程序的设计框架问题了。

可以GUI任务仅执行简单的功能看看。
回复

使用道具 举报

612

主题

3064

回帖

4920

积分

至尊会员

积分
4920
 楼主| 发表于 2018-11-26 21:32:54 | 显示全部楼层
本帖最后由 hpdell 于 2018-11-26 21:59 编辑
eric2013 发表于 2018-6-1 02:45
这个就是你整个程序的设计框架问题了。

可以GUI任务仅执行简单的功能看看。

终于最终找到下载失败的原因了,

原来使用 keil 自带的 GUI_CM4F_L.lib 的库就不行,使用st 官方提供的 STemWin540_CM7_Keil_ot.lib  就可以

keil 自带的 emwin 库路径:
C:\Keil_v5\ARM\PACK\Keil\MDK-Middleware\7.7.0\emWin\Lib\ARM

是不是 keil 自带的 GUI_CM4F_L.lib 这个库不能够使用 f7 系列的单片机上啊 ?

但是如果把优化等级设置为 0 时是可以下载程序,程序的优化等级设置为3,开启时间优化、elf 优化后,下载程序就会失败 ????
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107265
QQ
发表于 2018-11-27 01:12:49 | 显示全部楼层
hpdell 发表于 2018-11-26 21:32
终于最终找到下载失败的原因了,

原来使用 keil 自带的 GUI_CM4F_L.lib 的库就不行,使用st 官方提供 ...

没问题啊,我H7下各种优化等级都可以使用的这个库的。
回复

使用道具 举报

612

主题

3064

回帖

4920

积分

至尊会员

积分
4920
 楼主| 发表于 2018-11-27 11:15:25 | 显示全部楼层
eric2013 发表于 2018-11-27 01:12
没问题啊,我H7下各种优化等级都可以使用的这个库的。

你有没有加 freertos 啊 ?

我貌似是加入了 freertos 就不行了,
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107265
QQ
发表于 2018-11-27 11:16:16 | 显示全部楼层
hpdell 发表于 2018-11-27 11:15
你有没有加 freertos 啊 ?

我貌似是加入了 freertos 就不行了,

也没问题,使用FreeRTOS和RTX5都可以。
回复

使用道具 举报

612

主题

3064

回帖

4920

积分

至尊会员

积分
4920
 楼主| 发表于 2018-11-27 11:29:44 | 显示全部楼层
eric2013 发表于 2018-11-27 11:16
也没问题,使用FreeRTOS和RTX5都可以。

怎么我的就不行,难道是我的有些优先级没有设置好造成的吗 ?
你的各中断优先级是如何设置的啊 ?
回复

使用道具 举报

32

主题

262

回帖

363

积分

高级会员

积分
363
发表于 2018-11-27 14:09:12 | 显示全部楼层
hpdell 发表于 2018-11-27 11:29
怎么我的就不行,难道是我的有些优先级没有设置好造成的吗 ?
你的各中断优先级是如何设置的啊 ?

你的地址是82开头?什么心   f7?
回复

使用道具 举报

612

主题

3064

回帖

4920

积分

至尊会员

积分
4920
 楼主| 发表于 2018-11-27 15:38:56 | 显示全部楼层
在水一方 发表于 2018-11-27 14:09
你的地址是82开头?什么心   f7?

地址是 0x08020000  开始的,使用 F777  的单片机
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-23 16:52 , Processed in 0.391457 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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