Mfc 需要有关使用WinCE、ARM9的内联组件的信息吗

Mfc 需要有关使用WinCE、ARM9的内联组件的信息吗,mfc,embedded,windows-ce,inline-assembly,arm9,Mfc,Embedded,Windows Ce,Inline Assembly,Arm9,我不太擅长内联汇编,但计划在嵌入式项目中使用它进行优化。由于我不太了解这方面的信息,我需要一些帮助 我正在使用MSVisualStudio2005(使用MFC),使用ARM9赢得CE6.0 基本上,我想让内存访问更快,并做一些位操作 如果我能获得任何在线链接,或者一些使用寄存器、变量名、指针(一些内存传输和位操作相关的东西)等的示例,对我来说将非常有帮助 在ctacke回答后编辑: 如果有任何链接或小示例可以使用.s文件,特别是从.s编写和导出函数,以及将它们与我的MFC应用程序相结合的步骤,这

我不太擅长内联汇编,但计划在嵌入式项目中使用它进行优化。由于我不太了解这方面的信息,我需要一些帮助

我正在使用MSVisualStudio2005(使用MFC),使用ARM9赢得CE6.0

基本上,我想让内存访问更快,并做一些位操作

如果我能获得任何在线链接,或者一些使用寄存器、变量名、指针(一些内存传输和位操作相关的东西)等的示例,对我来说将非常有帮助

在ctacke回答后编辑:

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

多谢各位

亲切问候,,
Aftab

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

编辑

下面是一个简单的例子():

区域asm\u func,代码,只读
; 导出我的asm函数位置,以便C编译器可以找到它并链接
导出我的asm
我的妈妈
;
; ARM汇编语言函数,用于将LED1位设置为从C传递的值
; LED1获取值(从R0中的C编译器传递)
; LED1位于GPIO端口1位18上
; 请参阅LPC1768用户手册中的第9章
; 对于所有GPIO寄存器信息和地址
; h具有mbed模块的引脚端口和位连接
;
; 在寄存器R1中加载GPIO端口1基址
LDR R1,=0x2009C020;0x2009C020=GPIO端口1基址
; 仅针对位18移动寄存器R2中的位掩码
移动W R2,#0x040000;0x040000=1
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