개요: MAX-IDE는 MAXQ 마이크로컨트롤러 제품군을 위한 모든 기능이 완벽히 통합된 애플리케이션 개발 및 디버깅 환경이다. MAX-IDE는 모든 표준 MAXQ EV 킷과 함께 사용하여, 프로젝트 기반 개발 환경, 표준 MAXQ 디버깅 기능에 대한 액세스, 통합된 매크로 어셈블러, JTAG 인터페이스를 사용한 인 서킷(in-circuit) 애플리케이션 로딩을 제공하도록 설계되었다.
개요
MAX-IDE는 MAXQ™ 마이크로컨트롤러 제품군을 위한 모든 기능이 완벽히 통합된 애플리케이션 개발 및 디버깅 환경이다. MAX-IDE는 모든 표준 MAXQ EV 킷과 함께 사용할 수 있으며, 다음과 같은 기능을 제공한다.
- MAXQ 어셈블리 애플리케이션을 위한 프로젝트 기반 개발 환경
- 모든 MAXQ 마이크로컨트롤러를 위한 표준 헤더 파일을 포함한 MAXQ 매크로 어셈블러 내장
- 플래시 또는 EEPROM 프로그램 메모리를 탑재한 MAXQ 마이크로컨트롤러를 위한 JTAG/TAP 인터페이스 및 ROM 부트로더를 사용한 인 서킷 애플리케이션 로딩
- JTAG/TAP 인터페이스에 대해 유효한 인 서킷 디버그 요소들은 브레이크포인팅, 단계별 프로그램 수행, 그리고 메모리/레지스터 내용 보이기 등을 포함함
참고 자료
자세한 내용은 EV 킷 CD에 포함된 MAXQ2000 EV 킷 데이터 시트를 참조하거나 다음 웹사이트 korea.maxim-ic.com/MAXQ2000-KIT를 방문한다.
MAX-IDE 설치하기
시스템 요구사항
- 운영 체제(OS): Windows 98, Windows NT, Windows 2000, Windows ME 또는 Windows XP
- 최소 1개의 비어 있는 직렬 COM 포트(MAXQ EV 킷과의 통신에 필요) 또는 USB-직렬 어댑터 및 비어 있는 USB 포트 1개
설치 프로그램 실행하기
- MAX-IDE의 설치 패키지는 MAX-IDE.zip이고, MAXQ 웹 페이지에서 입수할 수 있다..
- 이 패키지를 다운로드하고 압축을 푼 다음 setup.exe 파일을 실행하여 하드 드라이브에 MAX-IDE를 설치한다.
- InstallShield 대화상자에서 Typical installation을 선택한다. 이 설치는 사용자의 EV 킷에서 MAXQ 애플리케이션 개발에 필요한 모든 파일을 설치한다.
- 설치가 완료되면, Start 메뉴에서 MAX-IDE를 실행할 수 있다.
설치된 MAX-IDE 파일
MAX-IDE의 주요 실행 파일 및 도움말 파일은 MAX-IDE 경로 디렉토리에 있다. 디폴트 루트 디렉토리는 {Program Files}\MAX-IDE이다. 추가 파일은 다음 하위 디렉토리에 있다.
- Compilers 하위 디렉토리에는 MAX-IDE와 함께 설치된 모든 컴파일러 및 어셈블러를 위한 실행 파일과 데이터 파일이 들어 있다. 최소, 이 하위 디렉토리에는 표준 MAXQ 어셈블러가 포함되어 있다. 또한 사용하는 배포판에 따라 다른 어셈블러 및 컴파일러들이 설치될 수 있다.
- Devices 하위 디렉토리에는 라이브러리, 드라이버, 그리고 애플리케이션별 및 모든 MAXQ 마이크로컨트롤러와 EV 킷과의 통신을 위한 구성 파일들이 들어 있다.
Examples 하위 디렉토리에는 모든 MAXQ 마이크로컨트롤러를 위한 코드 예제 (<device directory>/xxx_Demo에) 및 표준 include 파일과 라이브러리 (<device directory>/api에)가 들어 있다.
JTAG 인터페이스 셋업하기
직렬-JTAG(Serial-to-JTAG) 어댑터 보드
MAX-IDE는 JTAG IEEE 표준 1149와 호환되는 전용 JTAG TAP(Test Access Port) 인터페이스를 통해 MAXQ 마이크로컨트롤러의 부트로더 및 디버그 엔진 기능에 상호연동한다. 이 인터페이스는 다음의 신호로 구성되며, 일반적으로 TMS(Test Mode Select), TCK(Test Clock), TDI(Test Data In) 및 TDO(Test Data Out)와 같은 포트 핀으로 멀티플렉싱된다.
그림 1은 모든 MAXQ 마이크로컨트롤러 EV 킷에 포함된 직렬-JTAG 어댑터가 PC 직렬 COM 포트와 MAXQ 마이크로컨트롤러의 JTAG 인터페이스 간에 인터페이스 레이어를 제공하는 것을 보여준다.

그림 1. MAXQ를 위한 직렬-JTAG 인터페이스.
JTAG 인터페이스 신호 및 케이블
직렬-JTAG 어댑터 보드는 각 끝에 2 x 5 0.100" 소켓 공간을 가진 10커넥터 리본 케이블을 통해 MAXQ EV 킷 보드에 연결된다. 이 케이블에 의해 전송되는 신호는 아래의 표 1에 요약되어 있다.
표 1. JTAG 인터페이스 신호
| Pin Number |
Signal Type |
Signal Name |
Signal Description |
| 1 |
Input to MAXQ |
TCK |
JTAG/TAP Test Clock |
| 2 |
Ground |
GND |
Ground |
| 3 |
Output from MAXQ |
TDO |
JTAG/TAP Test Data Out |
| 4 |
Reference |
VREF |
Supplied by MAXQ kit to set the reference level for JTAG signals output by the Serial-to-JTAG board |
| 5 |
Input to MAXQ |
TMS |
JTAG/TAP Test Mode Select |
| 6 |
Input to MAXQ |
nRST |
Open-drain drive, connected to MAXQ reset line |
| 7 |
None |
KEY |
Keyed pin for JTAG cable alignment |
| 8 |
Power |
VCC5 |
+5.0V (±5%) supply provided by JTAG board |
| 9 |
Input to MAXQ |
TDI |
JTAG/TAP Test Data In |
| 10 |
Ground |
GND |
Ground |
EV 킷 연결하기
사용하는 EV 킷 종류에 따라, 직렬-JTAG 인터페이스 보드, EV 킷 보드 또는 두 보드 모두에게 전원이 필요할 수 있다. 두 보드의 셋업을 위한 단축 명령이 여기(표 2)에 제공된다. 자세한 명령에 대해서는 EV 킷 데이터 시트를 참조한다. 직렬-JTAG 보드 또는 모든 MAXQ EV 킷 보드에 의해 사용되는 모든 전원은 DC 전원뿐이며, 가운데가 (+)이다.
표 2. EV 킷 셋업
| Evaluation Kit |
JTAG Power Supply |
Kit Power Supply |
Jumper Settings |
JTAG Header |
| MAXQ2000 |
5V, ±5% |
None |
JTAG—Close JH1, JH2, JH3Kit—Close JU11; Close 1+2 on JU1, JU2, JU3 |
J4 |
MAX-IDE와 함께 사용하기 위해 MAXQ EV 킷 및 직렬-JTAG 보드(그림 2)를 설정하려면 다음을 수행한다.
- 위와 같이 전원을 직렬-JTAG 보드에 연결한다.
- 위와 같이 EV 킷 및 직렬-JTAG 보드에 대한 모든 점퍼를 설정한다. 특정 킷 기능에 액세스하기 위해 EV 킷 보드에 추가 점퍼 또는 DIP 스위치 설정이 필요할 수도 있다. 자세한 내용은 EV 킷 데이터 시트를 참조한다.
- 2 x 5 10커넥터 리본 케이블을 직렬-JTAG 보드의 P2 헤더로부터 EV 킷 보드의 적절한 헤더로 연결한다. 커넥터는 한 방향으로만 연결하기 위해 조절할 수 있다. 이렇게 하지 않을 경우, 적색 와이어가 양쪽 헤더에서 동일한 핀에 연결되는지 확인한다.
- Straight-through 직렬 케이블을 직렬-JTAG 보드의 J1에서 PC COM 포트로 연결한다.
- 모든 전원을 켠다.

그림 2. MAXQ2000 EV 킷 및 직렬-JTAG 보드.
MAX-IDE에서 프로젝트 실행하기
새 MAXQ 어셈블리 프로젝트 생성하기
MAX-IDE에 새로운 MAXQ 어셈블리 언어 프로젝트를 생성하려면 다음 단계를 수행한다.
- MAX-IDE 메뉴에서 Device
MAXQ JTAG를 선택한다.
- Project
New Project를 선택한다. 제목이 없는 프로젝트가 생성된다.
- Project
Save Project As를 선택한다. 프로젝트(.prj 파일)를 저장할 위치를 선택한다.
- 새로운 어셈블리 언어 파일을 생성하려면 File
New File을 선택한다. 파일에 어셈블리 코드 입력을 완료한 다음, File Save As를 선택하여 새롭게 생성된 .asm 파일을 프로젝트 디렉토리에 저장한다. 다음, Project Add Files을 선택하여 프로젝트에 추가할 새로 생성된 파일을 선택한다.
- 기존의 어셈블리 언어 파일을 프로젝트에 추가하려면, 간단히 Project
Add Files을 선택한 다음 프로젝트에 추가할 파일을 선택한다.
- Include 파일은 어셈블리 프로세스 동안 자동으로 읽혀지므로 프로젝트에 명시적으로 추가할 필요가 없다.
MAXQ2000 어셈블리 파일의 예제는 다음과 같다.
$include (..\api\maxQ2000.inc)
org 0000h
main:
jump $
end
위의 $include 라인은 include 파일의 위치에 따라 다양하게 나타난다. $include 및 org 지시문에 대한 자세한 내용은 이 문서의 "MAX-IDE 어셈블러 사용하기" 섹션을 참조한다.
어셈블리 및 include 파일에 대한 참고사항
- 모든 MAXQ 마이크로컨트롤러에 공통적인 시스템 레지스터(누산기, 데이터 포인터 및 루프 제어 레지스터 등)는 MAX-IDE 어셈블러에서 미리 정의된다. 각 장치마다 다른 주변장치 레지스터는 include 파일에서 정의되어야 한다. 표준 include 파일은 각 MAXQ 마이크로컨트롤러에 해당되는 MAX-IDE를 설치할 때 포함된다. 위 예제에 보이는 include 파일은 MAXQ2000용이다.
- 프리프로세서 지시어(equates, defines, macros 등)는 프로젝트 내에서 파일 간에 이월되지 못한다. MAX-IDE 어셈블리 프로젝트에 하나 이상의 어셈블리 파일이 포함되어 있는 경우, 모든 프리프로세서 지시어 또는 include 파일 지시어는 이러한 지시어를 사용하는 각 어셈블리 파일에 포함되어야 한다.
- 프로젝트에 있는 어셈블리 파일의 수와 상관없이 각 파일의 끝에는 "end" 문을 표시해야 한다.
- Include 파일의 끝에는 "end" 문을 사용하지 않는다.
- 프로젝트에 여러 개의 어셈블리 파일이 포함되어 있는 경우, 모든 파일의 모든 식별자(identifier)는 공개하는 것이 효과적이다. 즉, 어셈블리 파일의 코드는 경로를 호출하거나 또는 해당 프로젝트의 다른 모든 어셈블리 파일에서 정의된 레이블을 참조할 수 있다.
기존 프로젝트 열기
이전에 생성된 MAX-IDE 프로젝트를 열려면, 간단히 메뉴에서 Project Open Project를 선택한 다음 열고 싶은 프로젝트의 .prj 파일을 선택한다. 직렬-JTAG 보드와 EV 킷 보드가 적절히 연결되지 않은 상태에서 전원을 인가하고 MAXQ JTAG 프로젝트를 열면 오류 메시지가 나타날 수 있으므로 주의한다.
프로젝트를 생성하거나 또는 열면, 프로젝트에 포함된 어셈블리 코드 파일 목록이 왼쪽 창에 나타난다. MAX-IDE에서 파일을 편집하려면 파일 이름을 더블 클릭하여 연다. 아래의 그림 3을 참조한다.
 그림 3. MAX-IDE 프로젝트 환경.
코드 실행 및 디버깅하기
프로젝트 컴파일하기
프로젝트 파일을 컴파일하려면, 메뉴에서 Debug Make 또는 Debug Build All을 선택한 다음, 툴바에서 이러한 명령에 해당하는 바로가기 버튼 중 하나를 클릭하거나 F7(Make와 동일)을 누른다. MAXQ 어셈블러가 실행된다. 오류가 없는 경우, Messages 윈도우에 "Compiling...Build Successful" 메시지가 표시될 것이다. 또한 작성 과정 중 발생하는 모든 오류는 Messages 윈도우에 표시된다.
프로젝트 실행하기
프로젝트 컴파일링을 성공적으로 완료하면, 다음 방법 중 하나를 사용하여 디버거에서 이를 실행할 수 있다.
- Debug
Run (F5)을 선택하면 컴파일된 프로젝트 코드가 JTAG 인터페이스를 통해 MAXQ 마이크로컨트롤러 안으로 로드되고 실행을 시작한다. 프로그램 실행은 Debug Stop (Shift+F5)을 선택하거나 Pause 버튼을 누르거나 또는 브레이크포인트를 만날 때까지 계속된다.
- Debug
Step Into (F11)를 선택하면 컴파일된 프로그램이 로드되고 첫 번째 소스 코드 라인(source code line)에서 실행을 정지한다.
- Debug
Run to Cursor (Control+F10)를 선택하면 컴파일된 프로그램이 로드되고 실행을 시작하며, 실행 포인트가 편집 커서가 사용하고 있는 라인에 도달하거나 또는 실행 포인트가 브레이크포인트에 도달할 때까지(어느 경우이든 먼저 발생될 때까지), 실행된다. 커서가 소스 코드 라인 상에 없을 때 이 옵션을 선택하면 오류가 발생된다.
미리 결정된 위치에서 프로그램 실행을 정지시키는 브레이크포인트는 다음 세 가지 방법 중 하나를 사용하여 설정 또는 해제할 수 있다.
- 커서를 브레이크포인트로 설정하고자 하는 라인으로 이동한 다음 Debug
Toggle Breakpoint를 선택한다.
- 커서를 브레이크포인트로 설정하고자 하는 라인으로 이동한 다음 툴바의 정지신호 아이콘을 클릭한다.
- 편집 윈도우에서 브레이크포인트로 설정하고자 하는 라인의 라인 수를 클릭한다.
브레이크포인트를 비소스 코드 라인(nonsource code line)에 놓을 경우, 아무 효과가 없다. MAXQ 마이크로컨트롤러에서는 한 번에 최대 4개의 브레이크포인트를 설정할 수 있다. Run to Cursor를 선택할 경우 이 명령이 하나의 브레이크포인트를 소모하므로, 따라서 이 경우 3개의 브레이크포인트만 설정할 수 있다.
Debug Stop을 선택하거나 또는 툴바의 Stop 아이콘을 클릭하면 프로그램 실행은 완전히 셧다운된다. 그러나 첫 번째 라인 (Step Into)이나 커서 라인 (Run to Cursor)에서 또는 브레이크포인트가 설정된 라인에서 실행을 정지할 경우, 단계별(step-by-step) 모드에서 프로그램을 다시 실행할 수 있다. 단계별 모드는 Pause 버튼을 클릭하면 들어갈 수 있다. 이 모드에서 현재 실행 포인트는 녹색 화살표로 표시되며, 다음의 명령을 사용할 수 있다.
- Debug
Step Into (F11), Debug Step Over (F10) 및 Debug Step Out (Shift+F10)는 어셈블리 디버그 모드에서 모두 동일한 효과를 갖는다. 즉, 단일 명령을 실행하고 실행 포인트를 다음 명령으로 이동한다.
- Debug
Run은 위에서 설명한 바와 같이 다음 브레이크포인트에 도달할 때까지 현재 실행 포인트에서부터 실행된다.
- Debug
Run To Cursor는 위에서 설명한 바와 같이 커서 라인에 도달할 때까지 현재 실행 포인트에서부터 실행된다.
Debug 메뉴의 High-Level Debug 및 Low-Level Debug 설정은 어셈블리 언어 디버깅 모드에서 실행할 경우 아무 효과가 없으므로 주의한다.
프로세서 레지스터 표시 및 편집하기
프로그램을 로드하고 최소 하나의 명령을 실행한 다음에는 디버거를 사용하여 MAXQ 마이크로컨트롤러의 레지스터를 표시하고 편집할 수 있다. Window Show Registers를 선택하면 레지스터 세트 화면이 표시된다. 이러한 값은 디버거에서 코드를 단계적으로 실행할 때 업데이트된다. 쓰기 가능한 레지스터는 해당 값 필드를 더블 클릭하고 십육진수(hex), 십진수(decimal) 또는 이진수(binary)로 새로운 값을 입력하여 편집할 수 있다.
MAXQ2000 킷 주의사항: LCD 도터보드가 부착된 경우, 레지스터 PO0, PD0, PO1, PD1, PO2, PD2, PO3 또는 PD3의 값을 수동으로 편집하지 않도록 한다. LCD가 부착된 상태에서 이러한 핀의 출력을 스태틱 값으로 설정할 경우 LCD 디스플레이에 손상을 줄 수 있다.
프로세서 메모리 표시 및 편집하기
프로그램을 로드하고 최소 하나의 명령을 실행한 다음에는 MAXQ 마이크로컨트롤러의 내부 메모리를 표시하고 편집할 수 있다. Window Show Memory를 선택하면 내부 메모리 화면이 표시된다. 화면에서 드롭다운 목록을 선택하면 코드, 데이터 또는 스택 메모리를 볼 수 있다. 메모리는 코드와 스택 공간에 대해서는 16비트 폭으로, 데이터 공간은 8비트 폭으로 표시된다. 데이터 또는 스택 공간의 메모리 값은 메모리 위치를 더블 클릭하고 새로운 값을 입력하여 편집할 수 있다.
MAX-IDE 어셈블러 사용하기
MAX-IDE는 MAXQ 어셈블리 언어로 애플리케이션을 개발하는데 사용할 수 있는 멀티패스 어셈블러(multipass assembler)를 제공한다. 이 어셈블러에는 include 파일, 기호 equates, 조건부 어셈블리 및 매크로를 사용할 수 있는 기능을 제공하는 단일 패스 프리프로세서(single-pass preprocessor)가 포함되어 있다. 어셈블러 및 프리프로세서는 MAX-IDE 환경과 완벽하게 통합된다.
매크로 및 기타 프리프로세서 지시어를 사용하는 방법의 예를 보려면 'Macro' 예제 프로젝트를 참조한다.
일반 구문
MAXQ 어셈블러 및 프리프로세서는 모두 대소문자를 구별하지 않는다. 어셈블리 문은 다음과 같은 형식을 따른다.
[label:] [opcode [parameter [, parameter]]] [;comment]
예제 코드는 다음과 같다.
main:
move Acc, A[2] ; copy A[2] to active accumulator
위에서 보이는 'main' 레이블과 같은 식별자는 문자 [a-zA-Z_?$0-9]를 포함할 수 있지만, 0-9 숫자로 시작할 수 없다. 길이는 최대 127 문자까지 가능하다.
MAXQ 마이크로컨트롤러 제품군의 구조, 명령 세트, 어드레스 지정 모드 및 코어 레지스터에 대한 자세한 내용은 MAXQ 제품군 사용자 가이드를 참조한다.
소스 파일
MAX-IDE의 프로젝트 윈도우에 표시되는 모든 어셈블리 소스 (.asm) 파일은 프로젝트가 컴파일될 때 윈도우에 표시되는 순서대로 어셈블된다. 링커는 제공되지 않으므로, 여러 개의 파일은 한 파일로 병합된 다음 어셈블할 때와 동일한 방식으로 어셈블된다.
소스 파일은 지시어, equates/defines, macros, 조건부 어셈블리 블록 및 명령문을 포함할 수 있다. 모든 소스 파일의 마지막 라인은 다음과 같이 END 지시어로 구성되어야 한다.
end
Include 파일
Include (.inc) 파일은 프로젝트에 명시적으로 추가할 필요가 없다. 대신, 이 파일은 include 지시어에 의해 자동으로 읽혀지고 파싱(parsing: 해석)된다. 이렇게 하면 include 지시어 대신 마치 모든 해당 텍스트가 소스 파일에 표시된 것처럼 include 파일이 파싱된다.
(source file): (equates.inc):
$include(equates.inc) ---> MASK1 equ 0FFh
MASK2 equ 0FEh
(resume parsing in source <---
file)
Include 파일은 지시어, equates, macros 및 DB/DW 데이터 문을 포함할 수 있지만, 어셈블리 루틴을 포함할 수 없다. Include 파일은 END 지시어로 종료할 필요가 없다.
MAX-IDE 는 각 MAXQ 마이크로컨트롤러에 대한 표준 include 파일을 제공한다. 이 파일은 해당 마이크로컨트롤러의 주변장치 레지스터 세트 뿐 아니라 유틸리티 ROM에 의해 제공되는 함수에 대한 어드레스를 정의한다. 이러한 include 파일이 모든 어셈블리 언어 프로젝트에서 사용할 수 있도록 제공되며, MAX-IDE 메인 설치 디렉토리 아래의 Examples 하위 디렉토리에 있다.
상수(Constants)
문장이나 동일 정의문 안에 즉시 값으로 사용하기 위한 상수값은 4개의 형식 중 하나에 쓰여 질 수 있다.
- 십진수 (디폴트)—문자가 없이 끝나거나 'd'로 끝난다. 예: 10, 07d
- 이진수—'b'로 끝난다. 예: 01b, 1101101b
- 십육진수—0-9 숫자로 시작하고 'h'로 끝난다. 예: 10h, 09FFEh
- 단일 문자—바이트 ASCII 값으로 변환된다. 예: 'A'
다음의 연산자는 상수 및 equate 정의에서만 사용할 수 있다. 이러한 명령문의 평가는 상수 값이 파싱되기 전에 프리프로세싱 단계에서 수행된다.
move Acc, #(1+1) ; 2 : Addition
move Acc, #(4-1) ; 3 : Subtraction
move Acc, #(2*2) ; 4 : Multiplication
move Acc, #(25/5) ; 5 : Division (truncated to integer)
move Acc, #(MIN(6,7)) ; 6 : Minimum of two values
move Acc, #(MAX(6, 7)) ; 7 : Maximum of two values
move Acc, #'A' ; ASCII value of 'A'
move Acc, #(550h | 055h) ; 555h : Logical OR
move Acc, #(550h & 055h) ; 050h : Logical AND
move Acc, #(550h ^ 055h) ; 505h : Logical XOR
move Acc, HIGH(#1234h) ; 12h : Select high byte of word
move Acc, LOW(#1234h) ; 34h : Select low byte of word
move Acc, NOT(#0000h) ; FFFFh : Bitwise negation
move Acc, #001h << 7 ; 080h : Shift left
move Acc, #080h >> 7 ; 001h : Shift right
Equates
EQU 지시어를 사용하여 정의되는 Equates는 상수 값이 정상적으로 사용되는 어느 곳에나 수치 대체를 위해 사용된다. 위에서 상수에 대해 정의된 모든 형식과 상수 연산자를 사용할 수 있다. 레이블은 상수로 인식되지 않는다.
ONE equ 01
TWO equ 02
move Acc, #ONE
move Acc, #(ONE+TWO)
Equates는 이후의 equates의 정의에도 사용할 수 있다.
ONE equ 01
TWO equ ONE+ONE
Defines
Defines는 추가적인 처리없이 스트레이트 C 스타일 텍스트 대체를 허용하며, 주변 레지스터를 정의하기 위한 include 파일들을 사용하는데 가장 공통적으로 사용된다. 대체 텍스트는 단일 라인으로 제한되며, 인식되는 연속 문자는 없다. C 스타일 매크로는 인식되지 않는다.
#define PO[0] M0[0]
move Acc, PO[0] ; Parses as 'move Acc, M0[0]'
데이터 키워드(Data Keywords)
DB 및 DW 지시어는 raw 바이트(스트링 값의 바이트 포함) 또는 워드를 현재 위치에서 hex 파일로 삽입하는데 사용할 수 있다.
db 055h, 0AAh, 055h, 0AAh ; byte values
dw 0AAAAh, 05555h ; word values
db "MAX-IDE Environment " ; byte value for each char (padded to even count)
이러한 데이터 값은 코드 공간에 삽입된다. 따라서 두 세트의 명령 문 사이에 DB 문이 발생하는 경우, 워드 정렬 어셈블리 오류를 피하기 위해서는 정의되는 바이트 수는 짝수가 되어야 한다.
조건부 어셈블리(Conditional Assembly)
조건문은 특정 부울(boolean) 조건이 충족되는 경우에만 코드 블록의 어셈블링을 허용한다. 다음과 같은 형식을 따른다.
IF (<boolean statement>)
statements
...
ENDIF
부울 명령문은 상수, equates 및 부울 연산자 =, !=, <, <=, >, >=를 사용하여 정의된다. 조건부 어셈블리 블록 안에서는 코드와 include 명령문만을 사용할 수 있으며, macros 또는 equates는 사용할 수 없다.
DEBUG equ 0
DOINC equ 1
IF (DEBUG != 0)
call RoutineDbg
ENDIF
IF (DEBUG = 0)
call Routine
ENDIF
IF (DOINC = 1)
$include(defines.inc)
ENDIF
Macros
Macros는 함수가 호출될 때마다 인라인으로 확대되고 어셈블링되는 코드 블록을 사용하여 함수를 정의할 수 있도록 한다. 다음과 같은 형식을 따른다.
<identifier> MACRO [[PARAM <parm1>] [whitespace AND/OR comma] [<parm2>] ...]
[LOCAL <local1> [whitespace AND/OR comma] [<local2>] ...]
<macro assembly statements, local labels>
...
ENDM
매크로의 가장 간단한 형식은 참조될 때마다 해당 코드를 삽입하는 일만 수행한다. 삽입되는 코드 안에서 equates, defines 및 중첩(nested) 매크로 호출은 모든 정상적으로 처리된다.
ThreeNops MACRO
nop
nop
nop
ENDM
ThreeNops --> nop
nop
nop
Macros는 하나 이상의 값을 선택적으로 정의할 수 있으며, 매크로가 참조될 때 전달된 값들이다. 이러한 값은 확장 코드 안으로 삽입된다. 다음의 매크로는 파라미터를 사용하여 스택 공간의 한 레벨을 내주고 모든 쓰기 가능한 레지스터(Acc 제외)에 'INC' 함수를 제공한다.
Inc MACRO PARAM Register
push Acc
move Acc, Register
add #1
move Register, Acc
pop Acc
ENDM
Inc LC[0] --> push Acc
move Acc, LC[0]
add #1
move LC[0], Acc
pop Acc
또한 Macros는 로컬 식별자를 포함할 수 있는데, 이 식별자는 매크로의 각 참조마다 구분될 수 있도록 확장 코드에서 이름이 변경된다.
LoopN MACRO PARAM Count
LOCAL L1
move LC[0], Count
L1:
djnz LC[0], L1
ENDM
위의 매크로에서 'L1' 레이블은 매크로가 참조되고 해당 코드가 삽입될 때마다 다른 임시 값으로 이름이 변경된다.
의견을 보내주세요! 위 내용이 도움이 되셨나요? 여러분의 의견을 기다립니다 — Maxim은 보내주신 정정이나 제안사항을 반영하고 있습니다.
이 페이지를 평가하고 의견을 보내주십시오.
자동 업데이트
관심있는 분야의 애플리케이션 노트가 나올 때 자동으로 업데이트 받고 싶으세요? 그렇다면 EE-Mail™을 신청하십시오.
| 추가 정보 | |
APP 3561: Apr 19, 2006
|
|
|
|
다운로드, PDF 형식 (512kB)
AN3561,
AN 3561,
APP3561,
Appnote3561,
Appnote 3561
|
|