>

AVR 칩 프로그래밍을위한 어셈블리의 대안으로 LLVM IR을 실험하고 있지만 걸림돌이 발생했습니다.

다음 작업 코드가 있습니다 :

target triple = "avr-atmel-none"
define void @main() {
    %1 = load i8, i8* inttoptr (i8 34 to i8*)
    %or = or i8 %1, 1
    store i8 %or, i8* inttoptr (i8 34 to i8*)
    ret void
}

inttoptr (i8 34 to i8*) 주의 사항  -그것은 내 칩의 메모리 매핑 된 IO 위치이며, 많은 상호 작용을 할 것이므로 @PORTA 와 같은 이름을 지정하고 싶습니다. . 그러나 특정 메모리 주소를 가리키는 전역 변수를 초기화하는 방법을 찾을 수 없습니다. 이작동하지 않습니다:

@PORTA = constant i8* inttoptr (i8 34 to i8*)

포인터 변수 @PORTA내용을 초기화 할 때

해당 주소를 가리키는 주소를 만들지 말고

LLLL IR에서 특정 메모리 주소에 대한 전역 별칭을 만들 수 있습니까? 그렇지 않은 경우이 이름의 별칭을 지정할 수있는 다른 바로 가기가 있습니까?

  • 답변 # 1

    IR 레벨에서 이러한 별칭을 만들어야합니까? LLVM IR은 수동으로 작성하기에 편하지 않습니다.

    C ++ API에서 코드를 생성하는 경우 inttoptr 를 작성하십시오.  상수 표현식 전역 및 원하는 곳에서 사용하십시오 :

    ConstantExpr* porta = ...
    void foo()
    {
    new LoadInst(..., porta);
    ...
    new StoreInst(..., porta);
    }
    
    

관련 자료

  • 이전 html - 한 번에 전체 행을 가리킬 수 없습니다
  • 다음 배열이있는 문서 속성에 대한 Couchdb/Cloudant보기