EDIT
Имея больше времени, я переписал свой первоначальный ответ, пытаясь предложить что-то более полезное.
Я не могу дать конкретный ответ на ваш вопрос. Я никогда не пытался заставить код работать на машине MIPS. То, что у меня есть, - это большой опыт работы с различными "голыми металлическими" досками. Все виды процессоров и всевозможные компиляторы и кросс-компиляторы. Таким образом, у меня есть понимание принципов, которые применяются во всех таких ситуациях. Я укажу на тот вид знаний, который вам нужно будет усвоить, прежде чем вы сможете надеяться добиться успеха с такой работой, и, надеюсь, я смогу перечислить некоторые ссылки на ресурсы, которые помогут вам начать изучение этих знаний.
Я обеспокоен тем, что вы не знаете, что указатели точно - это то, с чем может справиться компилятор с открытым исходным кодом, они являются базовыми примитивами машины. Это говорит о том, что вы, вероятно, не являетесь экспертом по встроенным разработчикам, который просто застрял в этом конкретном сценарии. Не берите в голову. В программировании встроенной системы нет ничего волшебного, и вы можете узнать, что вам нужно знать.
Первым шагом становится понимание отношений между C и машиной, на которой вы хотите запустить код. В основном C является переносимым языком ассемблера. Это означает, что C хорош для манипулирования основными операциями машины. В этом смысле основными операциями машины являются чтение и запись областей памяти, выполнение арифметических и логических операций над данными, считанными из памяти, и принятие решений о ветвлении и циклировании на основе этих данных. В частности, концепция указателей С позволяет вам манипулировать данными в указанных вами местах памяти.
Пока все хорошо, но просто выполнять необработанные вычисления в памяти обычно недостаточно - вам нужен способ ввода и вывода данных из памяти. Для этого вам нужно манипулировать аппаратными периферийными устройствами на вашей плате. Если аппаратные периферийные устройства имеют отображение памяти , то регистры машины, используемые для управления периферийными устройствами, выглядят точно так же, как области памяти, и C может напрямую ими манипулировать. Даже в этом случае, однако, гораздо более вероятно, что выполнение полезного ввода-вывода лучше всего обрабатывать, расширяя основной язык C библиотекой подпрограмм, предоставленных только для этой цели. Эти библиотечные процедуры обрабатывают все неприятные детали (таймеры, прерывания, ввод-вывод с отображением без памяти), связанные с манипулированием периферийным оборудованием на плате, и заключают их в удобный интерфейс вызова функций C. Идея в том, что вы можете пойти просто printf ("Привет, мир"); и библиотечный вызов позаботится о деталях отображения строки.
Разработчик с соответствующей квалификацией знает, как адаптировать существующую библиотеку ввода-вывода к новой плате или как разработать новые подпрограммы библиотеки для обеспечения доступа к нестандартному пользовательскому оборудованию. Классический способ развить эти навыки - начать с чего-то простого, обычно со светодиода для устройства вывода и переключателя для устройства ввода. Напишите программу, которая генерирует светодиоды предсказуемым образом или считывает данные с переключателя и отображает светодиоды. Первый раз, когда вы получите эту работу, будет очень приятно.
Хорошо, я достаточно прогулял. Пришло время предоставить вам больше ресурсов для изучения. Хорошей новостью является то, что никогда не было лучшего времени, чтобы узнать, как все работает на интерфейсе между аппаратным и программным обеспечением. Существует множество свободно доступных кода и документов. Stackoverflow - отличный ресурс, как вы знаете. Удачи! Ссылки следуют;
Обзор встроенных систем
Знание языка Си имеет фундаментальное значение
Почему бы не заставить свой код работать на симуляторе до того, как вы попробуете реальное оборудование
Другая эмулируемая среда
Драйверы устройств Linux - пересекающаяся тема
Еще одна книга о программировании на голом металле