keil

Keil C减小代码编译量大小的方法(gai)

佐手、 提交于 2020-03-30 07:06:51
keil-C减小代码编译大小的方法整理 方法一:(通过优化代码减小) 1.1少做乘除运算,使用左/右移位来实现乘除 Eg ,普通:a = 0x80*4; 优化:a = 0x80<<2; 1.2在不影响运算条件下,使用短类型代替长类型 Eg ,普通: int a; 优化: char a; 1.3尽量使用无符号类型数据 Eg ,普通:char a = 56; 优化:unsigned char a = 56; 1.4回避使用浮点类型数据做乘除运算,这样代码量很大 Eg ,普通:float a = 5.3*2.5; 优化:回避使用; 1.5同一种类似操作放在一起 Eg ,普通:同一类操作多次重复书写 优化:将它们定义一个子函数,每次使用时调用 1.6使用先定义后赋值的方法比在赋值时定义更省代码量 Eg ,普通:int a = 70; 优化:int a ; a = 70; 1.7使用自减优于自加,比如在做延时的时候 Eg ,普通: void dely() { char a ; for(a = 0; a < 70; a++); } 优化: void dely() { char a ; for(a = 70; a > 0; a--); } 1.8全局变量定义放在main()外面,初始值放在main()里面 Eg ,普通:int a = 8; Main() { } 优化: int a; Main(

悲催的keil环境变量

浪尽此生 提交于 2020-03-15 10:22:51
Toolchain environment variables The ARM Compiler toolchain does not require environment variables to be set. However, there are situations where you might want to set environment variables. For example, if you want to specify additional command-line options for armcc , but you do not want to modify your build scripts, then you can specify the options using ARMCC nn _CCOPT . The environment variables used by the toolchain are: Table 1. Environment variables used by the toolchain Environment variable [ a ] Setting ARMROOT Your installation directory root ( install_directory ). This documentation

KeilAssistant - 示波器

橙三吉。 提交于 2020-03-08 18:34:13
最近使用STM32开发一个测量系统,想将ADC采集的数据绘制波形来分析波形及其信噪比,无赖串口的传输速度太低了,USB接口硬件上又没有引出。无意中发现KEIL的UVSOCK接口居然对外开放了全部服务,这也就意味着可以在keil调试过程中通过UVSOCK来访问单片机内部的数据,为了调试方便索性就开发了KeilAssistant工具,用于调试过程中方便的查看单片机内部的数据,顺便集成了FFT和简单的谱线校正算法,即便是非同步采样也能比较准确的分析出信号的基波和谐波的频率、幅度和相位。 KeilAssistant使用python + QT 开发,pyinstaller 打包,打包环境是win64 环境,因此该软件只能在win64下工作,而且由于pyinstaller直接在Anaconda下打包导致最后输出文件过大压缩后都接近400MB,等我有时间了在去优化一下打包环境以减小最终发布版本的体积。 首先需要打开Keil的UVSOCK功能,Edit->Configuration->Other,勾选Enable, Port默认即可,重启Keil。 KeilAssistant(链接:https://pan.baidu.com/s/1dIOzeeld3eKypHPX8QHH9g 提取码:1zjy)下载后不需要安装,直接解压缩打开KeilAssistant.exe即可打开如下图, IP 默认本机即可;

iar、keil(ac5+ac6)编译效果小记

六月ゝ 毕业季﹏ 提交于 2020-03-06 10:27:29
stm32F103et6平台,cubemx生成的两个IDE工程 1、均无开启任务优化 iar8.32如下: keil5.29 ac5编译器 : keil5.29 ac6编译器 : 同样的代码,不开优化的情况下,ac6反而代码空间比较大 2、开启最高优化: iar:high(size) keil5.29 ac5编译器 :level 3 keil5.29 ac5编译器 :-Oz 开启优化的情况,ac6的表现还是不错的。 来源: https://www.cnblogs.com/CodeWorkerLiMing/p/12424942.html

Keil 中的Code,RO-data,RW-data,ZI-data

有些话、适合烂在心里 提交于 2020-02-28 18:43:21
Keil 中的Code,RO-data,RW-data,ZI-data 我们开发项目中,编译、链接完成后,都要看一下RAM和Flash的利用情况,尤其在有bootloader的情况下,确保自己的单片机选型能符合项目的要求。其中ARM程序的组成,是很容易混淆的。 此处所说的“ARM程序” 是指在ARM系统中正在执行的程序,而非保存在Flash中的bin映像(image)文件 ,这一点清注意区别。 一、Code,RO-data,RW-data,ZI-data所代表的意思 下图是车检器项目的APP利用情况: 图1 Code = 10956 Code 表示 程序代码部分,即指令 RO-data = 2196 Read Only 表示 程序定义的常量,如const关键字定义的常量数组或者长量(一般作为掉电后的标记),函数中的常量 RW-data = 76 Read Write 表示 已初始化的变量(全局和局部变量) ZI-data = 9908 Zero Initialize 表示 未初始化的变量(全局和局部变量) 二、查找..\Lists文件夹中Project.map文件,查看使用的 MCU 资源: 图2 1、Flash占用 图3 由上图2和图3可知,Size:0x33ac.....13228,因此flash占用如下: Code, RO-data, RW-data ...........

Keil环境的搭建and创建新工程

a 夏天 提交于 2020-02-22 23:54:15
注意:所有文件的路径都不要出现中文!!! 以arm_mdk为例,芯片是STM32F103ZE 本博客仅作学习,不提供软件资源 环境的搭建 软件资源: USB驱动将USB口转成一个.com端口(说法可能有误) 烧录软件,下载 支持包,提供软件支持,在arm_mdk安装完成后,双击等待进度条结束即可 安装包,按步骤安装即可 破解工具,安装完mdk后,以管理员身份运行,在File,License Management,复制第一个选项卡中的CID,打开破解工具(注意音量),选择相应的版本(专业版)、以及软件类型(arm),生成,将生成的LIC复制到选项卡中,添加即可。 创建新工程 需要一个适合内核使用的固件库, 在合适的位置创建一个文件夹(test)作为工程文件夹,再其中创建两个文件夹(user,app)user用来放main函数、中断函数的源文件,app用来放硬件的驱动(可能有误) 将固件库中的Libraries文件夹复制到test下,完成后 将固件库中==.\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template==,图中选中的文件复制到user文件夹中 打开keil,Project,new Project(就是第一个),选中刚刚的文件夹,命名,保存 选择微控制器的型号(STM32F103ZE)

最简单的STM32入门教程----闪烁LED

流过昼夜 提交于 2020-02-17 10:22:11
本文讲述的是如何从零开始,使用keil建立一个简单的STM32的工程,并闪烁LED灯,给小白看。 第零步 ,当然首先你得有一个STM32的板子,其IO口上接了一个LED。。。 第一步 ,建立一个文件夹0.0 第二步 ,打开keil,建立工程 在弹出来的对话框中选择你所用的STM32的芯片。 在接下来弹出来的对话框中选择是,这样keil就帮我们建立好了启动文件。 第三步 ,新建一个main.c文件,并添加到工程中。 点击New按钮,建立一个文本文件。 在建立的文本文件中输入C中的main函数 点击保存 保存后,将文件添加到工程中 第四步 ,点击编译 可以看到keil有报错 错误信息为: 没有定义的符号SystemInit ,这是因为在启动文件中有调用SystemInit函数,但是我们没有定义它,如下图: 暂时不用理会上述启动文件中汇编的含义,只需在main.c中添加该函数即可消除该错误。 修改后再编译,程序没有报错了。至此,一个STM32的工程就建立完成了。 第五步 ,将下面的代码复制粘贴 #define PERIPH_BASE ((unsigned int)0x40000000) #define APB2PERIPH_BASE (PERIPH_BASE + 0x10000) #define GPIOA_BASE (APB2PERIPH_BASE + 0x0800) #define

#define #include

久未见 提交于 2020-02-08 09:24:15
c语言中include“”的区别 < >引用的是编译器的类库路径里面的头文件 " "引用的是你程序目录的相对路径中的头文件 假如你编译器定义的自带头文件引用在C:\Keil\c51\INC\下面 则#include<stdio.h>引用的就是C:\Keil\c51\INC\stdio.h这个头文件 不管你的项目在什么目录里,C:\Keil\c51\INC\stdio.h这个路径就定下来了 一般是引用自带的一些头文件:stdio.h、conio.h、string.h、stdlib.h等等之类的。。 假如你的项目目录是在D:\Projects\tmp\ 则#include "my.h" 引用的就是D:\Projects\tmp\my.h这个头文件 一般是用来引用自己写的一些头文件 如果使用" ",它是会先在你项目的当前目录查找是否有对应头文件 如果没有,它还是会在对应的引用目录里面查找对应的头文件 意思就是,使用#include "stdio.h"如果你项目目录里面,没有stdio.h这个头文件,它还是会定位到C:\Keil\c51\INC\stdio.h这个头文件的 在一个大的软件工程里面,可能会有多个文件同时包含一个头文件,当这些文件编译链接 成一个可执行文件时,就会出现大量“重定义”的错误。在头文件中实用 #ifndef #define #endif 能避免头文件的重定义。

keil和protues仿真点亮一个LED灯

浪尽此生 提交于 2020-02-04 09:51:15
keil #include <reg52.h> //52系列单片机头文件 sbit D1=P1^0; void main() { D1=0; // 点亮第一个发光二极管 while(1) } 发光二极管点亮原理为有电流流过,单片机端口默认为高电平,将发光二极管一端接P1.0端口,赋予低电平,另一端接高电平VCC(电源),所以就有电流流通,发光二极管也就点亮了。 protues仿真 来源: CSDN 作者: 发光吧 链接: https://blog.csdn.net/JiatongForever/article/details/104108677

记录一次keil vscode 联合调试阅读代码过程中出现乱码,导致keil编译不过的问题

一个人想着一个人 提交于 2020-01-29 03:15:06
1. 2.此时VSCODE内的改文件是乱码现象,进行如下操作,选择 通过编码重新打开, 选择GB 2312即可。 (GB2312是兼容ANSI编码的) 来源: https://www.cnblogs.com/happybirthdaytoyou/p/12239479.html