임베디드 타겟 (MSP430)에 대해 C에서 작은 협동 OS (Salvo)로 작업하고 있습니다.콜 스택 사용하지 않고 함수와 비슷한 동작
많은 재사용 할 수없는 구현 코드로 명령 처리기를 구현해야합니다. 이러한 코드에는 OS를 사용하는 컨텍스트 스위치가 포함될 수 있습니다. 컨텍스트 전환 중에 콜 스택은 이 아니며이 저장되어 있으므로 동일한 스택 수준을 유지해야합니다. 나는 C 파일을 포함하여, 일을 이런 식으로 일을 오전 : 이것은하지만이 방법, 지금 노력하고 있습니다
TaskA()
{
while(1)
{
command_code = OS_WaitMsgQ()
switch(command_code)
case 0x01:
{
#include CSC0x01_Name_of_the_command.c
}
case 0x02:
{
#include CSC0x02_Name_of_the_command.c
//OSContextSwitch()?
}
//100+ cases like this...
}
}
명령 특정 코드를 작성할 때 내 IDE의 기능의 대부분을 느슨하게하고, 나도 몰라 코드가 커지면 관리가 가능합니다.
더 좋은 솔루션이 있습니까?
또한 명령 특정 코드는 재사용 가능하지만 컨텍스트 스위치를 포함하는 코드 청크를 사용할 수 있습니다.
- 복사 및 과거 : 보다 더 나은 뭔가가 있나요?
- 복잡하고 위험한 멀티 라인 매크로입니까?
- 일반적인 기능에 대한 어셈블리를 사용하여 스택을 저장하고 복원 하시겠습니까?
또는 어느 것이 더 나쁜가?
좋은 해결책이 될 수 있지만 제 컴파일러가 동의하지 않을 수 있습니다 : [link] (http://e2e.ti.com/support/development_tools/compiler/f/343/t/245902.aspx) : " 인라인 "키워드는 강제로 인라인되지 않습니다. [...] f 실제로 인라이닝을 강제 실행하려면 FUNC_ALWAYS_INLINE pragma를 사용하십시오. 항상 "항상"이라는 뜻이므로주의해야합니다. 광범위하게 사용하면 컴파일러에서 메모리가 부족해져 충돌 할 수 있습니다. – pserra
리플렉션 후에는 정확히 같은 것이 포함에 추가됩니다. 귀하의 답변에 감사드립니다. 두 번째 부분에 대한 통찰력? – pserra
그들이 말한 것을 수행하고'FUNC_ALWAYS_INLINE' pragma를 사용하십시오. 조심해. :) – jeremycole