'서명되지 않은 문자 근처'란 무엇입니까?


12

데이터 시트를 읽고로 정의 된 변수를 찾았습니다 unsigned char near Sample_X. 이것은 무엇이며 어떻게 다른 unsigned char Sample_X가요?


3
아마도 컴파일러가 작은 상대 오프셋을 사용할 수 있습니까?
Neil_UK

6
DOS에서 x86에 대한 경험을 바탕으로 일부 포인터 유형과 16 비트 환경에서이를 기대합니다. 그러나 OP가 인용 한 것은 포인터처럼 보이지 않으며 데이터 시트 링크는 일부 MCU를 암시합니다. 다음 두 링크에서 "near"키워드를 검색하십시오. microchip.com/forums/m549709.aspx barrgroup.com/Embedded-Systems/How-To/Efficient-C-Code
frr

3
이것은 표준 C가 아닌 컴파일러 확장입니다.
PlasmaHH

1
키워드 인 FYI near스토리지 클래스 지정자 의 예입니다 . 변수에 대한 스토리지를 어떻게 또는 어디에 할당해야하는지 컴파일러에 알려줍니다. 에 대한 자세한 내용은 아래의 filo 답변을 참조하십시오 near.
Solomon Slow

1
이게 정말 주제입니까?
user541686 April

답변:


20

여기에 지정된 MCU는 Freescale MC9C08 시리즈 이며 HC08 아키텍처의 약간 향상된 버전을 사용합니다. 이것은 8 비트 코어이며, 다른 많은 것보다 명령어가 짧고 "제로 페이지"주소에 빠르게 액세스 할 수있는 8 비트 코어입니다. 제로 페이지 주소는 16 비트가 아닌 8 비트 길이이므로이를 참조하는 명령어 는 3이 아닌 2 바이트 일 수 있으며 결과적 으로 실행 하는 데 1주기가 덜 걸립니다 .

"near"키워드는 성능 향상을 위해 컴파일러가 변수를 "제로 페이지"에 넣도록 지시합니다. this와 같이 임베디드 개발 용으로 특별히 작성된 컴파일러 는 일반적으로 언어에 대한 이러한 확장을 구현합니다 (여기서는 "C 제로 페이지 지원"이라고 함).


이 답변이 마음에 들지만 정보 출처가 있습니까?
Clonkex

1
자세한 내용과 참조를 제공하기 위해 답변을 편집했습니다. 실제로는 프리 스케일의 최신 HCS08 아키텍처에서 나온 것이지만 이전 HC08 및 HC05 아키텍처와 코드 호환됩니다. (현재는 긍정적 인) 6800 및 6502 아키텍처도 밀접하게 관련되어 있습니다.
Chromatix

아주 좋아!
Clonkex

따라서 사용법은 register키워드 와 매우 유사 하지만 (최적화가 필요한 곳이라고 확신하는 경우) 약간 덜 극단적입니까?
vsz

다소간. 차이점은 주로 8 비트 CPU에는 일반적으로 레지스터 뱅크가없고 단일 누산기 및 두 개의 인덱스 레지스터 만 있기 때문입니다. 그러나 주소의 크기와 액세스를 완료하는 데 시간이 오래 걸린다는 점에서 x86에서 "가까운"대 "먼"포인터를 사용하는 것과 유사합니다.
Chromatix

15

CPU 아키텍처에 따라 다른 주소의 데이터에 액세스하기위한 다른 명령이있을 수 있습니다. 다음은 Keil 의 컴파일러 중 하나에 대한 예입니다 .

니어 액세스에는 특정 메모리 제한이 있으므로 더 짧은 명령어로 액세스 할 수있는 영역에 자주 사용되는 변수를 배치하도록 컴파일러에 힌트를 제공 할 수 있습니다 (32 비트 주소 공간에 대한 액세스는 16 비트 주소보다 큽니다). 우주). 더 작거나 빠른 코드로 변환 할 수 있습니다.



5
@AndrewMorton : 질문 관련 그건 farnear크게-되지 않는 8086 아키텍처에 대한 포인터. 8 비트 마이크로 컨트롤러에서는 동일한 키워드가 관련되어 있지만 다른 방식으로 사용됩니다.
supercat

@supercat 대답은 이전 아키텍처에 중점을 두지 만 질문은 일반적으로 묻습니다. 지식이 풍부한 사람은 8 비트 마이크로 컨트롤러에 어떻게 사용되는지 설명하는 답변을 작성해야합니다.
curiousdannii

@ curiousdannii : 문제의 코드는 8 비트 마이크로를 위해 작성되었습니다.
supercat
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.