2017-01-29 2 views
0

내가 아래에있는 내 간단한 코드를 살펴 제발 다른 사용 C. 내 마이크로 컨트롤러의 하나 개의 메모리 주소에서 16 비트, 즉 하프 워드를 이동하려고 :데이터 복사

#include <stdint.h> 

int main(void){ 

    int16_t *src = (int16_t*)0x20000000; //source memory address 
    int16_t *dst = (int16_t*)0x20000016; //destination memory address 
    *dst = *src; //dereference both, set destination value to source value 
    return 0; 
} 

라인 *dst = *src을 마자 마자 Hardfault 예외가 발생합니다. 포인터에 대한 나의 낮은 이해와 역 참조/참조가 문제가 될 수 있습니다. 나는 약간의 도움에 감사 할 것입니다.

EDIT : 할당 연산자 (=)를 사용하여 한 줄로 작성할 수 있습니까?

+1

'src'와'dst'를'volatile'으로 표시해 보셨습니까? 또한 두 개의 명명 된 변수를 사용하면 한 줄의 코드에서이 작업을 수행하는 것보다 훨씬 깔끔한 방법이라고 생각합니다. –

+0

은'memcpy' 옵션입니까? –

+0

액세스하려는 주소가 메모리 매핑되어 있습니까? 일부 마이크로는 IO 매핑 된 메커니즘을 사용하여 하드웨어에 액세스합니다. – Gerhardh

답변

0

0x20000016에 대한 쓰기 작업은 4 바이트 경계가 아닙니다. 프로세서가 정렬되지 않은 읽기 및 쓰기를 지원하지 않으면 오류가 발생합니다. 어떤 프로세서를 사용하고 있습니까?

+0

ARM Cortex M0 프로세서를 사용하고 있습니다. – Jspake