KR102276696B1 - 집적 회로 무선장치 - Google Patents
집적 회로 무선장치 Download PDFInfo
- Publication number
- KR102276696B1 KR102276696B1 KR1020167019910A KR20167019910A KR102276696B1 KR 102276696 B1 KR102276696 B1 KR 102276696B1 KR 1020167019910 A KR1020167019910 A KR 1020167019910A KR 20167019910 A KR20167019910 A KR 20167019910A KR 102276696 B1 KR102276696 B1 KR 102276696B1
- Authority
- KR
- South Korea
- Prior art keywords
- software application
- interrupt
- firmware module
- logic
- processor
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/20—Handling requests for interconnection or transfer for access to input/output bus
- G06F13/24—Handling requests for interconnection or transfer for access to input/output bus using interrupt
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4812—Task transfer initiation or dispatching by interrupt, e.g. masked
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/20—Handling requests for interconnection or transfer for access to input/output bus
- G06F13/24—Handling requests for interconnection or transfer for access to input/output bus using interrupt
- G06F13/26—Handling requests for interconnection or transfer for access to input/output bus using interrupt with priority control
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Mobile Radio Communication Systems (AREA)
Abstract
집적 회로 무선 통신 장치(1)는 하드웨어 인터럽트 입력 라인을 갖는 프로세서(7), 메모리(13), 무선 통신 로직(17), 및 인터럽트 인터페이스 로직(8)을 포함한다. 메모리(13)는 펌웨어 모듈(23)을 포함하고, 펌웨어 모듈은 (i) 사전 결정된 무선 프로토콜에 따라 무선 통신 로직(17)을 제어하기 위한 명령어(31), 및 (ii) 펌웨어 모듈(23) 내의 무선 통신 함수의 식별을 수신하고 식별된 무선 통신 함수를 호출하기 위한 명령어를 포함하는 인터럽트 루틴을 포함한다. 인터럽트 인터페이스 로직(8)은 장치(1) 상에서 실행되는 소프트웨어(27)에 의해 생성되는 신호를 수신하기 위한 입력 로직, 및 입력 로직에서 소프트웨어 생성 신호를 수신하는 것에 응답하여 프로세서(7)의 하드웨어 인터럽트 입력 라인을 어써트하도록 구성되는 출력 로직을 포함한다. 장치(1)는 프로세서(7)의 하드웨어 인터럽트 입력 라인의 어써트에 응답하여 인터럽트 루틴을 호출하도록 구성된다.
Description
본 발명은 집적 회로 무선 통신 장치 및 그러한 장치를 구성하는 방법에 관한 것이다.
집적 회로 무선 통신 장치는 통상적으로 단일 칩 상에 프로세서, 메모리 및 무선 통신 로직을 집적한다. 안테나가 실리콘 상에 제조될 수 있거나, 외부적으로 접속될 수 있다. 장치는 통상적으로 장치를 전원, 클럭 소스 및 임의의 외부 주변장치, 예로서 센서, 타이머, 디지털/아날로그 컨버터 및 출력 장치에 접속하기 위한 핀을 가질 것이다. 프로세서는 무선 통신 로직과 인터페이스하여 장치에 의한 무선 메시지의 송신 및/또는 수신을 관리한다.
그러한 무선 통신 장치는 광범위한 무선 제품, 예로서 무선 마우스 및 키보드, 게임 콘솔용 제어기, 자전거 속도계, 원격 제어기, 차고 문 개방기, 무선 확성기 등에서 사용될 수 있다.
그러한 장치 상의 프로세서는 장치 상의 비휘발성 메모리에 저장된 소프트웨어를 실행하여, Bluetooth™ 또는 ZigBee™와 같은 사전 결정된 무선 프로토콜에 따라 무선 통신 로직을 제어할 수 있다.
무선 마우스와 같은 완전한 제품은 통상적으로 개별 무선 칩 제조자로부터 무선 통신 칩을 받는 제품 제조자에 의해 조립된다. 칩 제조자는 제품 제조자가 무선 장치를 위한 맞춤형 소프트웨어 애플리케이션을 개발, 설치 및 디버깅하는 것을 가능하게 하는 크로스 컴파일러, 로더, 디버거 및 문서와 같은 도구를 포함하는 개발 키트도 제공할 수 있다. 맞춤형 애플리케이션 소프트웨어는 예로서 무선 마우스 상의 움직임 센서로부터 입력을 수신하고 원하는 통신 프로토콜에 따라 적절한 무선 메시지를 관련 USB 동글(dongle)로 전송하기 위한 루틴을 포함할 수 있다.
제품 제조자가 칩 상의 무선 로직과 직접 인터페이스하는 것을 요구하지 않고서, 칩 제조자는 통상적으로 칩과 함께 개발 키트를 제공할 것이다. 개발 키트는 무선 로직을 제어하기 위한, 예로서 Bluetooth Low Energy™와 같은 특정 무선 프로토콜을 구현하기 위한 함수를 포함하는, 칩 제조자에 의해 작성된 소프트웨어 라이브러리 또는 운영 체제에 대한 소스 코드를 포함할 수 있다. 이것은 메모리 관리, 프로세서 스케줄링, 프로세스간 통신 등을 위한 함수와 같은 다른 함수도 포함할 수 있다. 애플리케이션 개발자는 이러한 제공되는 함수를 스크래치로부터 작성할 필요 없이 그의 애플리케이션 코드로부터 호출할 수 있다. 이것은 애플리케이션 소프트웨어의 개발이 더 간단하고 더 빨라지게 한다. 이것은 또한 무선 장치의 상이한 모델 간의 이식성을 촉진할 수 있다.
제품 제조자는 통상적으로 칩 제조자로부터의 소스 코드를 컴파일링하여 그 자신의 맞춤형 소프트웨어 애플리케이션과 링킹함으로써 각각의 장치의 메모리 내의 사전 결정된 어드레스로 로딩하기 위한 단일 이진 이미지 파일을 생성할 것이다.
그러나, 본 출원인은 그러한 전통적인 접근법이 개선될 수 있다는 것을 깨닫게 되었다.
일 양태에서, 본 발명은 집적 회로 무선 통신 장치를 구성하는 방법으로서,
장치는 메모리, 무선 통신 로직, 인터럽트 인터페이스 로직, 및 하드웨어 인터럽트 입력 라인을 갖는 프로세서를 포함하고,
인터럽트 인터페이스 로직은 장치 상에서 실행되는 소프트웨어에 의해 생성되는 신호를 수신하기 위한 입력 로직, 및 입력 로직에서 소프트웨어 생성 신호를 수신하는 것에 응답하여 프로세서의 하드웨어 인터럽트 입력 라인을 어써트하도록 구성되는 출력 로직을 포함하고,
메모리는 펌웨어 모듈을 포함하고, 펌웨어 모듈은 (i) 사전 결정된 무선 프로토콜에 따라 무선 통신 로직을 제어하기 위한 명령어, 및 (ii) 펌웨어 모듈 내의 무선 통신 함수의 식별을 수신하고 식별된 무선 통신 함수를 호출하기 위한 명령어를 포함하는 인터럽트 루틴을 포함하고,
장치는 프로세서의 하드웨어 인터럽트 입력 라인의 어써트에 응답하여 인터럽트 루틴을 호출하도록 구성되고,
방법은 소프트웨어 애플리케이션을 장치의 메모리 내로 로딩하는 단계를 포함하고, 소프트웨어 애플리케이션은 (i) 인터럽트 인터페이스 로직이 프로세서의 하드웨어 인터럽트 입력 라인을 어써트하게 하기 위해 인터럽트 인터페이스 로직에 대한 신호를 생성함으로써 그리고 (ii) 인터럽트 루틴으로 호출될 무선 통신 함수를 식별함으로써 펌웨어 모듈 내의 무선 통신 함수를 호출하기 위한 명령어를 포함하는 방법을 제공한다.
따라서, 이 분야의 기술자는, 본 발명에 따르면, 소프트웨어 애플리케이션이 하드웨어 인터럽트를 통해 펌웨어 모듈로부터 무선 통신 함수를 호출하는 무선 통신 장치 상에 로딩될 수 있다는 것을 알 것이다.
이러한 메커니즘은 소프트웨어 애플리케이션 개발자가 소프트웨어 애플리케이션 코드를 장치 제조자에 의해 제공되는 라이브러리 또는 운영 체제와 링킹할 필요성을 제거한다. 소프트웨어 애플리케이션 개발자는 무선 통신 함수를 호출하는 코드를 작성하기 위해 무선 통신 함수가 메모리 내의 어느 곳에 위치하는지를 알 필요가 없다. 이것은 개발 프로세스가 더 안정되고, 더 간단하고, 더 안전해지게 할 수 있다.
바람직한 실시예에서, 펌웨어 모듈은 사전 링크된 이진 이미지 또는 모듈이다. 바람직하게, 펌웨어 모듈과 소프트웨어 애플리케이션 사이의 어떠한 링킹도 발생하지 않는다. 펌웨어 모듈은 통상적으로 컴파일링된 이진 이미지(예로서, C 프로그래밍 언어로부터 컴파일링됨)일 것이 상상되지만, 그의 일부 또는 전부가 기계 코드로부터 직접 어셈블링될 수 있는 것이 가능하다.
펌웨어 모듈과 소프트웨어 애플리케이션 간의 링크 시간 종속에 대한 필요성을 제거함으로써, 소프트웨어 애플리케이션의 개발 동안 버그가 발생할 기회가 감소할 수 있다. 소프트웨어 애플리케이션의 개발 동안 펌웨어 모듈을 계속 리컴파일링 또는 리링킹할 필요가 없다. 이러한 연속성은 버그 발생을 방지할 수 있고, 버그가 발생하는 경우에 디버깅 프로세스를 도울 수도 있다.
비교적 적은 정보가 장치 개발자에 의해 소프트웨어 애플리케이션의 개발자에게 제공되면 된다. 소프트웨어 애플리케이션을 개발하기 위해, 애플리케이션 개발자는 아래에서 더 상세히 설명되는 바와 같이 호출될 무선 통신 함수를 식별하기 위한 메커니즘에 관한 상세, 예로서 RAM 내의 사전 결정된 위치, 또는 소프트웨어 애플리케이션 내에 콜백 함수를 배치할 어드레스, 및 임의의 함수 식별자 및 가능한 함수 파라미터의 상세를 제공받을 수 있다. 애플리케이션 개발자는 소프트웨어 애플리케이션이 로딩되어야 하는 사전 결정된 소프트웨어 메모리 어드레스를 제공받을 수 있다. 애플리케이션 개발자는 소프트웨어 애플리케이션을 위해 이용될 수 있는 메모리의 양(예로서, 코드 공간 및/또는 데이터 공간)에 관한 정보도 제공받을 수 있다. 적어도 일부 실시예에서, 이러한 정보는 (프로세서 또는 장치 아키텍처의 표준 상세에 더하여) 애플리케이션 개발자가 장치를 위한 소프트웨어 애플리케이션을 작성, 컴파일링 및 로딩하기에 충분할 수 있다.
애플리케이션 개발자는 편리하게 이러한 정보의 일부 또는 전부를 포함하는 (예로서, C 프로그래밍 언어에서의) 헤더 파일 또는 소스 파일을 제공받을 수 있다. (그러한 헤더 또는 소스 파일은 물론 옵션으로서 애플리케이션 개발자에게 추가 지원을 제공하기 위한 다른 추가적인 특징을 포함할 수 있다.)
이것은 장치 제조자가 무선 통신 함수를 위한 임의의 객체 파일 또는 소스 코드를 소프트웨어 애플리케이션 개발자에게 제공할 필요성을 방지한다. 이것은 애플리케이션 개발자에게 알릴 필요없이 펌웨어 모듈 내의 함수의 내용 및 위치를 변경할 수 있는 장치 제조자의 버전 제어를 간소화할 수 있다.
이것은 또한 장치 제조자가 그의 펌웨어 모듈을 위한 비밀 소스 코드를 애플리케이션 개발자에게 노출할 필요가 없다는 것을 의미한다.
집적 회로 장치를 장치 상에 사전 로딩된 펌웨어 모듈과 함께 소프트웨어 애플리케이션의 개발자에게 제공함으로써, 특히 장치가 펌웨어 모듈의 무허가 판독을 방지하는 메모리 보호를 포함하는 경우에 객체 코드에 액세스하는 것을 더 어렵게 함으로써 펌웨어 모듈 내에 포함된 임의의 비밀 정보의 보안이 향상될 수 있다.
펌웨어 모듈이 소프트웨어 애플리케이션에 링킹될 필요가 없으므로, 장치가 최종 사용자에 의해 소유된 후에도 펌웨어 모듈 및 소프트웨어 애플리케이션 중 하나 또는 다른 하나를 (예로서, 갱신된 버전으로) 대체하는 것이 가능할 수 있다.
추가 양태에서, 본 발명은 집적 회로 무선 통신 장치로서,
하드웨어 인터럽트 입력 라인을 갖는 프로세서와,
메모리와,
무선 통신 로직과,
인터럽트 인터페이스 로직
를 포함하고,
메모리는 펌웨어 모듈을 포함하고, 펌웨어 모듈은 (i) 사전 결정된 무선 프로토콜에 따라 무선 통신 로직을 제어하기 위한 명령어, 및 (ii) 펌웨어 모듈 내의 무선 통신 함수의 식별을 수신하고 식별된 무선 통신 함수를 호출하기 위한 명령어를 포함하는 인터럽트 루틴을 포함하고,
인터럽트 인터페이스 로직은 장치 상에서 실행되는 소프트웨어에 의해 생성되는 신호를 수신하기 위한 입력 로직, 및 입력 로직에서 소프트웨어 생성 신호를 수신하는 것에 응답하여 프로세서의 하드웨어 인터럽트 입력 라인을 어써트하도록 구성되는 출력 로직을 포함하고,
장치는 프로세서의 하드웨어 인터럽트 입력 라인의 어써트에 응답하여 인터럽트 루틴을 호출하도록 구성되는 장치를 제공한다.
소프트웨어 애플리케이션이 그러한 장치의 메모리 내에 로딩될 수 있고, 이어서 인터럽트 인터페이스 로직에 대한 신호를 생성함으로써 그리고 인터럽트 루틴에 대해 무선 통신 함수를 식별함으로써 무선 통신 함수를 호출할 수 있다.
따라서, 일부 실시예에서, 메모리는 인터럽트 인터페이스 로직이 프로세서의 하드웨어 인터럽트 입력 라인을 어써트하게 하기 위해 인터럽트 인터페이스 로직에 대한 신호를 생성함으로써 그리고 인터럽트 루틴으로 호출될 무선 통신 함수를 식별함으로써 펌웨어 모듈 내의 무선 통신 함수를 호출하기 위한 명령어를 포함하는 소프트웨어 애플리케이션을 더 포함한다.
펌웨어 모듈은 판독 및/또는 기록 제한이 적용되는 메모리의 영역 내에 포함될 수 있다. 펌웨어 모듈은 ROM 내에 배치될 수 있다. 그러나, 더 바람직하게, 펌웨어 모듈은 장치 상에서 실행되는 비특권 코드에 의해 판독 및/또는 기록될 수 없는 비휘발성 메모리(예로서, EEPROM 또는 플래시)의 영역 내에 배치된다. 판독 보호는 비밀 보호를 더 향상시킬 수 있다. 기록 보호는 펌웨어 모듈이 장치 상에 로딩된 후에 (예로서, 소프트웨어 애플리케이션 내의 버그로 인한) 펌웨어 모듈의 우발적인 또는 악의적인 손상의 위험을 줄일 수 있다.
그러나, 애플리케이션 개발자는 펌웨어 모듈을 이진 이미지로서 제공받을 수 있으며, 제조 프로세스 동안 펌웨어 모듈 및 임의의 소프트웨어 애플리케이션 양자를 장치 상에 로딩하는 것도 가능하다. 이것은 여전히 소스 코드를 애플리케이션 개발자에게 제공하는 것보다 장치 제조자에게 더 안전할 수 있다. 이것은 또한 애플리케이션 개발자가 펌웨어 모듈을 컴파일링하여 소프트웨어 애플리케이션에 링킹할 필요성을 없앨 수 있다.
따라서, 추가 양태에서, 본 발명은 집적 회로 무선 통신 장치를 구성하는 방법으로서,
장치는 메모리, 무선 통신 로직, 인터럽트 인터페이스 로직, 및 하드웨어 인터럽트 입력 라인을 갖는 프로세서를 포함하고,
인터럽트 인터페이스 로직은 장치 상에서 실행되는 소프트웨어에 의해 생성되는 신호를 수신하기 위한 입력 로직, 및 입력 로직에서 소프트웨어 생성 신호를 수신하는 것에 응답하여 프로세서의 하드웨어 인터럽트 입력 라인을 어써트하도록 구성되는 출력 로직을 포함하고,
장치는 프로세서의 하드웨어 인터럽트 입력 라인의 어써트에 응답하여 인터럽트 루틴을 호출하도록 구성되고,
방법은
펌웨어 모듈을 장치의 메모리 내로 로딩하는 단계와 - 펌웨어 모듈은 (i) 사전 결정된 무선 프로토콜에 따라 무선 통신 로직을 제어하기 위한 명령어, 및 (ii) 펌웨어 모듈 내의 무선 통신 함수의 식별을 수신하고 식별된 무선 통신 함수를 호출하기 위한 명령어를 포함하는 인터럽트 루틴을 포함함 -,
소프트웨어 애플리케이션을 장치의 메모리 내로 로딩하는 단계 - 소프트웨어 애플리케이션은 인터럽트 인터페이스 로직이 프로세서의 하드웨어 인터럽트 입력 라인을 어써트하게 하기 위해 인터럽트 인터페이스 로직에 대한 신호를 생성함으로써 그리고 인터럽트 루틴으로 호출될 무선 통신 함수를 식별함으로써 펌웨어 모듈 내의 무선 통신 함수를 호출하기 위한 명령어를 포함함 -
를 포함하는 방법을 제공한다.
펌웨어 모듈 및 소프트웨어 애플리케이션은 임의의 순서로 또는 실질적으로 동시에 장치 내로 로딩될 수 있다. 2개를 동시에 로딩하는 것은 단일의 링크된 소프트웨어 애플리케이션 및 라이브러리를 (예로서, 단일 이진 이미지 파일로서) 로딩하는 것과 여전히 기본적으로 다르다는 것을 알 것이다.
펌웨어 모듈은 사절 결정된 펌웨어 메모리 어드레스로 바람직하게 로딩된다. 소프트웨어 애플리케이션은 사전 결정된 애플리케이션 메모리 어드레스로 바람직하게 로딩된다.
본 발명의 모든 양태에서, 펌웨어 모듈은 바람직하게 컴파일링 및 링크된 이진 이미지이다. 유사하게, 소프트웨어 애플리케이션은 바람직하게 컴파일링 및 링크된 이진 이미지이다. 펌웨어 모듈 및 소프트웨어 애플리케이션은 바람직하게 서로 링킹되지 않는다. 펌웨어 모듈은 바람직하게 (아래에서 더 상세히 설명되는, 예로서 무선 통신 함수 파라미터를 펌웨어 모듈로 전달하기 위한 소프트웨어 애플리케이션 내의 하나 이상의 콜백 함수의 어드레스를 제외하고는) 소프트웨어 애플리케이션에 관한 어떠한 메모리 어드레스 데이터도 포함하지 않는다. 소프트웨어 애플리케이션은 바람직하게 펌웨어 모듈에 관한 어떠한 메모리 어드레스 데이터도 포함하지 않는다. 그러나, 일부 실시예에서, 소프트웨어 애플리케이션은 예로서 콜백 함수를 등록하기 위해 또는 데이터를 함수 파라미터로서 전달하기 위해 펌웨어 모듈 내의 하나 이상의 함수 진입점의 어드레스를 포함할 수 있는 것이 가능하지만, 그럼에도, 소프트웨어 애플리케이션은 바람직하게 펌웨어 모듈 내의 임의의 무선 통신 함수의 어드레스를 포함하지 않는다.
본 발명의 실시예의 추가 장점은 프로세서가 복수의 인터럽트 우선순위를 지원할 때 발생한다. 무선 통신 함수가 인터럽트를 통해 호출되므로, 무선 통신 함수가 그의 호출을 유발하는 함수보다 높은 우선순위로 실행되는 것이 가능하다.
프로세서는 임의의 형태를 취할 수 있지만, 일부 바람직한 실시예에서 ARM™에 의해 설계된 프로세서이며, ARM™ Cortex™-M 패밀리(예로서, Cortex™-M0)로부터의 프로세서일 수 있다. 인터럽트 인터페이스 로직은 바람직하게 프로세서로부터 물리적으로 그리고/또는 로직적으로 분리된다. 이것은 바람직하게 프로세서에 의해 사용되지 않는 로직 게이트를 포함한다.
인터럽트 인터페이스 로직의 입력 로직은 바람직하게 프로세서가 사전 결정된 메모리 어드레스 또는 레지스터, 예로서 인터럽트 인터페이스 로직과 관련된 레지스터, 또는 RAM 내의 사전 결정된 위치에 기록하는 것에 응답하여 신호를 검출하도록 구성된다. 입력 로직은 사전 결정된 위치의 데이터 비트 또는 다른 값이 값을 변경할 때 신호를 검출하도록 구성될 수 있다. 이것은 위치를 모니터링하거나 간격을 두고 폴링하여 프로세서에 의해 유발되는 변화를 검출하도록 구성될 수 있다.
입력 로직은 바람직하게 신호가 하나 이상의 표준 프로세서 명령어; 예로서 ARM™ Thumb 명령어 세트(예로서, ARMv7-M Thumb 명령어 세트)로부터의 명령어에 의해 생성될 수 있는 방식으로 신호를 검출하도록 구성된다. 이것은 표준 프로세서 코어가 수정 없이 장치에서 사용되는 것을 가능하게 하며, 이는 추가적인 엔지니어링 노력을 줄이는 데 매우 바람직하다. 일부 바람직한 실시예에서, 소프트웨어는 (예로서, STORE 또는 MOVE 명령어를 이용하여) 사전 결정된 메모리 위치에 값을 기록하도록 장치의 프로세서에 명령함으로써 신호를 생성할 수 있다. 소프트웨어 애플리케이션은 어떠한 시스템 호출 또는 관리자 호출도 포함할 필요가 없지만, 여전히 소프트웨어 애플리케이션이 실행되는 것보다 높은 우선순위 레벨 및/또는 특권 레벨에서 무선 통신 함수를 호출할 수 있다.
장치는 복수의 프로세서, 예로서 2개 이상의 프로세서를 포함할 수 있다. 일부 실시예에서, 제1 프로세서 상에서 실행되는 소프트웨어가 인터럽트 인터페이스 로직에 대한 신호를 생성할 수 있는 반면, 인터럽트 인터페이스 로직의 출력 로직은 제1 프로세서와 다른 제2 프로세서의 하드웨어 인터럽트 입력 라인을 어써트하도록 구성될 수 있다. 다른 실시예에서는, 단일 프로세서만이 존재할 수 있다.
인터럽트 루틴은 하나 이상의 개별 함수 또는 서브루틴을 호출할 수 있다. 일부 실시예에서, 그러한 함수 또는 서브루틴은 인터럽트 루틴의 요소인 것으로 간주될 수 있거나, 그와 별개인 것으로 간주될 수 있다. 일부 실시예에서, 인터럽트 루틴은 예로서 후술하는 바와 같이 콜백 함수를 호출함으로써 소프트웨어 애플리케이션 내의 명령어를 호출하거나 그로 점프할 수 있다. 인터럽트 루틴 또는 그의 일부는 특정 메모리 어드레스에 위치할 수 있고, 이 메모리 어드레스는 장치 상의 인터럽트 벡터 테이블 내에 저장될 수 있으며, 따라서 프로세서는 하드웨어 인터럽트 입력 라인의 어써트에 응답하여 인터럽트 루틴으로 직접 점프한다. 대안으로서, 인터럽트 루틴은 예로서 ROM 내의 또는 펌웨어 모듈로부터 분리된 부트-로더 또는 다른 이진 모듈 내의 인터럽트 핸들러에 의해 간접적으로 호출될 수 있다.
소프트웨어 애플리케이션은 임의의 적절한 메커니즘을 이용하여, 호출될 무선 통신 함수를 인터럽트 루틴에 대해 식별할 수 있다. 일부 실시예에서, 소프트웨어 애플리케이션은 인터럽트 인터페이스 로직에 대한 신호를 생성하기 전에 무선 통신 함수를 식별할 수 있으며; 다른 실시예에서는 신호를 생성한 후에 그렇게 할 수 있다.
바람직하게, 소프트웨어 애플리케이션은 호출될 무선 통신 함수를 식별하는 함수 식별자를 인터럽트 루틴으로 전달한다. 함수 식별자는 임의의 적절한 형태를 취할 수 있으며; 예로서 이진수, 텍스트 스트링, 메모리 어드레스, 또는 사전 결정된 대응 또는 맵핑에 따라 펌웨어 모듈 내의 무선 통신 함수를 고유하게 식별하는 다른 값을 포함할 수 있다. 펌웨어 모듈 내의 복수의 무선 통신 함수가 상이한 각각의 함수 식별자와 관련될 수 있다. 애플리케이션 개발자는 (예로서, 작성된 문서 내에서 또는 헤더 파일 내에서) 무선 통신 함수와 함수 식별자 간의 관련성을 제공받아, 소프트웨어 애플리케이션을 개발할 때 사용할 수 있다.
한 세트의 실시예에서, 소프트웨어 애플리케이션은 함수 식별자를 장치 내의 공유 메모리 위치, 예로서 프로세서 레지스터 또는 다른 하드웨어 레지스터, 또는 (예로서, RAM 내의) 메모리 어드레스에 기록함으로써 함수 식별자를 인터럽트 루틴으로 전달한다. 이어서, 인터럽트 루틴은 공유 메모리 위치로부터 함수 식별자를 판독하고, 그 함수 식별자와 관련된 무선 통신 함수를 호출할 수 있다. 이러한 관련성은 (예로서, 컴파일링된 스위치 문장으로서) 인터럽트 루틴 내로 컴파일링될 수 있거나, 탐색표와 같은 데이터 객체로서 저장될 수 있으며, 인터럽트 루틴은 데이터 객체를 판독하여, 수신된 함수 식별자와 관련된 무선 통신 함수의 어드레스를 결정할 수 있다.
추가 공유 메모리 위치는 소프트웨어 애플리케이션이 파라미터를 식별된 무선 통신 함수로 직접 또는 인터럽트 루틴을 통해 간접적으로 전달하는 것을 가능하게 할 수 있다. 따라서, 소프트웨어 애플리케이션은 하나 이상의 파라미터를 하나 이상의 공유 메모리 위치에 기록하기 위한 명령어를 포함할 수 있으며, 인터럽트 루틴 또는 무선 통신 함수는 하나 이상의 공유 메모리 위치로부터 하나 이상의 파라미터를 판독하기 위한 명령어를 포함할 수 있다.
각각의 그러한 공유 메모리 위치에 대한 어드레스는 펌웨어 모듈 및 소프트웨어 애플리케이션 양자 내에 하드코딩될 수 있거나, 펌웨어 모듈 및 소프트웨어 애플리케이션 중 하나 또는 다른 하나 내에(예로서, 단지 펌웨어 모듈 내에) 하드코딩되고, 스택을 통해, 예로서 상이한 공유 메모리 위치에 저장함으로써 다른 하나로 전달될 수 있다. 예로서, 양 컴포넌트 내에 하드코딩된 단일 공유 메모리 위치는 위치 어드레스를 단일 공유 메모리 위치에 기록함으로써 복수의 추가 공유 메모리 위치를 전달하는 데 사용될 수 있다. 이것은 소프트웨어 애플리케이션을 지원하는 데 필요한 메모리 레이아웃에 대한 제약을 최소화함으로써 장치 제조자의 유연성을 증가시킬 수 있다. 메모리 위치가 소프트웨어 애플리케이션 내에 하드코딩되는 경우, 이것은 애플리케이션 개발자에게 메모리 위치를 포함하는 헤더 파일을 제공함으로써 달성될 수 있다.
다른 세트의 실시예에서, 소프트웨어 애플리케이션은 함수 식별자를 호출 스택 상의 인터럽트 루틴으로 전달한다. 소프트웨어 애플리케이션은 함수 식별자를 스택 상으로 푸시할 수 있으며, 인터럽트 루틴은 스택으로부터 함수 식별자를 판독할 수 있다. 인터럽트 루틴은 소프트웨어 애플리케이션에 의해 생성되는 신호에 의해서만(즉, 펌웨어 모듈 또는 임의의 다른 소프트웨어 컴포넌트로부터가 아님) 호출 가능할 수 있으며, 이는 인터럽트 루틴으로의 진입 시의 호출 스택의 상태가 예측 가능한 것을 보증하는 데 도움이 될 수 있고; 이것은 인터럽트 루틴이 스택 상의 어느 곳에서 함수 식별자를 발견할지를 미리 아는 것을 가능하게 한다. 소프트웨어 애플리케이션은 또한 무선 통신 함수에 대한 파라미터를 스택에 기록함으로써 그를 인터럽트 루틴으로 전달할 수 있다. 인터럽트 루틴은 스택으로부터 그러한 파라미터를 판독하고, 그를 무선 통신 함수로 전달하도록 구성될 수 있다. 인터럽트 루틴은 필요에 따라 파라미터를 재구성하거나 달리 처리할 수 있다. 이것은 무선 통신 함수를 호출하기 전에 파라미터의 일부 또는 전부를 스택 상으로 다시 푸시할 수 있다.
이러한 세트의 실시예는 임의의 RAM 또는 프로그램 메모리 위치가 소프트웨어 애플리케이션과 펌웨어 모듈 사이에 공유되는 것을 필요로 하지 않고(그러나 이것이 배제되지는 않음) 소프트웨어 애플리케이션이 펌웨어 모듈 내의 함수를 호출하는 것을 가능하게 할 수 있으므로 특히 유리하다.
일부 실시예에서, 펌웨어 모듈은 소프트웨어 애플리케이션 내의 콜백 함수의 어드레스를 포함할 수 있다. 본 명세서에서 "콜백"이라는 용어는 소프트웨어 애플리케이션이 인터럽트를 통해 펌웨어 모듈로 제어를 전달한 후에 펌웨어 모듈이 소프트웨어 애플리케이션으로부터 호출할 수 있는 임의의 함수를 설명하는 데 사용되며; 함수에 대한 포인터가 동적으로 펌웨어 모듈로 전달되는 것은 필수적이지 않다. 예로서, 어드레스는 애플리케이션 개발자에게 제공되었을 수 있으며, 애플리케이션 개발자는 소프트웨어 애플리케이션이 장치 상에 로딩될 때 콜백 함수가 사전 결정된 어드레스에 배치되는 방식으로 (예로서 적절한 링커 지령을 이용하여) 소프트웨어 애플리케이션을 컴파일링 및/또는 링킹할 수 있다. 대안으로서, 소프트웨어 애플리케이션은 콜백 함수의 어드레스를 펌웨어 모듈로 전달할 수 있다. 소프트웨어 애플리케이션은 전술한 바와 같이 어드레스를 공유 메모리 위치에 기록함으로써 또는 스택 상으로 전달함으로써 이것을 행할 수 있거나, 펌웨어 모듈은 소프트웨어 애플리케이션이 콜백 함수의 어드레스를 전달할 수 있는 사전 결정된 어드레스에 콜백 등록 함수를 포함할 수 있으며; 이 경우에, 콜백 등록 함수의 어드레스는 예로서 소프트웨어 애플리케이션을 링킹할 때 사용될 스터브의 형태로 소프트웨어 애플리케이션의 개발자에게 제공될 수 있다. 하나의 콜백 등록 함수의 어드레스를 애플리케이션 개발자에게 제공하는 것은 모든 무선 통신 함수의 어드레스를 제공하는 것보다 여전히 바람직할 수 있는데, 그 이유는 그것이 여전히 나중에 펌웨어 모듈 내에 무선 통신 함수를 재배치하기 위한 펌웨어 개발자의 자유를 허용하기 때문이다.
인터럽트 루틴은 함수 식별자 및/또는 무선 통신 함수 파라미터를 인터럽트 루틴에 제공할 수 있는 소프트웨어 애플리케이션 내의 함수(예로서, 콜백 함수)를 호출하도록 구성될 수 있다. 이것은 인터럽트 루틴이 하나 이상의 메모리 어드레스(예로서, 포인터)를 콜백 함수로 전달함으로써 그리고 콜백 함수가 함수 식별자 및/또는 파라미터를 메모리 어드레스에 기록함으로써 달성될 수 있다. 이어서, 인터럽트 루틴은 어드레스에서 데이터에 액세스하여 함수 식별자 및/또는 파라미터를 결정할 수 있다. 이것은 무선 통신 함수를 호출하기 전에 파라미터의 일부 또는 전부를 스택 상으로 다시 푸시할 수 있다. 콜백을 이용하여 파라미터를 인출하는 것은 팩킹된 구조를 이용하여 메모리 위치를 타입으로 파싱해야 하는 대신에 함수 프로토타입으로의 정규 "C" 언어 파라미터 포맷팅을 가능하게 할 수 있다. 따라서, 이러한 접근법은 파라미터를 사전 결정된 공유 메모리 위치 내로 또는 스택 상으로 전달하는 것에 비해 코딩이 더 쉬워지게 할 수 있다.
함수를 호출하고 함수로부터 복귀하는 개념이 어떻게 구현되는지는 프로세서의 아키텍처에 의존한다는 것을 알 것이다. 일부 실시예에서는 프로세서가 특정 호출 및/또는 복귀 명령어를 지원할 수 있는 반면, 다른 실시예에서는 상이한 제어 흐름 및/또는 스택 동작을 이용하여 이러한 상위 레벨 개념을 구현할 수 있다.
임의의 전술한 양태의 바람직한 실시예에서, 펌웨어 모듈은 펌웨어 모듈에 의해 소프트웨어 애플리케이션에 제공되는 모든 무선 통신 함수가 인터럽트 인터페이스 로직에 대한 신호를 생성함으로써 호출될 수 있도록 구성된다. 이러한 방식으로, 펌웨어 무선 함수를 호출하기 위한 어떠한 다른 메커니즘도 펌웨어 모듈 또는 장치에 의해 지원될 필요가 없으며, 따라서 실질적인 정적 또는 실행시간 링크 종속이 방지되고, 장치, 및 소프트웨어 애플리케이션 개발이 간소화된다.
펌웨어 모듈은 소프트웨어 애플리케이션이 호출할 수 있는, 무선 통신과 반드시 관련되지는 않은 다른 기능, 예로서 암호화 알고리즘을 제공할 수 있다는 것을 알 것이다. 바람직하게, 장치는 소프트웨어 애플리케이션에 의한 모든 그러한 함수의 호출이 인터럽트 인터페이스 로직에 대한 신호를 생성함으로써 수행되도록 구성된다.
장치의 실시예는 전통적인 완전한 운영 체제를 포함할 필요가 없으므로, 애플리케이션 개발자는 장치 제조자에 의해 제공되는 독점 운영 체제와 인터페이스하기 위한 방법을 학습할 필요 없이 소프트웨어 애플리케이션을 프로세서 아키텍처를 위한 고유 애플리케이션으로서 자유롭게 개발할 수 있다. 이것은 특히 프로세서가 이 분야에 공지된 때 애플리케이션 개발자에게 특히 매력적인 특징이다.
장치가 펌웨어 모듈에 더하여 하드웨어 추상 계층을 갖는 경우, 소프트웨어 애플리케이션은 이 계층과 직접 인터페이스할 수 있다. 애플리케이션 고유 드라이버도 장치 상으로 로딩될 수 있다.
장치를 구성하는 것은 소프트웨어 애플리케이션을 컴파일링할 때 무선 통신 함수 식별자와 무선 통신 함수 간의 대응을 이용하는 것을 포함할 수 있다. 소프트웨어 애플리케이션을 컴파일링 또는 로딩하는 것은 사전 결정된 소프트웨어 애플리케이션 메모리 어드레스를 이용할 수 있다. 일부 실시예에서, 장치를 구성하는 것은 관리자 호출 번호와 무선 통신 함수 간의 대응을 수신하는 것 및/또는 사전 결정된 소프트웨어 애플리케이션 메모리 어드레스를 예로서 헤더 파일로서 수신하는 것을 포함할 수 있다. 이어서, 그러한 정보는 소프트웨어 애플리케이션을 컴파일링할 때 사용될 수 있다.
프로세서는 바람직하게 복수의 인터럽트 우선순위를 지원한다. 일부 실시예에서, 펌웨어 모듈 내의 일부 함수는 상대적으로 높은 우선순위를 할당받는 반면, 다른 함수는 상대적으로 낮은 우선순위를 할당받는다. 바람직하게, 시간 임계 무선 통신 동작과 관련된 함수는 상대적으로 높은 우선순위를 할당받는다.
바람직한 실시예에서, 소프트웨어 애플리케이션은 펌웨어 모듈이 소프트웨어 애플리케이션 내의 함수를 그가 어디에 위치하는지를 사전에 알지 않고도 호출하는 것을 가능하게 하는 벡터 테이블을 포함한다. 펌웨어 모듈은 바람직하게 펌웨어 모듈이 인터럽트를 수신하는 것에 응답하여 소프트웨어 애플리케이션 내의 함수를 호출하도록 구성된다. 그러한 인터럽트는 예로서 움직임 센서와 같은 주변장치로부터 발생할 수 있다. 펌웨어 모듈은 장치가 무선 데이터 패킷을 수신하는 것에 응답하여 소프트웨어 애플리케이션 내의 함수를 호출하도록 구성될 수 있다.
소프트웨어 애플리케이션은 바람직하게 아래에서 더 상세히 설명되는 바와 같이 펌웨어 모듈에 의해 전달되는 인터럽트를 처리하도록 구성된다.
소프트웨어 애플리케이션은 일부 이벤트 구동 함수를 상대적으로 높은 우선순위로 실행하고, 소정의 다른 함수를 상대적으로 낮은 우선순위로 실행할 수 있다. 소프트웨어 애플리케이션에 의해 사용되는 우선순위 레벨은 바람직하게 펌웨어 모듈에 의해 사용되는 우선순위 레벨과 인터리빙된다. 최고 펌웨어 우선순위 레벨은 바람직하게 최고 소프트웨어 애플리케이션 우선순위 레벨보다 높으며, 따라서 펌웨어 모듈에서 구현되는 임계 무선 통신 동작은 항상 소프트웨어 애플리케이션에 우선할 수 있다. 이것은 소프트웨어 애플리케이션에서의 부주의한 프로그래밍에 대한 보호를 제공할 수 있다.
펌웨어 모듈 및 소프트웨어 애플리케이션은 각자 각각의 인터럽트 벡터 테이블을 가질 수 있다. 2개의 표는 바람직하게 서로 동일한 인터럽트 벡터 어드레스 오프셋을 사용한다. 펌웨어 모듈의 벡터 테이블(따라서, 2개의 표가 동일한 오프셋을 사용할 때, 소프트웨어 애플리케이션의 벡터 테이블) 내의 인터럽트 벡터 어드레스의 오프셋은 통상적으로 프로세서 아키텍처에 의해 고정된다. 장치는 바람직하게 인터럽트를 처리할 때 펌웨어 모듈의 벡터 테이블을 (즉, 시스템 인터럽트 벡터 테이블로서) 사용하도록 구성된다.
그러나, 펌웨어 모듈은 바람직하게 펌웨어 모듈 자신이 처리하도록 프로그래밍되지 않은 모든 인터럽트가 소프트웨어 애플리케이션으로 전달되도록 구성된다. 이것은 펌웨어 모듈이 특정 인터럽트를 처리하도록 구성되지 않을 때마다 실행이 소프트웨어 애플리케이션의 벡터 테이블 내의 대응하는 오프셋 내에 포함된 어드레스로 분기되게 함으로써 펌웨어 모듈 내에서 구현될 수 있다. 이것은 소프트웨어 애플리케이션이 사전 결정된 메모리 어드레스로 로딩될 때 가능한데, 이는 이것이 펌웨어 모듈로 하여금 소프트웨어 애플리케이션이 장치 상으로 로딩되면 소프트웨어 애플리케이션의 벡터 테이블을 어디에서 발견할지를 사전에 아는 것을 가능하게 하기 때문이다.
예로서, 일부 실시예에서, RESET 인터럽트 핸들러 어드레스는 항상 컴파일러에 의해 오프셋 = 0에 배치된다. 따라서, 펌웨어 모듈의 벡터 테이블 내의 RESET 핸들러 어드레스는 메모리 내의 어드레스 0x0000 0000 + 0 = 0x0000 0000에 있을 것이다. 소프트웨어 애플리케이션의 벡터 테이블 내의 RESET 핸들러 어드레스는 어드레스 CLENR0 + 0 = CLENR0에 있으며, 여기서 CLENR0는 소프트웨어 애플리케이션이 위치하는 기본 메모리 어드레스이다.
인터럽트 전달 메커니즘은 편리하게 소프트웨어 애플리케이션이 어떠한 펌웨어 모듈도 장치 상에 존재하지 않는 것과 실질적으로 동일한 방식으로 하드웨어 인터럽트를 처리하도록 프로그래밍되는 것을 가능하게 한다. 펌웨어 모듈 및 그의 컴파일링은 인터럽트의 수신의 목적을 위해 소프트웨어 애플리케이션의 개발자에게 보이지 않을 수 있다. 인터럽트 전달은 바람직하게 직접 하드웨어 인터럽트에 비해 약 30개의 명령어보다 적거나 약 3 마이크로초보다 적은 지연을 추가하는 방식으로 구현된다.
일부 실시예에서, 펌웨어 모듈은 펌웨어 모듈을 실질적으로 디스에이블링하기 위한 메커니즘을 포함한다. 그러한 디스에이블링은 (바람직하게 인터럽트 인터페이스 로직 메커니즘을 이용하여) 펌웨어 모듈에 대한 호출을 통해 수행될 수 있다. 펌웨어 모듈의 디스에이블링은 펌웨어 모듈이 프로토콜 스택을 재설정하고, (존재할 경우에) 임의의 메모리 보호를 디스에이블링하여 자원을 소프트웨어 애플리케이션에 다시 제공하게 할 수 있다. 디스에이블링될 때, 펌웨어 모듈은 바람직하게 모든 인터럽트를 (심지어는 그 자신이 달리 처리했을 수 있는 것도) 소프트웨어 애플리케이션으로 전달한다.
프로세서는 바람직하게 하나의 인터럽트 우선순위 레벨로부터 다른 인터럽트 우선순위 레벨로의 중단없는 전이를 지원한다. 이것은 때때로 테일-체이닝으로 지칭된다. 이것은 필요시에 시간 임계 무선 통신 함수가 우선하게 하기 위해 소프트웨어 애플리케이션과 펌웨어 모듈 사이에서(그리고 그 반대로) 제어를 전달하는 정밀한 수단을 제공한다.
장치는 바람직하게 메모리 액세스 명령어를 인터셉트하도록 구성되는 메모리 보호 로직을 포함한다. 이러한 로직은 프로세서와 메모리 사이에 배치될 수 있다. 이것은 메모리 액세스 명령어의 위치(즉, 프로세서가 명령어를 판독한 곳)를 이용하여 액세스를 허용할지를 결정할 수 있다. 메모리 보호 로직은 바람직하게 소프트웨어 애플리케이션이 펌웨어 모듈을 판독 및/또는 겹쳐쓰기하는 것을 방지하도록 구성된다.
그러한 메모리 보호는 펌웨어 모듈 내의 민감한 정보가 소프트웨어 애플리케이션의 개발자에 의해 판독되는 것을 방지하는 이익을 제공할 수 있다. 이것은 또한 소프트웨어 애플리케이션에서의 프로그래밍 에러로부터의 잠재적 손상을 최소화하는 것은 물론, 소프트웨어 애플리케이션에서의 버그의 검출 및 정정을 도울 수 있다. 메모리 보호 로직은 펌웨어 모듈과 관련된 RAM이 소프트웨어 애플리케이션에 의해 판독 및/또는 기록되는 것을 방지하도록 구성될 수 있다.
프로세서, 메모리 및 무선 통신 로직은 바람직하게 단일 반도체 층, 예로서 실리콘 칩 상에 통합된다. 그러나, 그들은 대안으로서 다층 모듈 내에 통합될 수 있다.
메모리는 바람직하게 EEPROM 또는 플래시와 같은 비휘발성 메모리이다. 이것은 바람직하게 랜덤 액세스 판독을 지원하며, 따라서 펌웨어 모듈 및 소프트웨어 애플리케이션이 메모리로부터 직접 실행될 수 있다.
기술자는 장치가 통상적으로 RAM과 같은 휘발성 메모리도 포함할 것이라는 것을 알 것이다. 이것은 하나 이상의 주변장치를 더 포함할 수 있다. 이것은 전력 및 클럭 신호를 수신하기 위한 접속을 가질 수 있다. 이것은 안테나를 위한 접속을 가질 수 있다. 이것은 직렬 접속과 같은 하나 이상의 입력 및/또는 출력 인터페이스를 가질 수 있다.
본 명세서에서 설명되는 하나의 양태 또는 실시예의 옵션인 또는 바람직한 특징은 적절한 어느 경우에나 임의의 다른 양태 또는 실시예에 적용될 수 있다.
이제, 본 발명의 소정의 바람직한 실시예가 첨부 도면을 참조하여 단지 예시적으로 설명된다. 도면에서:
도 1은 본 발명을 구현하는 마이크로컨트롤러의 개략도이다.
도 2는 마이크로컨트롤러 아키텍처 내의 주요 소프트웨어 컴포넌트를 나타내는 개략도이다.
도 3은 마이크로컨트롤러에 대한 개략적인 메모리 맵이다.
도 4는 상이한 프로세서 인터럽트 우선순위 레벨의 비유 도면이다.
도 5a-5c는 다양한 인터럽트 시나리오를 나타내는 비유 도면이다.
도 6은 펌웨어 모듈 내의 함수를 호출하는 소프트웨어 애플리케이션을 나타내는 소스 코드 요소의 비유 도면이다.
도 7은 시스템 호출을 이용하여 내부 함수를 호출하는 소프트웨어 애플리케이션을 나타내는 소스 코드 요소의 비유 도면이다.
도 8은 하드웨어 인터럽트를 수신하는 소프트웨어 애플리케이션을 나타내는 소스 코드 요소의 비유 도면이다.
도 9는 통신 함수를 호출하기 위한 대안 메커니즘을 나타내는 비유 도면이다.
도 10은 통신 함수를 호출하기 위한 다른 대안 메커니즘을 나타내는 비유 도면이다.
도 11은 통신 함수를 호출하기 위한 또 다른 대안 메커니즘을 나타내는 비유 도면이다.
도 1은 본 발명을 구현하는 마이크로컨트롤러의 개략도이다.
도 2는 마이크로컨트롤러 아키텍처 내의 주요 소프트웨어 컴포넌트를 나타내는 개략도이다.
도 3은 마이크로컨트롤러에 대한 개략적인 메모리 맵이다.
도 4는 상이한 프로세서 인터럽트 우선순위 레벨의 비유 도면이다.
도 5a-5c는 다양한 인터럽트 시나리오를 나타내는 비유 도면이다.
도 6은 펌웨어 모듈 내의 함수를 호출하는 소프트웨어 애플리케이션을 나타내는 소스 코드 요소의 비유 도면이다.
도 7은 시스템 호출을 이용하여 내부 함수를 호출하는 소프트웨어 애플리케이션을 나타내는 소스 코드 요소의 비유 도면이다.
도 8은 하드웨어 인터럽트를 수신하는 소프트웨어 애플리케이션을 나타내는 소스 코드 요소의 비유 도면이다.
도 9는 통신 함수를 호출하기 위한 대안 메커니즘을 나타내는 비유 도면이다.
도 10은 통신 함수를 호출하기 위한 다른 대안 메커니즘을 나타내는 비유 도면이다.
도 11은 통신 함수를 호출하기 위한 또 다른 대안 메커니즘을 나타내는 비유 도면이다.
도 1은 때때로 무선-온-칩으로 알려진 집적 회로 마이크로컨트롤러(1)를 나타낸다. 이것은 저항기-커패시터 발진기를 포함할 수 있고/있거나 오프칩 수정 발진기(도시되지 않음)로부터 입력을 수신할 수 있는 클럭 로직(3), 전력 관리 회로(5), 프로세서(7)(예로서, ARM™ Cortex™-M0), 인터럽트 인터페이스 로직(8), 메모리 보호 로직(9), RAM(11), 비휘발성 플래시 메모리(13), 하나 이상의 주변장치(15), 무선 통신 로직(17) 및 입출력 회로(19)를 포함한다.
프로세서(7), RAM(11) 및 플래시 메모리(13)는 통상적인 방식으로, 예로서 라인 및 버스(도시되지 않음)를 이용하여 상호접속된다. 메모리 보호 로직(9)는 프로세서(7)로부터 RAM(11) 및 플래시 메모리(13)로의 명령어를 인터셉트하도록 배치된다. 인터럽트 인터페이스 로직(8)는 프로세서(7)의 여분의 하드웨어 인터럽트 입력에 그리고 메모리 버스에 접속된다. 제품 내에 설치될 때, 마이크로컨트롤러(1)는 전원, 무선 안테나, 수정 발진기, 커패시터, 센서, 오디오/비주얼 출력 장치 등(도시되지 않음)과 같은 다수의 외부 컴포넌트에 접속될 수 있다.
도 2는 소프트웨어 아키텍처의 주요 컴포넌트를 나타낸다. 이들은 ARM™ Cortex™ 마이크로컨트롤러 소프트웨어 인터페이스 표준과 같은 옵션인 하드웨어 추상 계층(21), 펌웨어 모듈(23), 드라이버(25) 및 소프트웨어 애플리케이션(27)을 포함한다. 드라이버(25)는 소프트웨어 애플리케이션(27)에 전용화될 수 있다.
펌웨어 모듈(23)은 다수의 내장 소프트웨어 블록을 포함하는 링크된 이진 애플리케이션이다. 무선 프로토콜 블록(31)이 Bluetooth Low Energy™과 같은 하나 이상의 무선 프로토콜 스택을 구현한다. 라이브러리(35)가 난수 생성, 인터럽트 및 우선순위의 구성, (예로서, 주변장치의 인에이블링 및 디스에이블링을 위한) 전력 관리, 암호화 함수 등과 같은 공유 하드웨어 자원 관리 및 함수를 제공한다. 펌웨어 관리자(37)가 펌웨어 모듈의 인에이블링 및 디스에이블링, 및 무선 프로토콜 스택의 인에이블링 및 디스에이블링을 지원한다.
펌웨어 모듈(23)은 시스템 벡터 테이블을 소유하며, 모든 재설정 후의 진입점이다.
펌웨어 모듈(23)에 대한 애플리케이션 프로그래밍 인터페이스(API)(29)는 소프트웨어 애플리케이션(27)이 펌웨어 모듈(23) 내의 함수를 호출하는 것을 가능하게 한다. 이것은 인터럽트 인터페이스 로직(8)에 대한 신호를 이용하여 완전히 구현된다. 각각의 펌웨어 함수는 고유 함수 번호와 관련된다. 이러한 맵핑은 함수가 올바르게 호출되는 것을 가능하게 하기 위해 소프트웨어 애플리케이션(27)의 개발자에게 제공될 수 있다. 그의 내용은 펌웨어 모듈(23) 및 소프트웨어 애플리케이션(27) 각각이 컴파일링될 때 이들 양자 내에 통합될 수 있다. RAM(11) 내의 사전 결정된 공유 어드레스가 소프트웨어 애플리케이션(27)에 의해 기록될 수 있고, 펌웨어 모듈(23)에 의해 판독될 수 있다. 이러한 어드레스의 사용은 소프트웨어 애플리케이션(27)이 함수 번호를 펌웨어 모듈(23)로 전달하는 것을 가능하게 한다.
펌웨어 모듈(23)은 소프트웨어 인터럽트를 이용하여 이벤트를 소프트웨어 애플리케이션(27)으로 통신할 수 있으며, 그의 내용은 소프트웨어 애플리케이션(27)에 의해 판독(폴링)될 때까지 버퍼링된다. 판독은 API 호출(예로서, event_get())를 통해 행해진다.
소프트웨어 애플리케이션(27)은 예로서 애플리케이션 고유 드라이버(25)를 이용하여 마이크로컨트롤러(1) 하드웨어에 직접 또는 하드웨어 추상 계층(21)을 통해 액세스할 수 있는 것에 더하여, 펌웨어 모듈(23)을 이용하여 하드웨어를 간접적으로 이용할 수 있다.
도 3은 RAM(11) 및 플래시(13)가 펌웨어 모듈(23)과 (임의의 애플리케이션 고유 드라이버(25)를 포함하는) 소프트웨어 애플리케이션(27) 사이에서 어떻게 공유되는지를 나타낸다. ARM™ Cortex™-M0 프로세서(7)를 사용할 때, 플래시(13)는 0(0x0000 0000)으로부터 위로 그의 용량 SizeOfProgMem까지의 어드레스를 할당받으며, RAM(11)은 0x2000 0000으로부터 위로 (0x2000 0000 + SizeOfRAM)까지의 어드레스를 할당받는다. 물론, 다른 실시예에서는 다른 어드레스 값이 사용될 수 있다.
플래시(13)는 어드레스 CLENR0(코드 길이 영역 0)의 양쪽에 2개의 상이한 영역을 포함한다. 0과 CLENR0 사이의 영역 0은 펌웨어 모듈(23)이 위치하는 곳이다. 그의 인터럽트 벡터 테이블은 어드레스 0에 저장된다. CLENR0으로부터 위로 연장하는 영역 1은 소프트웨어 애플리케이션(27)이 위치하는 곳이다. 이것도 어드레스 CLENR0에 인터럽트 벡터 테이블을 가지며, 그의 목적은 아래에서 설명된다. 장치(1)는 구성 정보 또는 플래그의 저장과 같은 다른 목적을 위해 사용될 수 있는 다른 비휘발성 메모리(도시되지 않음)를 가질 수 있다는 것을 알 것이다.
RAM(11)은 유사하게 기본 어드레스 0x2000 000으로부터 RLENR0까지의 영역 0 및 RLENR0으로부터 위로 연장하는 영역 1을 갖는다. RAM 영역 0은 펌웨어 모듈(23)을 위한 데이터 저장소를 제공하는 반면, RAM 영역 1은 소프트웨어 애플리케이션(27)을 위한 데이터 저장소를 제공한다. 호출 스택이 펌웨어 모듈(23)과 소프트웨어 애플리케이션(27) 사이에 공유되며, 예로서 0x2000 0000 + SizeOfRAM으로부터 아래로 연장한다. 호출 스택에 할당되는 메모리는 소프트웨어 애플리케이션(27) 및 펌웨어 모듈(23) 양자의 요구에 충분할 만큼 커야 한다. 사전 결정된 공유 메모리 어드레스는 RAM(11)의 영역 1 내에 있을 수 있거나, RAM(11) 내의, 영역 0 및 1 밖의 다른 곳에 위치할 수 있다.
펌웨어 모듈(23) 호출 스택 사용 요구는 장치 제조자에 의해 장치(1)에 대해 공개될 수 있다. 이어서, 소프트웨어 애플리케이션(27)의 개발자는 초기 스택 포인터를 정의하고, 펌웨어 모듈(23) 및 그의 소프트웨어 애플리케이션(27) 양자에 대해 충분한 스택 메모리를 예약해야 한다. 펌웨어 모듈(23)은 재설정 시에 주요 스택 포인터를 초기화할 것이다.
메모리 보호 로직(9)는 프로세서(7)로부터 플래시(13) 및 RAM(11)으로의 모든 메모리 액세스 요청(예로서, 판독 요청)을 인터셉트하도록 구성된다. 이것은 액세스 요청 명령어의 소스(예로서, 요청이 펌웨어 모듈(23)로부터 또는 소프트웨어 애플리케이션(27)으로부터 온 것인지)를 결정한다. 이것은 또한 다양한 소스에 대한 각각의 액세스 허가를 지정하고 그에 따라 액세스 요청을 허가 또는 거절하는 (예로서, 하나 이상의 전용 레지스터에 저장된) 메모리 보호 구성 데이터에 액세스한다.
본 발명의 일부 바람직한 실시예에서, 소프트웨어 애플리케이션(27)은 플래시 영역 0에 대한 그리고 RAM 영역 0에 대한 판독 및/또는 기록 액세스를 거절 당한다. 이것은 펌웨어 모듈(23)에 대한 비밀을 보호하며, 펌웨어 모듈(23)에 할당된 메모리 위치에 대한 소프트웨어 애플리케이션(27)에 의한 의도하지 않은 또는 악의적인 기록을 방지하여, 강건성 및 보안을 향상시킬 수 있다. 소프트웨어 애플리케이션 플래시 영역 1도 외부 디버깅 인터페이스를 통한 판독을 방지하도록 판독 액세스로부터 보호될 수 있다.
이것은 초기 스택 포인터가 RAM 영역 0 내에 있을 수 없다는 것을 의미하는데, 이는 소프트웨어 애플리케이션(27)이 이 영역에 대한 기록 액세스를 갖지 못하기 때문이다. 본 발명의 다른 실시예에서, 호출 스택은 2개의 부분을 가질 수 있으며, 펌웨어 모듈(23) 호출 스택은 RAM 영역 0 내에 위치하고, 소프트웨어 애플리케이션(27) 호출 스택은 RAM 영역 1 내에 위치한다.
인터럽트 인터페이스 로직(8)는 프로세서(7)에 의해 어드레싱될 수 있는 단일 비트 레지스터(도시되지 않음)를 포함한다. 이것은 레지스터의 변화(예로서, 값의 토글링, 또는 사전 결정된 값으로의 변경)의 검출 시에 로직(8)가 하드웨어 인터럽트 라인을 프로세서(7)에 대해 어써트하도록 구성된다.
도 4는 화살표 방향으로 우선순위가 증가하는, ARM™ Cortex™-M0 프로세서에 의해 제공되는 상이한 인터럽트 레벨(41), 및 이러한 레벨이 펌웨어 모듈(23) 및 소프트웨어 애플리케이션(27)에 의해 사용되는 인터럽트 레벨(43)에 맵핑되는 방식을 나타낸다.
위에서, 소프트웨어 애플리케이션(27)의 주요 배경 상황은 다음과 같이 우선순위 증가 순으로 사용되는 4개의 인터럽트 우선순위: 소프트웨어 애플리케이션 저우선순위, 펌웨어 모듈 저우선순위, 소프트웨어 애플리케이션 고우선순위 및 펌웨어 모듈 고우선순위이다. 고우선순위 소프트웨어 애플리케이션 인터럽트는 낮은 지연이 요구되는 임계 인터럽트를 위해 사용된다.
도 5a-5c는 우선순위 레벨의 가능한 변화의 다양한 예를 나타낸다.
도 5a는 소프트웨어 애플리케이션(27)에서의 배경 주요 프로세스가 저우선순위의 소프트웨어 애플리케이션에 의해, 예로서 직렬 드라이버에 의해 인터럽트되는 것을 나타낸다.
이어서, 소프트웨어 애플리케이션(27)은 함수와 관련된 함수 번호를 사전 결정된 공유 메모리 어드레스에 기록한 후에 인터럽트 인터페이스 로직(8) 내의 어드레싱 가능 단일 비트 레지스터에 기록하여 인터럽트 인터페이스 로직(8)가 하드웨어 인터럽트를 프로세서(7)로 시그널링하게 함으로써 펌웨어 모듈(23) 내의 함수를 호출한다. 펌웨어 모듈(23) 내의 인터럽트 핸들러는 사전 결정된 공유 메모리 어드레스로부터 함수 번호를 판독하고 (여전히 저우선순위 펌웨어 레벨에서) 지시된 함수를 호출함으로써 (이러한 특정 인터럽트 핸들러에 대한 선택된 디폴트 레벨인) 저우선순위 펌웨어 레벨에서 인터럽트에 응답한다. 이것이 완료되면, 실행이 애플리케이션 저우선순위 레벨로 복귀하며, 제어가 소프트웨어 애플리케이션(27)으로 반환된다. 마지막으로, 소프트웨어 애플리케이션(27)은 그의 동작을 완료하며, 실행은 주요 배경 레벨로 복귀한다.
도 5b는 소프트웨어 애플리케이션(27)의 주요 상황으로부터 행해지는 펌웨어 모듈(23)에 대한 API 호출을 나타낸다. 이것은 소프트웨어 애플리케이션(27)이 인터럽트를 트리거하도록 인터럽트 인터페이스 로직(8)에 시그널링함으로써 행해질 수 있다. 이 예에서, 펌웨어 저우선순위에서의 API 함수의 실행은 또한 고우선순위 소프트웨어 애플리케이션 예외에 의해 인터럽트된다. 이것은 예를 들어 센서 입력을 서비스하기 위한 것일 수 있다. 이것은 펌웨어 모듈(23)이 센서 입력으로부터 소프트웨어 애플리케이션(27)으로 인터럽트를 전달하는 것을 포함할 수 있다. 소프트웨어 애플리케이션(27)이 그의 고우선순위 실행을 종료하면, 펌웨어 API 호출은 배경 주요 프로세스로 최종 복귀하기 전에 더 낮은 우선순위의 펌웨어 레벨에서 계속될 수 있다.
도 5c는 펌웨어 모듈(23)에 의한 소프트웨어 애플리케이션(27)에서의 배경 주요 프로세스의 고우선순위 인터럽트를 나타낸다. 이것은 장치(1)가 응답해야 하는, 착신 무선 패킷과 같은 시간 임계 무선 통신 인터럽트에 기인할 수 있다. 펌웨어 모듈(23) 내의 인터럽트 서비스 루틴은 (함수 번호를 사전 결정된 공유 메모리 어드레스에 기록하고, 인터럽트 인터페이스 로직(8) 내의 어드레싱 가능 단일 비트 레지스터에 기록함으로써) 저우선순위 펌웨어 인터럽트를 트리거하도록 인터럽트 인터페이스 로직(8)에 시그널링하여, 소정 함수가 요구된다는 것을 무선 프로토콜 스택의 상위 레벨로 시그널링할 수 있다. 고우선순위 루틴의 완료 시에, 프로세서(7)의 테일 체이닝 능력으로 인해 저우선순위 루틴이 즉시(즉, 그 사이의 배경 주요 레벨로 복귀할 필요없이) 실행된다. 이어서, 저우선순위 펌웨어 루틴은 무선 데이터 패킷이 (인터럽트 전달을 통해) 수신되었다는 것을 소프트웨어 애플리케이션(27)에 시그널링하기 위해 인터럽트를 트리거한다. 이러한 인터럽트는 저우선순위 펌웨어 모듈 루틴의 완료 후에 체이닝된다. 이 예에서, 소프트웨어 애플리케이션(27)은 또한 도 5a에서와 같이 인터럽트 인터페이스 로직(8)에 시그널링함으로써 펌웨어 모듈(23)에 대한 API 호출을 행한다. 마지막으로, 소프트웨어 애플리케이션 저우선순위 동작이 완료되고, 실행이 주요 레벨로 복귀한다.
도 6-8은 소프트웨어 애플리케이션(27)과 펌웨어 모듈(23) 사이에서 제어가 전달될 수 있는 상이한 방식을 나타낸다. 예시를 위해 C와 같은 의사 코드 추출이 이용된다. 실제로는, 플래시 메모리(13)로부터 프로세서(7)에 의해 기계 코드 명령어가 실행된다. 도면 내의 번호를 가진 화살표는 연속 실행 단계를 지시한다.
도 6은 소프트웨어 애플리케이션(27)이 펌웨어 모듈(23)의 API(29)를 통해 함수 "radio_transmit"를 호출하는 것을 나타낸다. 애플리케이션(27)은 먼저 radio_transmit 함수에 대한 고유 함수 식별자(ID_RADIO_TRANSMIT)를 RAM(11) 내의 공유 메모리 위치(FUNCTION_TO_INVOKE)에 기록한다. 공유 메모리 위치의 식별자 및 어드레스는 장치 제조자에 의해 소프트웨어 애플리케이션(27)의 개발자에게 제공되는 펌웨어 헤더 파일을 이용하여 수입된다. 이어서, 애플리케이션(27)은 (헤더 파일에서도 정의되는) 어드레스 INTERRUPT_INTERFACE_REGISTER에 기록함으로써 인터럽트 인터페이스 로직(8) 내의 레지스터에서 이진 플래그를 토글링한다.
인터럽트 인터페이스 로직(8)는 하드웨어 인터럽트를 어써트하고, 프로세서(7)는 (시스템 인터럽트 벡터 테이블로서 작용하는) 펌웨어 모듈의 인터럽트 벡터 테이블을 통해 관련 인터럽트 핸들러를 호출한다. 인터럽트 핸들러는 소프트웨어 애플리케이션(27)에 의해 호출된 함수와 관련된 식별자를 공유 메모리 위치로부터 판독한다. 이것은 또한 추가 공유 메모리 위치를 이용하여 소프트웨어 애플리케이션(27)으로부터 독립변수 또는 파라미터를 유사한 방식으로 수신할 수 있다. 대안으로서, 그러한 독립변수는 하드웨어 메모리 레지스터를 통해 또는 호출 스택을 통해 전달될 수 있다.
인터럽트 핸들러는 radio_transmit 펌웨어 함수를 호출한다. 다른 무선 제어 함수(예로서, 무선에 의해 데이터를 전송하기 위한 명령어), (예로서, 펌웨어 모듈을 디스에이블링하기 위한) 펌웨어 관리 함수 또는 (예로서, 난수를 생성하기 위한) 라이브러리 함수와 같은 다른 펌웨어 함수가 대신 호출될 수 있다. 함수가 실행되면, 인터럽트가 종료되고, 제어가 소프트웨어 애플리케이션(27)으로 반환된다. 반환 값이 레지스터 내의 또는 호출 스택 상의 소프트웨어 애플리케이션(27)에 의해 이용될 수 있다.
도 7은 소프트웨어 애플리케이션(27)이 하드웨어 인터럽트를 통해 그 자신의 하나의 함수를 호출하는 것을 나타낸다. 소프트웨어 애플리케이션은 이를 행하여 저우선순위로부터 고우선순위 실행 레벨로 변경할 수 있다. 도 6의 상황과 유사하게, 소프트웨어 애플리케이션(27)은 인터럽트 인터페이스 로직(8)를 이용하여 하드웨어 인터럽트를 트리거하고, 실행이 펌웨어 모듈(27) 내의 인터럽트 핸들러로 전달되게 한다. 그러나, 이 경우, 명령어는 소프트웨어 애플리케이션 자신의 사용을 위해 예약된 범위 내에서 함수 식별자를 전달한다. 따라서, 펌웨어 모듈(23)은 실행이 잠재적으로 이전 동작의 우선순위 레벨과 다른 우선순위 레벨에서 소프트웨어 애플리케이션(27) 내의 핸들러 함수(app_systemcall_function())로 분기하게 한다.
도 8은 (예로서, 무선 로직(17) 또는 주변장치(15)로부터의) 하드웨어 인터럽트가 어떻게 소프트웨어 애플리케이션(27)에 의해 수신될 수 있는지를 나타낸다. 인터럽트의 수신시에, 펌웨어 모듈(23) 내의 인터럽트 핸들러가 벡터링된다. 이것은 펌웨어 모듈(23)이 인에이블링되는지 그리고 펌웨어 모듈(23)이 처리하도록 구성되는 것이 인터럽트인지를 체크한다. 그러한 경우, 펌웨어 모듈(23)은 인터럽트를 처리한다. 그렇지 않은 경우, 여기에 도시된 바와 같이, 펌웨어 모듈(23)은 제어를 소프트웨어 애플리케이션(27) 내의 인터럽트 핸들러 루틴으로 전달한다. 펌웨어 모듈(23)은 이 루틴을 발견할 곳을 아는데, 이는 소프트웨어 애플리케이션 벡터 테이블의 위치(CLENR0)가 사전 결정되고, 이 벡터 테이블 안으로의 오프셋이 펌웨어 모듈의 벡터 테이블 안으로서 오프셋과 동일하기 때문이다.
펌웨어 모듈(23)은 인터럽트가 펌웨어 모듈(23)이 처리하도록 구성되는 인터럽트가 아닌 경우에 디폴트로 인터럽트를 소프트웨어 애플리케이션(27)으로 전달하도록 구성된다. 게다가, 펌웨어 모듈(23)이 (예로서, 펌웨어 관리자(37)에 대한 적절한 API 호출을 통해) 소프트웨어 애플리케이션(27)에 의해 디스에이블링된 경우, 펌웨어 모듈은 모든 인터럽트를 소프트웨어 애플리케이션(27)으로 전달할 것이다.
도 9는 RAM 내의 공유 메모리 위치의 사용을 요구하지 않는 무선 통신 함수를 호출하기 위한 대안 메커니즘을 나타낸다. 일부 실시예는 이 메커니즘을 대신 이용하거나, 이 메커니즘은 물론 도 6을 참조하여 설명된 메커니즘도 이용할 수 있다. 소프트웨어 애플리케이션(27)은 플래시 메모리(13) 내의 사전 결정된 어드레스에 위치하는 콜백 함수를 포함한다. 펌웨어 모듈(23)은 이 콜백 함수로 분기할 수 있는데, 이는 펌웨어 모듈이 컴파일링 및 링킹될 때 사전 결정된 어드레스가 알려지기 때문이다.
펌웨어 모듈 내의 무선 통신 함수를 호출하기 위해, 소프트웨어 애플리케이션은 먼저 인터럽트 인터페이스 로직(8) 내의 어드레싱 가능 단일 비트 레지스터에 기록함으로써 인터럽트를 트리거한다. 이어서, 펌웨어 모듈(23) 내의 인터럽트 핸들러는 소프트웨어 애플리케이션(27) 내의 콜백 함수를 호출하고, functionID 변수에 대한 포인터 및 파라미터 데이터 블록 또는 데이터 구조에 대한 포인터를 전달한다. 이어서, 콜백 함수는 functionID 포인터가 가리키는 메모리 어드레스에 원하는 무선 통신 함수의 식별자를 기록하고, 파라미터 포인터가 가리키는 어드레스에 임의의 파라미터를 기록한다. 이어서, 제어가 펌웨어 모듈(23) 내의 인터럽트 핸들러로 반환되며, 인터럽트 핸들러는 함수 식별자를 이용하여, 펌웨어 모듈(23) 내의 어느 무선 통신 함수를 호출할지를 결정한다. 이것은 (예로서, 파라미터를 파라미터 메모리 어드레스로부터 스택으로 이동시킴으로써) 필요에 따라 파라미터를 파싱하며, 무선 통신 함수를 호출한다.
도 10은 일부 실시예가 본 명세서에서 설명되는 다른 메커니즘과 함께 또는 대신 이용할 수 있는 추가 대안 메커니즘을 나타낸다. 이것은 함수 식별자가 포인터를 이용하여 전달되는 것이 아니라 소프트웨어 애플리케이션(27)에 의해 호출 스택으로 푸시된다는 점 외에는 도 9와 유사하다.
이 예에서, 소프트웨어 애플리케이션(27)은 먼저 원하는 무선 통신 함수의 식별자를 스택에 기록하고, 이어서 인터럽트 인터페이스 로직(8) 내의 어드레싱 가능 단일 비트 레지스터에 기록함으로써 인터럽트를 트리거한다. 펌웨어 모듈(23) 내의 인터럽트 핸들러는 호출 스택으로부터 함수 식별자를 판독한다. 이어서, 이것은 소프트웨어 애플리케이션(27) 내의 콜백 함수를 호출하여, 파라미터 데이터 블록에 대한 포인터를 콜백 함수로 전달한다. 콜백 함수는 포인터가 가리키는 어드레스에 임의의 무선 통신 함수 파라미터를 기록한다. 이어서, 인터럽트 핸들러는 지시된 파라미터와 함께 무선 통신 함수를 호출한다.
도 11은 일부 실시예가 본 명세서에서 설명되는 다른 메커니즘과 함께 또는 대신 이용할 수 있는 추가 대안 메커니즘을 나타낸다. 이 메커니즘에서는, 공유 RAM 위치에 대해서도, 임의의 콜백 함수에 대해서도 어떠한 요구도 존재하지 않는다. 이 메커니즘을 이용하는 실시예가 바람직할 수 있는데, 이는 그러한 실시예가 잠재적으로 (아마도 소프트웨어 애플리케이션이 로딩되는 기본 어드레스는 제외하고) 펌웨어 모듈의 개발자와 소프트웨어 애플리케이션 사이의 메모리 위치(RAM 또는 플래시)의 어떠한 공유도 필요로 하지 않을 수 있기 때문이다.
소프트웨어 애플리케이션(27)은 원하는 무선 통신 함수의 식별자 및 무선 통신 함수로 전송될 임의의 파라미터를 호출 스택 상으로 푸시한다. 이것은 이어서 인터럽트 인터페이스 로직(8) 내의 어드레싱 가능 단일 비트 레지스터에 기록함으로써 인터럽트를 트리거한다. 이어서, 펌웨어 모듈(23) 내의 인터럽트 핸들러는 식별자 및 파라미터를 스택으로부터 판독한다. 이것은 필요에 따라 파라미터를 처리하고(예로서, 필요에 따라 파라미터를 재구성하고, 다시 호출 스택으로 푸시하고), 식별자에 의해 식별되는 무선 통신 함수를 호출한다.
모든 이러한 다양한 방식으로, 통합 무선 통신 장치가 안전하고 편리하게 구성되고 사용될 수 있다.
Claims (37)
- 집적 회로 무선 통신 장치를 구성하는 방법으로서,
상기 장치는 메모리, 무선 통신 로직, 하드웨어 인터럽트 인터페이스 로직, 및 하드웨어 인터럽트 입력 라인을 갖는 프로세서를 포함하고,
상기 하드웨어 인터럽트 인터페이스 로직은 상기 프로세서로부터 분리되고 상기 장치 상에서 실행되는 소프트웨어 애플리케이션에 의해 생성되는 신호를 수신하기 위한 입력 로직, 및 상기 입력 로직에서 소프트웨어 생성 신호를 수신하는 것에 응답하여 상기 프로세서의 상기 하드웨어 인터럽트 입력 라인을 어써트(assert)하도록 구성되는 출력 로직을 포함하고,
상기 메모리는 펌웨어 모듈을 포함하고, 상기 펌웨어 모듈은 (i) 사전 결정된 무선 프로토콜에 따라 상기 무선 통신 로직을 제어하기 위한 명령어, 및 (ii) 상기 펌웨어 모듈 내의 무선 통신 함수의 식별을 수신하고 상기 식별된 무선 통신 함수를 호출하기 위한 명령어를 포함하는 인터럽트 루틴을 포함하고,
상기 장치는 상기 프로세서의 상기 하드웨어 인터럽트 입력 라인의 어써트에 응답하여 상기 인터럽트 루틴을 호출하도록 구성되고,
상기 방법은 소프트웨어 애플리케이션을 상기 장치의 상기 메모리 내로 로딩하는 단계를 포함하고,
상기 소프트웨어 애플리케이션은 (i) 상기 하드웨어 인터럽트 인터페이스 로직이 상기 프로세서의 상기 하드웨어 인터럽트 입력 라인을 어써트하게 하기 위해 상기 하드웨어 인터럽트 인터페이스 로직에 대한 신호를 생성함으로써, 그리고 (ii) 상기 인터럽트 루틴으로 호출될 무선 통신 함수를 식별함으로써 상기 펌웨어 모듈 내의 상기 무선 통신 함수를 호출하기 위한 명령어를 포함하는
방법.
- 집적 회로 무선 통신 장치를 구성하는 방법으로서,
상기 장치는 메모리, 무선 통신 로직, 하드웨어 인터럽트 인터페이스 로직, 및 하드웨어 인터럽트 입력 라인을 갖는 프로세서를 포함하고,
상기 하드웨어 인터럽트 인터페이스 로직은 상기 프로세서로부터 분리되고 상기 장치 상에서 실행되는 소프트웨어 애플리케이션에 의해 생성되는 신호를 수신하기 위한 입력 로직, 및 상기 입력 로직에서 소프트웨어 생성 신호를 수신하는 것에 응답하여 상기 프로세서의 상기 하드웨어 인터럽트 입력 라인을 어써트하도록 구성되는 출력 로직을 포함하고,
상기 장치는 상기 프로세서의 상기 하드웨어 인터럽트 입력 라인의 어써트에 응답하여 인터럽트 루틴을 호출하도록 구성되고,
상기 방법은
펌웨어 모듈을 상기 장치의 상기 메모리 내로 로딩하는 단계 - 상기 펌웨어 모듈은 (i) 사전 결정된 무선 프로토콜에 따라 상기 무선 통신 로직을 제어하기 위한 명령어, 및 (ii) 상기 펌웨어 모듈 내의 무선 통신 함수의 식별을 수신하고 상기 식별된 무선 통신 함수를 호출하기 위한 명령어를 포함하는 인터럽트 루틴을 포함함 - 와,
소프트웨어 애플리케이션을 상기 장치의 상기 메모리 내로 로딩하는 단계 - 상기 소프트웨어 애플리케이션은 상기 하드웨어 인터럽트 인터페이스 로직이 상기 프로세서의 상기 하드웨어 인터럽트 입력 라인을 어써트하게 하기 위해 상기 하드웨어 인터럽트 인터페이스 로직에 대한 신호를 생성함으로써 그리고 상기 인터럽트 루틴으로 호출될 무선 통신 함수를 식별함으로써 상기 펌웨어 모듈 내의 상기 무선 통신 함수를 호출하기 위한 명령어를 포함함 -를 포함하는
방법.
- 제1항 또는 제2항에 있어서,
상기 소프트웨어 애플리케이션을 사전 결정된 애플리케이션 메모리 어드레스로 로딩하는 단계를 포함하는
방법.
- 집적 회로 무선 통신 장치로서,
하드웨어 인터럽트 입력 라인을 갖는 프로세서와,
메모리와,
무선 통신 로직과,
하드웨어 인터럽트 인터페이스 로직
을 포함하되,
상기 메모리는 펌웨어 모듈을 포함하고, 상기 펌웨어 모듈은 (i) 사전 결정된 무선 프로토콜에 따라 상기 무선 통신 로직을 제어하기 위한 명령어, 및 (ii) 상기 펌웨어 모듈 내의 무선 통신 함수의 식별을 수신하고 상기 식별된 무선 통신 함수를 호출하기 위한 명령어를 포함하는 인터럽트 루틴을 포함하고,
상기 하드웨어 인터럽트 인터페이스 로직은 상기 프로세서로부터 분리되고, 상기 장치 상에서 실행되는 소프트웨어 애플리케이션에 의해 생성되는 신호를 수신하기 위한 입력 로직, 및 상기 입력 로직에서 소프트웨어 생성 신호를 수신하는 것에 응답하여 상기 프로세서의 상기 하드웨어 인터럽트 입력 라인을 어써트하도록 구성되는 출력 로직을 포함하고,
상기 장치는 상기 프로세서의 상기 하드웨어 인터럽트 입력 라인의 어써트에 응답하여 상기 인터럽트 루틴을 호출하도록 구성되는
집적 회로 무선 통신 장치.
- 제4항에 있어서,
상기 펌웨어 모듈은 사전 링크된 이진 이미지 파일인
집적 회로 무선 통신 장치.
- 제4항에 있어서,
상기 하드웨어 인터럽트 인터페이스 로직의 상기 입력 로직은 상기 프로세서가 사전 결정된 메모리 어드레스 또는 레지스터에 값을 기록하는 것에 응답하여 상기 소프트웨어 애플리케이션에 의해 생성된 신호를 검출하도록 구성되는
집적 회로 무선 통신 장치.
- 제4항 내지 제6항 중 어느 한 항에 있어서,
상기 메모리는 상기 하드웨어 인터럽트 인터페이스 로직이 상기 프로세서의 상기 하드웨어 인터럽트 입력 라인을 어써트하게 하기 위해 상기 하드웨어 인터럽트 인터페이스 로직에 대한 신호를 생성함으로써 그리고 상기 인터럽트 루틴으로 호출될 무선 통신 함수를 식별함으로써 상기 펌웨어 모듈 내의 상기 무선 통신 함수를 호출하기 위한 명령어를 포함하는 소프트웨어 애플리케이션을 더 포함하는
집적 회로 무선 통신 장치.
- 제7항에 있어서,
상기 소프트웨어 애플리케이션은 상기 펌웨어 모듈 내의 메모리 어드레스에 관한 어떠한 데이터도 포함하지 않는
집적 회로 무선 통신 장치.
- 제7항에 있어서,
상기 소프트웨어 애플리케이션은 상기 호출될 무선 통신 함수를 식별하는 함수 식별자를 상기 인터럽트 루틴으로 전달하기 위한 명령어를 포함하는
집적 회로 무선 통신 장치.
- 제9항에 있어서,
상기 소프트웨어 애플리케이션은 상기 함수 식별자를 상기 장치 상의 공유 메모리 위치에 기록하기 위한 명령어를 포함하고, 상기 인터럽트 루틴은 상기 공유 메모리 위치로부터 상기 함수 식별자를 판독하기 위한 명령어를 포함하는
집적 회로 무선 통신 장치.
- 제9항에 있어서,
상기 소프트웨어 애플리케이션은 상기 함수 식별자를 호출 스택 상의 상기 인터럽트 루틴으로 전달하기 위한 명령어를 포함하는
집적 회로 무선 통신 장치.
- 제7항에 있어서,
상기 소프트웨어 애플리케이션은 상기 무선 통신 함수에 대한 파라미터를 호출 스택에 기록함으로써 상기 파라미터를 상기 인터럽트 루틴으로 전달하기 위한 명령어를 포함하는
집적 회로 무선 통신 장치.
- 제7항에 있어서,
상기 펌웨어 모듈은 상기 소프트웨어 애플리케이션 내의 콜백 함수의 어드레스를 포함하고, 상기 인터럽트 루틴은 하나 이상의 메모리 어드레스를 상기 콜백 함수로 전달하고, 상기 하나 이상의 메모리 어드레스로부터 데이터를 판독함으로써 상기 콜백 함수로부터 상기 호출될 무선 통신 함수를 식별하는 함수 식별자 또는 상기 무선 통신 함수에 대한 함수 파라미터를 수신하기 위한 명령어를 포함하는
집적 회로 무선 통신 장치.
- 제7항에 있어서,
상기 펌웨어 모듈 및 상기 소프트웨어 애플리케이션은 각각 각자의 인터럽트 벡터 테이블을 가지고, 상기 장치는 인터럽트를 처리할 때 상기 펌웨어 모듈의 상기 벡터 테이블을 이용하도록 구성되고, 상기 펌웨어 모듈은 상기 펌웨어 모듈 자신이 처리하도록 프로그래밍되지 않은 모든 인터럽트가 상기 소프트웨어 애플리케이션 상으로 전달되도록 구성되는
집적 회로 무선 통신 장치.
- 제7항에 있어서,
상기 장치는 메모리 액세스 명령어를 인터셉트하고 상기 소프트웨어 애플리케이션이 상기 펌웨어 모듈을 판독 또는 겹쳐쓰기하는 것을 방지하도록 구성되는 메모리 보호 로직을 포함하는
집적 회로 무선 통신 장치. - 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB1322836.6A GB2521607B (en) | 2013-12-23 | 2013-12-23 | Integrated-Circuit Radio |
GB1322836.6 | 2013-12-23 | ||
PCT/GB2014/053441 WO2015097426A1 (en) | 2013-12-23 | 2014-11-20 | Integrated-circuit radio |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20160102040A KR20160102040A (ko) | 2016-08-26 |
KR102276696B1 true KR102276696B1 (ko) | 2021-07-13 |
Family
ID=50114614
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020167019910A KR102276696B1 (ko) | 2013-12-23 | 2014-11-20 | 집적 회로 무선장치 |
Country Status (8)
Country | Link |
---|---|
US (1) | US10055367B2 (ko) |
EP (1) | EP3087477B1 (ko) |
JP (1) | JP6495290B2 (ko) |
KR (1) | KR102276696B1 (ko) |
CN (1) | CN105849695B (ko) |
GB (1) | GB2521607B (ko) |
TW (1) | TWI640869B (ko) |
WO (1) | WO2015097426A1 (ko) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2540341B (en) | 2015-06-16 | 2019-06-26 | Nordic Semiconductor Asa | Event generating unit |
US10445119B2 (en) * | 2017-06-30 | 2019-10-15 | Intel Corporation | Software reconfigurable mobile devices and methods |
US12045326B2 (en) * | 2022-07-14 | 2024-07-23 | Dell Products L.P. | Secured communication protocol layer for authenticated hardware data access |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090318078A1 (en) * | 2006-09-12 | 2009-12-24 | Wavecom | Method of managing the software architecture of a radio communication circuit, corresponding application, computer program product and circuit |
JP2013232028A (ja) | 2012-04-27 | 2013-11-14 | Denso Corp | マイクロコンピュータ |
Family Cites Families (35)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS6349941A (ja) * | 1986-08-20 | 1988-03-02 | Canon Inc | 演算処理装置 |
DE3632139A1 (de) * | 1986-09-22 | 1988-04-07 | Bbc Brown Boveri & Cie | Verfahren zur ausfuehrung von zwei in verschiedenen programmiersprachen geschriebenen programmen |
CA2143488C (en) | 1995-02-27 | 2000-01-11 | Robert Paul Duncan | Dynamic link libraries without linker or loader support |
JPH09160768A (ja) * | 1995-12-05 | 1997-06-20 | Sharp Corp | プログラム実行装置 |
US6223275B1 (en) | 1997-06-20 | 2001-04-24 | Sony Corporation | Microprocessor with reduced instruction set limiting the address space to upper 2 Mbytes and executing a long type register branch instruction in three intermediate instructions |
US20020073398A1 (en) | 1998-12-14 | 2002-06-13 | Jeffrey L. Tinker | Method and system for modifying executable code to add additional functionality |
JP4690576B2 (ja) * | 2001-04-26 | 2011-06-01 | パナソニックシステムネットワークス株式会社 | ソフトウェアモデム及びそれを備えた通信端末装置 |
US7237121B2 (en) | 2001-09-17 | 2007-06-26 | Texas Instruments Incorporated | Secure bootloader for securing digital devices |
US6874069B2 (en) | 2002-07-26 | 2005-03-29 | Silicon Storage Technology, Inc. | Microcontroller having an embedded non-volatile memory array with read protection for the array or portions thereof |
US7120794B2 (en) * | 2003-10-29 | 2006-10-10 | Qualcomm Inc. | System for invoking a privileged function in a device |
JP2005136572A (ja) | 2003-10-29 | 2005-05-26 | Renesas Technology Corp | 無線通信用半導体集積回路およびデータ処理用半導体集積回路並びに携帯端末 |
US7076637B2 (en) * | 2003-10-29 | 2006-07-11 | Qualcomm Inc. | System for providing transitions between operating modes of a device |
US7206884B2 (en) | 2004-02-11 | 2007-04-17 | Arm Limited | Interrupt priority control within a nested interrupt system |
JP2005242806A (ja) | 2004-02-27 | 2005-09-08 | Renesas Technology Corp | データ処理装置 |
US20060104227A1 (en) * | 2004-11-15 | 2006-05-18 | Chia-En Chuang | Data communication methods and systems |
DE102004057259A1 (de) | 2004-11-26 | 2006-06-01 | Robert Bosch Gmbh | Manipulationsgeschütztes Mikrocontrollersystem |
US7647589B1 (en) | 2005-02-07 | 2010-01-12 | Parallels Software International, Inc. | Methods and systems for safe execution of guest code in virtual machine context |
JP2007142969A (ja) * | 2005-11-21 | 2007-06-07 | Kenwood Corp | 無線システムの起動方法及びそのソフトウエア |
US20080126779A1 (en) | 2006-09-19 | 2008-05-29 | Ned Smith | Methods and apparatus to perform secure boot |
US7949874B2 (en) * | 2006-09-28 | 2011-05-24 | Phoenix Technologies Ltd. | Secure firmware execution environment for systems employing option read-only memories |
JP4415071B2 (ja) * | 2007-06-22 | 2010-02-17 | 富士通マイクロエレクトロニクス株式会社 | メモリ共有システム装置 |
US7730248B2 (en) | 2007-12-13 | 2010-06-01 | Texas Instruments Incorporated | Interrupt morphing and configuration, circuits, systems and processes |
US9032128B2 (en) * | 2008-04-28 | 2015-05-12 | Hewlett-Packard Development Company, L.P. | Method and system for generating and delivering inter-processor interrupts in a multi-core processor and in certain shared memory multi-processor systems |
JP5102122B2 (ja) * | 2008-06-11 | 2012-12-19 | キヤノン株式会社 | 復号化装置及び復号化方法 |
US20110117956A1 (en) | 2009-11-17 | 2011-05-19 | Yosi Levi | Industrial radio device with unified programming interface and methods |
GB201102628D0 (en) * | 2011-02-15 | 2011-03-30 | Nordic Semiconductor Asa | Programmable radio |
US20120255031A1 (en) | 2011-03-28 | 2012-10-04 | Mcafee, Inc. | System and method for securing memory using below-operating system trapping |
US9563410B2 (en) | 2011-05-25 | 2017-02-07 | Amx Llc | Data-driven menuing system for providing a flexible user interface on an electronic device |
JP5494727B2 (ja) * | 2012-05-25 | 2014-05-21 | 横河電機株式会社 | 通信装置 |
GB2503470B (en) * | 2012-06-27 | 2014-08-13 | Nordic Semiconductor Asa | Memory protection |
GB2503471B (en) | 2012-06-27 | 2015-05-06 | Nordic Semiconductor Asa | Integrated-circuit radio |
CN102932022A (zh) * | 2012-09-29 | 2013-02-13 | 上海移远通信技术有限公司 | 无线通讯模块 |
GB2515364B (en) * | 2013-12-20 | 2015-06-17 | Nordic Semiconductor Asa | Updatable integrated-circuit radio |
US9762441B2 (en) * | 2014-10-29 | 2017-09-12 | Saankhya Labs Private Limited | Method and system of dynamically designing and operating an optimal communication network configuration |
US20170064651A1 (en) * | 2015-08-28 | 2017-03-02 | Alex Volkov | Synchronization of audio streams and sampling rate for wireless communication |
-
2013
- 2013-12-23 GB GB1322836.6A patent/GB2521607B/en active Active
-
2014
- 2014-11-20 WO PCT/GB2014/053441 patent/WO2015097426A1/en active Application Filing
- 2014-11-20 US US15/029,586 patent/US10055367B2/en active Active
- 2014-11-20 JP JP2016541506A patent/JP6495290B2/ja active Active
- 2014-11-20 KR KR1020167019910A patent/KR102276696B1/ko active IP Right Grant
- 2014-11-20 EP EP14803210.5A patent/EP3087477B1/en active Active
- 2014-11-20 CN CN201480070514.2A patent/CN105849695B/zh active Active
- 2014-11-21 TW TW103140369A patent/TWI640869B/zh active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090318078A1 (en) * | 2006-09-12 | 2009-12-24 | Wavecom | Method of managing the software architecture of a radio communication circuit, corresponding application, computer program product and circuit |
JP2013232028A (ja) | 2012-04-27 | 2013-11-14 | Denso Corp | マイクロコンピュータ |
Non-Patent Citations (1)
Title |
---|
Wikipedia: "Interrupt". 2013.12.06. |
Also Published As
Publication number | Publication date |
---|---|
GB201322836D0 (en) | 2014-02-12 |
JP2017511513A (ja) | 2017-04-20 |
WO2015097426A1 (en) | 2015-07-02 |
KR20160102040A (ko) | 2016-08-26 |
JP6495290B2 (ja) | 2019-04-03 |
EP3087477A1 (en) | 2016-11-02 |
GB2521607A (en) | 2015-07-01 |
US20160267030A1 (en) | 2016-09-15 |
GB2521607B (en) | 2016-03-23 |
TWI640869B (zh) | 2018-11-11 |
CN105849695B (zh) | 2019-10-08 |
US10055367B2 (en) | 2018-08-21 |
TW201527976A (zh) | 2015-07-16 |
EP3087477B1 (en) | 2023-11-08 |
CN105849695A (zh) | 2016-08-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10789192B2 (en) | System and method for programming data transfer within a microcontroller | |
US9891908B2 (en) | Updatable integrated-circuit radio | |
US20160196170A1 (en) | Integrated-circuit radio | |
KR102276696B1 (ko) | 집적 회로 무선장치 | |
CN111797387B (zh) | 拦截外挂插件的方法及装置 | |
WO2023071786A1 (zh) | 一种进程间的函数调用方法及相关设备 | |
CN106922189B (zh) | 设备代理装置及其控制方法 | |
WO2009001030A1 (en) | Interrupt handling | |
CN110688099A (zh) | 远距离无线电集成可编程片上系统的微处理器开发方法 | |
Nios | Nios II Exception Handling Overview |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant |