精华内容
下载资源
问答
  • Keil MDK使用typeof设置

    2021-07-10 18:52:29
    配置 演示:

    配置(--gnu

    演示:

    展开全文
  • 参考例程下载:...以下是一个MDK创建的C++例程,详细的基于armcc的配置步骤大家可以参考此博客: https://blog.csdn.net/lyn631579741/article/details/105964055/ ...

    参考例程下载:https://github.com/conscience-still/MDK-Cplusplus--LED

    下载工程

     打开工程并编译

    先编译确认此工程没有任何问题

    说明:但是这个工程默认是使用armcc编译器(arm compiler 5)

    切换编译器为armclang

     设置编程语言和编译选项

     编译出现以下问题:

    error: invalid argument '-std=c99' not allowed with 'C++'
    compiling system_stm32f0xx.c...
    error: invalid argument '-std=c99' not allowed with 'C++'
    compiling retarget.c...
    error: invalid argument '-std=c99' not allowed with 'C++'

    这个错误意思是-std=c99不允许使用C++,后面查看-std这个编译选项发现这个是用来指定编译语言类型的,比如C或者C++

     查看armclang用户手册

     所以我们将编译语言修改为C++就可以解决此问题

    修改编译选项

    最后再编译,一切OK

     其他错误及解决

    如果编译选项没有加-xc++则会出现namespace无法识别的错误。

    表示没有用C++编译器来编译工程,因为此工程为C++编写的,C编译器当然无法识别C++相关的语法啦。

    参考文档

    关于此文章中所用的C++例程,详细的基于armcc的配置步骤大家可以参考此博客:

    https://blog.csdn.net/lyn631579741/article/details/105964055/

    展开全文
  • 本来是没什么,但是无意中发现,KEIL MDK编译时,malloc分配的空间已经超过预设的大小也不报错。后面发现和自己的使用也有关系。在这边记录一下,给有碰到类似问题的网友们一些参考。 问题描述: 先看启动文件。...

    项目场景:

    最近有个案子(MCU:STM32F103VCT6)需要定制个小功能,需要用malloc分配大量的空间。本来是没什么,但是无意中发现,KEIL MDK编译时,malloc分配的空间已经超过预设的大小也不报错。后面发现和自己的使用也有关系。在这边记录一下,给有碰到类似问题的网友们一些参考。


    问题描述:

    先看启动文件。这里堆分配的大小是0x2000,即8K。

    Heap_Size       EQU     0x00002000
                    AREA    HEAP, NOINIT, READWRITE, ALIGN=3
    __heap_base
    Heap_Mem        SPACE   Heap_Size
    __heap_limit
    

    在代码里,我创建了一个uint16的数组,数量是4500。所以大小是9000,已经溢出了。

    U8 TagGet(void)
    {
    	U8 statue=FALSE;
    	U16 *pbuf;
    	U16 cnt,i,j;
    	U16 const len = 4500;
    	
    	pbuf = (U16 *)malloc(sizeof(U16)*len);
    	printf("pbuf = 0x%x\r\n",*pbuf);
    	
    	if(*pbuf == NULL) 
    		statue=FALSE;
    	
    	printf("sizeof malloc = %d\r\n",sizeof(U16)*len);
    	printf("sizeof malloc = 0x%X\r\n\r\n",sizeof(U16)*len);
    
    	/* 数组赋值。从0~4500依次按顺序赋值 */
    	for(i = 0;i<len;i++)
    	{
    		pbuf[i] = i;
    	}
    
    	/* 输出数组查看 */
    	for(i = 0,j = 0;i<len;i=i+5)
    	{
    		printf("i = %6d,value = %6d ; ",i,pbuf[i]);
    		
    		if((j+1)%2==0)
    			printf("\r\n");
    		j++;
    	}
    	printf("\r\n");
    
    
    	free(pbuf);
    	pbuf = NULL;
    	statue=TRUE;
    	return statue;	
    }
    
    

    原以为KEIL MDK会报错,但是实际没有报错。
    由于程序里有给数组赋值。从0~4500依次按顺序赋值。根据串口信息发现数组异常,读出的参数全是乱的。
    在这里插入图片描述

    在这里插入图片描述
    后面才意识到是分配的空间超标了。
    所以把分配的数量减小到2000,总数也才4000,在堆的最大限度以内。
    编译后,载入再看信息,一切正常。分配的空间可以正常访问。

    在这里插入图片描述


    原因:

    由此可见KEIL MDK并不会对malloc分配的空间进行合理的判断,并给出报错。
    就算malloc的空间已经超出启动文件里限制的大小,也不会报错。
    所以MDK编译阶段,只判断malloc语法的对错,不能分辨堆的申请是否超过预先设定的最大值。资源的分配成功与否,需要我们在代码的逻辑层再做判断。申请失败,则独立处理。

    我也发现我的代码处理的也有问题。KEIL MDK虽然在编译阶段不报错,但是在实际运行到malloc时,已经发现空间不足,并给出提示,是我程序对返回值的操作不当,资源分配异常时没有及时处理。

    原来的SRC:

    if(*pbuf == NULL) 
    		statue=FALSE;
    

    应该改成:

    if(pbuf == NULL) {
    		statue=FALSE;
    		
    		return statue;
    	}
    
    

    地址分配失败直接退出。(这边处理比较简单,实际看个人需求)

    小结:

    对于malloc,MDK编译阶段,只判断malloc语法的对错,不能分辨堆的申请是否超过预先设定的最大值。虽然在编译阶段不报错,但是在实际运行到malloc时,已经发现空间不足,发现空间不足会返回一个空值,我们自己要在代码里做判断。

    (tip:malloc分配成功,会返回分配空间的起始地址;分配失败,返回0。)
    所以判断方式都类似,可以直接套用以下处理方式:

    	pbuf = (U16 *)malloc(sizeof(U16)*len);
    	
    	if(pbuf == NULL) 
    		return;
    
    展开全文
  • 关注+星标公众号,不错过精彩内容作者 |strongerHuang微信公众号|嵌入式专栏很多使用过Keil MDK的工程师都发现了一个问题,Keil MDK编译代码的时候,速度很慢...

    关注+星标公众,不错过精彩内容

    作者 | strongerHuang

    微信公众号 | 嵌入式专栏

    很多使用过Keil MDK的工程师都发现了一个问题,Keil MDK编译代码的时候,速度很慢。

    编译速度慢有几个原因:

    • 编译器

    • 代码量大小

    • 工程配置(生成信息)

    其中工程配置中生成信息包含多种,打开工程选项卡就能看见。Project -> Options for Target -> Output / Listing:

    这里面有很多信息都会影响编译速度,其中生成浏览信息(Browse Information),下面就来讲讲关于浏览信息的内容。

    嵌入式专栏

    1

    关于Keil浏览信息

    Keil中浏览信息,就是我们平时编辑调试时,右键(或者F12快捷键)使用Go To Definition xxx时所需要浏览的代码信息:

    需要在工程配置中勾选生成浏览信息才能正常使用该功能:

    生成浏览信息会比较影响编译速度,同时在Objects(OutPut配置输出路径)文件夹下面会多出 *.crf 文件(浏览信息文件)。

    关于Keil MDK中各种文件的描述,可以参看我的文章:Keil系列教程10_文件类型及相关描述

    嵌入式专栏

    2

    AC5与AC6生成浏览信息的差异

    Keil MDK编译器默认是使用Arm Compiler(简称AC),目前主流的就是AC5和AC6.

    之前也给大家分享过关于AC5和AC6的文章:

    全面认识ARM编译器AC6.12

    Keil MDK 编译器 AC5 和 AC6 优化选项重要内容和区别

    其实AC5和AC6还真有很多地方不同,之前使用AC5的代码工程,很多地方都存在兼容性问题。

    1.AC5和AC6生成浏览信息速度不同

    如果不生成浏览信息(不勾选),AC5的编译速度其实也不算慢。

    但是,一般情况下,软件开发工程师为了方便编辑和调试代码,一般都会生成浏览信息。

    AC5和AC6明显的区别就是编译速度上差异很大,AC6即使生成浏览信息,在编译的时候,速度相比AC5快很多。

    而且代码量也有差异:

    2.AC5和AC6生成浏览信息方式不同

    如果你使用过AC6,你会发现:在不用编译的情况下,可以直接Go To Definition xxx 浏览代码

    比如:你直接使用STM32CubeMX配置生成Keil MDK的代码,修改配置,使用AC6编译器,你会发现不用编译就可以直接 Go To Definition。

    当然,前提你要配置使用AC6编译器:

    还有,AC6生成浏览信息是在后台自动完成的,可能需要等待几秒钟或者更长时间(与你电脑配置有关)。

    ------------ END ------------

    后台回复『Keil系列教程』阅读更多相关文章。

    关注微信公众号『嵌入式专栏』,底部菜单查看更多内容,回复“加群”按规则加入技术交流群。

    点击“阅读原文”查看更多分享,欢迎点分享、收藏、点赞、在看。

    展开全文
  • MDK使用记录

    2021-04-25 18:33:25
    Day1——MDK使用记录MDK使用可能会遇到的问题芯片锁死问题导致的下载失败判断芯片是否处于锁死状态因频率配置错误导致的芯片锁死解决办法1因io配置错误导致的芯片锁死烧进去的工程对应器件与目标器件不一致导致芯片...
  • 基于MDK使用汇编语言创建STM32工程一、创建新工程二、完成相关配置三、实验代码测试(1)实验源码(2)实验仿真结果(3)分析生成的HEX文件四、实验小例程(1)实验要求(2)实验源码(3)实验结果展示五、总结六、参考文献 ...
  • Keil MDK使用第14篇---断点的使用

    万次阅读 2021-03-09 21:17:42
    我的首发平台是公众号【CodeAllen】,学习交流QQ群:736386324,本文版权归作者所有,转载请注明出处 实例参考: ...当程序运行到断点时,程序中断执行,回到调试器。观察有关变量值。 F9 设置断点 ...
  • Keil MDK使用第15篇---memory window的使用

    万次阅读 2021-03-09 21:19:09
    我的首发平台是公众号【CodeAllen】,学习交流QQ群:736386324,本文版权归作者所有,转载请注明出处 存储器窗口中可以显示系统中各种内存中的值 c:0 (ROM存储器CODE区) d:0 (内部RAM的DATA区) ...实际使用 ...
  • GTI MDK使用视频教程 此系列视频教程是GTI MDK的使用教程,观看前建议先阅MDK中相应的文档。 在GTIMDK_V1.0.1(路径Common/GNet/GTI Model Training Tools/GTIMDK_V1.0.1/GTIcaffeMDKv3.0.0.1)中有详细的对应的文档...
  • Keil MDK使用第17篇---keil内置调试函数

    万次阅读 2021-03-09 23:35:17
    我的首发平台是公众号【CodeAllen】,学习交流QQ群:736386324,本文版权归作者所有,转载请注明出处
  • Keil MDK使用第13篇---逻辑分析仪配置

    万次阅读 2021-03-09 21:15:40
    我的首发平台是公众号【CodeAllen】,学习交流QQ群:736386324,本文版权归作者所有,转载请注明出处 1.设为软件仿真 2.查看可用引脚 3.打开逻辑分析仪,同时打开symbols(符号)窗口,把GPIOB_IDR拉进去 ...
  • Keil MDK使用第11篇---keil炫酷颜色主题

    万次阅读 2021-03-09 21:10:06
    绿色背景 保存文件名为global.prop # properties for all file types indent.automatic=1 virtual.space=0 view.whitespace=0 view.endofline=0 code.page=0 caretline.visible=1 highlight.matchingbraces=1 ...
  • 一些 MDK 使用技巧

    2021-01-25 08:00:00
    来源:公众号【鱼鹰谈单片机】作者:鱼鹰OspreyID :emOsprey开发过程中,常常会参考一些例程,有些时候,这些例程使用 MDK打开就能使用,而有些时候,就不是那么顺利,比如...
  • Keil MDK使用第19篇---资源分享

    万次阅读 2021-03-09 23:45:07
    我的首发平台是公众号【CodeAllen】,学习交流QQ群:736386324,本文版权归作者所有,转载请注明出处 两份很不错的资料,非常值得参考 **关注公众号回复“Keil MDK”**获取下载链接,失效请联系
  • 最近升级MDKV5.31后使用jlink仿真提示这个错误: 后面研究了很久,发现是高版本的MDK会出现这个问题。 使用老的jlink安装路径下替换以下几个文件即可。 JLinkARM.dll JL2CM3.dll JLTAgdi.dll 替换后再MDK...
  • 我的首发平台是公众号【CodeAllen】,学习交流QQ群:736386324,本文版权归作者所有,转载请注明出处 自动更新值,结合F11很好用 名称----地址值----返回值和参数类型
  • 1.8.9 Using malloc() when exploiting the C libraryIf heap support is required for bare machine C, you must implement_init_alloc()and__rt_heap_extend()._init_alloc()must be called first to supply in...
  • STM32CubeMX 是 ST 意法半导体近几年来大力推荐的STM32 芯片图形化配置工具,目的就是为了方便开发者, 允许用户使用图形化向导生成C 初始化代码,可以大大减轻开发工作,时间和费用,提高开发效率。STM32CubeMX几乎...
  • 我的首发平台是公众号【CodeAllen】,学习交流QQ群:736386324,本文版权归作者所有,转载请注明出处 最常用的手段 F10 过程单步 *****(普通单步执行) F11 发现问题后(有可能是循环在这出不去)跟踪到子函数内部...
  • Keil MDK使用第10篇---keil 设置书签

    万次阅读 2021-03-09 21:07:54
    关于设置书签,这个嘛,当代码量小的时候,确实用不到,对于刚刚接触MDK的同学来说,估计大多数也是用不到的。但俗话说,技多不压身,我们不妨也来了解了解。首先,我们得将光标放在需要设置书签的地方,然后,在...
  • 如何搭建KEIL MDK使用与STM32开发环境 第一步 下载KEIL MDK,注册机 链接:https://pan.baidu.com/s/1GHseMcpuwHB-bkSM0_Bj7A 提取码:tl1d 按照安装软件的指引,一直按next,当出现需要填写信息时,随便填写几个就行...
  • MDK使用 HAL库开发的一些小技巧以最简单的 GPIO 初始化函数为例。要初始化某个GPIO端口,要快速操作,在头文件stm32l4xx_hal_gpio.h 头文件中,声明 GPIO 初始化函数为:void HAL_GPIO_Init(GPIO_TypeDef *...
  • MDK自定义主题

    2021-01-06 14:29:43
    下载主题文件,解压,替换该目录下文件C:\Keil_v5\UV4。 主题效果如下:
  • 一、解决MDK5使用STLINK下载不进去程序报错的问题 1、从csdn上下载了一个modbus rtu从站的程序,连接好link线后,点击下载报错如下: 2、然后在正点原子粉丝群询问,进行问题排查,先看DEBUG界面如下: 再...
  • 开发过程中,常常会参考一些例程,有些时候,这些例程使用 MDK打开就能使用,而有些时候,就不是那么顺利,比如可能需要你安装一些 Pack或者兼容包。对于这些安装包,鱼鹰之前介绍了可以使用...
  • 使用硬件抽象库HAL, 手工创建代码结构容易出错, 最简单的方式还是通过STM32CubeMX. 下载安装STM32CubeMX 官网地址 ...
  • 制作MDK(Keil)注释模板 在编写程序时,往往要遵循一些规范。良好的代码风格可以提高代码的可读性,方便后期维护和升级。下面是根据ST官方HAL库制作的一些注释模板。 一、 二、 三
  • VSCode作为MDK代码编辑工具

    千次阅读 2021-03-19 16:20:35
    2、基本使用 (1)工程建立 1)新建工程 2)切换工作区 (2)常用快捷键 1)放大、缩小:Ctrl+滚轮 2)常用代码编辑快捷方式 本文章主要介绍利用VSCode进行嵌入式开发,替代传统的经典代码编辑工具Source...
  • MDK(Keil) 中编译工程时关于Program Size的信息 Code :是程序中代码所占字节大小 RO-data :程序中所定义的指令和常量大小 (Read Only) RW-data :程序中已初始化的变量大小 (Read/Write) // int a = 0; 全局...
  • 目前网上有的资源大部分都是IMXRT1052而IMXRT1062的MDK的具体配置和使用几乎没有,在NXP的官网上也只能找到一些免费工具的使用文档,去淘宝上买JLINK也大部分提供的是STM32的使用文档,那对于IMXRT1062的用户怎么办...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 31,329
精华内容 12,531
关键字:

mdk使用