Как написать простую программу на «голом железе»?

Здесь гипотетически: допустим, у вас есть процессор, подключенный к какой-либо форме USB-накопителя, и двигатель. Как бы я написал простую программу на «голом железе», чтобы заставить двигатель двигаться в течение 10 секунд? Я хочу научиться работать с программой на «голом железе», и иметь программу для просмотра и анализа было бы замечательно. (любой язык будет отличным)


person Null Spark    schedule 25.01.2016    source источник
comment
github.com/dwelch67 много примеров "голого железа"...   -  person old_timer    schedule 26.01.2016


Ответы (1)


1) вы должны понимать, как загружается рассматриваемый процессор. есть сам основной процессор, затем энергонезависимая память. например, raspberry pi немного уникален тем, что в логике (или встроенном ПЗУ?) есть что-то, что считывает SD-карту, загружает графический процессор, затем графический процессор копирует программу руки в оперативную память и выпускает руку в нее. баран. большинство микроконтроллеров имеют встроенную флэш-память и оперативную память, и флэш-память отображается в адресное пространство, из которого загружается процессор, и / или имеется загрузчик, поставляемый поставщиком, который загружает процессор, а затем вызывает ваш код.

2) вам нужно научиться включать и инициализировать периферийные устройства, которые вы хотите использовать. таймер, возможно, если вы хотите считать до 10 секунд.

3) написать заявление.

отладка - это хитрость, иногда вы можете использовать аппаратный отладчик через jtag или иногда использовать монитор ПЗУ через gdb или какую-либо другую программу на каком-то интерфейсе, таком как uart. или тот, который почти всегда доступен либо с мигающим светодиодом, либо с UART для отправки текста или чисел, чтобы увидеть, что происходит. ну и конечно же осциллограф, можно гпиос шевелить или делать другие вещи и видеть их на прицеле.

управление двигателем слишком общее, вам нужно конкретно знать, какой двигатель и как им управлять, скорее всего, нулевой шанс, что вы управляете им непосредственно от микроконтроллера, у вас может быть что-то вне моста транзистора h или что-то, что изолирует микроконтроллер или вы иметь определенный тип микросхемы / схемы драйвера двигателя, с которым вы общаетесь либо через дискретные сигналы, либо через i2c, либо через spi, либо через что-то еще, чтобы указать ему управлять двигателем, а затем, возможно, какой-то аналог для работы с высокой мощностью, или, может быть, этот чип гибрид. так что вы должны знать все это или, по крайней мере, вы должны знать программную сторону всего этого, какой интерфейс и / или какие сигналы должны иметь изменения состояния, чтобы заставить двигатель что-то делать. это может быть так же просто, как создаваемый вами ШИМ, который усиливается между вами и двигателем. ШИМ может включать в себя сначала изучение того, как возиться с одним из таймеров, а затем либо с другим периферийным устройством, либо с подмножеством таймера, чтобы сделать из него сигнал ШИМ. здесь также очень полезен осциллограф или логический анализатор, или, если у вас есть другой микроконтроллер, вы можете сэмплировать gpio быстрее, чем генерируемый сигнал, вы можете превратить его в логический анализатор.

начните с поиска платы, помигайте светодиодом, выясните, как запустить таймер, точно помигайте светодиодом. выясните тактовую частоту, с которой вы действительно работаете, вместо того, чтобы гадать, выясните, как настроить UART, отправьте несколько символов, теперь у вас есть интерфейс отладки, знание того, каковы ваши эталонные тактовые частоты таймера, и теперь вы можете попытаться подсчитать до 10 секунд, а затем получить сигналы, необходимые для двигателя. рассчитывайте взорвать несколько досок, купите запасные части.

person old_timer    schedule 25.01.2016
comment
требуется некоторая сборка для запуска процессора и загрузки кода C, тогда C является предпочтительным следующим языком, вы можете использовать другие языки, если хотите, но это исследовательский проект, который отклоняется от поставленной задачи, все платы будут поддерживает либо только asm, либо C+asm. пока найдите плату, которая поддерживает c+asm. есть тонны их менее чем за 20 долларов, с разными наборами инструкций, если вам не нравятся arm или avr. - person old_timer; 26.01.2016
comment
говоря о том, что вы можете просто зайти на arduino.cc или mbed.org, вы технически голый металл, но сидите на куче библиотек, которые делают всю работу за вас, такой же опыт, как программирование в Windows или Linux, просто делая вызовы API. НО вы найдете щиты драйверов двигателей и двигатели, которые с ними работают, и код, который просто работает. Зависит от того, хотите ли вы узнать, как все работает за кулисами, или хотите просто посмотреть фильм. оба веселые, просто зависит от вашей реальной цели. сделать робота, чтобы он что-то делал, или узнать, КАК сделать робота, но, вероятно, не сделать его. - person old_timer; 26.01.2016
comment
аппаратное обеспечение arduino и mbed можно запрограммировать на «голом железе» без использования их песочниц, если вы хотите, вы можете воспользоваться преимуществами этого оборудования и узнать, как все работает (потратьте выходные, чтобы просто сдвинуть двигатель)… или вы можете использовать это оборудование и окружение песочницы и выбить робота или что-то еще днем ​​и заставить его делать классные вещи. - person old_timer; 26.01.2016