Как явно вставить / выдать в стек возврата C?

Есть ли способ явно отправить / вытолкнуть данные в стек возврата C? (В идеале в стандарте C, но было бы хорошо и решение GCC.)

Я реализую Forth в C, на микроконтроллере, который очень ограничен в оперативной памяти (кбайт, а не мегабайт).

Я выделяю ОЗУ для стека данных, но я надеюсь сэкономить немного ОЗУ, разделяя стек возврата Forth со стеком возврата C, посредством явных push/pops.

Можно ли это сделать в C?

3 ответа

GCC имеет __builtin_return_address функция, это, вероятно, ближе всего вы получите.

Я рассматриваю Форт как экскурсию из Си в программу на ассемблере. Вероятно, существует регистр c, который служит указателем стека. Если вы позаботитесь о правильной очистке этого стека перед возвратом к C, вы, вероятно, сможете использовать его, пока находитесь в своем коде на ассемблере (Forth). Вы должны изучить c-компилятор, чтобы убедиться, что это возможно, и узнать, какой регистр является указателем стека. Также позаботьтесь о восстановлении любых регистров, которые c хочет сохранить.

Вокруг много систем FORTH-in-C, спросите Google или покопайтесь в github. Есть много проблем дизайна (не только эта!), Которые вам придется решать, посмотрите на предыдущие решения.

Другие вопросы по тегам