6410 의 어 셈 블 리 와 c 간 매개 변수 전달
3484 단어 led
1. 4 개 이하 매개 변수 전달:
어 셈 블 리 가 c 에 전달 하 는 매개 변수 개수 가 4 개 보다 작 거나 같 으 면 이 매개 변 수 는 r0 - r3 레지스터 에 저장 할 수 있 습 니 다. 4 가 남 으 면 나머지 매개 변 수 를 스 택 에 저장 해 야 합 니 다.
어 셈 블 리 코드:
#define CONFIG_PERIPORT_BASE 0x70000000
#define CONFIG_PERIPORT_SIZE 0x13
#define WTCON 0x7E004000
.global _start
_start:
/* CPU */
ldr r0, =CONFIG_PERIPORT_BASE
orr r0, r0, #CONFIG_PERIPORT_SIZE
mcr p15,0,r0,c15,c2,4
/* */
ldr r0, =WTCON
mov r1, #1
str r1,[r0]
/* GPM0 GPM3 , , c */
mov sp,#(1024*8)
ldr r0,=0x8000 // 0x8000 r0, r0 c
bl xxxx
halt:
b halt
c 함수:#define GPMDAT (volatile unsigned long *)0x7F008824
#define GPMCON (volatile unsigned long *)0x7F008820
void delay(int count)//
{
volatile unsigned long i = count; // volatile,
while(i){
i--;
}
}
int xxxx(int n) // n r0
{
volatile unsigned long *gpmcon = GPMCON;
volatile unsigned long *gpmdat = GPMDAT;
*gpmcon = 0x1111;
int i = 0;
while(1){
*gpmdat = i;
i++;
if(i == 16)
i = 0;
delay(n);
}
return 0;
}
2. 4 개 이상 의 인자 전달:
어 셈 블 리:
#define CONFIG_PERIPORT_BASE 0x70000000
#define CONFIG_PERIPORT_SIZE 0x13
#define WTCON 0x7E004000
.global _start
_start:
/* CPU */
ldr r0, =CONFIG_PERIPORT_BASE
orr r0, r0, #CONFIG_PERIPORT_SIZE
mcr p15,0,r0,c15,c2,4
/* */
ldr r0, =WTCON
mov r1, #1
str r1,[r0]
/* GPM0 GPM3 , , c */
mov sp,#(1024*8)
mov r0,#0
mov r1,#16
ldr r2,=0x1000
ldr r3,=0x1000 //r0,r1,r2,r3 c
# ldr r4,=0x1000 // r4 c , , led
ldr sp,=(1024*8-4) // 5
ldr r4,=0x4000
str r4,[sp]
bl xxxx
halt:
b halt
2. c 함수 호출 어 셈 블 리 코드:
어 셈 블 리:
#define CONFIG_PERIPORT_BASE 0x70000000
#define CONFIG_PERIPORT_SIZE 0x13
#define WTCON 0x7E004000
.global _start
.global delay // global, c
_start:
/* CPU */
ldr r0, =CONFIG_PERIPORT_BASE
orr r0, r0, #CONFIG_PERIPORT_SIZE
mcr p15,0,r0,c15,c2,4
/* */
ldr r0, =WTCON
mov r1, #1
str r1,[r0]
/* GPM0 GPM3 , , c */
mov sp,#(1024*8)
bl xxxx
halt:
b halt
delay:
ldr r0,=0x8000
delay_loop:
sub r0,r0,#1
cmp r0,#0
bne delay_loop
mov pc,lr // mov pc,lr , , c delay
c 함수:
#define GPMDAT (volatile unsigned long *)0x7F008824
#define GPMCON (volatile unsigned long *)0x7F008820
void delay();// delay ,
int xxxx()
{
volatile unsigned long *gpmcon = GPMCON;
volatile unsigned long *gpmdat = GPMDAT;
*gpmcon = 0x1111;
int i = 0;
while(1){
*gpmdat = i;
i++;
if(i == 16 )
i = 0;
delay();
}
return 0;
}
3. 위치 에 대한 조작 은 다음 과 같은 형식 을 사용 해 야 한다.
* gpmcon = 0x 1111; * gpmcon = (* gpmcon & ~ 0xffff) | 0x 1111 로 변경;
위의 나 쁜 점 은 다른 위치 가 영향 을 받 을 수 있다 는 것 이다. 아래 는 우리 가 필요 로 하 는 위치 만 조작 하고 필요 하지 않 은 것 은 영향 을 받 지 않 을 것 이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bloccom Chapter1 LED시작하기 전에 마이크로 컴퓨터 보드에 USB 쓰기 장치와 배터리 팩을 결합. 배터리 팩이 켜져 있는지 확인 !!! PC에 USB를 연결하면 Arduino를 시작 메뉴>도구>시리얼 포트>/dev/cu.usbserial...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.