gpt4 book ai didi

mfc - 需要有关使用 WinCE、ARM9 内联汇编的信息

转载 作者:行者123 更新时间:2023-12-02 17:44:19 32 4
gpt4 key购买 nike

我不太擅长内联汇编,但计划在嵌入式项目中将其用于优化目的。由于我对此了解不多,因此需要一些帮助。

我拥有Win CE 6.0,带有ARM9,使用MS Visual Studio 2005(使用MFC)。

基本上,我想让内存访问更快,并进行一些按位运算。

如果我能获得任何在线链接,或者一些使用寄存器、变量名、指针(一些内存传输和按位运算相关的东西)等的示例适合我的特定环境.

在 ctacke 的回答后编辑:

如果有任何链接或小示例来处理 .s 文件,特别是从 .s 编写和导出函数,以及涉及将它们与我的 MFC 应用程序结合的步骤,这对我来说真的很有帮助。任何小例子都可以做到。

谢谢。

亲切的问候,阿夫塔布

最佳答案

Visual Studio(所有版本)附带的 ARM 编译器不支持内联 ASM - 只有 x86 编译器支持内联 ASM。要使用适用于 ARM(或 SH 或 MIPS)的 ASM,您必须创建一个单独的代码文件(通常是 .s 文件),从 ASM 导出函数并调用它们。

编辑

这是一个简单的示例 ( taken from here ):

AREA asm_func, CODE, READONLY
; Export my_asm function location so that C compiler can find it and link
EXPORT my_asm

my_asm
;
; ARM Assembly language function to set LED1 bit to a value passed from C
; LED1 gets value (passed from C compiler in R0)
; LED1 is on GPIO port 1 bit 18
; See Chapter 9 in the LPC1768 User Manual
; for all of the GPIO register info and addresses
; Pinnames.h has the mbed modules pin port and bit connections
;

; Load GPIO Port 1 base address in register R1
LDR R1, =0x2009C020 ; 0x2009C020 = GPIO port 1 base address

; Move bit mask in register R2 for bit 18 only
MOV.W R2, #0x040000 ; 0x040000 = 1<<18 all "0"s with a "1" in bit 18

; value passed from C compiler code is in R0 - compare to a "0"
CMP R0, #0 ; value == 0 ?

; (If-Then-Else) on next two instructions using equal cond from the zero flag
ITE EQ

; STORE if EQ - clear led 1 port bit using GPIO FIOCLR register and mask
STREQ R2, [R1,#0x1C] ; if==0, clear LED1 bit

; STORE if NE - set led 1 port bit using GPIO FIOSET register and mask
STRNE R2, [R1,#0x18] ; if==1, set LED1 bit

; Return to C using link register (Branch indirect using LR - a return)
BX LR
END

关于mfc - 需要有关使用 WinCE、ARM9 内联汇编的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8170633/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com