问题标签 [freestanding]
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.
c - 1k 的程序空间,64 字节的 RAM。1线通讯可以吗?
(如果您的懒惰请参阅TL;DR的底部)
您好,我正计划建立一个处理物理计算的新(原型)项目。基本上,我有电线。这些电线都需要同时读取它们的电压。每根电线的读数之间超过几百微秒的差异将完全搞砸。Arduino 大约需要 114 微秒。因此,在延迟会影响读数的准确性之前,我最多可以读取 2 或 3 根线。
所以我的计划是让一个 Arduino 作为一系列 ATTinys 的“主人”。arduino 的空间非常狭窄,但与 tinys 相比,它是一个巨大的游乐场。ATTiny13A 有 1k 的闪存 ROM(程序空间)、64 字节的 RAM 和 64 字节的(非耐用且慢速)EEPROM。(我选择这个是因为价格和尺寸)
我系统中的 ATTinys 不会做太多事情。基本上,他们所要做的就是等待来自主控的信号,然后读取 1 或 2 根线的电压并将其存储在 RAM 中(或者可能是 EEPROM,如果它那么狭窄的话)。然后仅使用 1 根数据线将其发送给主站。(没有更多空间!)。
到目前为止,我所要做的就是实现简单的电压读取代码(使用内置 ADC)。但我担心这个沟通位。您认为通信协议(仅使用 1 根线!)甚至可以在这样的约束下实现吗?
TL;DR:在不到 1k 的程序空间和 64 字节的 RAM(和 64 字节的 EEPROM)中,您认为有可能实现 1 线通信协议吗?我需要去组装以使其适合吗?
我知道目前我链接到 Wiring 库的 Arduino 程序超过 8k,所以我有点担心。
gcc - 如何使用 GCC 编译一个独立的环境?
我正在处理的代码应该可以为托管和独立环境构建,为后一种情况下的某些 stdlib 函数提供私有实现。
我可以在普通工作站/构建服务器上仅使用 GCC 可靠地测试它吗?使用 GCC 编译为独立环境
“-ffreestanding”选项看起来很有希望,但它似乎“仅”禁用内置插件并正确设置 STDC_HOSTED 宏,它仍然提供所有系统头文件。
选项“-nostdinc”过于严格;我仍然想使用独立实现所需的标头(特别是 stddef.h 和 limits.h)。
我在这里想念什么?
哦,我目前正在使用 GCC 4.4.3,将“很快”升级到 4.5.0。
gcc - 独立的 ARM C++ 代码 - 空的 .ctors 部分
我正在编写 C++ 代码以在独立环境(基本上是 ARM 板)中运行。除了我遇到了一个绊脚石 - 全局静态构造函数之外,它一直进展顺利。
据我了解,.ctors 部分包含每个静态构造函数的地址列表,我的代码只需要迭代这个列表并随时调用每个函数。但是,我发现我的二进制文件中的这一部分实际上是完全空的!谷歌指出使用“.init_array”而不是“.ctors”(一种 EABI 事物),但这并没有改变任何东西。
关于为什么我的静态构造函数不存在的任何想法?相关链接描述文件和 objdump 输出如下:
--
我正在使用一个针对 arm-elf 的 GCC 编译器(4.4.1)。
更新:输出二进制文件也充满了__static_initialization_and_destruction_0
我以前从未见过的符号。
更新 2:这是已编译目标文件(链接到主二进制文件)的 objdump 的摘录,其中 .ctors 部分完好无损:
c - 独立实施的各种 WG14 C 标准之间有什么区别?
实现以下每个不同标准的独立部分的编译器必须有何不同?支持所有模式所需的最少模式数(例如,由命令行标志指定)是多少?
- ISO/IEC 9899:1990
- ISO/IEC 9899:1990 + ISO/IEC 9899 TCOR1
- ISO/IEC 9899:1990 + ISO/IEC 9899 TCOR1 + ISO/IEC 9899 AM1
- ISO/IEC 9899:1990 + ISO/IEC 9899 TCOR1 + ISO/IEC 9899 AM1 + ISO/IEC 9899 TCOR2
- ISO/IEC 9899:1999
- ISO/IEC 9899:1999 + ISO/IEC 9899:1999 Cor。1:2001(E)
- ISO/IEC 9899:1999 + ISO/IEC 9899:1999 Cor。1:2001(E) + ISO/IEC 9899:1999 Cor。2:2004(E)
- ISO/IEC 9899:1999 + ISO/IEC 9899:1999 Cor。1:2001(E) + ISO/IEC 9899:1999 Cor。2:2004(E) + ISO/IEC 9899:1999 Cor。3:2007(E)
- ISO/IEC 9899:2011
c - gcc 中的 -ffreestanding 选项是什么?
ffreestanding
gcc 中有什么?它是干什么用的 ?我遇到了以下情况:
并且不明白,这到底是什么意思。
gcc - 独立的 GCC 和内置函数
http://gcc.gnu.org/onlinedocs/gcc/C-Dialect-Options.html上的 GCC 文档说(在 下-ffreestanding
)独立环境意味着-fno-builtin
。我可能会误解什么是独立环境或它是如何工作的,但在我看来,由于内置程序通常会发出内联代码而不是调用库函数,这对于可能缺少标准库的独立环境来说是理想的功能甚至完全缺失。
那么为什么我们不想在独立的环境中使用 biltins 呢?
assembly - 从另一个程序集文件调用程序集程序?
只是一个简单的问题:
假设我有以下两个汇编程序:
1:
2:
我可以add10
从第二个文件调用(在第一个文件中声明),反之亦然?如果是这样,怎么办?(即使不可行)
注意:这将在裸机上运行,而不是在任何花哨的 NT 调用上!
谢谢。
编辑:我在 Windows 上使用 NASM。
c - GCC 可以为独立环境创建与位置无关的代码吗?
我一直认为位置无关代码(PIC)的生成基本上只取决于编译的 CPU。但是,在GCC 文档中阅读此内容后:
对于 386,GCC 支持 System V 的 PIC,但不支持 Sun 386i。
(说明创建 PIC 的能力取决于操作系统),我想知道:
当没有操作系统时,GCC 可以为独立环境创建与位置无关的代码吗?
c - 独立实现和托管实现之间是否存在有意义的区别?
我的问题主要与第四节第六段有关。
两种形式的一致性实现是托管的和独立的。符合要求的托管实现应接受任何严格符合要求的程序。
据我了解,这构成了典型的应用程序环境,具有文件系统、分配的内存和线程......
符合标准的独立实现应接受任何严格符合标准的程序,其中库条款(第 7 条)中指定的功能的使用仅限于标准头文件
<float.h>
、<iso646.h>
、<limits.h>
、<stdalign.h>
、<stdarg.h>
、<stdbool.h>
、<stddef.h>
、<stdint.h>
和的内容<stdnoreturn.h>
。
...这构成了典型的内核和/或嵌入式、最小的环境,没有标准文件系统、分配的内存或线程(除其他外)。
一个符合要求的实现可能有扩展(包括额外的库函数),只要它们不改变任何严格符合的程序的行为。
似乎这使托管实现可以自由地将自己称为托管或独立实现,并且当涉及到文件系统、分配的内存或线程(以及其他事物)时,这些可以属于扩展类别,因此它只能实现一个接口,每次都返回一个指示错误的值。仅举几个:
fopen
,fgets
并且malloc
可以返回NULL
fprintf
,fscanf
,fputc
并且fgetc
可以返回EOF
thrd_create
可以返回thrd_error
(表示“请求无法被兑现”)
这意味着第四节、第六节给出的区别实际上是没有意义的。是否有任何要求可以保证这些功能在托管和独立实现中的某些实际功能级别?例如,是否要求上面的那些函数实际上能够返回它们相应的失败值以外的东西?