2010-05-02 7 views
2

Cortex-M3 용 라이트 커널을 빌드 중입니다. 높은 우선 순위에서 Cortex-M3의 인터럽트 처리기간에 매개 변수 전달

내가 낮은 우선 순위 인터럽트의 실행과 함께 몇 가지 매개 변수를 전달하는 몇 가지 코드를 호출하고 싶습니다 중단.

나는 낮은 우선 순위 인터럽트에 작품을 게시하는 큐를 사용하지 않습니다.

난 그냥 그것을 전달하는 버퍼 크기를 가지고있다.

proramming 매뉴얼에서 SVC 인터럽트 핸들러는 동기식이라고합니다. 아마도 SVC의 핸들러보다 우선 순위가 낮은 인터럽트에서 인터럽트를 호출하면 즉시 호출됩니다. (이 결과는 매개 변수를 전달할 수 있다는 것을 의미합니다 마치 함수 호출 (MS-DOS에서 BIOS 호출과 조금 비슷 함)이었던 것처럼).

나는 그것을 다른 방법으로 할 싶습니다

: 인터럽트 (I 메모리에 고정 된 위치의 매개 변수를 두어 그 일을하고있어 순간에) 더 낮은 우선 순위 하나에 높은 우선 순위에서 매개 변수를 전달합니다.

(가능하다면)이 작업을 수행하는 가장 좋은 방법은 무엇입니까?

덕분에,

답변

1

I는 코어 텍스 M3 아키텍처에 익숙하지 않은,하지만 난 당신이 공유 메모리에 잠금 장치를 제공하기 위해 필요한 확신합니다.

언제든지 낮은 우선 순위 인터럽트 처리 할 수있는 높은 우선 순위 인터럽트 (일부를 제외하고는 특별히 하드웨어이 동기화되고, 당신은 이런 일이되지 않습니다 gaurenteed, 그러나 이것은 아마도 그렇지 않다 방법)

잠김 플래그에서 원자 교환을 보장하기 위해 잠금 섹션은 1 비트 플래그처럼 간단 할 수도 있습니다 (즉, 플래그에서 읽기 - 수정 - 쓰기에 대한 인터럽트 사용 불가) (즉, 우선 순위가 낮은 프로세스/인터럽트 잠금 플래그를 액세스/업데이트하면 더 높은 우선 순위의 인터럽트가 들어 와서 변경됩니다.) 플래그는 공유 메모리 공간을 읽고 쓰는 동기화 메커니즘으로, 두 프로세스가 액세스하는 동안 다른 프로세스를 잠글 수 있습니다 샤 연장 시간 동안 인터럽트를 사용하지 않고 붉은 자원. (공유 메모리 액세스가 충분히 빠른 경우 내가 직접 공유 메모리에 액세스하는 동안 그냥 인터럽트를 비활성화 할 수 추측)