BASIC4MCU | AVR 따라하기 | 2015년 강좌 | delay_us()보다 더 짧은 딜레이 함수 - 1
페이지 정보
작성자 키트 작성일2017-08-23 16:47 조회3,632회 댓글0건본문
#include#include//int main(void){while(1){// 4, 0.25us_delay_loop_1( 1); // 3, 0.19us_delay_loop_1( 2); // 6, 0.38us_delay_loop_1(10); //30, 1.88us_delay_loop_1(20); //60, 3.75us}}_delay_us()보다 더 짧은 딜레이 함수입니다.static inline void _delay_loop_1(uint8_t __count) __attribute__((always_inline));이 선언 때문에 함수를 호출 했는데도 인라인 어셈블리어 처럼 메인 함수에 코드가 만들어졌습니다.최적화 옵션에 따라서 실행 시간이 달라지는 것을 AVRstudio의 디버거(시뮬레이션) 기능으로 체크 했습니다.-O0에서는 인수값을 로드 하는데에 6클럭이 소요되고, 1회 루프 시간은 3클럭입니다.전체 클럭 수 = ( n회 * 3클럭 ) + 6클럭-O1, -O2, -O3, -Os에서는 인수값을 로드 하는데에 1클럭이 소요되고, 1회 루프 시간은 3클럭입니다.전체 클럭 수 = ( n회 * 3클럭 ) + 1클럭이 함수는 util/ 폴더 아래에delay.h 및 delay_basic.h 헤더파일 안에 들어있습니다.//-----------------------------------------------------------코드비젼에서는 매크로와 전역 변수를 사용해서 만들었습니다.실행 시간은 AVRstudio의 -O1, -O2, -O3, -Os의 실행 시간과 같습니다.전체 클럭 수 = ( n회 * 3클럭 ) + 1클럭코드비젼은 최적화 옵션에 따른 코드 변경은 생기지 않습니다.값이 어느 레지스터에 들어가는지 확인하고 사용하면 됩니다.어셈블리어 확인은 Setting/디버거에서 AVRstudio를 설정하면 Tools/디버거 AVRstudio의 시뮬레이션으로 확인 할 수 있습니다.
댓글 0
조회수 3,632등록된 댓글이 없습니다.