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

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

时间: 2024-10-31 14:35:52

iar、keil(ac5+ac6)编译效果小记的相关文章

【Note2】用keil对工程编译时,工程中已经包含的文件会报错:cannot open source input file usb_conf.h No such file or directory

错误举例: ..\..\Libraries\STM32_USB-FS-Device_Driver\inc\usb_type.h(21): error:  #5: cannot open source input file "usb_conf.h": No such file or directory 这是因为没有设置 STM32 固件库的目录, 编译器就默认到 "Keil"根目录下的某某目录找去了.如果现在编译程序,会报错的 解决方法:引用固件库文件所在的目录需要在

cygwin编译环境小记

[gcc] 预定义宏 编译器通常会根据平台和编译选项的不同,为被编译的程序提供不同的预定义的宏, 例如WIN32 WIN64 LINUX, 例如DEBUG, RELEASE. 1. 在使用gcc/g++编译器时,可以通过以下命令打印出编译器预编译的宏. gcc -dM -E - < /dev/null 用户自定义宏 除了预定义宏,编译器还允许在编译时, 还可以自定义宏 1. 在使用gcc/g++编译器时,通过添加 -D 选项,添加用户自定义的宏. 例如: g++ -o test -D USERM

xsocks 64位平台下编译问题小记

1.src/common/public.h uint32_t lpParameter 改为 void* lpParameter; 2.SocksMgr.cpp DWORD WINAPI CSocksMgr::ForwardProc(void* lpParameter) { // int s = int (lpParameter); ... } 编译不过去.因为在 64位平台下,void*向 int转换会丢失精度. DWORD WINAPI CSocksMgr::ForwardProc(void*

测试mysql的sql语句预编译效果

玩Oracle的都比较关注shared pool,特别是library cache,在使用了绑定变量(预编译sql)之后确实能得到很大的性能提升.现在在转Mysql之后特别是innodb很多东西都还能和Oracle对得上号的,就像innodb_buffer_pool_size类似于Oracle的database buffer cache,innodb_log_buffer_size类似于redo log buffer,但是innodb_additional_mem_pool_size仅仅类似于s

京东首页闪光滑动效果小记(转载)

http://www.w3cfuns.com/blog-5473326-5409149.html <html><head><style>.overimg{ position: relative; display: block; overflow: hidden; box-shadow: 0 0 10px #FFF; width:180px;}.light{ cursor:pointer; position: absolute; left: -180px; top: 0;

javascript中两种定义函数方式的差别以及函数的预编译效果

我们知道在javascript中定义函数的方式有以下两种: function mm(){ } 这种形式是声明一个函数,跟 var 声明一个变量机制一样,脚本在解释执行之前会做预编译处理. var mm = function(){ } 这种形式是对一个变量赋值,虽然也做预编译,但仅仅只是给 mm 事先变量分配一个内存空间,而没有做初始化. 代码1: alert(a);//打印函数a的内存 alert(b);//undefined alert(c);//JS报错:"c"未定义 functi

javascript中使用var定义变量的预编译效果

首先说明一点:javascript语法是非常灵活的,灵活的代价就是很容易导致不规范的编码和各种意想不到的运行结果.ECMAScript 5 引入了 严格模式 (strict mode),今后我们编写javascript代码最好都使用"use strict",规范我们的javascript代码.下面的测试代码不是基于严格模式. alert(a); var a;//已声明未赋值 alert(b);//未声明的变量 执行结果是:a打印undefined,b报错.这说明:var a;这条语句的

ARM 编译工具keil 和 IAR 命令行编译和下载

目的 不管是Keil还是IAR对代码补全,高亮等编辑功能支持的不是很好,虽然现在的Keil 5.25对界面的支持好了很多,但是很多人还是青睐于第三方的编辑器,命令行的编译方式可以让我们在使用第三方编辑器编辑的时候进行代码编译和下载,通常我们比较喜欢的编辑器有下面一些,不是很全. _____________________________________ 常用的第三方编辑器介绍 Visual Studio 2010 - 2017 Windows 下面的VS工具配上番茄助手写代码爽的不得了,并且现在

STM32的堆与栈与编译信息查看

因为一个项目中使用malloc函数动态分配内存400多个字节,返回为0,分配失败.查找失败原因,为堆空间不足分配导致.查看堆和栈分别设置了2K,按正常情况看应能满足分配空间,原因可能因为栈分配空间不够,导致到堆的内存空间致使,堆的内存空间过小.下面就说一下STM32的RAM区的分配,堆和栈的信息和编译信息查看. 以下引用网上资料 理解堆和栈的区别和KEIL打印信息的理解 (1)栈区(stack):由编译器自动分配和释放,存放函数的参数值.局部变量的值等,其操作方式类似 于数据结构中的栈. (2)