我如何编写一个简单的裸机程序?

时间:2016-01-25 17:38:01

标签: bare-metal

假设在这里:假设你有一个处理器连接到某种形式的USB存储器和电机。我怎么写一个简单的裸机程序来告诉电机移动10秒钟?我想学习如何裸机程序,并有一个程序来查看和分析将是美好的。 (任何语言都会很棒)

1 个答案:

答案 0 :(得分:1)

1)您必须了解有问题的处理器是如何启动的。核心处理器本身就是非易失性存储器。例如,覆盆子pi有点独特,因为逻辑(或片上rom?)中有东西读取SD卡,启动gpu,然后gpu将arm程序复制到ram并将arm释放到内存。大多数微控制器都有板载闪存和RAM,闪存映射到处理器引导的地址空间和/或供应商提供的引导加载程序引导处理器然后调用代码。

2)您必须学习如何启用和初始化您需要使用的外围设备。一个计时器,如果你想数到10秒钟。

3)编写应用程序。

调试是一个技巧,你有时可以通过jtag使用硬件调试器,或者有时通过gdb或某些其他程序如uart使用rom监视器。或者几乎总是有一个闪烁的led或uart发送文本或数字以查看正在发生的事情。当然还有示波器,你可以摆动gpios或做其他事情,并在示波器上看到它们。

驱动电机太通用了你需要专门知道什么样的电机以及如何驱动它,你可能没有机会直接从微控制器驱动它,你可能有一些晶体管h桥外的东西或隔离的东西微控制器或你有一个特定类型的电机驱动芯片/电路,你通过离散信号,或i2c或spi,或其他告诉它驱动电机,然后可能是一些模拟处理高功率或可能那芯片是混合型的。所以你必须知道所有这些,或者至少你必须知道所有这些的编程方面,什么接口和/或什么信号必须具有状态变化,以什么方式使电机做某事。它可能就像你创建的pwm一样简单,它在你和电机之间放大。 pwm可能涉及首先学习如何弄乱其中一个定时器,然后是另一个定时器或定时器的子集,以从其中产生pwm信号。示波器在这里也非常有用,或者逻辑分析仪,或者如果你有另一个微控制器,你可以比生成的信号更快地采样gpio,你可以把它变成逻辑分析仪。

从寻找电路板开始,使LED闪烁,找出如何运行定时器,准确地使LED闪烁。找出你真正运行的时钟速率而不是猜测,弄清楚如何配置uart,发送一些字符,现在你有一个调试接口知道你的定时器参考时钟速度是什么,现在可以尝试计数到10秒,然后进入电机所需的信号。期待炸毁一些木板,买一些备件。