IAR工具链编译与GCC工具链编译转换问题

这篇具有很好参考价值的文章主要介绍了IAR工具链编译与GCC工具链编译转换问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

由于目前有个项目,需要将GCC编译工具链,转换移植到IAR工程里面,遇到以下问题,以此记录解决过程。使用GCC编译工具链时,void HardFault_Handler(void)函数,是放在exceptions.c文件里面,使用函数实现的。

void HardFault_Handler(void)
{
    /* get current context */
    ASM_KEYWORD("tst lr, #4");                                        
    ASM_KEYWORD("ite eq");                                              
    ASM_KEYWORD("mrseq r0, msp");                                       
    ASM_KEYWORD("mrsne r0, psp");                                       
    ASM_KEYWORD("ldr r1, [r0, #24]");                                   
    ASM_KEYWORD("bl prvGetRegistersFromStack");
    while(TRUE)
    {
        ;
    };
}

问题一:首先编译提示,识别不到tst,ite等汇编指令的定义说明。

IAR工具链编译与GCC工具链编译转换问题

 经过确认,该问题是由于使用的IAR IDE的版本问题,使用IAR IDE版本大于7.0以上的版本,上面内联汇编语言的格式不满足识别的条件。需要修改成以下换行的方式实现。

    /* get current context */
    ASM_KEYWORD("tst lr, #4\n");                                        
    ASM_KEYWORD("ite eq\n" \
    "mrseq r0, MSP\n" \
    "mrsne r0, PSP\n");\
    
    ASM_KEYWORD("ldr r1, [r0, #24]");                                  

    ASM_KEYWORD("bl prvGetRegistersFromStack");

IAR工具链编译与GCC工具链编译转换问题

 问题二:提示外部引入的函数prvGetRegistersFromStack,找不到其实现定义?

经过查找,需要使用以下方式转换,即可实现。

void HardFault_Handler(void)
{
    
    /* get current context */
    ASM_KEYWORD("tst lr, #4\n");                                        
    ASM_KEYWORD("ite eq\n" \
    "mrseq r0, MSP\n" \
    "mrsne r0, PSP\n");\
    
    ASM_KEYWORD("ldr r1, [r0, #24]");                                  
    ASM_KEYWORD("ldr r2, =prvGetRegistersFromStack");
    ASM_KEYWORD("bx r2 ");
    
    while(TRUE)
    {
        ;
    };
}

以上经验,参照文档如下:

Debugging a ARM Cortex-M Hard Fault - #10 by jefftenney - IAR - FreeRTOS Community Forums文章来源地址https://www.toymoban.com/news/detail-510755.html

到了这里,关于IAR工具链编译与GCC工具链编译转换问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 嵌入式C编译工具:gcc/make/Autotools/cmake

    gcc时GNU编译套件,一种编译器,可以编译c,c++,java等语言。当只有一个文件时,使用gcc编译器就很方便,但是当有多个文件时,编译顺序以及包含关系等使用gcc很麻烦。 make工具:make就相当于一个智能的批处理工具,通过调用makefile实现编译,在makefile规定编译以及链接的顺序

    2024年02月02日
    浏览(48)
  • ARM交叉编译工具链 gcc-arm-none-eabi

    1,交叉编译工具链简介 (1)命令规则 交叉编译工具链的命名规则为:arch [-vendor] [-os] [-(gnu)eabi] arch – 体系架构ÿ

    2024年03月25日
    浏览(56)
  • Linux工具【1】(编辑器vim、编译器gcc与g++)

    vim(vi improved)编辑器是从 vi 发展出来的一个文本编辑器。 代码补全、编译及错误跳转、语法高亮等方便编程的功能特别丰富,在程序员中被广泛使用。 vim 可以说是程序开发者的一项很好用的工具,它更是一个程序开发工具而不只是文字处理软件。 在vim中编辑代码可以使程

    2024年02月15日
    浏览(42)
  • 在Lniux中编译代码的工具 —— vim和gcc/g++的使用

    目录 🌈前言 📁1. 什么是vim 📁2. vim的使用 vim的基本操作: 📁3. 命令模式下的命令集 📁4. 底行模式下的命令集 📁5. vim的个性设置  📁6. gcc/g++的使用 📁 扩展:程序从编译到运行的翻译过程 预处理(进行宏替换): 编译(生成汇编): 汇编(生成机器可识别代码):

    2024年02月20日
    浏览(28)
  • 1762_gcc编译c语言makefile自动生成工具的Perl实现

    全部学习汇总: GreyZhang/g_makefile: Learn makefile from all kinds of tutorials on the web. Happy hacking and let\\\'s find an common way so we may don\\\'t need to touch makefile code any more! (github.com)          前阵子实现了一个CodeWarrior嵌入式开发环境的自动编译环境,用的基本上是Python。说起来,我觉得那个环

    2024年02月12日
    浏览(75)
  • 交叉编译工具 aarch64-linux-gnu-gcc 的介绍与安装

    AArch64 是随 ARMv8 ISA 一起引入的 64 位架构,用于执行 A64 指令的计算机。而且在 AArch64 状态下执行的代码只能使用 A64 指令集。,而不能执行 A32 或 T32 指令。但是,与 AArch32 中不同,在64位状态下,指令可以访问 64 位和 32 位寄存器。 aarch64-linux-gnu-gcc 是一个交叉编译工具链,可

    2024年04月14日
    浏览(47)
  • 下载较老版本或最新版本的ARM Linux gcc 交叉编译工具链

    如果开发的 ARM 平台比较的多,需要多个版本的 arm gcc 交叉编译工具链,那么如何获取较新版本的 arm gcc 交叉编译工具链呢? 速度较快的,也比较新的,就到 ARM 官方网站下载 下载地址: https://developer.arm.com/downloads/-/gnu-a GNU-A Downloads 最新的下载地址: https://developer.arm.com/do

    2024年02月14日
    浏览(49)
  • 【探索Linux】—— 强大的命令行工具 P.4(编译器 gcc/g++ 使用)

    前面我们讲了C语言的基础知识,也了解了一些数据结构,并且讲了有关C++的一些知识,也学习了一些Linux的基本操作,也了解并学习了有关Linux开发工具vim ,也相信大家都掌握的不错,今天博主带大家了解一下Linux编译器 gcc/g++ 使用, 下面话不多说坐稳扶好咱们要开车了!!

    2024年02月12日
    浏览(52)
  • linux下使用gcc编译工具出现“命令未找到”或“没有那个文件或目录”等提示

    在linux系统中使用gcc编译工具对C程序进行编译时,报错显示“gcc命令未找到”或“没有那个文件或目录”,而此时你确定已经安装了gcc编译工具,这大概率是因为系统未能找到gcc命令的安装位置所导致的,需要将gcc的安装路径添加到PATH环境变量中,解决方法如下:        

    2024年02月08日
    浏览(56)
  • 【Linux】Linux编译器-gcc/g++ && Linux项目自动化构建工具-make/Makefile

    目录 Linux编译器-gcc/g++使用 1.背景知识  Linux中头文件的目录在 Linux 库 条件编译的典型应用 2.gcc如何完成 动态库 vs 静态库 debug release Linux项目自动化构建工具-make/Makefile 背景 用法 特殊符号  预处理(去注释,头文件展开,条件编译,宏替换) 编译(生成汇编) 汇编(生成

    2024年02月20日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包