왜 내 아두 이노에 시계가 있습니까?


9

물론 지연 시간을 제어하는 ​​것이 유용하지만 다른 용도로는 유용하다는 것을 알고 있습니다.

16Mhz 클럭으로 프로그램의 각 라인은 1/16000000 초가 소요됩니다.

매우 큰 라인조차도 1/16000000 초만 걸리나요?

8MHz 클럭을 사용하면 각 회선의 시간이 두 배로 늘어납니다. "메인 루프"전체도 두 배의 시간이 걸리죠?


3
C 명령어와 기계 (어셈블리) 명령어를 혼동하고 있습니다. 그러나 어셈블리로 직접 작성하더라도 프로그램이 선형 적이 지 않기 때문에 잘 활용할 수 있습니다. 이름에서 알 수 있듯이 인터럽트는 다른 명령으로 이동 한 다음 다시 시작하여 정상적인 코드 흐름을 중단합니다. 따라서 한 줄과 다음 줄 사이에서 ISR을 실행해야하는데, 이는 매우 길 수 있습니다.
frarugi87

2
칩을 8 밀리 헤르츠로 클록하면 가장 간단한 코드조차도 영원히 걸리게됩니다. 메가 헤르츠 범위 (MHz) 의 시계를 사용하는 것이 좋습니다 .
Edgar Bonet

각 기계 명령어를 실행하는 데 필요한 사이클 수는 명령어 세트 매뉴얼에 나와 있습니다.
Edgar Bonet

젠장, 자러 가야한다;), 편집 감사합니다
n0tis

답변:


13

왜 내 아두 이노에 시계가 있습니까?

그것이 컴퓨터와 마이크로 컨트롤러 등이 작동하는 방식이기 때문입니다.

16mhz 클럭으로 프로그램의 각 라인은 1/16000000 초가 소요됩니다.

아니.

매우 큰 라인조차도 1/16000000 초만 걸리나요?

아니.

클럭은 머신 코드 명령어 가 메모리에서 페치되어 실행되는 속도를 정의합니다 . 대부분의 명령어는 1 클럭 사이클이 걸리지 만 일부는 더 많은 시간이 걸립니다.

한 줄의 C 코드를 여러 개의 어셈블리 명령어로 컴파일 한 다음 머신 코드 (원수)로 변환 할 수 있습니다. 이는 라인의 기능에 따라 1 개의 조립 명령에서 수천 개의 조립 명령에 이르기까지 다양합니다.

8mhz 시계를 사용하면 각 회선의 시간이 두 배로 늘어납니다. "메인 루프"전체도 두 배의 시간이 걸리죠?

칩의 모든 작업은 시계에 의해 제어됩니다. 클럭 속도가 절반이면 칩이 절반 속도로 작동하므로 모든 작업 시간이 두 배 길어집니다.


또한 인터럽트.
njzk2

1
작은 nitpick : 옵티마이 저가 없어도 "... 어딘가에서 0 어셈블리 명령 ..."이어야하지만 최적화 후에도 더 그렇습니다.
Peter

2
불쌍한 소년을 혼동하지 마십시오. 그는 충분한 시간을 보내고 있습니다.
Majenko

@Majenko : 혼란은 필수입니다. 그것은 어렵다.
intelfx

@intelfx "IT"? 이것은 IT가 아닌 프로그래밍입니다 ....
BalinKingOfMoria Reinstate CMs

10

@Majenko의 게시물에서 대답하지 않았습니다. 그렇습니다. 8MHz 클럭으로 각 라인은 두 배의 시간이 걸립니다. 라인이 클럭으로 구동되지 않는 것을 기다리지 않는 한 (예 : 외부 입력).

@Majenko의 답변 외에도 CPU에는 다음 단계가 시작되기 전에 지침이 완료되도록 시계가 있습니다. CPU는 많은 트랜지스터로 만들어졌습니다 (AtMega가 수백만의 범위에 있음을 나타내는 참조를 찾았습니다).

사이클 동안, 전기는 칩을 통해 흐르고, 트랜지스터를 켜고 끄는데, 그 결과 더 많은 트랜지스터를 켜고 끄는 등의 결과가 발생합니다. 이런 일이 발생하는 동안 칩의 일부 부분에는 "잘못된"값이 있습니다. 계산 도중 절반 정도라고 생각할 수 있습니다 (한 열과 10 열을 추가 한 후 시작하려고합니다. 100s 열). 이것이 외부 세계에 영향을 미치는 것을 원하지 않기 때문에 (예를 들어) 명령이 완료 될 때까지 출력 핀이 고정됩니다. 명령을 완료하는 데 걸리는 시간은 다양하지만 제조업체는 최악의 상황에서 가장 느린 명령을 수행합니다.

AtMega (Arduino의 칩)의 경우 Atmel (칩을 설계 한 사람)은 1 / 20,000,000 초 (이것은 20MHz)라고 선언했습니다.

모든 마이크로 프로세서가 사이클 당 하나의 명령으로 모든 명령을 실행하는 것은 아닙니다. 일부 명령에는 1, 2 또는 10 사이클이 걸릴 수 있습니다. 파이프 라이닝은 프로세스를 한층 더 복잡하게 만듭니다. 프로세서는 한 사이클에서 일부 작업 (예 : 다음 명령 페치)을 수행하고 다음 사이클에서 실행하지만 명령 1을 실행하는 동안 다음 명령을 페치 할 수도 있습니다. 이를 위해서는 다음에 어떤 명령이 오는지 추측해야 할 수도 있습니다 ( "goto"와 같은 기계 코드의 경우-루프에 사용됨). 잘못 추측되면 대처해야합니다. 그; 검색된 명령을 버리고 다음 명령을 검색하여주기를 잃습니다.

명령어 파이프 라이닝 의 Wikipedia 페이지 에는 명령어 가져 오기, 명령어 디코딩, 실행, 메모리 액세스 및 쓰기 저장의 5 단계로 구성된 RISC 칩 파이프 라이닝의 예가 나와 있습니다. 따라서 어떤 실행 단계에서 5 개의 명령을 겹칠 수 있습니다. "쓰기 저장"단계까지는 지침이 실제로 적용되지 않습니다. 이것을 조립 라인으로 생각할 수 있습니다. 위젯을 구성하는 데 7 분이 걸리지 만 가장 긴 단계는 2 분이 걸리는 5 단계로 나눌 수 있습니다. 2 분마다 한 번씩, 부분적으로 완료된 각 위젯은 조립 라인에서 다음 스테이션으로 이동합니다. 2 분마다 하나의 위젯이 표시됩니다. "시계"는 가장 느린 단계만큼 빠르게 틱할 수 있습니다. 위젯을 더 빨리 밀어 내면 "병목 현상"에 점점 더 많은 위젯이 대기됩니다.


AVR에는 파이프 라인이 매우 얕습니다. 페치 및 실행 만 가능합니다. 그런 다음 조건부 점프는 1주기 (점프되지 않음) 또는 2 사이클 (점프 됨)을 취합니다.
Edgar Bonet

추가 합병증 : 캐시 미스.
Martín-Blas Pérez Pinilla

내가 언급하지 않은 많은 것들이 있습니다 : 캐시 (모든 유형의), 멀티 스레딩, 멀티 코어 ... 아마 내 게시물에서 너무 깊이 들어가 버렸을 것입니다.
AMADANON Inc.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.