转:http://blog.sina.com.cn/s/blog_453226290102xjlz.html
目录:
一、Keil5.12中文注释代码或粘贴后乱码
1、中文注释代码乱码
2、复制粘贴后乱码(复制粘贴代码变乱码)
二、Keil5.12代码补全功能
三、Keil5.12编译报错的处理(STM32使用J-Link仿真相关汇总)
1、去除“STM32F10X_MD”
2、文件名中有C的关键字
3、使用宏库“use micro lib”
4、JLINK驱动使用错误
5、出现“invalid multibyte character sequence”
6、出现identifier "bool" is undefined
7、出现“No space in execution regions with .ANY selector match Section”
8、隐藏的文件处理
四、RAM和ROM
1、查看内存
2、ARM单片机RAM和ROM
1)ARM编译结果 2)ARM映像文件的组成 3)ARM映像文件的存储地址映射
五、查看代码运行时间
六、ARM单片机Keil5.12正确配置Flash截图
1、Devie设置 2、Target设置 3、Output设置 4、Listing设置 5、User设置
6、C/C++设置 7、Asm设置 8、Linker设置 9、Debug设置 10、Utilities设置
七、Keil5.14.0.0版本编译通过的程序,在Keil5.12.0.0版本运行出错
八、watch中添加的变量不能实时更新
九、Keil MDK ARM和Keil C51安装与破解
1、Keil MDK ARM安装
1)以5.12版说明 2)破解 3)Help >> About uVision中查看自己安装的工具链 4)如何让 keil MDK v5 支持 ARM7/9 设备
2、Keil C51安装
1)以c51v952说明 2)破解 3)删除原来的C51,用此C51
4)STC单片机的头文件导入 5)Help >> About uVision中查看自己安装的工具链
十、Keil MDK ARM输出汇编
1、设置按下图
2、文件存放
十一、使用fromelf.exe生成.bin文件
十二、KEIL MDK LIB库文件的制作
1、打开一个测试通过的工程
2、打开KEIL MDK->Project->Option for target...->Output,选 中Create Executable:....选项
3、重新编译,即可在原本生成Hex文件的目录下找到*.lib文件
4、打开原工程,只需将原来的dsp_g2.c文件移除,添加进该.lib文件即可使用
5、使用指令生成.lib文件(Keil C51测试通过)
十三、C文件生成静态库(如何将C文件生成静态库)
---------------------------------------------------------------------------------------------------------------------------
一、Keil5.12中文注释代码或粘贴后乱码
1、中文注释代码乱码
在新版本的KEIL中,总有人反映中文注释会出现乱码。出现这种情况,对于中文注释程序的人来说,无疑是一件十分不爽的事情。但实际解决这个问题其实很简单,在Edit/Configuration里如下图:
这个是view菜单的最后一下configuration的界面,在蓝色选中的部分选择GB2312,如图:
这时候,编辑文档里的删除文字和退格操作都是按照中文编码了,不再会出现乱码的情况。
----------------------------------------------
2、复制粘贴后乱码(复制粘贴代码变乱码)
---------------------------------------------------------------------------------------------------------------------------
二、Keil5.12代码补全功能
前提是不能有中文路径。
设置一下代码补全功能。
---------------------------------------------------------------------------------------------------------------------------
三、Keil5.12编译报错的处理(STM32使用J-Link仿真相关汇总)
软件版本
----------------------------------------------
1、去除“STM32F10X_MD”
原来的设置如下,后来突然就没有此选项(原因不明)。
这样就只能安装知识包,将下图中的STM32F10X_MD去掉即可解决。
在编译环境中预先定义USE_STDPERIPH_DRIVER的意义:
打开stm32f10x.h头文件,可以找到如下语句
也就是说只有预先定义了USE_STDPERIPH_DRIVER后,才会包含stm32f10x_conf.h头文件。在stm32f10x_conf.h中,包含了各个驱动脚本的头文件。
这也是为什么有些头文件并没有手动添加却自动包含了进来的原因。
----------------------------------------------
2、文件名中有C的关键字
报错startup_stm32f10xx.s: error: A3906U: Malformed via file '.\debug\startup_stm32f10xx._ia'.
Hi,
when i setting up a new project in uVision, i get a crazy Error wich i cant handle with.
My error is --> main.c: error: C3906U: Malformed via file '.\main.__i'.
Can someone help me with this, what is the main.__i good for and why is it malformed?
Best regards Nils
Hi Nils,
Only thing I found on google was to remove the file from the project, and then add it again. Make sure to clean the project and do a full re-build afterwards. Does this happen on all projects?
If this does not help, I would recommend posting this to Keil's forums. I believe that you would get a better answer there.
Best regards H?kon
you might be using special character like '#" for directory name under which you put your project.
就是在放工程的目录名不能使用象“#”那样的特殊符号。
The easy solution is to make sure, the directory name under which you have your project files should not have any special characters.
e.g. your project path :C:\Users\acer\Desktop\myProject#2\App Code\Application\s310\arm
Here the directory "myProject#2" is invalid path for keil, if you remove the special character from directory name then it will compile without any error.
Best Regards Jadeja
----------------------------------------------
3、使用宏库“use micro lib”
Error: L6915E: Library reports error: __use_no_semihosting was requested, but _ttywrch was referenced.
Target not created.
如果加载了库文件,则要点选“use micro lib”。
----------------------------------------------
4、JLINK驱动使用错误
应用程序发生异常未知的软件异常(0xc0000409),位置为0x0a36a6f7
原因:当前使用J-LINK进行仿真,但驱动使用了ST-Link的。
----------------------------------------------
5、出现“invalid multibyte character sequence”
代码中加入#pragma diag_suppress 870
----------------------------------------------
6、出现identifier "bool" is undefined
编译IEC104规约时出现“..\..\HARDWARE\INC\IEC104.h(159): error: #20: identifier "bool" is undefined”
在stm32f103.h中添加 typedef enum {FALSE = 0, TRUE = !FALSE} bool; 就没有错误了。
----------------------------------------------
7、出现“No space in execution regions with .ANY selector match Section”
1)分析
这个出现的原因是因为芯片RAM空间不足,无法执行程序。通常RAM的空间会比较小,ROM空间相对较大。
--------------------------
2)解决办法
(1)扩大RAM,更换芯片
比如这里将STM32F103VCT6(0xC000)更改为STM32F103VDT6或STM32F103VET6(0x10000)。
CPU频率 ROM(Byte) RAM(Byte)
①尝试修改”Target Options“中右侧RAM的Size,但这个要先查看芯片文档,找到文档中描述的RAM大小,把Size调成最大值。但是我的这个工程还是不行,看来是预存的数据量太大了。
②如果第一种方法还是不行,那就只能尝试把一些数据类的变量定义为静态,这样就可以利用ROM的存储空间了。找到工程中存储数据的部分,发现是大量的float数组。这种情况会占用大量的空间,所以要在float声明的前面加一个”const“,转换为静态变量。这样我的就可以通过了,成功生成了hex文件。
③如果第二种方法还是不行,那就只能修改代码的数据结构了。
----------------------------------------------
8、隐藏的文件处理
Keil直接编译掩藏的文件会报错,按下图设置。
---------------------------------------------------------------------------------------------------------------------------
四、RAM和ROM
1、查看内存
1)“字母:数字”,D、 I、 X、 C分别代表着直接寻址的片内RAM、间接寻址的片内RAM、扩展的外部RAM和ROM。
切记:查看内存仅限于模拟仿真时。
2)保存memory中的数据,注意保存下来的文件是HEX386格式的,可以通过其他工具转换成BIN格式。
“Command”中用“SAVE”命令:
SAVE path filename addr1, addr2
SAVE E:\ 0x0000,0x0100
3)keil编译后会产生.M51或者.map文件,在这里面也可看到内存的使用情况。
4)C程序中查看某一个变量在内存中的地址,比如下面的ChannelKindFault变量
通过串口输出:printf("\r\nSRAM Address:%x",&ChannelKindFault);
----------------------------------------------
2、ARM单片机RAM和ROM
ARM程序(指在ARM系统中正在执行的程序,而非保存在ROM中的bin文件)的组成一个ARM程序包含3部分:RO段,RW段和ZI段。
1)ARM编译结果
烧写的时候是FLASH被占用的空间为:Code + RO Data + RW Data
程序运行的时候,芯片内部RAM使用的空间为:RW Data + ZI Data
RO是程序中的指令和常量 readonly,如const型
RW是程序中的已初始化变量 read/write
ZI是程序中的未初始化的变量 zero
----------------------
2)ARM映像文件的组成
所谓ARM映像文件就是指烧录到ROM中的bin文件,也成为image文件。以下用Image文件来称呼它。 Image文件包含了RO和RW数据。之所以Image文件不包含ZI数据,是因为ZI数据都是0,没必要包含,只要程序运行之前将ZI数据所在的区域一律清零即可。包含进去反而浪费存储空间。
ARM程序的执行过程
从以上两点可以知道,烧录到ROM中的image文件与实际运行时的ARM程序之间并不是完全一样的。因此就有必要了解ARM程序是如何从ROM中的image到达实际运行状态的。
实际上,RO中的指令至少应该有这样的功能:
(1)将RW从ROM中搬到RAM中,因为RW是变量,变量不能存在ROM中。启动过程另可见main函数之前都发生了什么。
(2)将ZI所在的RAM区域全部清零,因为ZI区域并不在Image中,所以需要程序根据编译器给出的ZI地址及大小来将相应得RAM区域清零。ZI中也是变量,同理:变量不能存在ROM中。
在程序运行的最初阶段,RO中的指令完成了这两项工作后C程序才能正常访问变量。否则只能运行不含变量的代码。
------------------------
更为详细的讲解搜索百度云盘“嵌入式网络那些事LwIP协议深度剖析与实战演练”的第三章3.1.4 ARM连接器。
一个映像文件(image)一般由一个或多个域组成,而往往在image中的位置同域在实际存储器的的位置俱有对应关系。
3)ARM映像文件的存储地址映射
---------------------------------------------------------------------------------------------------------------------------
五、查看代码运行时间
切记:查看代码运行时间仅限于模拟仿真时。
---------------------------------------------------------------------------------------------------------------------------
六、ARM单片机Keil5.12正确配置Flash截图
----------------------------------------------
1、Devie设置
----------------------------------------------
2、Target设置
----------------------------------------------
3、Output设置
----------------------------------------------
4、Listing设置
----------------------------------------------
5、User设置
----------------------------------------------
6、C/C++设置
----------------------------------------------
7、Asm设置
----------------------------------------------
8、Linker设置
----------------------------------------------
9、Debug设置
----------------------------------------------
---------------------------------------------------------------------------------------------------------------------------
七、Keil5.14.0.0版本编译通过的程序,在Keil5.12.0.0版本运行出错
Keil5.14.0.0版本编译通过的程序,在Keil5.12.0.0版本运行时会造成程序的时钟变慢,如果有闪烁指示灯会非常明显的感觉到闪烁变长。
---------------------------------------------------------------------------------------------------------------------------
八、watch中添加的变量不能实时更新
---------------------------------------------------------------------------------------------------------------------------
九、Keil MDK ARM和Keil C51安装与破解
Keil相关软件在我的百度云盘中搜索下载。
1、Keil MDK ARM安装
1)以5.12版说明
----------------------
2)破解
注:Win7/64位在Keil中破解时,Keil必须用管理员运行
----------------------
3)Help >> About uVision中查看自己安装的工具链
----------------------
4)如何让 keil MDK v5 支持 ARM7/9 设备
For maintaining existing MDK Version 4 projects, or using devices that are not yet supported by a Software Pack, please install Legacy Support for ARM 7/9 or Cortex-M. Refer to the Device Database for Legacy Support device coverage.
原来,keil-5 的安装包突然变那么小是因为裁掉了很多老版的设备,如一些 Cortex-M 系列的和 ARM7、9系列的。
http://www2.keil.com/mdk5/legacy
----------------------------------------------
2、Keil C51安装
1)以c51v952说明
----------------------
2)破解
余下的操作同上。
----------------------
3)删除原来的C51,用此C51
----------------------
4)STC单片机的头文件导入
----------------------
5)Help >> About uVision中查看自己安装的工具链
---------------------------------------------------------------------------------------------------------------------------
十、Keil MDK ARM输出汇编
1、设置按下图
----------------------------------------------
2、文件存放
在“Project\LIST目录下方”
---------------------------------------------------------------------------------------------------------------------------
十一、使用fromelf.exe生成.bin文件
命令:fromelf.exe --bin -o "[email protected]" "#L"
编译后的输出结果:
以下摘自网络:
在使用KEIL的时候,我们要使生成的hex文件转化成bin文件,方便下载或fireware更新,有时候看到的是一个目录,遇到这种情况是什么问题呢!
比如说这个命令:fromelf.exe --bin -o "[email protected]" "#L", 这个也许就生成了一个bin目录文件,这个是为什么呢?
首先看一下链接脚本,发现里面有几个段的定义,其实我们需要的只是代码段,那么我们只需要修改这条命令为:
fromelf.exe --bincombined -o "[email protected]" "#L",把--bin 改成 --bincombined, 这样子我们就达到了我们所需要的bin文件,它可以把多个负载段生成一个输出文件。
---------------------------------------------------------------------------------------------------------------------------
十二、KEIL MDK LIB库文件的制作
1、打开一个测试通过的工程
如果本来要打包的库文件里面的代码有错的话,打包成库后也是不能用的,这步是关键
测试没有问题后将不需要的部分删除
----------------------------------------------
2、打开KEIL MDK->Project->Option for target...->Output,选 中Create Executable:....选项
----------------------------------------------
3、切记:需要重新编译,即可在原本生成Hex文件的目录下找到*.lib文件
----------------------------------------------
4、打开原工程,只需将原来的dsp_g2.c文件移除,添加进该.lib文件即可使用
----------------------------------------------
5、使用指令生成.lib文件(Keil C51测试通过)
1)在编译通过的工程目录里找到delay1s.obj和delay5ms.obj文件,复制到Keil安装目录下的BIN文件夹内。
----------------------
2)打开上图中突显的LIB51.EXE。在上面输入以下代码:
3)这时在BIN中就出现了mylib.lib文件,它已经被添加了之前的两个延时程序。
4)复制这个库到LIB中,并添加进该.lib文件即可使用
使用指令生成.lib文件在Keil MDK中测试没有通过。blog.sina.com.cn/s/blog_66b0e33d0101d6o1.html
---------------------------------------------------------------------------------------------------------------------------
十三、C文件生成静态库(如何将C文件生成静态库)
---------------------------------------------------------------------------------------------------------------------------