问题标签 [bare-metal]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
embedded - 裸机系统的软件测试
我正在用 C++ 为不支持操作系统的嵌入式系统编写一个项目;几乎没有库支持。非常裸机。因此,我的相当多的代码是紧密耦合的(例如,软件触发的中断和它们正上方的层)。
我正在做的部分工作涉及更改串行端口配置,从而驱动 PC 端(UI 端)和微处理器(活动端)的并发更改。到目前为止,我在一个非常小心的增量类型开发中做得很好(一块一块地安装它)。但是,我希望对我的代码在工程意义上的工作更有信心。
对于这种情况,您会推荐什么样的方法/框架?
编辑:
我在 Tern, Inc. 制造的 ACore86 板上使用 AMD186 ES。编译器:Paradigm,免费版(随板提供)。不幸的是,我没有选择改变我正在做的事情。
c - 如何使用 x86 裸机组件获取键盘输入?
我正在尝试将内核的第一部分组合在一起。我目前将整个内核编译为 C 代码,并且我已经设法让它在控制台窗口中显示文本以及所有这些优点。现在,我想开始接受键盘输入,这样我就可以实际使用它并继续进行流程管理。
我正在使用 DJGPP 进行编译,并使用 GRUB 加载。我还使用了一小部分程序集,它基本上直接跳转到我编译的 C 代码中,我很高兴从那里。
我所做的所有研究似乎都指向 $0x16 的 ISR 以从键盘缓冲区中读取下一个字符。据我所知,这应该将 ASCII 值存储在 ah 中,并将键码存储在 al 中,或者类似的东西。我试图在内联汇编中使用以下例程对此进行编码:
调用此代码时,核心立即崩溃。(我在 VirtualBox 上运行它,我觉得没有必要在真实硬件上尝试这种基本的东西。)
现在我实际上有几个问题。没有人能够告诉我(因为我的代码是从 GRUB 启动的)我目前是在实模式还是受保护模式下运行。我没有以一种或另一种方式进行跳跃,我计划在实模式下运行,直到我设置了一个进程处理程序。
那么,假设我在实模式下运行,我做错了什么,我该如何解决?我只需要一个基本的 getc 例程,最好是非阻塞的,但如果谷歌在这方面提供帮助,我会感到很糟糕。一旦我能做到这一点,我就可以从那里做剩下的事情。
我想我在这里要问的是,我在正确的轨道附近吗?通常如何在这个级别上获得键盘输入?
编辑:哦……所以我在保护模式下运行。这当然解释了尝试访问实模式功能时的崩溃。
那么我想我正在寻找如何从保护模式访问键盘 IO。我也许可以自己找到,但如果有人碰巧知道,请随意。再次感谢。
c - 无操作系统执行
如何将C程序编译为有效的ELF格式(或 RAW 格式),以便可以在没有任何操作系统的情况下直接从 RAM 执行?假设存在一个引导加载程序,它能够将代码加载到 RAM 中的任何位置并在该地址开始执行。准确地说,编译器(GCC)标志应该是什么?是否需要地图文件?
一个示例 helloworld 应用程序将是最受欢迎的 :)
只是为了详细说明我的观点,
让 main() 方法是一个空的无限 while 循环,以确保不使用特定于操作系统或标准库的调用。所需的 o/p 是一个挂起。使用通常的GCC选项,引导加载程序肯定无法加载可执行文件,告诉它是无效的ELF格式。但是,通过将-dN选项传递给链接器将使其成为有效的ELF。需要更多编译器/链接器选项才能使其挂起而不崩溃!!这些编译器选项到底是什么?
编译
gcc -c -nostdinc -fno-builtin
file.c ld -dN -nostdlib file.o
Bootloader 将a.out加载到 RAM 并执行。
hardware - 普通开发人员应该对裸机了解多少?
前几天让我震惊的是,我对我希望我的软件运行的硬件几乎一无所知。我已经做了大约 5 年的开发人员,但自从我离开大学后,我就没有研究过硬件理论/设计。我什至不再制造我自己的机器了,因为说实话,我宁愿多花几块钱,让 Comp Sci 退出来为我制造它。
虽然很好地理解底层发生的事情的基础知识显然很重要,但它离我们如此遥远,作为开发人员,我们真的不需要关心复杂的Programmed I/O
or Memory-Mapped I/O
etc,..
还是我们?
请注意,我在这里谈论的是您的日常 LOB 开发人员,而不是专门的裸机人员。
所以,定义“平均”你将如何,但总体而言,一个称职的程序员应该能够潜入多深?
opencv - 从 OpenCV 移植函数
我想将一些函数从 OpenCV 库复制到我的嵌入式应用程序。重写它们以使用标准数据结构真的很痛苦,所以我尝试了以下方法:
我没有收到任何丢失的标题错误,但有很多
错误:数字常量之前的预期不合格 id
对于像这样的线
和错误:一元'&'中的左值无效</p>
对于像这样的线
其中 _U、_V 等以前被定义为 CvMAt 变量。(没有关于未定义 CvMat 的编译器错误)
我正在使用 bfin-elf-g++ (GCC) 4.1.2 (ADI svn),目前我的实现是裸机,即没有任何操作系统。
有什么建议吗?我只对这个文件中的几个函数感兴趣,而不是整个包。
assembly - MBR 从 DOS 启动
对于一个项目,我想直接从 DOS 调用第一个硬盘上的 MBR。我编写了一个小型汇编程序,它在 0:7c00h 将 MBR 加载到内存中,并跳到了很远的地方。我已将我的实用程序放在(DOS)可引导软盘上。我正在尝试引导的磁盘(HD0,0x80)上有一个 TrueCrypt 引导加载程序。当我在此设置中运行该工具时,它会显示 TrueCrypt 屏幕,但在输入密码后它会导致系统崩溃。当我在普通的 WinXP 机器上运行我的小实用程序 (w00t.com) 时,它似乎立即崩溃了。
显然我忘记了 BIOS 通常会做的一些关键事情,我猜这是微不足道的。有更好的裸机 DOS 和 BIOS 经验的人可以帮助我吗?
这是我的代码:
bootloader - 在裸机操作系统上运行单个任务
我想从linux交叉编译一个ansi c程序,以获得一个可以读取单个文件并写入x86上的单个文件的最简单的操作系统。然后我想重新启动到那个裸操作系统,并运行那个程序。我的选择是什么?
embedded - 没有操作系统的 TCP/IP 协议栈
我正在寻找可以在没有操作系统的情况下使用的 TCP/IP 堆栈。我们的客户对中断有一种“反感”,并且不希望我们正在构建的嵌入式板上有一个真正的操作系统。由于我们将仅使用 50 到 100 MHz 的 Arm,因此希望将尽可能多的功能转移到 FPGA。而且我很确定这个客户不会接受 GPL 许可的东西。(由于与之相关的法律泥潭。他们希望在软件完成后对软件拥有完全不受限制的权利。)
shared-libraries - 如何为裸机臂应用程序编写动态加载程序
我正在开发一个基于 arm9 处理器的项目。我们只使用没有任何操作系统的裸机,所以很遗憾我们还不支持共享库/动态加载器。
我希望能够从 SD 卡加载库,它也可以从主应用程序调用函数。
我的第一次尝试是使用链接器覆盖功能(将库放置在特定的绝对定位部分中),但是正如我之前提到的那样,调用主应用程序函数存在问题->每次更改主应用程序时都必须重新编译库能够回调。
根据这一点,我将不得不编写自己的动态加载器,但我是这方面的新手。请有人给我任何例子如何处理它或如何开始这样的项目?我们使用 gcc 作为 arm-elf 目标。
问候简
oop - 裸机上的面向对象语言
我知道 C++ 和 Object Pascal,但是是否还有其他面向对象的语言,其编译器目前可以编译它们以在没有操作系统的机器上运行?如果有,他们是否拥有庞大的社区和可接受的良好文档?