Arduino UNO (Atmel ATmega 328p 기반)에 대한 스케줄러를 작성하고 있지만 x86에서 오는 것입니다. 컨텍스트 스위치에 스택을 저장하는 방법에 대해서는 잘 모르기 때문에 나중에 컨텍스트 스위치로 돌아갈 때 복원 할 수 있습니다. 태스크.AVR 아키텍처에서 스택을 저장하는 방법은 무엇입니까?
누군가가이 작업을 수행하는 방법을 설명해 주시겠습니까?
Arduino UNO (Atmel ATmega 328p 기반)에 대한 스케줄러를 작성하고 있지만 x86에서 오는 것입니다. 컨텍스트 스위치에 스택을 저장하는 방법에 대해서는 잘 모르기 때문에 나중에 컨텍스트 스위치로 돌아갈 때 복원 할 수 있습니다. 태스크.AVR 아키텍처에서 스택을 저장하는 방법은 무엇입니까?
누군가가이 작업을 수행하는 방법을 설명해 주시겠습니까?
내가 한 모든 아두 이노 스택 덤프 구글에 충돌이했습니다 :
How do I dump my stack in Arduino?
여기 그들은 심지어 자신의 사이트로 연결되는 링크를 좋아하지 않기 때문에 링크 코드 형태입니다.
uint8_t stackArray[30];
void createStackDump()
{
volatile uint8_t* mSP = (uint8_t*)SP;
for (int i = 0; i < 30; i++)
{
stackArray[i] = *mSP;
mSP++;
}
}
컨텍스트 스위치에 "스택 저장"을 원하지 않습니다.
대신 프로세서의 상태를 스택에 저장 한 다음 스택 포인터를 다른 스택으로 변경하고 거기에서 컨텍스트를 복원하려고합니다.
프로세서 상태에 대한 관련 데이터는 SP, PC, STATUS 레지스터 및 모든 GPIO 레지스터입니다.
스위칭 기능을 호출하면 PC가 스택에 푸시됩니다. SP를 나중에 저장할 수 있도록 SP를 저장합니다. 즉, 스택에 STATUS 레지스터와 32 gpio 레지스터를 밀어 넣기 만하면됩니다.
각 작업에는 SP를 보유 할 자체 스택과 변수가 필요합니다. 이것을 구조의 배열로 유지할 수 있습니다.
거기에 AVR 용 오픈 소스 RTOS가 많이 있습니다. 당신은 하나를 봐야합니다. 또한, 당신이 어려움을주고있는 부분을 알려주지 않았기 때문에이 질문이 너무 광범위하다고 생각합니다. 예를 들어 어셈블리 코드를 컴파일하고 실행하는 방법을 알고 있습니까? AVR의 스택 포인터가 어떻게 작동하는지 알고 있습니까? 스택의 데이터를 다른 곳으로 복사하고 스택 포인터를 변경하는 방법을 알고 있습니까? –