keil MDK
文章平均质量分 81
Keil 编译器知识和技巧
研究是为了理解
要想学会一件事,就不能什么都学。
展开
-
Keil 重定向 fputc 函数 以及 printf 函数的代码尺寸测试
本文的开发环境为 Keil + Cortex-M3 内核处理器。介绍重定向 fputc 函数的方法测试 printf 函数的代码尺寸原创 2023-06-21 16:18:24 · 2126 阅读 · 2 评论 -
Keil MDK下如何设置非零初始化变量 - 基于Arm Compiler 6
1. 编译器的自作主张ANSI C标准规定:未明确初始化的静态数据(static data),会被初始化为0。因此,默认情况下,编译器会将零初始化(zero-initialized)和未初始化(uninitialized)的数据放入相同数据段(data section),在运行时由C库的初始化代码将这些数据段域填充数字0。数据段可以是RW数据段(.data),也可以是ZI数据段(.bss)。定义一个全局变量int test1 = 0;,则变量test1是零初始化变量;定义一个全局变量int tes原创 2022-05-21 22:01:53 · 3573 阅读 · 0 评论 -
代码运行时间测量结果的准确度测试
测试硬件STM32F103RC主频24MHz测试方法示波器测试引脚电平翻转(100M示波器)逻辑分析仪测试引脚电平翻转Keil+J-LINK在线仿真测试perf组件测试1.测试代码如下:DEBUG_GPIO_SET_H();handle_collect_data(); xEventGroupSetBits(get_event_group_handle(), TASK_BIT_HANDLE_DATA);DEBUG_GPIO_SET_L();使用示波器测得用时:8.6us原创 2021-01-13 12:59:16 · 1293 阅读 · 1 评论 -
keil5编译器退出调试时卡死
更新到keil5版本V5.25之后,目前一直到V5.29版本,都存在一个问题:退出调试模式时,有可能会卡死!此时需要在任务管理器中结束掉进程才能强制关闭keil工程。在Openedv论坛,正点原子解答网友帖子关于Keil_5.25版本Debug会卡死无法退出问题!!!时给出一种解决办法:解决方法: 工程路径不要有任何中文。这个方法对我的工程是有用的。我也查找了一些资料,均没有给出导致卡死的具体原因。恰好我有几个同事在升级到keil5 V5.29版本时也遇到了相同的问题。于是我向他们推荐了正点原创 2020-12-17 20:53:21 · 13721 阅读 · 14 评论 -
从 Arm Compiler 5 迁移到 Arm Compiler 6
在开始之前,建议先备份你的工程代码。迁移条件要使用ARM Compiler 6,建议MDK的版本至少为:MDK版本5.23或更高版本MDK版本5.23提供两个编译器,分别是ARM Compiler 5.06和ARM Compiler 6.6。软件包也需要支持ARM Compiler 6,以下是支持ARM Compiler 6的最低软件包版本:Keil MDK-Middleware 包: 版本7.4.0及以上Keil ARM Compiler Support 包: 版本1.3.0及以上A原创 2020-11-19 10:34:39 · 11131 阅读 · 1 评论 -
嵌入式领域,你要了解你的编译器
我做嵌入式行业,编程也多和硬件打交道,好多人说编译器只是工具,重要的在于算法和思想。这话说的本来没错,但要有一个条件在先:那就是你真正掌握了你所用的编译器。但就我来看,真正熟悉编译器的却并不多见。当你深入了解一个编译器后,你能像用汇编一样用C,可以像汇编那样随心所欲的操作MCU! 了解一个编译器,首先应该有汇编的基础,不要求能用汇编编写程序或做过项目,但至少看的懂!不熟悉汇编的嵌入式原创 2011-04-25 14:25:00 · 9704 阅读 · 10 评论 -
基于IAP和Keil MDK的远程升级设计
写在前面:三周之前,我突然想写一个远程升级的程序。那个时候我只是大概知道IAP的意思是在应用编程,但怎么编,我还一无所知。我给自己定下一个个阶段目标,从最基础的代码一点点写起,解决一个又一个的问题。三个周之后,我用自己设计的方法实验了50多次,无一例升级失败。 三个周来,遇到了很多的不解、困惑,甚至是想放弃,但我现在想说的是:很多未知的困难会挡在我们面前,我们会感觉毫无头...原创 2010-11-14 12:03:00 · 29044 阅读 · 87 评论 -
keil MDK编译器警告和错误详解(不定期更新)
工作后从单片机转成ARM,刚开始用ADS1.2编译器,用了一段时间,因为我接手的项目的老程序正是用ADS编译的,部门也大都在用.在学单片机的时候用的是keil c51编译器,ads和这个编译器在易用性上真是无法比较.后来渐渐知道keil已经被arm公司收购,现在keil MDK成为了arm官方编译器,所以决定重新投奔keil,利用平时的时间,将原程序重新用mdk编译.mdk的优点就没必要说了,在这原创 2010-08-19 12:24:00 · 114250 阅读 · 30 评论 -
控制IRQ和FIQ中断的编译器内部函数 - 基于Keil MDK
编译器内部函数__disable_irq、__enable_irq、__disable_fiq和__enable_fiq用于控制IRQ和FIQ中断。 只有当处理器处于特权模式才可以使用这些内部函数,因为这些函数要改变寄存器CPSR和SPSR(ARM7、ARM9等)或者PRIMASK和FAULTMASK寄存器(Cortex-M3、M4等),而这些寄存器只有在特权模式下才能被访问。 这些内部函数对所有原创 2016-10-14 14:14:25 · 9877 阅读 · 1 评论 -
Keil MDK下如何设置非零初始化变量
一些工控产品,当系统复位后(非上电复位),可能要求保持住复位前RAM中的数据,用来快速恢复现场,或者不至于因瞬间复位而重启现场设备。而keil mdk在默认情况下,任何形式的复位都会将RAM区的非初始化变量数据清零。如何设置非初始化数据变量不被零初始化,这是本篇文章所要探讨的。 在给出方法之前,先来了解一下代码和数据的存放规则、属性,以及复位后为何默认非初始化变量所在RAM都被初始原创 2013-04-10 08:08:01 · 24339 阅读 · 5 评论 -
keil MDK升级到V4.54后使用J-link问题
今天将Keil MDK升级到了V4.54,使用J-link下载程序,发现MDK自带的Jlink驱动已经更新到V4.5版本,然后MDK提示有J-Link新固件,这之前也遇到过这类提示,然后我选择了升级j-link固件。升级之后,悲剧的事情发生了:j-link再也不能连接设备。到网上找了相关资料,发现有一个很牛的同学用IDA跟踪了最新J-link驱动和V4.4驱动的dll文件,发现“新版的在打开原创 2012-07-12 20:57:33 · 24417 阅读 · 0 评论 -
keil MDK启动文件分析---基于LPC2100系列(其实都是相通的)
转用MDK有一段时间了,越来越觉得MDK的强大,因为我之前都是用ADS1.2开发产品,所以更能体会到MDK的强大与易用性。MDK编译出来的代码与ADS1.2相比,代码量减少了很多,我的一个工程用ADS1.2编译为25.4KB(都是bin格式),但用MDK编译出来仅有19.5KB(采用默认优化级别,即L2优化级别)。根据我个人的经验,使用一个新的编译器,难点往往有三个,一个是建立原创 2010-08-27 19:17:00 · 26454 阅读 · 69 评论 -
RealView编译器常用特有功能
一. 关键字和运算符1. __align(n):指示编译器在n 字节边界上对齐变量。 对于局部变量,n 值可为 1、2、4 或 8。 对于全局变量,n 可以具有最大为 2 的 0x80000000 次幂的任何值。 __align 关键字紧靠变量名称前面放置。 注意事项: 只能进行过对齐。也就是说,可以将两个字节的对象按 4 个原创 2013-03-07 10:54:10 · 7633 阅读 · 2 评论 -
有趣的keil MDK细节
1.MDK中的char类型的取值范围是? 在MDK中,默认情况下,char 类型的数据项是无符号的,所以它的取值范围是0~255。它们可以显式地声明为signed char 或 unsigned。因此,定义有符号char类型变量,必须用signed显式声明。我曾读过一本书,其中有一句话:“signed关键字也是很宽宏大量,你也可以完全当它不存在,在缺省状态下,编译器默认数据位signed类型”原创 2012-07-13 19:54:47 · 53183 阅读 · 19 评论 -
keil MDK编译器(V4.01)与H-JTAG的问题
前一阵子转投到MDK下面做开发,因为公司以前都用h-jtag做下载仿真工具,用的h-jtag版本为V0.9,我拿以前在ads1.2中编译成功的程序,稍作修改,在mdk下编译成功,仿真也没有问题,但下载到cpu中却怎么也没有结果,原本我以为是自己还不熟悉mdk,可能是那里设置的不对,所以我找了很多资料,也看了mdk自带的帮助文件,确信我的设置没有错.后来我不断的修改程序,将程序精简到知识简单的操作I/O口,可是这种程序下载到cpu中竟然还是不可以.再后来我开始怀疑是h-jtag的问题,更新了h-原创 2010-09-23 16:59:00 · 3782 阅读 · 7 评论 -
Keil MDK编译器(V4.03)与J-LINK使用
前几天进手了一个J-LINK,因为H-JTAG毕竟对MDK支持的不是太完美,比如用keil mdk上面的下载按钮烧录程序,不是直接就能烧录进去,而是弹出H-Flash软件,再手工选择文件烧录;而且用H_JTAG单步调试还容易莫名其妙的跑飞。好在J-LINK不是太贵(我是说国内仿制的),mdk又能比较完美的支持J-link,今天就将我使用mdk和J-link的情况做一下记录。 我把MDK升级到了V4.10,之前使用的V4.01,当然这个V4.10也不是最新版,最新版应该到了V4.12。原创 2010-10-06 20:46:00 · 75297 阅读 · 27 评论 -
Keil MDK中使用pc-lint的详细方法
keil MDK版本:V4.03,下载地址见我的其他博文PC-lint版本: V8.0关于pc-lint的强大作用,网上有很多,这里不想再复述,只说一句:能通过pc-lint检验的程序不一定没有问题,但通过了pc-lint检验的程序,质量的提高也是不言而喻的。首先安装keil MDK和PC-lint这两个软件,网上的PC-lint大多是安装好的压缩包,直接解压到C盘即可。请支持正版!!(咳,心虚中...)方法十分简单,因为keil MDK中已经给出了pc-lint对应keil ARM编译器的配置文件:CO原创 2010-10-10 00:04:00 · 21416 阅读 · 9 评论 -
keil mdk中如何确保某一段程序不被优化掉
<br />使用mdk编程,假如有一个有用的函数你定义了但是没有显式的调用,mdk在默认方式下,将会把这个函数从整个程序总删除掉,以节省ROM.<br />比如,你在ROM的0x00002000处定位了一个函数,假设为void test(void),然后使用函数指针来调用它:<br />void (*UserProgram)(); //函数指针<br />UserProgram = (void (*)()) (0x00002000);//定位到指定的入口地址0x00002000<br />原创 2010-11-02 09:41:00 · 29479 阅读 · 1 评论 -
ARM 7 用户模式下禁止/使能中断的一种方法--使用软中断 for Keil MDK
最近写一个程序,需要在用户模式下关中断,但ARM 7的体系结构决定了中断必须在特权模式下才可以更改,所以想到使用ARM的软中断来实现关中断和开中断.使用软中断,首先要有硬件指令的支持.ARM有条指令是SWI.SWI 指令的格式为:SWI {条件} 24 位的立即数SWI 指令用于产生软件中断,以便用户程序能调用操作系统的系统例程。操作系统在 SWI 的异常处理程序中提供相应的系统服务,指令中 24 位的立即数指定用户程序调用系统例程的类型,相关参数通过通用寄存器传递,当指令中 24 位的立即数被忽略时,用户原创 2010-11-07 21:44:00 · 8081 阅读 · 6 评论 -
使用keil判断ARM的冷启动和热启动的方法
微处理器:LPC2114编译环境:Keil MDK V4.10思路:常把单片机系统的复位分为冷启动和热启动。所谓冷启动,也就是一般所说的上电复位,冷启动后片内外RAM的内容是随机的;单片机的热启动是通过外部电路给运行中的单片机的复位端一复位电平而实现的,也就是所说的按键复位或看门狗复位。复位后,RAM的内容都没有改变。在某些场合,必须区分出设备的重启是热重启还是冷重启。常用的方法是:确定某内存单位...原创 2011-03-14 13:19:00 · 8641 阅读 · 4 评论 -
keil MDK中如何生成*.bin格式的文件
<br /> 在Realview MDK的集成开发环境中,默认情况下可以生成*.axf格式的调试文件和*.hex格式的可执行文件。虽然这两个格式的文件非常有利于ULINK2仿真器的下载和调试,但是ADS的用户更习惯于使用*.bin格式的文件,甚至有些嵌入式软件开发者已经原创 2010-10-08 18:18:00 · 73182 阅读 · 12 评论 -
keil MDK的信号函数
keil的信号函数用于模拟和测试串行IO,模拟IO,端口通讯等重复发生的外部事件。信号函数以关键字signal开头。在函数中必须调用twatch用于延时,不然keil会陷入死循环。twatch函数的参数表示要延时的CPU执行周期,比如twatch(1000000)表示一个信号原创 2011-10-09 20:12:34 · 8177 阅读 · 3 评论 -
Cortex-M3和Cortex-M4 Fault异常应用之二 ----- Fault处理函数的实现
注: 本文搬运自我的个人博客,原网址点击打开链接 在项目处于调试期间,Fault处理程序可能只是一个断点指令,调试器遇到这个指令后停止程序的运行。默认情况下,由于非硬Fault被禁能,所有发生的非Fault都会上访成硬Fault,因此只要在硬Fault处理程序中设置一个断点,就可以观察所有Fault信息。当使用MDK-ARM的RealView编译器时,你可以用下面的C原创 2013-03-07 14:21:50 · 10743 阅读 · 3 评论 -
Cortex-M3和Cortex-M4 Fault异常应用之一 ----- 基础知识
注: 本文搬运自我的个人博客,原网址点击打开链接1. 摘要 Cortex-M内核实现了一个高效异常处理模块,可以捕获非法内存访问和数个程序错误条件。本应用笔记从程序员角度描述Cortex-M Fault异常,并且讲述在软件开发周期中的Fault用法。 2. 简介 Cortex-M3(以下简称CM3)和Cortex-M4(以下简称CM原创 2013-03-07 11:21:48 · 50202 阅读 · 0 评论 -
Keil MDK与h-jtag联调
keil MDK也是可以借助h-jtag进行单步调试,写出来与大家一起分享一下.keil MDK编译器使用V4.01版本,下载地址:http://www.embedinfo.com/down-list.asp?id=714 (需要注册一下)h-jtag使用V1.0版本,下载地址http://www.hjtag.com/download/H-JTAG%20V1.0%20Preview.zip分别安装MDK与h-jtag两个软件都安装完成后,首先,需要运行H-JTAG 安装目录下的TOOLCONF.EXE原创 2010-08-28 19:38:00 · 21687 阅读 · 18 评论