KR101219535B1 - 코드 컨버팅 장치, 방법 및 컴퓨터 판독 가능한 기록 매체 - Google Patents

코드 컨버팅 장치, 방법 및 컴퓨터 판독 가능한 기록 매체 Download PDF

Info

Publication number
KR101219535B1
KR101219535B1 KR1020110039912A KR20110039912A KR101219535B1 KR 101219535 B1 KR101219535 B1 KR 101219535B1 KR 1020110039912 A KR1020110039912 A KR 1020110039912A KR 20110039912 A KR20110039912 A KR 20110039912A KR 101219535 B1 KR101219535 B1 KR 101219535B1
Authority
KR
South Korea
Prior art keywords
variable
address
environment
program code
code
Prior art date
Application number
KR1020110039912A
Other languages
English (en)
Other versions
KR20120121978A (ko
Inventor
윤광식
최경화
박인권
허희정
강해달
장한일
Original Assignee
슈어소프트테크주식회사
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 슈어소프트테크주식회사 filed Critical 슈어소프트테크주식회사
Priority to KR1020110039912A priority Critical patent/KR101219535B1/ko
Publication of KR20120121978A publication Critical patent/KR20120121978A/ko
Application granted granted Critical
Publication of KR101219535B1 publication Critical patent/KR101219535B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis
    • G06F8/434Pointers; Aliasing

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

본 발명의 실시예에 따르면, 제1 환경의 프로그램 코드를 제2 환경에서 컴파일 가능한 프로그램 코드로 컨버팅하기 위한 방법으로서, 상기 프로그램 코드에서 참조하는 제1 환경의 주소를, 제2 환경의 주소로 부여하되 변수 형태로 부여하고, 상기 제1 환경의 주소를 참조하는 코드를 상기 변수 형태로 부여된 상기 제2 환경의 주소를 참조하는 코드로 변환하는 직접 주소 처리 단계, 상기 프로그램 코드에서 주소로 사용되는 변수들의 목록을 참조하여, 상기 주소로 사용되는 변수들을 포인터 타입의 주소 변수로 변환하는 주소 변수 처리 단계, 상기 프로그램 코드에 포함되는 무한 루프를 제거하고 레이블로 대체하는 테스크 함수 처리 단계, 상기 제1 환경에서의 하드웨어에 의존적인 코드를 인식하여 제거하는 어셈블리 코드 처리 단계, 상기 프로그램 코드에 포함되는 정수형을 상기 제2 환경에서 동일한 크기를 갖는 정수형으로 변환하는 정수형 변환 단계, 상기 프로그램 코드에 포함되는 비표준 언어 항목을 상기 제2 환경에서의 표준 언어 항목으로 변환하는 비표준 언어 항목 변환 단계를 포함하는 코드 컨버팅 방법이 제공된다.

Description

코드 컨버팅 장치, 방법 및 컴퓨터 판독 가능한 기록 매체{APPARATUS, METHOD AND COMPUTER-READABLE RECORDING MEDIUM FOR CONVETING PROGRAM CODE}
본 발명은 프로그램 코드를 컨버팅하기 위한 장치, 방법 및 컴퓨터 판독 가능한 기록 매체에 관한 것이다.
통상적으로 임베디드 시스템의 소프트웨어는 호스트 환경 또는 PC 환경에서 개발되고, 임베디드 환경에서 실제 동작한다. 이러한 임베디드 프로그램 코드는 하드웨어에 의존적인 부분과 소프트웨어에 의존적인 부분으로 나뉠 수 있다.
소프트웨어에 의존적인 부분은 임베디드 환경과 무관하게 작동할 수 있는 소프트웨어 부분, 즉, 컴파일 되는 환경과 무관하게 작동하는 부분을 의미한다. 따라서, 소프트웨어에 의존적인 부분에 대해서는 개발한 프로그램 코드를 임베디드 환경에 적용시키기 전 초기 단계에서 충분한 테스트가 필요하다. 그러나, 소프트웨어에 의존적인 부분을 하드웨어에 의존적인 부분으로부터 분리 또는 추출하는 것이 용이하지 않아 그대로 호스트 환경에서 검사하는 것이 불가능하였다.
한편, 하드웨어에 의존적인 부분은 컴파일 환경에 따라 그 결과가 달라지기 때문에, 임베디드 환경에 맞춰 제작된 부분을 호스트 환경에서 그대로 시뮬레이션하는 것은 불가능하다.
따라서, 임베디드 프로그램 코드를 적절히 변환하여 소프트웨어에 의존적인 부분은 그대로 유지하고, 하드웨어에 의존적인 부분 중 일부에 대해서는 시뮬레이션하며, 일부에 대해서는 그 의미를 유지한 채 생략함으로써 호스트 환경에서의 검사가 가능하도록 하는 기술이 필요한 실정이다.
본 발명은 상술한 종래 기술의 문제점을 해결하는 것을 그 목적으로 한다.
또한, 본 발명의 목적은 임베디드 프로그램 코드를 호스트 환경에서 컴파일 가능한 프로그램 코드로 변환하여 시뮬레이션 및 검사를 가능하게 하도록 하는 것이다.
한편, 본 발명의 또 다른 목적은 임베디드 프로그램 코드를 호스트 환경에서 컴파일 가능한 프로그램 코드로 변환함으로써 임베디드 시스템에 적용하기 이전 단계에서 하드웨어에 의존적인 부분 중 가능한 부분에 대해서는 시뮬레이션 및 검사가 가능해지도록 하는 것이다.
본 발명의 실시예에 따르면, 제1 환경의 프로그램 코드를 제2 환경에서 컴파일 가능한 프로그램 코드로 컨버팅하기 위한 장치로서, 상기 프로그램 코드에서 참조하는 제1 환경의 주소를, 제2 환경의 주소로 부여하되 변수 형태로 부여하고, 상기 제1 환경의 주소를 참조하는 코드를 상기 변수 형태로 부여된 상기 제2 환경의 주소를 참조하는 코드로 변환하는 직접 주소 처리부, 상기 프로그램 코드에서 주소로 사용되는 변수들의 목록을 참조하여, 상기 주소로 사용되는 변수들을 포인터 타입의 주소 변수로 변환하는 주소 변수 처리부, 상기 프로그램 코드에 포함되는 무한 루프를 제거하고 레이블로 대체하는 테스크 함수 처리부, 상기 제1 환경에서의 하드웨어에 의존적인 코드를 인식하여 제거하는 어셈블리 코드 처리부, 상기 프로그램 코드에 포함되는 정수형을 상기 제2 환경에서 동일한 크기를 갖는 정수형으로 변환하는 정수형 변환부, 상기 프로그램 코드에 포함되는 비표준 언어 항목을 상기 제2 환경에서의 표준 언어 항목으로 변환하는 비표준 언어 항목 변환부를 포함하는 코드 컨버팅 장치가 제공된다.
한편, 본 발명의 다른 실시예에 따르면, 제1 환경의 프로그램 코드를 제2 환경에서 컴파일 가능한 프로그램 코드로 컨버팅하기 위한 방법으로서, 상기 프로그램 코드에서 참조하는 제1 환경의 주소를, 제2 환경의 주소로 부여하되 변수 형태로 부여하고, 상기 제1 환경의 주소를 참조하는 코드를 상기 변수 형태로 부여된 상기 제2 환경의 주소를 참조하는 코드로 변환하는 직접 주소 처리 단계, 상기 프로그램 코드에서 주소로 사용되는 변수들의 목록을 참조하여, 상기 주소로 사용되는 변수들을 포인터 타입의 주소 변수로 변환하는 주소 변수 처리 단계, 상기 프로그램 코드에 포함되는 무한 루프를 제거하고 레이블로 대체하는 테스크 함수 처리 단계, 상기 제1 환경에서의 하드웨어에 의존적인 코드를 인식하여 제거하는 어셈블리 코드 처리 단계, 상기 프로그램 코드에 포함되는 정수형을 상기 제2 환경에서 동일한 크기를 갖는 정수형으로 변환하는 정수형 변환 단계, 상기 프로그램 코드에 포함되는 비표준 언어 항목을 상기 제2 환경에서의 표준 언어 항목으로 변환하는 비표준 언어 항목 변환 단계를 포함하는 코드 컨버팅 방법이 제공된다.
본 발명에 따르면, 임베디드 프로그램 코드가 호스트 환경에서 컴파일 가능한 프로그램 코드로 변환되며, 이에 따라, 호스트 환경에서의 시뮬레이션 및 검사가 가능해진다.
한편, 본 발명에 따르면, 임베디드 프로그램 코드가 호스트 환경에서 컴파일 가능한 프로그램 코드로 변환됨으로써 임베디드 시스템에 적용하기 이전 단계에서 하드웨어에 의존적인 부분에 대한 시뮬레이션 및 검사가 가능해진다. 이에 따라, 프로그램의 결함을 조기에 발견할 수 있고, 개발 시간을 단축시킬 수 있다.
도 1은 본 발명의 일 실시예에 따른 코드 컨버팅 장치의 구성을 나타내는 도면이다.
도 2는 본 발명의 일 실시예에 따른 직접 주소 처리부의 구성을 나타내는 도면이다.
도 3은 본 발명의 일 실시예에 따른 주소 변수 처리부의 구성을 나타내는 도면이다.
도 4는 본 발명의 일 실시예에 따른 테스크 함수 처리부의 구성을 나타내는 도면이다.
도 5는 본 발명의 일 실시예에 따른 정수형 변환부의 구성을 나타내는 도면이다.
도 6은 본 발명의 일 실시예에 따른 비표준 언어 항목 변환부의 구성을 나타내는 도면이다.
후술하는 본 발명에 대한 상세한 설명은, 본 발명이 실시될 수 있는 특정 실시예를 예시로서 도시하는 첨부 도면을 참조한다. 이들 실시예는 당업자가 본 발명을 실시할 수 있기에 충분하도록 상세히 설명된다. 본 발명의 다양한 실시예는 서로 다르지만 상호 배타적일 필요는 없음이 이해되어야 한다. 예를 들어, 여기에 기재되어 있는 특정 형상, 구조 및 특성은 일 실시예에 관련하여 본 발명의 정신 및 범위를 벗어나지 않으면서 다른 실시예로 구현될 수 있다. 또한, 각각의 개시된 실시예 내의 개별 구성요소의 위치 또는 배치는 본 발명의 정신 및 범위를 벗어나지 않으면서 변경될 수 있음이 이해되어야 한다. 따라서, 후술하는 상세한 설명은 한정적인 의미로서 취하려는 것이 아니며, 본 발명의 범위는, 적절하게 설명된다면, 그 청구항들이 주장하는 것과 균등한 모든 범위와 더불어 첨부된 청구항에 의해서만 한정된다. 도면에서 유사한 참조부호는 여러 측면에 걸쳐서 동일하거나 유사한 기능을 지칭한다.
이하에서는, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자가 본 발명을 용이하게 실시할 수 있도록 하기 위하여, 본 발명의 바람직한 실시예들에 관하여 첨부된 도면을 참조하여 상세히 설명하기로 한다.
[본 발명의 바람직한 실시예]
코드 컨버팅 장치의 구성
도 1은 본 발명의 일 실시예에 따른 소프트웨어 검사를 위한 코드 컨버팅 장치의 구성을 나타내는 도면이다.
본 발명에서의 코드 컨버팅 장치는 제1 환경의 프로그램 코드를 제2 환경에서 컴파일러, 시뮬레이션 및 검사가 가능한 프로그램 코드로 변환하는 장치이다. 이하에서는 제1 환경 및 제2 환경이 각각 임베디드 환경 및 호스트 환경이고, 제2 환경에서의 표준 언어는 C 언어인 것으로 예를 들어 설명하기로 한다.
본 발명에서의 코드 컨버팅 장치는 소정의 운영체제에 의해 구동되고, 소프트웨어의 설치 및 편집이 가능한 장치로서, 소정의 프로그램 모듈 또는 하드웨어들로서 구성된다. 메모리 수단을 구비하고 마이크로 프로세서를 탑재하여 연산 능력을 갖춘 기기라면 얼마든지 본 발명의 실시예에 따른 코드 컨버팅 장치로서 이용될 수 있다.
도 1을 참조하면, 본 발명의 코드 컨버팅 장치는 직접 주소 처리부(110), 주소 변수 처리부(120), 테스크(task) 함수 처리부(130), 어셈블리 코드 처리부(140), 정수형(integer type) 변환부(150), 비표준 언어 항목 변환부(160), 제어부(170)를 포함한다. 상기 직접 주소 처리부(110), 주소 변수 처리부(120), 테스크(task) 함수 처리부(130), 어셈블리 코드 처리부(140), 정수형(integer type) 변환부(150), 비표준 언어 항목 변환부(160), 제어부(170)는 프로그램 모듈들로 구현될 수 있다. 이러한 프로그램 모듈들은 운영 시스템, 응용 프로그램 모듈 및 기타 프로그램 모듈의 형태로 본 발명의 실시예에 따른 코드 컨버팅 장치에 포함될 수 있으며, 물리적으로는 여러 가지 공지의 기억 장치 상에 저장될 수 있다. 한편, 이러한 프로그램 모듈들은 본 발명에 따라 후술할 특정 업무를 수행하거나 특정 추상 데이터 유형을 실행하는 루틴, 서브루틴, 프로그램, 오브젝트, 컴포넌트, 데이터 구조 등을 포괄하지만, 이에 제한되지는 않는다.
이하의 설명에서 아래의 표 1에 제시되는 용어들은 설명란에 표시되는 의미로서 사용되나, 반드시 이에 제한되는 것은 아니며, 이와 유사하나 다른 의미로 사용될 수도 있다.
용어 설명
C표준 ISO/IEC 9899 C 언어 표준 문서
선언(declaration) ISO/IEC 9899 C 언어 표준 문서에서 정의하는 선언
정의(definition) ISO/IEC 9899 C 언어 표준 문서에서 정의하는 정의
번역 단위(translation unit) ISO/IEC 9899 C 언어 표준 문서에서 정의하는 번역 단위
헤더 파일 번역 단위에 include되는 파일
수식(expression) ISO/IEC 9899 C 언어 표준 문서에서 정의하는 수식
상수식(constant expression) 컴파일 시 계산 결과가 상수로 결정되는 수식
이하에서는, 직접 주소 처리부(110), 주소 변수 처리부(120), 테스크(task) 함수 처리부(130), 어셈블리 코드 처리부(140), 정수형(integer type) 변환부(150), 비표준 언어 항목 변환부(160), 제어부(170) 각각의 동작 및 기능에 대해 설명하기로 한다.
직접 주소 처리부(110)
통상적으로 임베디드 프로그램은 개발자 PC와 호스트 환경에서 개발하고, 임베디드 환경에서 실제로 동작한다. 임베디드 프로그램은 임베디드 환경에 의존적인 부분과 이에 독립적인 부분으로 나뉠 수 있는데, 본 발명의 코드 컨버팅은 임베디드 환경에 독립적인 부분만을 호스트 환경에서 테스트할 수 있도록 한다.
임베디드 프로그램에서는 메모리맵의 특정 주소를 접근할 때 직접 주소 값을 사용하는 경우가 많다. 이런 주소는 임베디드 환경이 아니면 접근이 불가능하므로 호스트 환경에서는 유효하지 않다. 따라서, 호스트 환경에서 직접 주소 값으로 접근하는 코드를 수행하게 되면, 해당 주소 접근 시 잘못된 주소 접근으로 인해 프로그램이 비정상 종료될 가능성이 높다.
따라서, 본 발명의 직접 주소 처리부(110)는 임베디드 프로그램 코드에서 참조하는 임베디드 환경의 주소마다 호스트 환경의 주소를 변수 형태로 부여한다. 또한, 임베디드 환경의 주소를 참조하는 코드를 호스트 환경의 주소로 치환하여, 호스트 환경에서 호스트 환경의 주소를 참조하도록 치환한다.
도 2는 본 발명의 직접 주소 처리부(110)의 기능을 세부적으로 설명하기 위한 도면이다.
도 2를 참조하면, 직접 주소 처리부(110)는 직접 주소 식별부(111), 상수식 계산부(112), 변수 추가부(113)를 포함할 수 있다.
직접 주소 식별부(111)는 프로그램 코드에서 포인터 타입으로 캐스팅된 상수식을 직접 주소로 식별하는 동작을 수행한다.
프로그래밍 언어 관점에서는 직접 주소를 표현하는 구문이 따로 정의되어 있지 않기 때문에, 소스 코드 분석 시 직접 주소임을 바로 정확히 식별하는 것은 불가능하다. 통상적으로 직접 주소는 주소를 표현하는 상수에 포인터 타입을 캐스팅하는 방식으로 사용하기 때문에, 포인터 타입으로 캐스팅된 상수식을 식별함으로써 직접 주소의 식별이 가능해진다.
상수식 계산부(112)는 직접 주소 식별부(111)에 의해 식별된 직접 주소에서 상수식을 계산한다. 포인터 타입으로 캐스팅된 상수식이 직접 주소로서 식별되기 때문에, 이로부터 해당 상수식을 계산한다. 상수식은 다양한 형태로 나타날 수 있다. 예를 들면, 기준이 되는 주소가 정의되어 있고, 해당 기준 주소에 오프셋(offset)을 더하는 방식으로 사용될 수도 있다. 상수식이 어떠한 형태로 나타나더라도 최종적으로 접근하려는 주소값은 하나로 결정된다. 상수식 계산부(112)는 최종적으로 접근하려는 주소값을 결정하기 위한 상수식을 계산한다.
변수 추가부(113)는 직접 주소에 해당하는 변수에 대한 선언 및 정의를 추가하는 기능을 수행한다.
구체적으로 설명하면, 직접 주소 식별부(111)에 의해 식별된 직접 주소에 해당하는 주소를 호스트 환경에 맞게 부여하기 위해 변수를 추가한다. 먼저, 직접 주소로 식별된 "포인터 타입으로 캐스팅된 상수식"에서의 해당 포인터 타입의 기반 타입으로 변수를 정의한다. 예를 들어, 포인터 타입의 기반 타입이 char이면, 정의되는 변수도 char 타입을 갖게 되고, 포인터 타입의 기반 타입이 int이면, 정의되는 변수도 int 타입을 갖게 된다. 다음으로, 정의된 변수의 주소를 초기값으로 갖는 주소 변수를 하나 더 추가하여 프로그램 코드 상의 직접 주소를 추가한 주소 변수로 치환한다.
변수 추가 시에는 선언과 정의를 구분해야 하는데, 이러한 선언 또는 정의는 코드에서 해당 변수가 사용되기 전에 존재하여야 한다. 그러나, 캐스팅된 포인터 타입의 기반 타입이 사용자가 정의한 타입인 경우에는 해당 사용자 정의 타입 선언보다 나중에 삽입되어야 한다. 따라서, 변수 선언 및 정의는 직접 주소를 사용하는 코드 직전에 삽입하는 것이 안전하다. 이에 따르면, 해당 변수가 사용하기 전에 변수 선언 및 정의가 있는 것이며, 사용자 정의 타입인 경우에는 사용자 정의 타입 선언 후에 삽입되었을 것이기 때문이다.
한편, 직접 주소 변수는 전역 변수이므로 전역에 삽입되어야 한다.
요컨대, 직접 주소를 사용하는 코드가 전역에 있는 경우, 변수의 선언 또는 정의는 해당 코드가 포함된 선언 앞에 삽입되어야 한다. 또한, 직접 주소를 사용하는 코드가 함수 내부에 있는 경우, 변수의 선언 또는 정의는 해당 함수의 정의 앞에 삽입되어야 한다.
한편, 프로그램 코드에서 여러 번역 단위에서 동일한 직접 주소를 참조하여 접근하는 경우에는 호스트 환경에서도 동일한 주소를 참조하도록 해야한다. 따라서, 변수는 전역 변수로 선언하되 중복 정의가 되지 않도록 하나의 번역 단위에서만 정의하고, 나머지 번역 단위에서는 선언이 되도록 매크로 가드를 이용할 수 있다. 헤더 파일에 직접 주소 변수가 삽입되어야 하는 경우, 헤더 파일이 여러 번역 단위에서 include 된다면 그 중 하나의 번역단위에서만 정의되어야 하기 때문에, 이러한 매크로 가드가 이용되는 것이다. 매크로 가드는 직접 주소 변수가 정의되어야 하는 번역단위에서 정의한다.
하기 예는 직접 주소 처리부(110)에 의해 코드 변환된 결과를 나타낸다.
(변환 전)
#define ARMCOP (*((char*)0xFFFFF5C3))
ARMCOP=0x99; /* 0xFFFFF5C3 주소에 값 0x99 할당 */
(변환 후)
#ifndef _char_0xFFFFF5C3_definition_ /* 중복 정의를 막기 위한 매크로 가드 */
char char_0xFFFFF5C3_space; /* 주소 변수를 위한 공간 할당 */
char *char_0xFFFFF5C3=&char_0xFFFFF5C3_space; /* 주소 변수 */
#endif
/*ARMCOP*/ char_0xFFFFF5C3_space=0x99;
매크로 가드는 하나의 번역 단위에서만 정의하기 위해 사용되었고, 포인터 타입으로 주소 변수가 정의된 후, 해당 주소에 임베이드 프로그램에서와 같이 0x99 값이 할당되었다는 것을 알 수 있다.
주소 변수 처리부(120)
전술한 바와 같이, 직접 주소를 식별할 때에는 포인터 타입 캐스팅된 상수식만 직접 주소로 식별된다. 따라서, 주소값을 변수에 저장하고 이 변수로 주소를 접근하는 경우에는 식별되지 못하는 문제가 따랐다.
따라서, 주소 변수 처리부(120)는 주소로 사용되는 변수들의 목록을 입력받아 포인터 타입, 즉, 주소 변수의 형태로 변환한다.
도 3은 본 발명의 주소 변수 처리부(120)의 기능을 세부적으로 설명하기 위한 도면이다.
도 3을 참조하면, 주소 변수 처리부(120)는 변환 대상 변수 식별부(121) 및 주소 변수 추가부(122)를 포함한다.
변환 대상 변수 식별부(121)는 주소로 사용되는 변수들을 식별한다. 변환 대상 변수 식별부(121)는 모든 변수 선언 또는 정의마다 해당 변수가 주소로 사용되고 있는지를 검사한다. 본 발명의 일 실시예에 따르면, 변환 대상 변수 식별부(121)는 모든 변수 선언 또는 정의마다 해당 변수가 주소로 사용되는 변수들의 목록에 존재하는지를 판단함으로써, 주소로 사용되는 변수들을 식별할 수 있다.
주소 변수 추가부(122)는 직접 주소 처리부(110)의 변수 추가부(113)의 동작과 유사한 방식으로 주소에 해당하는 변수를 선언하고 정의를 추가한다. 호스트 환경에서 공간 할당을 위한 변수 이름을 주소로 사용하는 경우, 동일한 이름의 포인터 타입 변수를 선언 또는 정의할 수 있다. 직접 주소 처리와는 다르게 따로 삽입 위치를 고려할 필요 없이 주소 변수를 선언 또는 정의하면 된다.
하기 예는 주소 변수 처리부(120)에 의해 코드 변환된 결과를 나타낸다.
(변환 전)
int address=0xFFFFF5C3;
(변환 후)
int address_space; /* 주소에 해당하는 공간 할당 */
int *address=&address_space; /* 주소 변수* /
포인터 타입의 주소 변소가 선언 또는 정의되었다는 것을 알 수 있다. 주소를 위한 포인터 타입 변수는 공간 할당을 위한 변수 이름과 동일할 수 있다.
테스크 함수 처리부(130)
테스크가 무한 루프로 구현되는 경우, 특정 상태의 입력을 조절하거나 출력을 확인하기는 어렵다. 함수 단위로 입력 및 출력을 제어할 수 있어야 하는데 이 경우에는 함수보다 작은 단위인 루프 문장 단위로 제어가 가능하여야 하기 때문이다.
따라서, 본 발명의 일 실시예에 따른 테스크 함수 처리부(130)는 각 루프 수행 단위마다 입력 및 출력 제어가 가능하도록 하기 위해 무한 루프를 제거하고, 제거된 무한 루프를 레이블로 대체한다. 무한 루프 제거에 의해 함수가 한 번 불릴 때마다 한 번의 루프만이 수행된다. 이 때, 함수가 종료되면 다음 수행 시까지 지역 변수 등의 데이터가 유지되지 못하는 문제가 있다. 따라서, 이러한 데이터들은 정적(static) 변수로 변경하여 다음 수행까지 이전 데이터가 유지될 수 있도록 해야 한다.
도 4는 본 발명의 테스크 함수 처리부(130)의 기능을 세부적으로 설명하기 위한 도면이다.
도 4를 참조하면, 테스크 함수 처리부(130)는 무한 루프 식별부(131), 지역 변수 변환부(132), 루프 이전 문장 변경부(133), 루프 제거 및 레이블 추가부(134), 문장 대체부(135), 루프 이후 문장 제거부(136)를 포함한다.
무한 루프 식별부(131)는 프로그램 코드 내에서 무한 루프 부분을 식별한다. 무한 루프 식별은 for, while, do 등과 같은 반복문을 식별하고, 해당 반복문의 조건 문장에 포함되는 조건식을 검사하여 무한 루프를 식별한다. 조건식이 언제나 1(true)인 상수식이면 이는 무한 루프로 판단한다. 예를 들어, for 문의 경우에는 조건식이 없는 경우에도 무한 루프로 판단할 수 있다.
지역 변수 변환부(132)는 지역 변수들을 정적 변수로 변환한다. 전술한 바와 같이, 무한 루프가 제거되더라도 함수가 실행된 후 다음에 수행이 될 때까지 지역 변수 등의 데이터는 유지되어야 한다. 따라서, 해당 지역 변수 등의 데이터를 정적 변수로 변경하여야 한다. 정적 변수로 변환할 때, 초기화에 비 상수식이 존재하는 경우에는 구문 오류가 발생할 수 있으므로 선언과 초기화를 분리하여야 한다.
루프 이전 문장 변경부(133)는 루프 이전의 문장들이 최초 호출 시에만 수행될 수 있도록 if 문으로 변경한다. 루프 이전의 문장들은 테스크가 실행되기 전에 한 번만 수행되어야 한다. 따라서, 함수가 여러번 호출되더라도 루프 이전 문장들은 최초 호출 시에만 수행되어야 한다. 루프 이전 문장들을 if 문으로 변경하고, 최초 수행임을 확인할 수 있는 정적 변수를 하나 추가하면, 이 변수 값으로 if 문의 실행 여부를 결정할 수 있다.
루프 제거 및 레이블 추가부(134)는 식별된 무한 루프에서 무한 루프를 가능하게 하는 for, while, do 등과 같은 조건문을 제거하고 고유 이름을 생성하여 레이블을 제거된 조건문의 시작 위치에 추가한다.
문장 대체부(135)는 반복문에서 강제로 빠져나오게 하거나(break), 해당 반복문을 계속해서 수행하게 하는(continue), break 또는 continue 등의 문장을 특정 위치의 코드로 이동하도록 하는 goto 문장으로 대체한다. 루프를 제거하였으므로, break 또는 continue 등의 문장은 구문에 맞지 않기 때문에, 이러한 문장을 루프 제거 및 레이블 추가부(134)에 의해 추가된 레이블로 가는 goto 문장으로 대체하여야 한다.
루프 이후 문장 제거부(136)는 루프 이후의 문장을 제거하고, 함수 정의 마지막에 레이블을 추가하여 루프 수행 직후에는 추가된 레이블로 이동하도록 하는 goto 문장을 추가한다. 무한 루프 수행시에는 루프 이후의 문장이 수행되지 않는 것을 가정하고 있기 때문에, 원래 프로그램 코드에서 루프 이후의 문장은 수행되지 않아야 한다. 루프 이후 문장 제거부(136)는 함수 정의 마지막에 레이블을 추가하고, 루프 수행 직후에는 해당 레이블로 이동하게 하는 goto 문장을 추가함으로써 루프 이후의 문장이 수행되지 않도록 한다.
하기 예는 테스크 함수 처리부(130)에 의해 코드 변환된 결과를 나타낸다.
(변환 전)
STATUS t_func(int arg)
{
int x=0;
int y=init();
...
if (is_ready()) {
for (;;) {
...
continue;
...
break;
...
}
}
...
}
(변환 후)
STATUS t_func(_int16 arg)
{ /* 지역 변수를 정적 변수로 변경 후 선언 */
static int x;
static int y;
/* 초기화를 위한 임시 변수 */
int x_init;
int y_init;
static int first_execution=1; /* 최초 수행 여부 확인을 위한 변수 추가 */
if (first_execution) {
_int16 x=0;
_int16 y=init(); /* 초기화 분리 */
/* 임시 변수에 초기화된 변수 저장 */
x_init=x;
y_init=y;
}
if (first_execution) {
/* 정적 변수 초기화 */
x=x_init;
y=y_init;
first_execution=0;
}
else {
goto task_loop_start;
}
... /* 루프 이전 문장 */
if (is_ready()) {
task_loop_start: /* 루프 시작 레이블 추가 */
/* for (;;) 제거 */ {
...
/* continue 제거 */ return 0;
...
/* break */ return 0;
}
goto task_loop_end; /* goto 문장으로 대체 */
}
... /* 루프 이후 문장 제거 */
task_loop_end; /* 루프 종료 레이블 */
return 0;
}
어셈블리 코드 처리부(140)
원래의 프로그램 코드는 임베디드 환경에 맞춰져 있는데, 이러한 프로그램 코드 중에는 하드웨어에 의존적인 부분이 존재한다. 임베디드 환경과 호스트 환경에서의 하드웨어적 특성은 서로 다르기 때문에, 하드웨어에 의존적인 어셈블리 코드는 호스트 환경에서 실행 불가능하다.
따라서, 어셈블리 코드 처리부(140)는 프로그램 코드 중 하드웨어에 의존적인 어셈블리 코드를 제거하는 기능을 수행한다.
이에 따라, 하드웨어 의존적인 어셈블리 코드가 포함된 프로그램 코드도 호스트 환경에서 시뮬레이션 가능해진다. 그러나, 하드웨어에 의존적인 어셈블리 코드가 제거된 후의 해당 코드 실행 결과는 달라지게 되므로, 임베디드 환경에서와 동일한 동작을 호스트 환경에서 보장할 수는 없다. 이러한 제약 사항은 검사 대상 프로그램 코드에 포함된 어셈블리 코드의 비중에 따라 차이가 있게 된다. 예를 들어, 하드웨어에 의존적인 어셈블리 코드의 비중이 작을수록 임베디드 환경과 호스트 환경에서의 코드 실행 결과 간 차이가 줄어든다.
어셈블리 코드 처리부(140)는 프로그램 코드 내에 존재하는 다양한 형태의 어셈블리 코드를 인식하여 이를 주석 처리 하거나, 인식된 어셈블리 코드에 대한 수행이 생략되도록 해당 어셈블리 코드를 #if 0 ... #endif 문을 이용하여 제거한다.
하기 예는 어셈블리 코드 처리부(140)에 의해 코드 변환된 결과를 나타낸다.
(변환 전)
_asm(" _a: .RES.B 2");
#pragma asm
.SECTION DATA, DATA, ALIGN=2
.ALIGN 2
.GLOBAL _a
_a: .RES.B 2
#pragma endasm
int counter _asm_("counter_v1")=0;
void check_asm_block(void)
{
asm {add r2, r3, r4; }
}
(변환 후)
/* _asm("_a: .RES. B 2"); */
#if 0
#pragma asm
.SECTION DATA, DATA, ALIGN=2
.ALIGN 2
.GLOBAL _a
_a: .RES.B 2
#pragma endasm
#endif
int counter /* _asm_("counter_v1") */ =0;
void check_asm_block (void)
{
#if 0
asm { add r2, r3, r4; }
#endif
}
하드웨어에 의존적인 어셈블리 코드 부분(#pragma asm ... #pragma endasm)을 #if 0 ... #endif 로 묶어 제거하였다.
정수형 변환부(150)
임베디드 환경에서의 정수형 크기는 호스트 환경에서 다를 수 있다. 예를 들어, int의 타입 크기가 임베디드 환경에서는 2byte인데 호스트 환경에서는 4byte일 수 있다. 이 경우, 프로그램 코드에 sizeof 등의 타입 크기와 관련된 수식이 존재한다면, 그 결과가 임베디드 환경에서와 호스트 환경에서 서로 달라지게 된다. 더군다나, 임베디드 환경에서의 정수형 크기가 더 큰 경우에는, 호스트 환경에서 동일한 정수형에 담을 수 있는 데이터의 범위가 줄어들기 때문에, 오버플로가 발생할 수도 있다. 이는 프로그램의 동작에 영향을 미치게 된다.
따라서, 정수형 변환부(150)는 임베디드 환경에서의 정수형을 호스트 환경에서 동일한 크기를 갖는 정수형으로 변환한다.
도 5는 본 발명의 정수형 변환부(150)의 기능을 세부적으로 설명하기 위한 도면이다.
도 5를 참조하면, 정수형 변환부(150)는 정수형 식별부(151), 정수형 치환부(152)를 포함한다.
정수형 식별부(151)는 프로그램 코드에 포함되는 정수형을 식별한다. 정수형은 하나의 키워드인 int로 표현될 수 있다. 그러나, unsigned short int, unsigned int, unsigned long int 등과 같이 두 개 이상의 키워드로 표현될 수도 있다. 따라서, 정수형 int를 다른 타입으로 변환하는 경우, "int"라는 키워드 만을 식별하는 것으로는 부족하다. 정수형 식별부(151)는 각 변수의 타입 정보를 완전히 분석한 후, 정수형을 식별한다.
정수형 치환부(152)는 프로그램 코드의 정수형을 호스트 환경에서 크기가 동일한 정수형으로 치환한다. 임베디드 환경에서의 정수형과 동일한 크기를 갖는 호스트 환경의 정수형에 대한 정보는 미리 알고 있어야 하며, 그에 대한 정보는 코드 변환 시에 입력으로 제공한다. 정수형 치환부(152)는 이러한 정보를 기초로 하여 프로그램 코드의 정수형을 변환한다. 예를 들어, 임베디드 환경에서의 정수형 int의 크기가 1byte 이면 호스트 환경에서 동일한 크기를 갖는 char로 변환될 수 있다. 또한, 동일하게, int가 2byte 이면 short로 변환되고, 8byte이면 long long 으로 변환될 수 있다.
하기 예는 정수형 변환부(150)에 의해 코드 변환된 결과를 나타낸다.
(변환 전)
unsigned int x;
long int y;
short int signed z;
(변환 후)
unsigned short int x; /* int → short */
long int y;
short int signed z;
임베디드 환경에서의 정수형 unsigned int의 크기가 호스트 환경에서의 정수형 unsigned short int의 크기와 동일한 경우, 상기와 같이 변환될 수 있다.
비표준 언어 항목 변환부(160)
본 발명의 실시예에 따른 비표준 언어 항목 변환부(160)는 비표준 언어들을 표준 항목으로 변환하는 기능을 수행한다. 구체적으로, 하드웨어에 의존적인 코드는 아니지만 다양한 크로스 컴파일러들이 지원하는 언어 확장 요소들을 표준 항목으로 변환한다.
도 6은 본 발명의 비표준 언어 항목 변환부(160)의 기능을 세부적으로 설명하기 위한 도면이다.
도 6을 참조하면, 비표준 언어 항목 변환부(160)는 키워드 처리부(161), 지시자 처리부(162), 삼항 연산자 변환부(163), 전역 변수 중복 정의 처리부(164), 전역 변수의 비 상수식 초기화 처리부(165), 함수 정의 파라미터 처리부(166), 자료형 중복 정의 처리부(167), 주소 지정 선언 처리부(168), 매크로 처리부(169)를 포함한다.
키워드 처리부(161)
키워드 처리부(161)는 호스트 환경에서의 컴파일러 언어 표준(예를 들면, C 표준)에 없는 키워드를 제거한다. 프로그램 코드에 포함되어 있으나 호스트 환경에서의 컴파일러 언어 표준에 없는 키워드는 호스트 환경에서 인식되지 못한다. 따라서, 키워드 처리부(161)는 이러한 비표준 키워드를 인식하여 제거한다. 비표준 키워드 제거에 의해 코드의 의미 유지는 어려워지지만, 대부분의 비표준 키워드가 임베디드 환경에 대한 한정자(qualifier)이므로 이러한 키워드가 무시되어도 전체적인 프로그램 수행에는 큰 영향이 없게 된다.
하기 예는 키워드 처리부(161)에 의해 코드 변환된 결과를 나타낸다.
(변환 전)
volatile @tiny char tiny_ch;
extern @far const int table[100];
void _interrupt ifunc();
void interrupt 2 MyISRfct(void);
(변환 후)
volatile char tiny_ch; /* @tiny 제거 */
extern const int table[100]; /* @far 제거 */
void ifunc(); /* _interrupt 제거 */
void MyISRfct(void); /* interrupt 2 제거 */
지시자 처리부(162)
지시자 처리부(162)는 호스트 환경에서의 컴파일러 언어 표준(예를 들면, C 표준)에 없는 지시자를 선택적으로 제거한다. 호스트 환경에서의 컴파일러 언어 표준에 없는 지시자는 호스트 환경에서 인식되지 못한다. 따라서, 지시자 처리부(162)는 이러한 비표준 지시자를 인식하여 의미대로 처리하거나 해당 지시자를 제거한다. 이러한 지시자 제거에 의해 코드의 의미 유지는 어려워지지만, 대부분의 지시자가 #error와 같은 진단 메시지를 출력하거나 임베디드 환경을 한정하는 코드들이므로 이러한 지시자가 무시되어도 전체적인 프로그램 수행에는 큰 영향이 없게 된다.
하기 예는 지시자 처리부(162)에 의해 코드 변환된 결과를 나타낸다.
(변환 전)
#assert system(unix)
#info "Feature not yet implemented."
#warn "Feature not yet implemented."
(변환 후)
/* #assert system(unix) */
/* #info "Feature not yet implemented." */
/* #warn "Feature not yet implemented." */
지시자 처리부(162)에 의해 호스트 환경에서 인식되지 못하는 지시자들이 전부 제거되었다는 것을 알 수 있다.
삼항 연산자 변환부(163)
삼항 연산자 변환부(163)는 삼항 연산자(x ? y : z) 수식을 Ivalue 로 사용할 수 있도록 처리한다. 이는 호스트 환경에서의 컴파일러가 C 언어를 통해서 이루어지는 경우에 문제된다. 일부 크로스 컴파일러들에서는 삼항 연산자 수식을 Ivalue 로 사용할 수 있도록 허용하는데, C 표준에서는 삼항 연산자(x ? y : z) 수식이 Ivalue로 사용될 수 없다고 명시되어 있다(C 표준 문서 §6.5.15 Conditional Operator 각주 92)A conditional expression does not yield an Ivalue 참조).
삼항 연산자 변환부(163)는 assign 수식(예를 들면, =, -=, +=) 등의 대입 연산자의 우변을 삼항 연산자 내부로 옮긴다. 즉, 삼항 연산자 수식에 있어서, 계산 결과를 나타내는 두번째, 세번째 피연산자에 각각 우변에 있는 값을 할당한다.
이를 위해, 삼항 연산자 변환부(163)는 먼저 대입 연산자 수식의 좌변이 삼항 연산자 수식인지 여부를 판별한다. 삼항 연산자 수식이 인식되면, 삼항 연산자 수식의 두번째, 세번째 피연사자에 삼항 연산자 수식의 우변 수식값을 할당한다. 즉, 삼항 연산자 수식의 두번째, 세번째 피연산자와 우변 수식값을 대입 연산자 수식으로 결합한다.
하기 예는 삼항 연산자 변환부(163)에 의해 코드 변환된 결과를 나타낸다.
(변환 전)
(x ? y : z)=10
(변환 후)
(x ? y=10 : z=10); /* 우변(=10)을 삼항 연산자 안으로 옮김 */
이에 따르면, 호스트 환경(C 컴파일러 환경)에서 삼항 연산자 수식이 Ivalue로 사용되지 않으면서도 그 의미는 유지될 수 있게 된다.
전역 변수 중복 정의 처리부(164)
일부 크로스 컴파일러들은 동일한 전역 변수 정의가 중복해서 나타나는 것을 허용한다. 그러나, 호스트 환경의 컴파일러가 C 언어 기반으로 이루어지는 경우를 예로 들면, 이러한 C 표준에서는 외부 연결(external linkage)을 갖는 정의는 한 번만 나타나야 된다고 명시되어 있다(§6.9 External definitions 참조).
따라서, 본 발명의 실시예에 따른 전역 변수 중복 정의 처리부(164)는 모든 전역 변수 정의들 중 하나만을 정의로 그대로 남기고 나머지는 선언으로 변환한다. 이를 위해 먼저, 전역 변수 정의가 선언이 될 수 있도록 외부 변수(extern)를 추가하고 초기화와 분리한다. 이 코드들은 정의가 되거나 선언이 될 수 있도록 매크로 가드를 이용한다. 전체 번역 단위들 중 하나의 단위에서만 정의가 되고, 나머지 단위에서는 선언이 되도록 매크로 가드를 한 번역단위에서만 정의한다.
하기 예는 전역 변수 중복 정의 처리부(164)에 의해 코드 변환된 결과를 나타낸다.
(변환 전)
sfr ADCIC = 0xFF98;
(변환 후)
#ifdef _ADCIC_IS_DEFINED_ /* 매크로 가드가 정의되어 있으면 선언으로 변환 */
#define _ADCIC_EXTERN_ extern
#define _ADCIC_INIT_(code) /* empty */
#else /* 매크로 가드가 정의되어 있지 않으면 정의 코드 활성화 */
#define _ADCIC_EXTERN_ /* empty */
#define _ADCIC_INIT_(code) code
#endif
_ADCIC_EXTERN_ sfr ADCIC _ADCIC_INIT_(=0xFF98); /* 매크로 가드에 따라 정의가 되거나 선언이 됨 */
전역 변수 비상수식 초기화 처리부(165)
일부 크로스 컴파일러들은 동일한 전역 변수의 초기화에 비상수식을 허용한다. 그러나, 호스트 환경의 컴파일러가 C 언어 기반으로 이루어지는 경우를 예로 들면, 이러한 C 표준에서는 전역 변수의 초기화에 상수식만을 허용한다(§6.7.8 Initialization-All the expressions in an initializer for an object that has static storage duration shall be constant expressions or string literals. 참조).
따라서, 본 발명의 실시예에 따른 전역 변수 비상수식 초기화 처리부(165)는 비상수식이 이용된 초기화를 함수로 분리하고 이 함수를 메인(main) 함수 시작 시 호출하도록 하여 비상수식을 이용한 초기화 부분을 없앤다. 이를 위해, 먼저, 전역 변수의 초기화 부분을 새로운 함수 정의로 분리하고, 메인 함수의 시작 위치에 해당 함수의 호출을 추가한다.
하기 예는 전역 변수 비상수식 초기화 처리부(165)에 의해 코드 변환된 결과를 나타낸다.
(변환 전)
int *const cp=(int*)0x100;
static int *yp=cp+0x100;
(변환 후)
static int *yp=0;
static void init_yp(void) {int *init _yp=cp+0x100; yp=int_yp;};
/* init_yp 함수로 초기화 분리 */
int main()
{
init_yp(); /* main 시작 시 초기화 함수 호출 */
...
}
상기에서 알 수 있는 바와 같이, 초기화는 "0" 이라는 상수값을 이용해서 하고, main 함수 시작 위치에 init_yp 함수를 호출하여 전역 변수에 비상수식을 저장한다.
함수 정의 파라미터 처리부(166)
일부 크로스 컴파일러들은 사용되지 않는 이름 없는 파라미터를 허용한다. 그러나, 호스트 환경의 컴파일러가 C 언어 기반으로 이루어지는 경우를 예로 들면, 이러한 C 표준에서는 함수 정의에 void가 아닌 파라미터 목록에는 반드시 이름이 나와야 한다(§6.9.1 Function definitions - If the declarator includes a parameter type list, the delaration of each paramater shall include an identifier, except for the special case of a parameter list consisting of a single parameter of type void, in which case there shall not be an identifier. 참조).
따라서, 본 발명의 실시예에 따른 함수 정의 파라미터 처리부(166)는 함수 정의 파라미터가 void가 아닐 때, 이름이 명시되어 있지 않은 파라미터에 이름을 생성하여 삽입한다. 이를 위해 먼저, 프로그램 코드에 포함되는 함수 정의 파라미터가 void인지 여부를 검사하고, void가 아니면, 각 파라미터마다 이름이 명시되어 있는지를 검사한다. 그 후, 이름이 명시되어 있지 않다면, 임의의 이름을 생성하여 삽입한다.
하기 예는 함수 정의 파라미터 처리부(166)에 의해 코드 변환된 결과를 나타낸다.
(변환 전)
void function(int, char*, char* X)
{
...
}
(변환 후)
void function(int parameter_0 /* 이름 추가 */, char* parameter_1 /* 이름 추가*/, char* X)
{
...
}
함수 정의 파라미터가 int, char* 등과 같이 void가 아니면서 이름이 명시되어 있지 않은 경우, 해당 파라미터에 "parameter_0", "parameter_1" 과 같은 이름을 생성하여 삽입한다는 것을 알 수 있다.
자료형( typedef ) 중복 정의 처리부(167)
일부 크로스 컴파일러들은 중복 정의를 허용한다. 그러나, 호스트 환경의 컴파일러가 C 언어 기반으로 이루어지는 경우를 예로 들면, 이러한 C 표준에서는 하나의 번역 단위에서 typedef 중복 정의를 허용하지 않는다(§6.7 Declarations - If an identifier has no linkage, there shall be no more than one declaration of the identifier (in a declarator or type specifier) with the same scope and in the same name space, except for tags as specified in 6.7.2.3. 참조).
따라서, 본 발명의 실시예에 따른 자료형 중복 정의 처리부(167)는 하나의 번역 단위에서 하나의 정의만 남기고 나머지에 대해서는 그 이름을 변경하거나 정의 자체를 제거한다.
이를 위해, 자료형 중복 정의 처리부(167)는 먼저 자료형 중복 정의인지를 검사하고, 중복 정의로 판단되는 경우에는 이전 정의와 현재 정의를 모두 매크로 가드를 이용하여 원래 이름 또는 새로운 이름으로 정의되도록 변경한다. 매크로 가드를 이용하는 이유는 동일한 위치의 코드가 서로 다른 번역 단위에서 중복 정의일 수도 있고 아닐 수도 있기 때문이다. 매크로 가드를 이용함으로써 어떠한 경우이더라도 중복 정의를 막을 수 있다.
하기 예는 자료형 중복 정의 처리부(167)에 의해 코드 변환된 결과를 나타낸다.
(변환 전)
/* typedef.h */
typedef int int16_t;
/* file1.c */
#include "typedef.h"
typedef int int16_t; /* typedef.h에 있는 정의와 중복됨 */
/* file2.c */
#include "typedef.h"
int16_t x; /* 동일한 typedef.h 코드이지만 중복 정의 아님 */
(변환 후)
/* typedef.h */
typedef int
#ifndef _TYPEDEF_INT_ /* 매크로 가드 */
#define _TYPEDEF_INT_
int16_t
#else /* _TYPEDEF_INT_ */
unused_int16_t
#endif /* _TYPEDEF_INT_ */
;
/* file1.c */
#include "typedef.h"
typedef int
#ifndef _TYPEDEF_INT_ /* typedef.h 의 매크로 가드에 의해 중복 정의 막음 */
#define _TYPEDEF_INT_
int16_t
#else /* _TYPEDEF_INT_ */
unused_int16_t
#endif /* _TYPEDEF_INT_ */
;
/* file2.c */
#include "typedef.h" /* 중복 정의 아님, int16_t 선언 유효함 */
int16_t x;
상기와 같이 매크로 가드를 이용하여 자료형 중복 정의를 막을 수 있다.
주소 지정 선언 처리부(168)
호스트 환경의 컴파일러가 C 언어 기반으로 이루어지는 경우를 예로 들면, C 표준에 없는 주소 지정 구문은 호스트 환경에서 인식되지 못한다.
따라서, 본 발명의 실시예에 따른 주소 지정 선언 처리부(168)는 직접 주소 처리와 마찬가지로 프로그램 코드에서 주소 지정 코드를 제거한다. 임베디드 환경에서의 주소는 호스트 환경에서 의미가 없기 때문이다. 이를 위해 주소 지정 선언 처리부(168)는 크로스 컴파일러에서 지원하는 특수 구문(예를 들면, @상수식, _at_ 상수식 등)을 인식하여 제거한다.
하기 예는 주소 지정 선언 처리부(168)에 의해 코드 변환된 결과를 나타낸다.
(변환 전)
int glob @0x0500;
static char M _at_(0x14+OFFSET) = 3;
(변환 후)
int glob /* @0x0500 */;
static char M /* _at_(0x14+OFFSET) */ = 3;
매크로 처리부(169)
호스트 환경의 컴파일러가 C 언어 기반으로 이루어지는 경우를 예로 들면, C 표준에 없는 기 정의된 매크로(예를 들면, _func_, _FUNCTION_, _PRETTY_FUNCTION_ 등)는 호스트 환경에서 인식되지 못한다.
따라서, 본 발명의 매크로 처리부(169)는 각 매크로를 미리 정의된 내용으로 치환한다. 예를 들면, 크로스 컴파일러에서 _func_와 _FUNCTION_은 함수 이름 문자열을 의미하고, _PRETTY_FUNCTION_은 함수 시그니처(signiture)를 의미하므로, 각 매크로들을 해당 내용으로 치환한다. 즉, _func_, _FUNCTION_, _PRETTY_FUNCTION_ 등의 매크로를 해당 매크로가 존재하는 위치의 함수 이름으로 치환한다.
하기 예는 매크로 처리부(169)에 의해 코드 변환된 결과를 나타낸다.
(변환 전)
char getch(void)
{
printf(_FUNCTION_ "succeeded\n");
}
(변환 후)
char getch(void)
{
printf("getch" "succeeded\n"); /* _FUNCTION_ 을 "getch"로 치환 */
}
본 발명의 일 실시예에 따른 제어부(170)는 직접 주소 처리부(110), 주소 변수 처리부(120), 테스크(task) 함수 처리부(130), 어셈블리 코드 처리부(140), 정수형(integer type) 변환부(150), 비표준 언어 항목 변환부(160), 제어부(170)를 포함한다. 상기 직접 주소 처리부(110), 주소 변수 처리부(120), 테스크(task) 함수 처리부(130), 어셈블리 코드 처리부(140), 정수형(integer type) 변환부(150), 비표준 언어 항목 변환부(160) 간의 데이터 흐름을 제어하는 기능을 수행할 수 있다. 즉, 본 발명에 따른 제어부(170)는 각 구성요소 간의 데이터의 흐름을 제어하며, 직접 주소 처리부(110), 주소 변수 처리부(120), 테스크(task) 함수 처리부(130), 어셈블리 코드 처리부(140), 정수형(integer type) 변환부(150), 비표준 언어 항목 변환부(160), 제어부(170)를 포함한다. 상기 직접 주소 처리부(110), 주소 변수 처리부(120), 테스크(task) 함수 처리부(130), 어셈블리 코드 처리부(140), 정수형(integer type) 변환부(150), 비표준 언어 항목 변환부(160)에서 각각 고유한 기능을 수행하도록 제어할 수 있다.
본 발명의 실시예에 따르면, 임베디드 환경에서의 의미를 그대로 유지한 채 호스트 환경에서 컴파일러 및 검사가 가능하도록 코드 변환이 이루어질 수 있다.
이상 설명된 본 발명에 따른 실시예들은 다양한 컴퓨터 구성요소를 통하여 수행될 수 있는 프로그램 명령어의 형태로 구현되어 컴퓨터 판독 가능한 기록 매체에 기록될 수 있다. 상기 컴퓨터 판독 가능한 기록 매체는 프로그램 명령어, 데이터 파일, 데이터 구조 등을 단독으로 또는 조합하여 포함할 수 있다. 상기 컴퓨터 판독 가능한 기록 매체에 기록되는 프로그램 명령어는 본 발명을 위하여 특별히 설계되고 구성된 것들이거나 컴퓨터 소프트웨어 분야의 당업자에게 공지되어 사용 가능한 것일 수도 있다. 컴퓨터 판독 가능한 기록 매체의 예에는, 하드 디스크, 플로피 디스크 및 자기 테이프와 같은 자기 매체, CD-ROM, DVD와 같은 광기록 매체, 플롭티컬 디스크(floptical disk)와 같은 자기-광 매체(magneto-optical media), 및 ROM, RAM, 플래시 메모리 등과 같은 프로그램 명령어를 저장하고 수행하도록 특별히 구성된 하드웨어 장치가 포함된다. 프로그램 명령어의 예에는, 컴파일러에 의해 만들어지는 것과 같은 기계어 코드뿐만 아니라 인터프리터 등을 사용해서 컴퓨터에 의해서 실행될 수 있는 고급 언어 코드도 포함된다. 상기 하드웨어 장치는 본 발명에 따른 처리를 수행하기 위해 하나 이상의 소프트웨어 모듈로서 작동하도록 구성될 수 있으며, 그 역도 마찬가지이다.
이상에서 본 발명이 구체적인 구성요소 등과 같은 특정 사항들과 한정된 실시예 및 도면에 의해 설명되었으나, 이는 본 발명의 보다 전반적인 이해를 돕기 위해서 제공된 것일 뿐, 본 발명이 상기 실시예들에 한정되는 것은 아니며, 본 발명이 속하는 기술분야에서 통상적인 지식을 가진 자라면 이러한 기재로부터 다양한 수정 및 변형을 꾀할 수 있다.
따라서, 본 발명의 사상은 상기 설명된 실시예에 국한되어 정해져서는 아니되며, 후술하는 특허청구범위뿐만 아니라 이 특허청구범위와 균등하게 또는 등가적으로 변형된 모든 것들은 본 발명의 사상의 범주에 속한다고 할 것이다.
110: 직접 주소 처리부
120: 주소 변수 처리부
130: 테스크(task) 함수 처리부
140: 어셈블리 코드 처리부
150: 정수형(integer type) 변환부
160: 비표준 언어 항목 변환부
111: 직접 주소 식별부
112: 상수식 계산부
113: 변수 추가부
121: 변환 대상 변수 식별부
122: 주소 변수 추가부
131: 무한 루프 식별부
132: 지역 변수 변환부
133: 루프 이전 문장 변경부
134: 루프 제거 및 레이블 추가부
135: 문장 대체부
136: 루프 이후 문장 제거부
151: 정수형 식별부
152: 정수형 치환부
161: 키워드 처리부
162: 지시자 처리부
163: 삼항 연산자 변환부
164: 전역 변수 중복 정의 처리부
165: 전역 변수의 비 상수식 초기화 처리부
166: 함수 정의 파라미터 처리부
167: 자료형 중복 정의 처리부
168: 주소 지정 선언 처리부
169: 매크로 처리부

Claims (35)

  1. 제1 환경의 프로그램 코드를 제2 환경에서 컴파일 가능한 프로그램 코드로 컨버팅하기 위한 장치로서,
    상기 프로그램 코드에서 참조하는 제1 환경의 주소를, 제2 환경의 주소로 부여하되 변수 형태로 부여하고, 상기 제1 환경의 주소를 참조하는 코드를 상기 변수 형태로 부여된 상기 제2 환경의 주소를 참조하는 코드로 변환하는 직접 주소 처리부;
    상기 프로그램 코드에서 주소로 사용되는 변수들의 목록을 참조하여, 상기 주소로 사용되는 변수들을 포인터 타입의 주소 변수로 변환하는 주소 변수 처리부;
    상기 프로그램 코드에 포함되는 무한 루프를 제거하고 레이블로 대체하는 테스크 함수 처리부;
    상기 제1 환경에서의 하드웨어에 의존적인 코드를 인식하여 제거하는 어셈블리 코드 처리부;
    상기 프로그램 코드에 포함되는 정수형을 상기 제2 환경에서 동일한 크기를 갖는 정수형으로 변환하는 정수형 변환부; 및
    상기 프로그램 코드에 포함되는 비표준 언어 항목을 상기 제2 환경에서의 표준 언어 항목으로 변환하는 비표준 언어 항목 변환부를 포함하는 코드 컨버팅 장치.
  2. 제1항에 있어서,
    상기 직접 주소 처리부는,
    상기 프로그램 코드에서 직접 주소를 식별하는 직접 주소 식별부; 및
    상기 식별된 직접 주소에 해당하는 상기 제2 환경에서의 주소를 부여하기 위한 변수를 추가하고, 상기 직접 주소를 상기 추가된 변수로 치환하는 변수 추가부를 포함하는 코드 컨버팅 장치.
  3. 제2항에 있어서,
    상기 직접 주소 식별부는 상기 프로그램 코드에서 포인터 타입으로 캐스팅된 상수식을 상기 직접 주소로 식별하는 코드 컨버팅 장치.
  4. 제3항에 있어서,
    상기 식별된 직접 주소에서 상수식을 계산하여 최종적으로 접근하려는 주소 값을 파악하는 상수식 계산부를 더 포함하는 코드 컨버팅 장치.
  5. 제2항에 있어서,
    상기 변수 추가부는,
    상기 변수를 전역 변수로 선언하되 하나의 번역 단위에서만 정의하고, 나머지 번역 단위에서는 선언이 되도록 매크로 가드를 삽입하는 코드 컨버팅 장치.
  6. 제1항에 있어서,
    상기 주소 변수 처리부는,
    상기 프로그램 코드에 포함되는 변수 선언 또는 정의에서, 상기 선언 또는 정의된 변수가 상기 목록에 포함되는지 여부를 검사하여 주소로 사용되는 변수인지를 식별하는 변환 대상 변수 식별부; 및
    주소로 사용되는 것으로 식별되는 변수를 포인터 타입의 주소 변수로 치환하는 주소 변수 추가부를 포함하는 코드 컨버팅 장치.
  7. 제6항에 있어서,
    상기 주소 변수의 이름은 상기 식별된 변수가 가리키는 주소의 공간 할당을 위한 변수의 이름과 동일한 코드 컨버팅 장치.
  8. 제1항에 있어서,
    상기 테스크 함수 처리부는,
    상기 프로그램 코드에 포함되는 조건문을 검사하여 무한 루프를 식별하는 무한 루프 식별부;
    상기 식별된 무한 루프가 포함되는 함수에서 지역 변수를 정적 변수로 변환하는 지역 변수 변환부;
    상기 식별된 무한 루프 이전 문장들을 조건문으로 변경하여 상기 함수의 최초 호출시에만 실행되도록 하는 루프 이전 문장 변경부;
    상기 식별된 무한 루프의 조건문을 제거하고 고유 이름을 생성하여 제1 레이블을 상기 제거된 조건문의 시작 위치에 추가하는 루프 제거 및 레이블 추가부;
    상기 무한 루프에 포함되며, 상기 무한 루프에서 강제로 빠져나오게 하거나, 상기 무한 루프를 계속해서 수행하게 하는 문장을, 상기 제1 레이블로 가는 문장으로 대체하는 문장 대체부; 및
    상기 무한 루프 이후 문장을 제거하고, 상기 함수 정의 마지막에 제2 레이블을 추가하여 상기 무한 루프 후에 상기 제2 레이블로 가도록 하는 문장을 추가하는 루프 이후 문장 제거부를 포함하는 코드 컨버팅 장치.
  9. 제8항에 있어서,
    상기 루프 이전 문장 변경부는,
    상기 무한 루프 이전 문장들을 if 문으로 변경하고, 최초 수행임을 확인할 수 있는 정적 변수를 추가하여, 상기 변수의 값을 기초로 상기 if 문장의 실행 여부가 결정되도록 하는 코드 컨버팅 장치.
  10. 제8항에 있어서,
    상기 문장 대체부는,
    break, continue 문장을 goto 문장으로 대체하는 코드 컨버팅 장치.
  11. 제1항에 있어서,
    상기 어셈블리 코드 처리부는,
    상기 하드웨어에 의존적인 코드를 인식하여 주석 처리하거나, #if 0 ... #endif 문으로 제거하는 코드 컨버팅 장치.
  12. 제1항에 있어서,
    상기 비표준 언어 항목 변환부는,
    상기 제2 환경에서의 표준 언어 항목에 포함되지 않는 키워드를 상기 프로그램 코드에서 제거하는 키워드 처리부;
    상기 제2 환경에서의 표준 언어 항목에 포함되지 않는 지시자를 상기 프로그램 코드에서 제거하는 지시자 처리부;
    상기 프로그램 코드에 포함되며 중복되는 모든 전역 변수 정의들 중 하나만 제외하고 나머지는 선언으로 변환하는 전역 변수 중복 정의 처리부;
    상기 프로그램 코드에서 비상수식이 이용된 전역 변수의 초기화를 함수로 분리하고, 상기 분리된 함수가 메인 함수 시작 시에 호출되도록 변환하는 전역 변수의 비 상수식 초기화 처리부;
    상기 프로그램 코드에서 함수 정의에 사용되는 파라미터에 이름을 부여하는 함수 정의 파라미터 처리부;
    상기 프로그램 코드에서 중복되는 자료형 중복 정의에 대해 하나의 번역 단위에서만 상기 자료형 정의를 남기고, 나머지는 이름을 변경하거나 제거하는 자료형 중복 정의 처리부;
    상기 제2 환경에서의 표준 언어 항목에 포함되지 않는 주소 지정 언어를 제거하는 주소 지정 선언 처리부; 및
    상기 제2 환경에서의 표준 언어 항목에 포함되지 않는 기 정의된 매크로를 정의된 내용대로 치환하는 매크로 처리부를 포함하는 코드 컨버팅 장치.
  13. 제12항에 있어서,
    상기 프로그램 코드에 포함되는 삼항 연산자 수식을 변환하되, 상기 삼항 연산자 수식의 대입 연산자 우변을 상기 삼항 연산자의 두번째 및 세번째 연산자에 할당하여 변환하는 삼항 연산자 변환부를 더 포함하는 코드 컨버팅 장치.
  14. 제12항에 있어서,
    상기 전역 변수 중복 정의 처리부는,
    상기 전역 변수 정의가 선언이 되도록 외부 변수를 추가하고, 매크로 가드를 이용하여 하나의 번역 단위에서만 상기 전역 변수가 정의가 되도록 하는 코드 컨버팅 장치.
  15. 제12항에 있어서,
    상기 함수 정의 파라미터 처리부는,
    상기 프로그램 코드에 포함되는 함수 정의 파라미터가 void인지를 검사하고, void가 아니면, 각 파라미터마다 이름이 명시되어 있는지 검사하고, 이름이 명시되어 있지 않으면, 상기 파라미터에 임의의 이름을 생성하여 삽입하는 코드 컨버팅 장치.
  16. 제12항에 있어서,
    상기 제2 환경에서의 표준 언어는 C 언어인 코드 컨버팅 장치.
  17. 제1항 내지 제16항 중 어느 한 항에 있어서,
    상기 제1 환경은 임베디드 환경이고, 상기 제2 환경은 호스트 환경인 코드 컨버팅 장치.
  18. 제1 환경의 프로그램 코드를 제2 환경에서 컴파일 가능한 프로그램 코드로 컨버팅하기 위한 방법으로서,
    상기 프로그램 코드에서 참조하는 제1 환경의 주소를, 제2 환경의 주소로 부여하되 변수 형태로 부여하고, 상기 제1 환경의 주소를 참조하는 코드를 상기 변수 형태로 부여된 상기 제2 환경의 주소를 참조하는 코드로 변환하는 직접 주소 처리 단계;
    상기 프로그램 코드에서 주소로 사용되는 변수들의 목록을 참조하여, 상기 주소로 사용되는 변수들을 포인터 타입의 주소 변수로 변환하는 주소 변수 처리 단계;
    상기 프로그램 코드에 포함되는 무한 루프를 제거하고 레이블로 대체하는 테스크 함수 처리 단계;
    상기 제1 환경에서의 하드웨어에 의존적인 코드를 인식하여 제거하는 어셈블리 코드 처리 단계;
    상기 프로그램 코드에 포함되는 정수형을 상기 제2 환경에서 동일한 크기를 갖는 정수형으로 변환하는 정수형 변환 단계; 및
    상기 프로그램 코드에 포함되는 비표준 언어 항목을 상기 제2 환경에서의 표준 언어 항목으로 변환하는 비표준 언어 항목 변환 단계를 포함하는 코드 컨버팅 방법.
  19. 제18항에 있어서,
    상기 직접 주소 처리 단계는,
    상기 프로그램 코드에서 직접 주소를 식별하는 직접 주소 식별 단계; 및
    상기 식별된 직접 주소에 해당하는 상기 제2 환경에서의 주소를 부여하기 위한 변수를 추가하고, 상기 직접 주소를 상기 추가된 변수로 치환하는 변수 추가 단계를 포함하는 코드 컨버팅 방법.
  20. 제19항에 있어서,
    상기 직접 주소 식별 단계는 상기 프로그램 코드에서 포인터 타입으로 캐스팅된 상수식을 상기 직접 주소로 식별하는 단계를 포함하는 코드 컨버팅 방법.
  21. 제20항에 있어서,
    상기 변수 추가 단계 이전에,
    상기 식별된 직접 주소에서 상수식을 계산하여 최종적으로 접근하려는 주소 값을 파악하는 상수식 계산 단계를 더 포함하는 코드 컨버팅 방법.
  22. 제19항에 있어서,
    상기 변수 추가 단계는,
    상기 변수를 전역 변수로 선언하되 하나의 번역 단위에서만 정의하고, 나머지 번역 단위에서는 선언이 되도록 매크로 가드를 삽입하는 코드 컨버팅 방법.
  23. 제18항에 있어서,
    상기 주소 변수 처리 단계는,
    상기 프로그램 코드에 포함되는 변수 선언 또는 정의에서, 상기 선언 또는 정의된 변수가 상기 목록에 포함되는지 여부를 검사하여 주소로 사용되는 변수인지를 식별하는 변환 대상 변수 식별 단계; 및
    주소로 사용되는 것으로 식별되는 변수를 포인터 타입의 주소 변수로 치환하는 주소 변수 추가 단계를 포함하는 코드 컨버팅 방법.
  24. 제23항에 있어서,
    상기 주소 변수의 이름은 상기 식별된 변수가 가리키는 주소의 공간 할당을 위한 변수의 이름과 동일한 코드 컨버팅 방법.
  25. 제18항에 있어서,
    상기 테스크 함수 처리 단계는,
    상기 프로그램 코드에 포함되는 조건문을 검사하여 무한 루프를 식별하는 무한 루프 식별 단계;
    상기 식별된 무한 루프가 포함되는 함수에서 지역 변수를 정적 변수로 변환하는 지역 변수 변환 단계;
    상기 식별된 무한 루프 이전 문장들을 조건문으로 변경하여 상기 함수의 최초 호출시에만 실행되도록 하는 루프 이전 문장 변경 단계;
    상기 식별된 무한 루프의 조건문을 제거하고 고유 이름을 생성하여 제1 레이블을 상기 제거된 조건문의 시작 위치에 추가하는 루프 제거 및 레이블 추가 단계;
    상기 무한 루프에 포함되며, 상기 무한 루프에서 강제로 빠져나오게 하거나, 상기 무한 루프를 계속해서 수행하게 하는 문장을, 상기 제1 레이블로 가는 문장으로 대체하는 문장 대체 단계; 및
    상기 무한 루프 이후 문장을 제거하고, 상기 함수 정의 마지막에 제2 레이블을 추가하여 상기 무한 루프 후에 상기 제2 레이블로 가도록 하는 문장을 추가하는 루프 이후 문장 제거 단계를 포함하는 코드 컨버팅 방법.
  26. 제25항에 있어서,
    상기 루프 이전 문장 변경 단계는,
    상기 무한 루프 이전 문장들을 if 문으로 변경하고, 최초 수행임을 확인할 수 있는 정적 변수를 추가하여, 상기 변수의 값을 기초로 상기 if 문장의 실행 여부가 결정되도록 하는 단계를 포함하는 코드 컨버팅 방법.
  27. 제25항에 있어서,
    상기 문장 대체 단계는,
    break, continue 문장을 goto 문장으로 대체하는 단계를 포함하는 코드 컨버팅 방법.
  28. 제18항에 있어서,
    상기 어셈블리 코드 처리 단계는,
    상기 하드웨어에 의존적인 코드를 인식하여 주석 처리하거나, #if 0 ... #endif 문으로 제거하는 단계를 포함하는 코드 컨버팅 방법.
  29. 제18항에 있어서,
    상기 비표준 언어 항목 변환 단계는,
    상기 제2 환경에서의 표준 언어 항목에 포함되지 않는 키워드를 상기 프로그램 코드에서 제거하는 키워드 처리 단계;
    상기 제2 환경에서의 표준 언어 항목에 포함되지 않는 지시자를 상기 프로그램 코드에서 제거하는 지시자 처리 단계;
    상기 프로그램 코드에 포함되며 중복되는 모든 전역 변수 정의들 중 하나만 제외하고 나머지는 선언으로 변환하는 전역 변수 중복 정의 처리 단계;
    상기 프로그램 코드에서 비상수식이 이용된 전역 변수의 초기화를 함수로 분리하고, 상기 분리된 함수가 메인 함수 시작 시에 호출되도록 변환하는 전역 변수의 비 상수식 초기화 처리 단계;
    상기 프로그램 코드에서 함수 정의에 사용되는 파라미터에 이름을 부여하는 함수 정의 파라미터 처리 단계;
    상기 프로그램 코드에서 중복되는 자료형 중복 정의에 대해 하나의 번역 단위에서만 상기 자료형 정의를 남기고, 나머지는 이름을 변경하거나 제거하는 자료형 중복 정의 처리 단계;
    상기 제2 환경에서의 표준 언어 항목에 포함되지 않는 주소 지정 언어를 제거하는 주소 지정 선언 처리 단계; 및
    상기 제2 환경에서의 표준 언어 항목에 포함되지 않는 기 정의된 매크로를 정의된 내용대로 치환하는 매크로 처리 단계를 포함하는 코드 컨버팅 방법.
  30. 제29항에 있어서,
    상기 프로그램 코드에 포함되는 삼항 연산자 수식을 변환하되, 상기 삼항 연산자 수식의 대입 연산자 우변을 상기 삼항 연산자의 두번째 및 세번째 연산자에 할당하여 변환하는 삼항 연산자 변환 단계를 더 포함하는 코드 컨버팅 방법.
  31. 제29항에 있어서,
    상기 전역 변수 중복 정의 처리 단계는,
    상기 전역 변수 정의가 선언이 되도록 외부 변수를 추가하고, 매크로 가드를 이용하여 하나의 번역 단위에서만 상기 전역 변수가 정의가 되도록 하는 단계를 포함하는 코드 컨버팅 방법.
  32. 제29항에 있어서,
    상기 함수 정의 파라미터 처리 단계는,
    상기 프로그램 코드에 포함되는 함수 정의 파라미터가 void인지를 검사하는 단계;
    void가 아닌 것으로 판단된 파라미터마다 이름이 명시되어 있는지 검사하는 단계; 및
    이름이 명시되어 있지 않은 것으로 판단된 파라미터에 임의의 이름을 생성하여 삽입하는 단계를 포함하는 코드 컨버팅 방법.
  33. 제29항에 있어서,
    상기 제2 환경에서의 표준 언어는 C 언어인 코드 컨버팅 방법.
  34. 제18항 내지 제33항 중 어느 한 항에 있어서,
    상기 제1 환경은 임베디드 환경이고, 상기 제2 환경은 호스트 환경인 코드 컨버팅 방법.
  35. 제18항 내지 제33항 중 어느 한 항에 따른 방법을 실행하기 위한 컴퓨터 프로그램을 기록하기 위한 컴퓨터 판독 가능한 기록 매체.
KR1020110039912A 2011-04-28 2011-04-28 코드 컨버팅 장치, 방법 및 컴퓨터 판독 가능한 기록 매체 KR101219535B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020110039912A KR101219535B1 (ko) 2011-04-28 2011-04-28 코드 컨버팅 장치, 방법 및 컴퓨터 판독 가능한 기록 매체

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020110039912A KR101219535B1 (ko) 2011-04-28 2011-04-28 코드 컨버팅 장치, 방법 및 컴퓨터 판독 가능한 기록 매체

Publications (2)

Publication Number Publication Date
KR20120121978A KR20120121978A (ko) 2012-11-07
KR101219535B1 true KR101219535B1 (ko) 2013-01-10

Family

ID=47508305

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020110039912A KR101219535B1 (ko) 2011-04-28 2011-04-28 코드 컨버팅 장치, 방법 및 컴퓨터 판독 가능한 기록 매체

Country Status (1)

Country Link
KR (1) KR101219535B1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2018237329A1 (en) * 2017-06-23 2018-12-27 Ge Aviation Systems Llc GENERATION OF SCRIPTS THAT FACILITATE THE EXECUTION OF TASKS IN DIFFERENT EXECUTION ENVIRONMENTS THAT USE DIFFERENT LANGUAGES AND DIFFERENT SYNTAXES

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101632027B1 (ko) * 2014-11-11 2016-06-20 포트리스이노베이션 주식회사 주석기반의 의사코드를 이용한 프로그램 변환 방법 및 그 방법을 구현하기 위한 프로그램이 기록된 컴퓨터 판독 가능한 기록매체
JP6950635B2 (ja) * 2018-07-03 2021-10-13 オムロン株式会社 コンパイル装置およびコンパイル方法
CN117406996B (zh) * 2023-10-20 2024-04-16 北京市辰至半导体科技有限公司 硬件描述代码的语义分析方法及装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20050111100A (ko) * 2004-05-21 2005-11-24 대덕대학산학협력단 임베디드 리눅스 교육용 통합개발환경툴이 수록된 저장매체
KR20070058954A (ko) * 2005-12-05 2007-06-11 한국전자통신연구원 임베디드 시스템 프로토타입 개발 지원 장치 및 방법
KR20090092617A (ko) * 2008-02-27 2009-09-01 삼성전자주식회사 프로세서 및 컴파일 방법

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20050111100A (ko) * 2004-05-21 2005-11-24 대덕대학산학협력단 임베디드 리눅스 교육용 통합개발환경툴이 수록된 저장매체
KR20070058954A (ko) * 2005-12-05 2007-06-11 한국전자통신연구원 임베디드 시스템 프로토타입 개발 지원 장치 및 방법
KR20090092617A (ko) * 2008-02-27 2009-09-01 삼성전자주식회사 프로세서 및 컴파일 방법

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2018237329A1 (en) * 2017-06-23 2018-12-27 Ge Aviation Systems Llc GENERATION OF SCRIPTS THAT FACILITATE THE EXECUTION OF TASKS IN DIFFERENT EXECUTION ENVIRONMENTS THAT USE DIFFERENT LANGUAGES AND DIFFERENT SYNTAXES
US10884906B2 (en) 2017-06-23 2021-01-05 Ge Aviation Systems Llc Generating scripts that facilitate execution of tasks within different run-time environments that utilize different languages and syntax

Also Published As

Publication number Publication date
KR20120121978A (ko) 2012-11-07

Similar Documents

Publication Publication Date Title
EP1636701B1 (en) An intermediate representation for multiple exception handling models
US5854932A (en) Compiler and method for avoiding unnecessary recompilation
US7493610B1 (en) Versioning optimization for dynamically-typed languages
JP6780020B2 (ja) データコンパイル方法、装置、電子端末及びコンピュータ読み取り可能な記憶媒体
US20080222616A1 (en) Software translation
US8863101B2 (en) Compiler generator
US6738966B1 (en) Compiling device, computer-readable recording medium on which a compiling program is recorded and a compiling method
KR101219535B1 (ko) 코드 컨버팅 장치, 방법 및 컴퓨터 판독 가능한 기록 매체
CN112905447B (zh) 一种区块链虚拟机的测试方法和系统
KR101875225B1 (ko) 가상 머신에 의한 실행을 위한 프로그래밍의 중간 코드의 보안 프로세스, 컴퓨터 프로그램 및 장치
KR102209151B1 (ko) 바이너리 취약점 패치 방법 및 장치
US20230367569A1 (en) Method of generating a representation of a program logic, decompilation apparatus, recompilation system and computer program products
US20110202906A1 (en) Compiling method and compiling program
US8843908B2 (en) Compiler validation via program verification
WO2004092953A2 (en) Regenerating header files out of preprocessed and afterwards modified source files
US20060064681A1 (en) Method and system for verifying makefile accuracy
KR20090011974A (ko) 컴파일 대상 파일 추출 방법
GB2342200A (en) Initializing global registers
CN117235746B (zh) 一种基于多维ast融合检测的源代码安全管控平台
CN113326048B (zh) 浮点数计算精度处理方法、系统、介质及设备
JP5343840B2 (ja) プログラムの解析装置及び解析方法
Negrini A hybrid approach for automatic recognition of C++ objects in optimized binaries
Auler et al. Automatic Architecture Description Language (ADL)-based toolchain generation: the dynamic linking framework
Al-Saffar et al. AUTOMATIC DETECTING AND REMOVAL DUPLICATE CODES CLONES
Inführ AST interpreter for CASM

Legal Events

Date Code Title Description
A201 Request for examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20151224

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20161117

Year of fee payment: 5

LAPS Lapse due to unpaid annual fee