c 언어 가 메모리 주소 에 대한 직접 조작 (ARM 읽 기)

ARM 에서 보 았 습 니 다. \ # define rWTCON (* (volatile unsigned *) 0x 03000000) 그리고 함수 호출 에서 이 주소 에 직접 값 을 부여 합 니 다. rWTCON = (PCLK / (100000 - 1) < 8 | (3 < 3);
방금 이것 을 보고 깜짝 놀 랐 습 니 다. 예전 에 들 어 본 적 이 없고 여기 서 이렇게 했 습 니 다. 이것 이 바로 c 언어 에서 메모리 에 대한 직접적인 할당 입 니 다. 이상 의 문 구 는 정말 특색 이 있 습 니 다. 이렇게 매크로 를 사용 하여 아래 에서 자 리 를 옮 기 는 작업 을 했 습 니 다. 이렇게 규범화 되 었 습 니 다.
예 를 들 어 우 리 는 특정한 수의 중간 7, 6, 5 위 를 각각 011 로 설정 해 야 한다. 이것 은 보통 x | = 0x 0110000 이 아 닙 니 다.이렇게 x | = (3 < 5);10 진법 이 16 진법 보다 보기 편 하고 검사 하기 편 하 다 는 것 이 장점 이다.
         키워드 volatile: (변 하기 쉬 운) volatile 로 정 의 된 변 수 는 이 변수 가 예상 치 못 하 게 변 할 수 있다 는 것 이다. 그러면 컴 파일 러 는 이 변수의 값 을 가정 하지 않 을 것 이다.정확히 말 하면, 최적화 기 는 이 변 수 를 사용 할 때, 레지스터 에 저 장 된 백업 대신 이 변수의 값 을 조심스럽게 다시 읽 어야 한다.마치 매번 조작 할 때마다 갱신 하 는 것 처럼 원자 조작 과 유사 한 기능 이다.
뒤에 있 는 주 소 는 ARM 매 뉴 얼 을 찾 아서 얻 은 것 입 니 다. 주석 은... 레지스터 이지 만 이것 은 우리 가 이해 하 는 CPU 의 레지스터 (주 소 를 찾 을 수 없습니다) 와 다 릅 니 다. 여기 가 바로 메모리 주소 입 니 다. (외부 레지스터, 주소 지정 방식 은 메모리 주소 지정 방식 과 같 습 니 다.)
     여기 상단 코드
#include 
int main()
{
	void (* signal (int sign, 
		void(*handler)(int))) (int);//       
	  void (* signal (int  , 
	        	void(* )(int))) (int);
	
* (volatile unsigned *)0x0012ff7c = 0x12345;

4. 567913. vc 컴 파일 이 통과 되 었 습 니 다. 주의해 야 할 것 은 위의 지침 의 성명 입 니 다. 이 물건 은 아마 본 적 이 없 을 것 입 니 다. 이것 이 바로 고급 지침 성명 입 니 다. 지침 은 C 언어의 정수 이 고 유연성 이 있 으 며 변화 가 많 습 니 다.요 며칠 동안 의 필 기 를 끝내 고 ARM 을 계속 공부 하 러...

좋은 웹페이지 즐겨찾기