Keil MDK配置ARM汇编/C语言混合开发环境

2023-05-16

Keil MDK配置ARM开发环境

1. 安装Keil MDK

安装方法这里不再说明,懂得都懂!🐶

2. 安装ARM开发包

在Keil MDK5之后,不再原生支持ARM7/9,需要自行安装软件包,链接在这,注意安装与自己MDK版本对应的那个包

image-20221122173513941

我的版本是5.18,下载之后傻瓜式安装,因为它会自动检测你MDK所在的位置。

3. 新建工程

image-20221122173919590

注意:选择硬件时,下拉找到Legacy Device Database [no RTE]!!!,接着选择具体型号。

然后:

image-20221122174307208

一定要点!!!

否则后面会多很多事💔

4. 配置

点开魔术棒,设置如下:

image-20221122174744541

5. start coding now!

下面是一个C语言与汇编语言相互调用的一个例子

asse2.s

;/*
; * 汇编语言编写实验
; * 该程序演示 C 语言和汇编语言的相互调用方法
; */
	IMPORT Main ; The main entry of mon program
	EXPORT asse_add
	AREA Init, CODE, READONLY ; name this block of code
num EQU 20
;/*
; * 程序入口地址,传递参数并设置堆栈
; */
ENTRY ; mark the first instruction to call 
_start
	MOV sp, #0x33000000 ;/*建立栈指针(r13)*/
	B Main ;/*跳转到 C 语言程序*/
	B _start ;/*死循环,Main 程序执行完成后将重新运行Main 函数,永远不退出*/

;/*
; * int asse_add(int x, int y);
; */

asse_add
		ADD r0, r0, r1 ;/*r0 = r0 + r1*/
		MOV pc, lr ;/*函数返回*/
	END

main.c:

/*
 * C 语言演示程序
 */
extern int asse_add(int x, int y);
int embed_add(int x, int y);
void Main()
{
    int x, y;
    /*调用汇编函数 asse_add*/
    x = asse_add(10, 20);
    y = embed_add(10, 20);
}
int embed_add(int x, int y)
{
    int tmp;
    __asm
        {
            add tmp, x, y
        }
    ;
    return tmp;
}

6. 调试

可以正常调试运行:

image-20221122175440596

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

Keil MDK配置ARM汇编/C语言混合开发环境 的相关文章

  • STM32 上的位置无关代码 - 指针

    我已成功在 STM32 上构建并运行位置无关的代码 向量表和 GOT 已修补 一切正常 但我对这样的代码有问题 double myAdd double x return x 0 1 double ptrmyAdd double myAdd
  • 使用 NEON 对 ARM 汇编中的四字向量中的所有元素求和

    我对组装相当陌生 尽管手臂信息中心通常很有帮助 但有时这些说明可能会让新手感到有点困惑 基本上我需要做的就是对四字寄存器中的 4 个浮点值求和 并将结果存储在单个精度寄存器中 我认为 VPADD 指令可以满足我的需要 但我不太确定 你可以尝
  • 使用 QEMU 模拟 Big Endian ARM 系统

    是否可以编译一些 Linux 内核并通过 QEMU 运行它 模拟一些 Big Endian ARM 处理器 如果 QEMU 无法做到这一点 我很想知道其他可以做到这一点的系统模拟器 我的基本目标是在尽可能多的本机环境中运行和调试专用的 Bi
  • armv8 NEON if 条件

    我想了解armv8 NEON内联汇编代码中的if条件 在armv7中 这可以通过检查溢出位来实现 如下所示 VMRS r4 FPSCR BIC r4 r4 1 lt lt 27 VMSR FPSCR r4 vtst 16 d30 d30 d
  • ARM 汇编 SOS 中的 64 位除法

    我正在计算 16 个 64 位数字相加的平均值 我认为我已经正确完成了所有加法 但现在我需要弄清楚如何将 64 位数字除以 16 但我被困住了 任何帮助都会非常感谢你 到目前为止 这是我的代码 tableSize EQU 16 sum EQ
  • 如何修改内核DTB文件

    Summary 我目前正在为定制板编译 Linux 内核 内核 模块和 DTB 以及一些定制驱动程序 有时 我会编译内核并意识到 DTB 文件中的兼容性字符串不是自定义驱动程序正在寻找的内容 现在 我可以解决此问题的唯一方法是修改 DTS
  • 将结构体偏移属性赋予汇编器

    如何将 C 结构体的偏移量发送到汇编代码 例如 在我的 C 代码中 typedef struct unsigned int a unsigned int b CMyStruct 我向 ASM 函数发送一个 CMyStruct 结构的指针 假
  • 使用 gnueabihf 为 ARMv6 构建

    我尝试为 ARMv6 构建应用程序 但失败了 我猜问题是工具链支持硬浮点 但 ARMv6 不支持 好吧 首先我设置 march armv6 编译失败 opt gcc linaro arm linux gnueabihf 4 8 2014 0
  • ARM Neon:如何从 uint8x16_t 转换为 uint8x8x2_t?

    我最近发现了关于vreinterpret q dsttype src类型转换运算符 https stackoverflow com a 43519190 2436175 但是 这似乎不支持所描述的数据类型的转换这个链接 http infoc
  • ARM 汇编分支到寄存器或内存内部的地址

    我想知道在 ARM 汇编中我可以使用哪条指令分支到存储在某个内存地址中的地址或标签 例如 我们可以使用B LABEL来跳转到LABEL 但现在目的地只能在运行时知道 并且它存储在某个已知的内存位置 是否有类似 B 地址 的东西 Thanks
  • DSP 库 - RFFT - 奇怪的结果

    最近我一直在尝试在我的STM32F4 Discovery评估板上进行FFT计算 然后将其发送到PC 我已经调查了我的问题 我认为我对制造商提供的 FFT 函数做错了 我正在使用 CMSIS DSP 库 现在我一直在用代码生成样本 如果工作正
  • ARM Cortex A8 PMNC 读取在启用后也给出 0.. 有什么想法/建议吗?

    MODULE LICENSE GPL MODULE DESCRIPTION user mode access to performance registers int init arm init void unsigned int valu
  • C 嵌入式应用程序中 time() 函数的问题

    我在用time 在 ARM 微控制器上 处理器一到达此函数就会重新启动 奇怪的是 当我处于调试模式时 代码运行得很好 但一旦我想将其应用到独立模式 我就会遇到重置 我是否忽略了什么 这个功能有替代品吗 代码部分是这样的 include
  • ARM 中只有两个操作数的 ADD 或 SUB

    我正在学习ARM汇编语言 我读过 ADD 应该有 3 个操作数 然而 我见过很多案例 现实中只有两种 例如 STR R1 SP 0x20 var 1C LDR R1 a lua 0x1DE4E6 MOVS R0 R4 haystack AD
  • ARM + gcc:不要使用一大块 .rodata 部分

    我想使用 gcc 编译一个程序 并针对 ARM 处理器进行链接时间优化 当我在没有 LTO 的情况下编译时 系统会被编译 当我启用 LTO 时 使用 flto 我收到以下汇编错误 错误 无效的文字常量 池需要更近 环顾网络 我发现这与我系统
  • 是否可以将 SpaCy 安装到 Raspberry Pi 4 Raspbian Buster

    我一整天都在安装 SpaCy sudo pip install U spacy Looking in indexes https pypi org simple https www piwheels org simple Collectin
  • 了解 U-Boot 内存占用

    我不明白加载 U Boot 时 RAM 中发生了什么 我正在开发 Xilinx Zynq ZC702 评估套件 并尝试使用 U Boot 在其上加载 Linux 内核 于是我使用Xilinx工具Vivado和SDK生成了一个BOOT bin
  • gdb 不会从外部架构读取核心文件

    我正在尝试在 Linux 桌面上读取 ARM 核心文件 但似乎无法找出我的核心文件 有什么方法可以指示 gdb 我的核心文件是什么类型吗 file daemon daemon ELF 32 bit LSB executable ARM ve
  • saber sd 如何在没有 SPL 的情况下直接从 uboot 启动

    sabre sd 基于 imx 6 最大内部 RAM 约为 150Kb 然而 uboot 足够大 可以容纳在这个空间中 在这个场景中事情是如何进行的 https community freescale com docs DOC 95015
  • Qemu flash 启动不起作用

    我有一本相当旧的 2009 年出版 嵌入式 ARM Linux 书 其中使用u boot and qemu 的用法qemu与u boot书中对二进制的解释如下 qemu system arm M connex pflash u boot b

随机推荐

  • 关于leetcode刷题详细介绍

    虽然刷题一直饱受诟病 xff0c 不过不可否认刷题确实能锻炼我们的编程能力 xff0c 相信每个认真刷题的人都会有体会 现在提供在线编程评测的平台有很多 xff0c 比较有名的有 hihocoder xff0c LintCode xff0c
  • leetcode:13罗马数字转整数c++

    思路分析 两种情况 1 不同的罗马数字都是从左到右依次相加 2 不同的就是末尾数是4和9的情况 xff0c 也就是IV VIV xff08 if xff09 代码框架 整体过程 从题目中字符和数字的对应关系 xff0c 不难想到数据结构un
  • leetcode:20有效的括号——stack

    思路分析 题目匹配的情况有两中 xff1a 和 xff08 xff09 匹配成功的思路是每个 或者其他右包围结构都是和最近的 或者其他左包围结构匹配 最近 匹配的思想应该使用stack结构对数据进行操作 代码框架 1 遍历整个string
  • leetcode:21合并两个有序连表——slist

    思路分析 链表 xff1a 头节点为空 xff0c 每个节点有一个指针 xff0c 指向下一个节点的地址 俩链表节点之间比较 xff0c 用遍历 96 96 for xff0c 因为是list xff0c 可以直接通过迭代器 xff08 指
  • leetcode:53最大子数组和

    思路分析 有2个变量是一直变化的 1 最大集合的第一个元素 2 存放最大的变量 0 变量初始化 span class token keyword int span res span class token operator 61 span
  • Ubuntu安装docker及出现问题解决

    Ubuntu安装docker及出现问题解决 文章目录 Ubuntu安装docker及出现问题解决一 安装docker二 解决docker安装成功后 xff0c docker命令无法正常使用的问题 一 安装docker docker的安装可参
  • stl大全

    什么是STL xff1f 大佬 xff1a 为什么C 43 43 比C更受人欢迎呢 xff1f 除了C 43 43 的编译令人感到更舒适 xff0c C 43 43 的标准模板库 xff08 STL xff09 也占了很重要的原因 当你还在
  • input 图片上传

    使用 在vue项目中使用input上传图片给后台时 xff0c 需要对图片文件流和请求头进行一些处理 1 获取上传图片文件流 span class token tag span class token tag span class toke
  • Unix环境高级编程代码(实时更新)

    实例1 3 列出一个目录中所有文件 xff08 ls c xff09 include 34 apue h 34 include lt dirent h gt int main int argc char argv DIR dp struct
  • ROS入门(二):launch文件解析

    ROS入门 xff08 二 xff09 xff1a launch文件解析 文章目录 ROS入门 xff08 二 xff09 xff1a launch文件解析一 launch文件的运行二 launch文件格式1 浏览顺序 xff08 Eval
  • RLException: [**] is neither a launch file in package [**] nor is [**] a launch file name,.......

    按照网上现有对这个问题的解决方法 xff1a 方法1 xff0c 在工作空间下source 方法2 xff1a 对其进行路径添加 这个问题的来源还有一种来源 xff0c 你得确定你在终端运行的这个launch文件名是否写对 xff0c 打开
  • Linux 安装node.js和npm教程

    第一步 xff1a 去node js官网下载安装包 或者直接 wget https nodejs org dist v10 15 0 node v10 15 0 linux x64 tar xz 第二步 xff1a 解压 tar xf no
  • could not establish connection to “hostname”

    解决方案 Try to delete the fingerprint a single line that corresponds to this particular connection not the whole file saved
  • 基于UCOSIII的环境检测项目

    基于UCOSIII的环境检测项目 运用STM32F103C8T6开发板为项目核心板 xff0c 并加入UCOSIII实时操作系统 在操作系统基础上 xff0c 搭配外围传感器实现基于STM32环境检测项目开发 主要运用库函数在操作系统基础上
  • 进程与线程

    进程与线程 讲线程之前要了解 xff1a 进程间的通信 xff08 Inter Process Communication IPC xff1a 理论上 xff0c 进程之间是独立的 xff0c 但实际上往往是多个进程之间的互相配合完成复杂的
  • STM32的八种工作模式

    一 模式介绍 STM32单片机具有高性能 低成本 低功耗的优点 xff0c 与它打交道就必须先了解它的几种工作模式 xff0c 它共有八种IO口模式 xff0c 分别是 xff1a 模拟输入 浮空输入 上拉输入 下拉输入 开漏输出 推挽输出
  • matlab学习笔记

    matlab笔记 上课期间自己整理的一系列matlab相关用法的笔记 xff0c 自认为也并不非常有条理 xff0c 但还是囤放在这里 xff0c 供需要的人查阅 取用 写在前面 help 43 函数名 xff1a 查找某函数的使用方法lo
  • 计算机组成原理——总线

    一 总线概述 1 xff0e 基本概念 xff08 1 xff09 总线简图 每个总线可能由很多根信号线组成 xff08 2 xff09 总线的物理实现 如上图 xff0c 4根信号线组成 一根 总线 xff0c 所有硬件部件都可以通过这根
  • 计算物理学复习笔记(一) 连续随机变量的抽样(直接、变换抽样,三类舍选法)

    文章目录 前言 前置知识一 直接抽样法二 变换抽样法三 舍选法1 第一类舍选法2 第二类舍选法3 第三类舍选法 总结 前言 使用教材 xff1a 马文淦 计算物理学 xff0c 限于篇幅 xff0c 这本书上部分知识写得并不十分详细 xff
  • Keil MDK配置ARM汇编/C语言混合开发环境

    Keil MDK配置ARM开发环境 1 安装Keil MDK 安装方法这里不再说明 xff0c 懂得都懂 xff01 x1f436 2 安装ARM开发包 在Keil MDK5之后 xff0c 不再原生支持ARM7 9 xff0c 需要自行安