Keil转到Eclipse遇到的几个问题

2023-11-01

ARM下Keil转到Eclipse后的几个问题

Keil转战到Eclipse下,

首先,Eclipse的交叉工具链的环境要进行设置;

其次,在Keil中的Scatter file在Eclipse下要重新编写;

最后,Eclipse的调试环境要进行配置。

Eclipse的环境搭建可参考:

http://wenku.baidu.com/link?url=LFu2GDqSIvpvs-8eC4Lb3Z3Js2zB03W4ou81uRTYmc-t2RHMWN_Hmvq0XGQKeKVpD_l3aroqK7w0GC-bRA65sKjouPiXpFUmzEcbNhsqiyq

基于Eclipse的嵌入式ARM开发环境建立

 

问题1,关于中断

Keil中的中断函数申请如下:

void __irq FunctionName(void)

就是函数带一个__irq的前缀。

如果此函数在Eclipse下编译,error: expected '=', ',', ';', 'asm' or '__attribute__'before 'FunctionName

那么在Eclispe中怎么申请一个中断(或者中快速中断)函数呢?

参考网址:

http://velep.com/archives/1014.html三星6410裸机程序开发4:eclipse中实现6410中断功能

http://blog.csdn.net/jjjzmj1987/article/details/5091525关于 中断函数申明 static void Dma0Done() __attribute__((interrupt("IRQ")));

示例:

void FunctionName(void)      __attribute__ ((interrupt("IRQ")));

void FunctionName (void)

{

   //do something

}

 

Note: 除了可以使用IRQ中断方式之外,还可以写FIQSWIABORTUNDEF的中断处理函数。

但在Eclipse内编译时却出现了:

error:interrupt Service Routines cannot be coded in Thumb mode

在Eclipse的C/C++ Build->Setting里将Instruction Set Thumb (-mthumb)改为ARM (-marm)或者Toolchain default,Thumb interwork (-mthumb-interwork)勾选上,重新编译。如下图:

ARMTHumbOnElcipse

上面选项是什么意思,可参考:http://blog.csdn.net/armeasy/article/details/6250969

-mthumb

Generate code for the Thumb instructionset. The default is to use the 32-bit ARM instruction set. This optionautomatically enables either 16-bit Thumb-1 or mixed 16/32-bit Thumb-2instructions based on the -mcpu=name and -march=name options. This option is notpassed to the assembler. If you want to force assembler files to be interpretedas Thumb code, either add a `.thumb' directive to the source or pass the-mthumb option directly to the assembler by prefixing it with -Wa.

-mthumb-interwork

Generate code which supports callingbetween the ARM and Thumb instruction sets. Without this option the twoinstruction sets cannot be reliably used inside one program. The default is-mno-thumb-interwork, since slightly larger code is generated when-mthumb-interwork is specified.

问题2,关于程序入口参数

以前用ARM的IDE工具,使用的是ARM标准的汇编语言。现在要使用GNU的工具,当然要了解一点GNU ARM汇编的不同之处。

Keil的程序,在Eclipse重新建立工程后,编译通过,链接时出现一个警告:

ld.exe:warning: cannot find entry symbol _start; defaulting to 00008018

不能找到_start入口。

在Keil下,程序的入口指定为

__ENTRY

 

[CODE].section<.section_name> {,”<flags>”}

开始一个新的代码或数据段。

.text, 代码段;.data, 初始化数据段;.bss, 未初始化数据段。

这些段都有缺省的标志(flags)联接器可以识别这些标志。(与armasm中的AREA相同)

下面是ELF格式允许的段标志

标志

含义

a 允许段

w 可写段

x 执行段

 

问题3,文件后缀

.c文件后缀必须是小写c,如果改成大写C,将会导致此文件不编译。

汇编文件的结尾貌似必须是大写S。

 

问题4,sbrkr.c:(.text+0x18): undefined reference to ‘_sbrk’

根据网址:https://forum.sparkfun.com/viewtopic.php?t=5390&start=15

运行类似的命令:arm-elf-ar -d libc.asyscalls.o,将syscalls从libc.a中剥离。

在项目中添加syscalls.c文件,还没有写DebugWrite原型,编译就通过了。

可能的原因是因为我调用了sprintf之类的库函数,导致在底层调用时没有找到相应的链接函数,这部分链接函数可以自己实现。

但是我现在采用的是直接重新实现sprintf函数,因为目前我还只用到了sprintf函数。可以调试,还要看看有没有什么问题。

 

@2015-03-14

今天Lwip部分移植上。编译出现了这个。


d:/program/arm_cross/arm-2013.11-24-v4-8-1/bin/../lib/gcc/arm-none-eabi/4.8.1/../../../../arm-none-eabi/lib\libc.a(lib_a-sbrkr.o):In function `_sbrk_r':

sbrkr.c:(.text+0x18):undefined reference to `_sbrk'

d:/program/arm_cross/arm-2013.11-24-v4-8-1/bin/../lib/gcc/arm-none-eabi/4.8.1/../../../../arm-none-eabi/lib\libc.a(lib_a-signalr.o):In function `_kill_r':

signalr.c:(.text+0x1c): undefined reference to `_kill'

d:/program/arm_cross/arm-2013.11-24-v4-8-1/bin/../lib/gcc/arm-none-eabi/4.8.1/../../../../arm-none-eabi/lib\libc.a(lib_a-signalr.o):In function `_getpid_r':

signalr.c:(.text+0x44):undefined reference to `_getpid'

d:/program/arm_cross/arm-2013.11-24-v4-8-1/bin/../lib/gcc/arm-none-eabi/4.8.1/../../../../arm-none-eabi/lib\libc.a(lib_a-writer.o):In function `_write_r':

writer.c:(.text+0x20):undefined reference to `_write'

d:/program/arm_cross/arm-2013.11-24-v4-8-1/bin/../lib/gcc/arm-none-eabi/4.8.1/../../../../arm-none-eabi/lib\libc.a(lib_a-closer.o):In function `_close_r':

closer.c:(.text+0x18):undefined reference to `_close'

d:/program/arm_cross/arm-2013.11-24-v4-8-1/bin/../lib/gcc/arm-none-eabi/4.8.1/../../../../arm-none-eabi/lib\libc.a(lib_a-fstatr.o):In function `_fstat_r':

fstatr.c:(.text+0x1c): undefined reference to `_fstat'

d:/program/arm_cross/arm-2013.11-24-v4-8-1/bin/../lib/gcc/arm-none-eabi/4.8.1/../../../../arm-none-eabi/lib\libc.a(lib_a-isattyr.o):In function `_isatty_r':

isattyr.c:(.text+0x18):undefined reference to `_isatty'

d:/program/arm_cross/arm-2013.11-24-v4-8-1/bin/../lib/gcc/arm-none-eabi/4.8.1/../../../../arm-none-eabi/lib\libc.a(lib_a-lseekr.o):In function `_lseek_r':

lseekr.c:(.text+0x20):undefined reference to `_lseek'

d:/program/arm_cross/arm-2013.11-24-v4-8-1/bin/../lib/gcc/arm-none-eabi/4.8.1/../../../../arm-none-eabi/lib\libc.a(lib_a-readr.o):In function `_read_r':

readr.c:(.text+0x20):undefined reference to `_read'

collect2.exe: error: ld returned 1 exit status

 

这是由于在用arm-none-eabi工具进行编译时,没有newlib库导致的。之前解决了关于这个库的一下小问题,当时是采用了printf和sprintf之类的函数,最后解决方法是自己在底层实现了sprintf函数。但这次报的太多了,因此想将newlib移植过来。newlib里面就是一些常用的系统库函数。

如果是在linux下编译,linux本身就带glibc库,可能就不会出现这个问题了。

 

从这个网址上ftp://sourceware.org/pub/newlib/index.html下载了newlib2013-12-23: newlib-2.1.0.tar.gz(16.2MB)。之所以没有下载最新的是因为,最新的那几次版本太频繁了,怕不稳定。这个应该就够了。

在configure,make all时,过程中出现了不少问题,configure的参数不一样有时候也导致编译不过。make install有时虽然成功了,仍然报这些错。可能是configure时的参数不对。看到网上说,其实并不是所有的newlib内的函数你都需要,如果移植成功,可能你编译出来的目标文件比较大。再加上newlib不好移植,于是有转战实现syscalls.c文件。参考了:

https://balau82.wordpress.com/2010/12/16/using-newlib-in-arm-bare-metal-programs/

http://contiki.sourceforge.net/docs/2.6/a00523_source.html

在里面的一些函数实现过程中调用了其他的函数,其他的函数暂时还没有实现。不过网址http://contiki.sourceforge.net/docs/2.6/a00523_source.html上关于其他的函数也有实现。所以可以参考看看是怎么实现的。

在网址http://www.embecosm.com/appnotes/ean9/ean9-howto-newlib-1.0.html的5.3. Standard System Call Implementations中也有介绍怎么实现这些函数,文中说这是一种最简单的方法,供参考。

 


问题5调试执行mrc p15,0,r0,c1,c0,0,跑飞

在调试时,运行到执行协处理器命令时程序异常,程序跳转到0x00000004地址出,即未定义指令异常。最终发现问题在于工程选项中Thumb和ARM指令的设置上。在自己的工程中找到设置Thumb和ARM指令的地方,选择尝试。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Keil转到Eclipse遇到的几个问题 的相关文章

  • 如何提高QNX6下Eclipse IDE的性能

    我们在 VMWare 环境中通过 QNX6 运行 Eclipse 速度非常慢 Eclipse 是这样启动的 usr qnx630 host qnx6 x86 usr qde eclipse eclipse data root workspa
  • Eclipse Package Explorer 和 Eclipse Project Explorer 之间有什么区别?

    在我看来 这两种观点实际上是相同的 尤其是自伽利略以来 这是真的吗 还是我错过了其中一个或另一个的某些功能 根据Eclipse帮助 Project Explorer 提供了一个分层视图 工作台中的工件 即 根据具体情况定制 您的工作台的配置
  • 如何使 XML 文件始终在文本编辑器而不是 XML 编辑器中打开?

    我去档案协会那里没有 xml格式 当我添加它时 所有编辑器都会自动添加 并且它们是静态的 如下所示 locked by XML content type 无法删除关联 我希望每当我创建 XML 文件时 它都会用文本编辑器自动打开 请帮忙 单
  • 比较在 Eclipse Neon 中不工作

    我 最后 尝试从 Mars 2 升级到 Eclipse Neon 安装 SVN 支持和 SVNKit 1 8 14 连接器后 我可以访问我的存储库 然而Compare不管用 如果我右键单击已修改的文件 然后选择与工作副本中的基础进行比较将显
  • eclipse juno 打开时出错

    在安装 Eclipse 并正常工作一年多后 我今天打开 Eclipse Juno 并在打开工作区时收到一条错误消息 我使用的是 Windows 8 64 位 Java 64 位和 Eclipse 64 位 此后我尝试重新安装 Java 和
  • 更改 eclipse 中 .txt 文件编辑器的外观

    我正在为 Eclipse 使用深色主题 当我打开扩展名为 txt 的文件时 文本和背景的颜色都是黑色 如何更改此 txt 文件编辑器的外观 我想将文本颜色设置为白色 我对首选项菜单感到困惑 我已经找到了 在首选项菜单中选择 General
  • JUnit Eclipse 显示 System.out.print() 的

    我正在使用 JUnit 3 和 Eclipse 3 4 当我运行 JUnit 测试用例时 一切正常并且测试完美完成 唯一的事情是我想查看我正在运行的类的输出 所有类都具有一些输出值的基本 System out print 因此 当我运行测试
  • 从 eclipse 运行时 java.io.FileNotFoundException: (没有这样的文件或目录)

    我正在写入文件并想要控制台输出 TODO Create a game engine and call the runGame method public static void main String args throws Excepti
  • 在 Mac OSX 上将 JDK 7 或更高版本与 Android Studio 和 Eclipse 一起使用

    尽管已经安装了 JDK 8 Android Studio 和 Eclipse 都要求我安装 JDK 6 网上的几个解决方法告诉我更改 java home 以指向 JDK 8 安装位置 这样 usr libexec java home 和 j
  • Eclipse 快捷方式查找覆盖某个方法的所有子类

    Is there an Eclipse shortcut to see all class overriding the method m Highlight select put cursor on the method name and
  • 尽管没有错误,但无法在 Eclipse 中运行 Android 项目

    当我尝试运行我的 Android 项目 昨天运行良好 时 我收到 您的项目包含错误 请在运行应用程序之前修复它们 对话框 但我的项目没有错误 我以前遇到过这个问题 解决方案总是清理项目 但这次没有帮助 红色 X 图标从工作区的项目中消失 然
  • 模拟器无法加载

    我正在使用 hello android 教程并通过 eclipse 创建 avd 启动模拟器时不使用图像 它只是显示一个黑色的后屏 中间有 ANDROID 字样 并且在 ANDROID 字样的末尾有一个闪烁的光标 我已按照 T 的步骤安装
  • Lombok 不适用于 Eclipse Neon

    我下载了lombok jar lombok 1 16 14 jar 并将其放入我的下载中 然后我点击这个 jar 执行正确地识别了我的 MacOS 上的 Eclipse 实例 然后我选择了我想要的实例 Lombok也在pom xml中指定
  • 与 Eclipse 中的 Java Content Assist 交互

    作为我的插件项目的一部分 我正在考虑与 Eclipse 在 Java 文件上显示的内容辅助列表进行交互 我正在尝试根据一些外部数据对列表进行重新排序 我看过一些有关创建新内容辅助的教程 但没有看到有关更改现有内容辅助的教程 这可能吗 如果是
  • 蓝牙发送和接收文本数据

    我是 Android 开发新手 我想制作一个使用蓝牙发送和接收文本的应用程序 我得到了有关发送文本的所有内容逻辑工作 但是当我尝试在手机中测试它时 我看不到界面 这是Main Activity Code import android sup
  • 无法从资源加载图片

    So I am trying to load a image file from a resource so that when I export my application into a jar file it could be use
  • Eclipse 中选定单词的括号

    几天前 我觉得这个问题很愚蠢 所以不要将其发布在这里 但即使在搜索了很多之后 我也没有找到合适的解决方案 对于那些使用过的人TextEdit 在 Mac 上 他们会完全知道我在说什么 在编码时 我只想在单词或一行上加上引号或括号 为此 我必
  • 如何在Eclipse中集成CSS预处理? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想在 Eclipse 中编辑 SCSS 文件 最好使用语法突出显示 scss files 我发现这些资
  • Java:在 eclipse 中导出到 .jar 文件

    我正在尝试将 Eclipse 中的程序导出到 jar 文件 在我的项目中 我添加了一些图片和 PDF s 当我导出到 jar 文件时 似乎只有main已编译并导出 我的意愿是如果可能的话将所有内容导出到 jar 文件 因为这样我想将其转换为
  • 如何在代理后面安装 Eclipse Neon

    对于 Neon Eclipse 附带了一个安装程序 我在安装程序中找不到任何配置菜单 我的java版本是 java version java version 1 8 0 72 Java TM SE Runtime Environment b

随机推荐

  • 【深度学习】遗传算法

    目录 一 遗传算法 二 遗传算法概述 2 1 选择 2 2 交叉 2 3 变异 三 遗传算法的基本步骤 3 1 编码 3 2 初始群体的生成 3 3 适应度评估 3 4 选择 3 5 交叉 3 6 变异 3 7 总结 四 遗传算法工具箱 4
  • BSGS

    BSGS 问题 给定整数 a b p a b p a b p 其中 a
  • ioctl详解(Linux设备驱动程序模块)

    我这里说的ioctl函数是指驱动程序里的 因为我不知道还有没有别的场合用到了它 所以就规定了我们讨论的范围 写这篇文章是因为我前一阵子被ioctl给搞混了 这几天才弄明白它 于是在这里清理一下头脑 一 什么是ioctl ioctl是设备驱动
  • 面试大厂最常考算法之一LRU缓存算法

    题目 146 LRU 缓存机制 运用你所掌握的数据结构 设计和实现一个 LRU 最近最少使用 缓存机制 实现 LRUCache 类 LRUCache int capacity 以正整数作为容量 capacity 初始化 LRU 缓存 int
  • 官网无法下载 AndroidStudio 解决

    问题 官网无法下载 AndroidStudio 解决 复制链接 更换 redirector gvt1 com 为 dl google com 即可下载
  • 动态规划之矩阵连乘(C语言)

    include
  • 【YOLOv5问题记录】thop库的安装

    最近开始学习YOLOv5 踩了不少坑 总结一下问题 配置环境按照这篇教程来的 Yolov5的配置 训练 超级详细 小学生玩编程的博客 CSDN博客 训练数据集跟着炮哥的这篇 目标检测 教你利用yolov5训练自己的目标检测模型 yolov5
  • liunx如何重启mysql

    Linux如何重启MySQL Linux中重启MySQL可以使用service mysql restart命令和脚本启动方式 etc inint d mysql restart 推荐 MySQL教程 其他命令如下 一 启动 1 使用 ser
  • leetcode第一题详解

    第一题两数之和 这个题没有什么难度啊 标示的足够清楚了 1暴力解法 加法 class Solution public int twoSum int nums int target 外层循环 遍历数组nums for int i 0 i lt
  • vue动态路由

    import Vue from vue import Router from vue router import layout from components layout Vue use Router 动态路由 export const
  • 用Caffe提取深度特征

    用Caffe提取深度特征 发表于 2015 05 28 1条评论 最近做对比实验 要比较非深度的方法加上deep feature之后的效果 于是就用Caffe提了一把特征 过程不困难但是有点繁琐 姑且记录下来 留个参考 准备工作 用Caff
  • jd-gui - 打开jar出现中文乱码问题

    我们平时会使用JD GUI来直接打开别的项目的jar包 来看看源码里有什么问题 代码里都是英文注释倒还好 要是有中文的注释 可能就会发生下面的情况 乱码了 这里不像eclipse或者idea 直接在设置里配置编码格式为UTF 8即可 但是j
  • kettle增量抽取

    通过时间去增量抽取 数据源 1 新建trans转换 设置变量 step1 mysql输入 不勾选 允许建议转换 勾选中文可能会乱码 step2 设置变量 2 新建trans转换 根据变量抽取数据 step1 获取变量 step2 表输入 s
  • uni-app和web-view页面相互传参

    在uni app中 可以通过uni navigateTo和uni redirectTo等方法跳转到其他页面 并且可以通过url参数进行页面间的参数传递 而在web view页面中 可以通过url的query参数进行参数传递 下面是一个示例
  • 什么是springboot

    Spring Boot是由Pivotal团队提供的全新框架 其设计目的是用来简化Spring应用的创建 运行 调试 部署等 使用Spring Boot可以做到专注于Spring应用的开发 而无需过多关注XML的配置 Spring Boot使
  • csdn 代码样式 代码高亮 代码风格

    刚玩csdn 结果发现博客帮助里没有教这个 就写了一下 希望可以帮到一些和我一样的新手 在文章的富文本内 选择源代码后 在源代码中编辑即可 修改下文中的class可以进行多种样式风格的支持 如html c javascript java c
  • 在ubuntu 20.04中安装mmSegmentation

    注 此教程是博主的学习笔记 基于pycharm软件进行学习 如有问题可以在评论区进行评论 目录 一 在pycharm中创建object segmentation虚拟环境 二 mmSegmentation配置与安装 一 mmSegmentat
  • 腾讯云16核服务器配置大全_CVM和轻量服务器汇总

    腾讯云16核CPU服务器有哪些配置可以选择 可以选择标准型S6 标准型SA3 计算型C6或标准型S5等 目前标准型S5云服务器有优惠活动 性价比高 计算型C6云服务器16核性能更高 轻量16核32G28M带宽优惠价3468元15个月 腾讯云
  • 组合式API- 1-Setup

    参数 使用 setup 函数时 它将接受两个参数 props context 第一个参数 Props setup 函数中的第一个参数是 props 正如在一个标准组件中所期望的那样 setup 函数中的 props 是响应式的 当传入新的
  • Keil转到Eclipse遇到的几个问题

    ARM下Keil转到Eclipse后的几个问题 Keil转战到Eclipse下 首先 Eclipse的交叉工具链的环境要进行设置 其次 在Keil中的Scatter file在Eclipse下要重新编写 最后 Eclipse的调试环境要进行