2017-01-07 6 views
0

하드웨어 스택에 액세스 할 수있는 향상된 MCU를 사용하여 XC8에서 스케줄러/RTOS 프로젝트를 작성하는 데 관심이 있습니다.XC8의 스케줄러/RTOS 작성

각 작업의 소프트웨어 스택이 범용 램에서 특정 범위를 차지할 수 있도록 소프트웨어 스택 생성을 제어하는 ​​방법을 파악하려고합니다.

개념적으로이 프로그램은 모두 ASM에서 프로그래밍하기가 쉽지만 C 프로그램을 작성하고 각 작업에 대한 소프트웨어 스택을 올바른 주소 공간에 넣을 수 있기를 원합니다.

특정 코드 섹션에 대해 별도의 소프트웨어 스택을 만들거나 여러 소프트웨어 스택을 만드는 옵션이없는 것 같습니다. 어떻게해야합니까?

감사

+0

8 비트 PIC를 사용하면 최대 8K ROM과 많은 RAM이 필요하지 않습니다. 각 스택에 얼마만큼의 공간이 필요합니까? – cup

+0

하위 250 바이트. 약 4 개의 작업을 허용합니다. 실행합니다. 또한이 장치는 모든 뱅크 스위칭에서 사용할 수있는 선형 램 액세 스를 가지고 있습니다. – FourierFlux

답변

0

스택 전환 TEH 스케줄러하지 TEH 컴파일러의 책임이다 - 그래서 당신은 그에 대한 컴파일러 옵션을 찾을 수 없습니다. 당신은 작성하고자하는 스케줄러에 구현해야합니다. 실제로 스케줄러가하는 일입니다.

RTOS에서 스위칭 컨텍스트는 하나의 실행 스레드와 관련된 모든 레지스터를 저장하고 다른 스레드의 레지스터로 대체하는 작업을 포함합니다. 여기에는 스택 포인터를 바꾸는 것, 즉 스택간에 스택을 전환하는 방법이 포함됩니다. 컨텍스트 스위치는 프로그램 카운터 레지스터가로드되어 새로운 스레드의 마지막 실행 포인트로 점프 (스택 포인터를 포함하여 모든 레지스터가 복원 됨) 완료되면 완료됩니다.

컨텍스트 스위치 자체는 반드시 최소한 어셈블러 코드의 양은 많지만 C로 쓰여질 수도 있고 태스크 자체가 C로 쓰여질 수도있다. 간단한 RTOS 스케줄러에 대한 좋은 설명은 Jean Labrosse의 μC/OS-II - freely available in PDF에있다. μC/OS-II의 PIC18 포트는 here으로 다운로드 할 수 있습니다.

+0

고마워, 네, 이해합니다. XC8을 사용하여 소프트웨어 스택의 위치를 ​​제어하고 적절한 변수를 사용하는 것을 제어하는 ​​데 문제가있었습니다 (모든 것이 "컴파일 된 스택"이라고하는 것을 사용하여 별도의 스택 구절에 저장됩니다.) 또한 문제를 발견하고있었습니다. 컴파일러가 사용하는 레지스터 또는 특정 영역의 RAM을 사용하도록 지시 할 수있는 경우 ASM에서는이 모든 것이 매우 쉽지만 XC8 사용자 가이드는 컴파일러 구현에 대한 세부 정보를 제공하지 않는다고 느낍니다. – FourierFlux

+0

참조하는 책 to : https://www.micrium.com/books/ucosii/ (당신의 링크가 당신 자신의 홈 폴더에 링크되어 있습니다!) –

+0

@JonathanV : 고마워, 링크를 수정했다. – Clifford