zl程序教程

keil编译器

  • STM32 Keil5报错-Target uses ARM-Compiler ‘Default Compiler Version 5‘ which is not available-安装编译器解决

    STM32 Keil5报错-Target uses ARM-Compiler ‘Default Compiler Version 5‘ which is not available-安装编译器解决

    现象 Keil MDK 5.3.6__编译代码报错:Target uses ARM-Compiler ‘Default Compiler Version 5‘ which is not available

    日期 2023-06-12 10:48:40     
  • Keil5.15使用GCC编译器链接.a库文件

    Keil5.15使用GCC编译器链接.a库文件

    我们知道,当使用第三方的代码时,人家有可能会扔个Lib文件给你.这时候,别人仅仅要提供header文件给你,则你就能够通过Lib文件及header的函数声明,对Lib中的函数进行调用.在Keil中假设使用ARMCC调用Lib文件,相信大家都能从网上找到方法.那假设在Keil中使用GCC来链接第三方GCC编译好的Lib文件——".a"应该怎样呢? 在告诉大家方法之前,我们写个简

    日期 2023-06-12 10:48:40     
  • stm32F103(HAL库)+keil5.20+gcc(gcc-arm-none-eabi-9-2019-q4-major-win32)编译器编译工程(详细步骤)

    stm32F103(HAL库)+keil5.20+gcc(gcc-arm-none-eabi-9-2019-q4-major-win32)编译器编译工程(详细步骤)

    序: 偶然的因素看到网上有keil设置arm gcc的编译器,于是想自己尝试一下。mdk5.15之后就可以按照此文的方案去设置,也可以参考keil官网文档, 这个文章过了好多年,圈中大佬,真正的大佬(GorgonMeducer 傻孩子 裸机思维),在他的公众号中,写了一个手把手的教程——《【教程】如何用GCC“零汇编”白嫖MDK》,温故知新,好记性不如烂笔头~~~ 1、安装 gcc-a

    日期 2023-06-12 10:48:40     
  • keil mdk编译器学习笔记(7)——Keil MDK下变量存储

    keil mdk编译器学习笔记(7)——Keil MDK下变量存储

    之前提到过一个编译选项:Optimize for time,这个会影响float变量的存储大小,其实实测是不会影响,依然是4字节 且看测试的截图:stm32F103+keil5.20+ac5 测试代码: #pragma pack (4) /*指定按4字节对齐方式*/ uint8_t cnt = 3; float f_var = 5.0f; uint8_t tick = 6; uint32_t

    日期 2023-06-12 10:48:40     
  • keil mdk编译器学习笔记(6)——Keil MDK下如何设置非零初始化变量

    keil mdk编译器学习笔记(6)——Keil MDK下如何设置非零初始化变量

    通常,我们一般使用flash来保存一些上次保存的数据,这样下次开机后读取改flash处的变量即可读回上次配置或上次最后的数据值,但是keil其实有另外的方式来保存数据,且看下文分解。 一些工控产品,当系统复位后(非上电复位),可能要求保持住复位前RAM中的数据,用来快速恢复现场,或者不至于因瞬间复位而重启现场设备。而keil mdk在默认情况下,任何形式的复位都会将RAM区的非初始化变量数据清零

    日期 2023-06-12 10:48:40     
  • keil mdk编译器学习笔记(5)——如何确保某一段程序不被优化掉 使用keil判断ARM的冷启动和热启动的方法

    keil mdk编译器学习笔记(5)——如何确保某一段程序不被优化掉 使用keil判断ARM的冷启动和热启动的方法

    思路: 常把单片机系统的复位分为冷启动和热启动。所谓冷启动,也就是一般所说的上电复位,冷启动后片内外RAM的内容是随机的;单片机的热启动是通过外部电路给运行中的单片机的复位端一复位电平而实现的,也就是所说的按键复位或看门狗复位。复位后,RAM的内容都没有改变。在某些场合,必须区分出设备的重启是热重启还是冷重启。常用的方法是:确定某内存单位为标志位(如0x40003FF4~0x40003FF7 R

    日期 2023-06-12 10:48:40     
  • keil mdk编译器学习笔记(4)——如何确保某一段程序不被优化掉

    keil mdk编译器学习笔记(4)——如何确保某一段程序不被优化掉

    使用mdk编程,假如有一个有用的函数你定义了但是没有显式的调用,mdk在默认方式下,将会把这个函数从整个程序总删除掉,以节省ROM. 比如,你在ROM的0x00002000处定位了一个函数,假设为void test(void),然后使用函数指针来调用它: void (*UserProgram)();          

    日期 2023-06-12 10:48:40     
  • keil mdk编译器学习笔记(3)——转载+整理

    keil mdk编译器学习笔记(3)——转载+整理

    目前keil mdk已经更新到5.29,很多新的功能,可以尝试,体验。公司项目可以使用老的编译器,自己玩玩可以谭毅新的版本的keil。 我做嵌入式行业,编程也多和硬件打交道,好多人说编译器只是工具,重要的在于算法和思想。这话说的本来没错,但要有一个条件在先:那就是你真正掌握了你所用的编译器。但就我来看,真正熟悉编译器的却并不多见。当你深入了解一个编译器后,你能像用汇编一样用C,可以像汇编那样随心

    日期 2023-06-12 10:48:40     
  • keil mdk编译器学习笔记(2)

    keil mdk编译器学习笔记(2)

    1、默认情况下,keil和iar都是认为char是unsigned char,可以通过设置去更改的。 2、赋初值的全局变量和静态变量,对于在程序中赋初值的全局变量和静态变量,程序编译后,MDK将这些初值放到Flash中,紧靠在可执行代码的后面。在程序进入main函数前,会运行一段库代码,将这部分数据拷贝至相应RAM位置。 后来看ARM的链接器,才知道ARM映象文件各组成部分在存储系统中的地址有两

    日期 2023-06-12 10:48:40     
  • keil mdk编译器学习笔记(1)——序

    keil mdk编译器学习笔记(1)——序

    这两天,学习了keil-mdk编译器的特性,这基本上独立于c语言语法,平时基本上都在强调c语言的学习,但是编译器的学习我们也要注重,类似于gcc一样,不也有很多网上的资料,讲述gcc的特性和用法吗。作为嵌入式开发,keil-mdk的特性也是要了解到,另外,iar编译器也是有其特有的编程技巧的,因此都需要慢慢渗入和了解。都说:工欲善其事,必先利其器,掌握多种开发工具,以及开发工具的特性,可以帮助我

    日期 2023-06-12 10:48:40     
  • keil mdk+stm32的ac5和 ac6两个编译器下的字节对齐操作方法

    keil mdk+stm32的ac5和 ac6两个编译器下的字节对齐操作方法

    最近在使用ac6.9的编译器,编译速度是真的很快,使用stm32的hal库编译速度也比ac5的编译器快很多。本文试验stm32中字节对齐的代码测试,主要是结构体,因为结构体中实际项目中用到最多,同时在仿真环境中打印出来。 ac5的测试结果: #ifdef CC_ARM_AC5 //该方式只是使用ac5编译器,结构体不对齐的方式1,结构体的长度,就是各个变量长度的和 __packed typed

    日期 2023-06-12 10:48:40     
  • keil编译器从ac5迁移到ac6

    keil编译器从ac5迁移到ac6

    今天在安富莱的论坛上ac6的使用方法,所以,就小试牛刀玩了玩,终于ok了。使用keil5.25+stm32+hal库,5.23开始才支持ac6,因此keil版本不能太低。 可以参考:https://blog.csdn.net/ybhuangfugui/article/details/99826708 https://blog.csdn.net/ybhuangfugui/article/detai

    日期 2023-06-12 10:48:40