- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在硬故障处理程序中进行了一些组装。该程序集基本上意味着将当前堆栈指针作为参数传递(在 R0 中)。看起来是这样的...
__asm(" mov r0, sp\n"
" bl SavePC\n"
" bx lr");
当 SavePC 位于同一个 c 文件中时,这可以正常工作。然而,当 SavePC 被放置在另一个 c 文件中时,我就没那么幸运了。我尝试像这样导入函数...
__asm("IMPORT SavePC\n"
" mov r0, sp\n"
" bl SavePC\n"
" bx lr");
...但我一定做错了什么。编译器报告以下内容...
Error[Og005]: Unknown symbol in inline assembly: "IMPORT"
Error[Og005]: Unknown symbol in inline assembly: "SavePC"
Error[Og006]: Syntax error in inline assembly: "Error[54]: Expression can not be forward"
Error[Og005]: Unknown symbol in inline assembly: "SavePC"
Error while running C/C++ Compiler
带有程序集的 c 文件包含带有 SavePC 原型(prototype)的头文件...
extern void SavePC(unsigned long);
建议?
最佳答案
即使调用正确,您的代码也无法运行。
bl _SavePC
bx lr
您认为 bx lr
指令中的 LR
寄存器中的值会是多少?指令本身的地址! bl
指令已将其放在那里。这实际上是一个带有 bx 指令的 while (1);
。
嵌套函数调用看起来更像是这样:
push lr
bl _SavePC
pop pc
要获取堆栈寄存器,请使用相应的 CMSIS 函数:
__get_MSP()
用于主堆栈指针 (MSP)__get_PSP()
用于进程堆栈指针 (PSP)关于c - 如何从 IAR EWARM 中的内联汇编器调用另一个模块中的 C 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12752289/
我最近购买了适用于 ARM (EWARM) 的 IAR Workbench IDE。我的许可证不包括进行内存泄漏检查的 C-RUN。是否可以使用像 Valgrind 这样的第三方工具来执行内存泄漏分析
我正在使用 IAR EWARM 8.10.1,它使用 ILINK 链接器。 我有两个编译单元使用的公共(public) header 。它包括具有外部链接的功能原型(prototype),并构成一个A
我正在尝试使用 IAR EWARM 编译以下 C 代码,但出现三个编译错误(错误 [Pe028]:表达式必须具有常量值)。见下文: #include #include #include typedef
我在硬故障处理程序中进行了一些组装。该程序集基本上意味着将当前堆栈指针作为参数传递(在 R0 中)。看起来是这样的... __asm(" mov r0, sp\n" " bl
我有一个用于记录的宏,它接受可变数量的参数。该宏将由 GCC 在非嵌入式上下文中处理,并扩展为有效的 C 代码。尽管如此,无论我在哪里调用宏(数千个位置),IAR EWARM 都会给出错误“[Pe05
我为 Kinetis K24 Cortex M4 编写了一个引导加载程序。引导加载程序在运行时通过 USB 将附加功能加载到 RAM 中。该 ramcode 作为其自己的 EWARM 项目存在,生成二
首先我想 self 介绍一下,因为我是这个网站的新手。我是一名电子工程师,专门从事嵌入式系统设计和开发。我已经从该站点收集了很长时间的信息,而且我认为有很多知识渊博的人。我希望你们中的其他人可能偶然发
我正在使用 IAR EWARM 7.4 我已按照此处的说明进行操作:http://www.safetycritical.info/library/static/pc-lint/ewb-pclint-v
我遇到了这个超出我知识范围的错误: Error[Pe147]: declaration is incompatible with "__interwork __softfp char *Get_Lan
我是一名优秀的程序员,十分优秀!