花了小半天 搭了个全新版本 eclipse + gcc,
嘎嘎新的 eclipse
gcc也是最新版本的13.2
离线
离线
用来开发单机程序, 相比 keil, iar, 感觉 太拉胯了, 效率太低了, 电脑占用也多,
干什么还是用什么工具吧,
抽空再折腾.
离线
只以keil/iar的方式使用Eclipse工具链当然不能体现出它的优点。
比如,在Linux用Eclipse重新编译包含约100个C文件的工程,我2019年配的机器所需编译通常不会超过2秒,那才爽!
再比如,Eclipse搭配Git才能体验代码管理的乐趣,如下图。
版本标尺:用于查看当前文件的代码的不同部分是谁/什么时候/怎么写的
文件对比与合并:用于对比仓库中任意版本,并且可以将右边的变动合并到左边
当前修改标尺:用于查看当前未提交的内容对比仓库最新版改了什么
还有很多功能就不一一列举了。
如果你的机器跑Java软件都觉得很慢,平时又不用git,就当我没说。
最近编辑记录 海石生风 (2023-12-22 11:32:35)
离线
工欲善其事必先利其器
我最近在考虑电脑买新的问题。
中意的电脑是龙芯loongarch 全国产 又用开源linux软件
衡量了一下自己的技术动手能力。嗯~ 觉得还得等一等
X86 win 有着几十年生态积累。
虽然每个人有各自的喜好。
但从干活工具的角度出发,不给自己找额外的麻烦是最好的。
毕竟干活已经有很多bug要解决了,还要连带解决工具上的问题,那可太累了
离线
@海石生风
我感觉eclipse的编译速度超级的慢,不知与我的设置是否有关。我的电脑是8核心16线程,不算老。
就上面的小程序,可能有几十个小文件,编译的时候,以肉眼可见的速度,一个一个的慢慢闪现。
clean后, 几k小程序 仅编译 估计都要3-4秒。是绝对的单线程 在编译。
相比 IAR的 多线程编译。速度估计差 十倍。
IAR的编译电脑核心和线程数是可以设置的,编译大项目很实用。没看到eclipse有类似的设置。
倒是看到eclipse 不必要的,没用的重复的设置太多了。非常的繁琐。估计有几千个设置项。
个人感觉IAR的编译质量,代码安全性,非常的高。eclipse给人拼凑 不专业的感觉。
n年前,记得玩AT91SAM9261时,用过一段eclipse,到现在,易用性是 一点没提升。
离线
@fubaojun2006
说的不错,工欲善其事必先利其器,
我这也是纯属 个人 爱好。闲时 一个 乐趣。
话说上面的那个小程序,可花了我不少时间,这个错误,那个提示的。
离线
发现一个有意思的问题。eclipse 生成的stm32程序,竟然没有类似startup.s的汇编启动文件。
没有汇编,它是如何准确定位中断向量的。
离线
发现一个有意思的问题。eclipse 生成的stm32程序,竟然没有类似startup.s的汇编启动文件。
没有汇编,它是如何准确定位中断向量的。
应该是隐含了,不然可以看看obj 或者反编译 HEX 看看 就知道启动文件了。不然怎么会跑起来呢
Eclipse + gcc , 我在 12年前 做STM32毕业设计的时候,构建了这一套工具链在网上参考的资料。
当时也是想着代码洁癖,使用纯开源工具链。
折腾很久,外加有一个汇编编译报错。
后来感觉这种事情真的是出力不讨好,也是点个灯,后来为了套用安富莱的代码就还是用回了keil
啊,我那不堪的回忆~
离线
发现一个有意思的问题。eclipse 生成的stm32程序,竟然没有类似startup.s的汇编启动文件。
没有汇编,它是如何准确定位中断向量的。
在vectos_stm32f103xb.c里有定义向量表__isr_ectors[],在sections.ld里把向量表定义在flash 0x08000000位置,stm32上电后从这里运行即可。startup.s是st库里常用写法,但不是唯一方法
离线
另外编译速度问题,eclipse最终还是调用的make,只要make的参数一样,不管是编译速度还是编译出来的target都是一样的,IDE只是方便了管理,熟悉了编译器原理及参数后,不用IDE也是一样的。上面用eclipse编译stm32这个demo时,勾选上C/C++ Build->Behavior->Enable Parallel build,就会调用cpu全部线程编译,也就是make -j16(cpu16线程),如果没勾选,只会单线程编译,速度当然慢了
离线
基于Eclipse的IDE挺多的,TI的CCS,WCH的MounRiver,ST的CubeIDE,芯来的NucleiStudio,都挺好用的。
单纯编辑方面Eclipse挺好用的,可以媲美vscode和SourceInsight。至于编译,这个和Eclipse没关系,是编译器的事情。
离线
vscode+gcc+rtt 贼舒服😌
离线
发现一个有意思的问题。eclipse 生成的stm32程序,竟然没有类似startup.s的汇编启动文件。
没有汇编,它是如何准确定位中断向量的。
简单啊,一个函数指针数组。
void __attribute__(("noreturn")) reset(void) {
}
typedef void (*intr_func)(void);
enum intr_vector_t {
RESET,
XXXX,
};
intr_func intr_vec[] = {
[RESET] = xxx_reset,
[XXXX] = xxx_func,
};
然后再用gcc的链接脚本把intr_vec链接到最前面去就行了。
离线
在vectos_stm32f103xb.c里有定义向量表__isr_ectors[],在sections.ld里把向量表定义在flash 0x08000000位置,stm32上电后从这里运行即可。startup.s是st库里常用写法,但不是唯一方法
本质不单单是中断向量表,而是启动代码,即执行main函数之前的初始化.DATA段和.BSS段的代码是用C语言写的。
之所以能用C语言实现启动代码,是因为cortex-m的中断向量表的前4个字节的值为栈指针位置。MCU启动时先从中断向量表获取栈指针位置,确定了栈位置C语言的运行环境就初始化OK了,就可以调用C函数了。
至于中断向量表的定位是通过链接脚本指定的:
先在C语言里指定中断向量表这个数组所处的段(section)
__attribute__ ((section(".isr_vector"),used))
pHandler __isr_vectors[] =
{
(pHandler) &_estack, // The initial stack pointer
Reset_Handler, // The reset handler
...
};
再在链接脚本里指明这个段的链接位置:
MEMORY
{
FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 512K
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 192K
}
SECTIONS
{
/*
* For Cortex-M devices, the beginning of the startup code is stored in
* the .isr_vector section, which goes to FLASH.
*/
.isr_vector : ALIGN(4)
{
FILL(0xFF)
KEEP(*(.isr_vector)) /* Interrupt vectors */
} >FLASH
链接脚本里的内容是按出现的先后顺序排列的,isr_vector 写在最前所以就链接在FLASH起始位置。
最近编辑记录 海石生风 (2023-12-22 18:11:20)
离线
@506826164@qq.com
老兄, 你太帅了, 编译时间直接直接从15s变成3s多了,
可是看不到编译输出的文件大小了, 在哪打开呢?
变成3.7s了,快了不少.
离线
@baidxi
简单啊,一个函数指针数组。
void __attribute__(("noreturn")) reset(void) {
....
这么做, 好巧妙啊.
离线
我又发现一个小问题 eclipse, 是不是 不能打开不同版本的 项目, 我下载了其它网友的程序,
用我的 新版本eclipse 强制打开后, Project Explorer 是空的.
如此重新导入, “File”->“Import”->“General”->“Existing Projects into Workspace”....
又是一堆乱七八糟的警告和错,
莫非打开一个旧的工程, gcc也要换成旧版的才行?
离线
重新设置了一下eclipse,又生成了一个小程序, 打开了多线程编译,不产生elf文件了.
关掉多线程编译,可以了,
哪位老兄有空帮我配置一下,下面这个闪LED的小程序, 应该是哪里设置不对.
prog_eclipse.rar
https://whycan.com/files/members/834/prog_eclipse.rar
仿真时,卡死在这里了,没弄清楚启动时,搬运了什么数据段.
离线
绕了一圈, 感觉还是IAR简洁, 和51差不多, 不用费神编译问题.
原来IAR已经原生支持先楫的RISC-V了,还带原厂SDK;
编译速度依旧是秒过.
支持的RISV芯片还不少, GD,WCH,ESP32, 海思竟然也有, 海思不是被制裁了吗.
离线
@musich
我也喜欢IAR的简洁高效。可目前还得不到risc-v的和谐,只能是限制版;请问楼主有经验分享吗?
离线
@musich
我也喜欢IAR的简洁高效。可目前还得不到risc-v的和谐,只能是限制版;请问楼主有经验分享吗?
这是目前最新的IAR RISC-V, ver3301, 直接覆盖原有文件就可以了.
EWRISCV_3301_Win64_PatchFiles.zip
离线
@musich
费心劳神的到处找破解,,就算找到了还要担心破解有没有病毒、有没有后门,,会不会检测到破解不声不响的故意产生错误编译结果。。
离线
@musich
费心劳神的到处找破解,,就算找到了还要担心破解有没有病毒、有没有后门,,会不会检测到破解不声不响的故意产生错误编译结果。。
哈哈, 多虑了, or用免费或正版就没这些问题了.
离线
谢谢楼主!IAR能用还是优先使用它的,其次是Segger的,最后才是散装gcc。
离线
放了几天没动,今天打开,只要编译,就会闪退,怪事。
真是神物,捉摸不透。
离线