Forums

GCC / gnude无法使用libc.a?

开始于 迈克·皮杰尔 2013年4月16日
---在...中,迈克·皮尔写道:
>
>谢谢大家的意见。我已经尝试过人们拥有的东西 mentioned
>并研究了MAKE文档以更好地理解这一点。 still
>结果相似。

Makefile可以成为作品或艺术品。但不是我的,他们很直 前进,因为我的项目往往很小。

我在该论坛的文件文件夹中发布了一个Makefile。奇怪的是,它被命名为 'Makefile'。我将在几天后将其删除。

这个特定的文件被黑了。特别是自动依赖 在Windows上无法正常运行,因为我没有'awk'并且因为我没有 费心使它工作。

在底部,应该有完整的依赖项列表,例如:

main.o:main.c<some other file>.h, <etc>
<some other file>.o : <some other file>.c <some other file>.h

等等。对于您的示例,这没有必要,因为您只有 main.o取决于main.c。

>
>rtstofer:我想我现在明白了。通过使用malloc,free,sprintf,
>strlen等,我有义务创建一个堆管理器。我不在
>所有人都渴望这样做。我假设是否定义字符数组并生成 a
>指向字符数组的指针,我不再具有此义务。
>
> char c[100];
> char* pc=&c[0];
>
>我可以通过独立使用sprintf,strlen等使自己断奶
>从您建议的一种来源获取此例程。
>
>就像我过去告诉人们编写嵌入式程序一样
>软件...就像露营:随身携带您需要的东西 prepared
>自己制作(或完全不制作)。

我更喜欢静态分配的内存。我想要一切都在原地,我想要 以确保不时检查.map文件。

>
>我的小测试应用程序只是一个编译测试。我的真实
>应用程序(最初构建&确实使用keil进行了调试) an
>同时(1)例行。遗憾的是,该程序对于免费版来说太大了
>版本的keil,否则它仍然会存在。为了我的
>在应用程序中,keil编译器完全超出了我的价格范围。
>
>当我用main()替换__main()时,编译器抱怨没有
>能够找到__main()。

您在start.s中也有__main

>
>感谢您提供有关YAGARTO的提示。还有你的makefile。我不 know
>关于crt.s的任何事情;我所举的例子不包括那个。我是
>困惑地听到我还需要其他东西,但是没有或不知道
> anything about.

您的两个文件(ivt.s和start.s)组合在一起构成了crt.s。我不知道为什么 NXT用两个文件做到了。我知道的一件事是他们没有做任何人 简洁明了的任何优点。

如果可以在Linux机器上找到更合适的示例,我将发布整个 项目使用嵌套中断和更广泛的启动文件。我可以 可能会找到具有多个源文件和完整依赖项的内容 在makefile中列出。

我稍后再回发。

>
>至于不直接使用“ ld”,我想你是说我不应该 pass "-c"
> to gcc?

人们有各种处理编译和链接的方法。我打电话给ld 直接在我建立.elf目标时。但是我不需要.elf文件,我的最终文件 target是一个.hex文件,它取决于.elf目标。你可以看到 “全部”目标生成.hex文件以及显示 对象大小和列表。 .hex目标取决于.elf目标,并且 将文件格式从.elf更改为.hex。 .elf目标取决于 链接描述文件和所有.o文件,并将所有.o文件链接在一起 加上图书馆。等等...

>1.使用以下命令从malloc / free迁移到数组 所描述的指针
>2.在strlen,sprintf的几个替代产品中移植
>3.重试其余大部分内容
>
>我没有更大野心的部分原因是因为现在,我 not
>被不满足我平常的事情“冒犯” requirements.
>今天,我唯一的要求是它可以编译并实际 works...after
>总而言之,这只是我的一个项目...
>

“ Hello World”始终是一个不错的起点。许多代码必须 即使是这个小例子也可以正常工作。

我会四处寻找一个完整的项目,然后再发回。

理查德

LPC2100系列工程师指南

---在l ...中,“ rtstofer”写道:

>“ Hello World”始终是 开始。对于这个简单的示例,很多代码也必须正常工作。
>
>我会四处寻找一个完整的项目,然后再发回。
>
> Richard
>

我已经将ARM21148CFProgrammer.zip发布到files文件夹中。这是一个完整的 项目,包括一些字符串处理和转换例程。

您可以看到我的crt.s和合并的ivt.s之间的对应关系,以及 start.s.

我对各种堆栈大小有一些严重的怀疑。我复制了crt.s来自 某个地方,它原本不是打算支持中断的。 OTOH,像start.s中一样为FIQ和IRQ堆栈分配1000个字节 也不是正确的答案。但是,该代码运行良好。

该代码从SD / MMC卡(FAT文件系统)读取文件,然后重新格式化 扇区并将图像写入CF卡。

该项目从Linux下的命令行和Eclipse内部构建。 很长一段时间,我使用'gedit'作为编辑器,并使用命令行 建造。我发现使用Eclipse的速度更快,因为现在有了一个按钮 生成代码,并对代码进行编程。

当时我正在使用串行编程。这些天我会用 用于IDE的CrossWorks和用于JTAG编程的CrossConnect。两者都很好 well.

理查德
谢谢阿尔伯特!

mp

2013年4月16日星期二晚上10:27,al_bin写道:
> **
>W dniu 2013-04-17 05:53:15 uytkownik Mike Pijl
> napisa:
>
> [...]
>当我用main()替换__main()时,编译器抱怨没有
>能够找到__main()。
>感谢您提供有关YAGARTO的提示。还有你的makefile。我不 know
>关于crt.s的任何事情;我所举的例子不包括那个。我是
>困惑地听到我还需要其他东西,但是没有或不知道
> anything about.
>尝试Linaro。我认为更好。
>由于不包含crt.s或标准运行时,因此不会调用main()。
>然后,编译器会在优化过程中将其删除。
>但是链接器期望它
> [...]
>至于不直接使用“ ld”,我想你是说我不应该 pass "-c"
> to gcc?
>仅将其传递进行编译,
> >嗯,/ gnude / arm-elf / lib是有效的WINDOWS路径吗? ;-)
>使用unix路径,因为我是从CygWin运行它。
>好的。我的意思是,如果将此路径正确解析为dos路径。
> Albert
> __
> ._,
昨天一切正常。我去了“裸机”,所以我 had to
自己写一些例程,但是那不像我那么麻烦
预期。

谢谢大家的帮助!

mp