杨为民 发表于 2024-9-2 14:10:48

liuzonggong 发表于 2024-9-2 07:34
这个好,避免了Keil公司想起诉的意图了。

金水151编译器虽然目前不足以与C51/C251抗衡,但是笔者认为原子弹有了就好,够一般用就行。

soma 发表于 2024-9-2 14:37:25

杨为民 发表于 2024-9-2 14:10
金水151编译器虽然目前不足以与C51/C251抗衡,但是笔者认为原子弹有了就好,够一般用就行。 ...

发现金水151编译出来的程序有点大中间一部分是空,且在编译提示里面写使用2个库文件,不知道是什么。

杨为民 发表于 2024-9-2 15:03:04

soma 发表于 2024-9-2 14:37
发现金水151编译出来的程序有点大中间一部分是空,且在编译提示里面写使用2个库文件,不知道是什么。 ...

(1)程序占用CODE空间大是目前没有引入任何空间优化措施。

(2)CODE空间中空的0000H~0300H空间是预留给0~94号中断矢量的。
(3)那两个基本库是支持金水明80151指令集的32位的整数和浮点数运算的函数库。
(4)由于目前STC单片机的MDU32和TFPU32并没有涵盖一个“完整的32位指令集”,因此对于STC单片机目前没有具备的32位指令,只能用“虚拟CPU”的方法来完成。
(5)与长缨系列编译器不同,金水151已经支持目前STC全系列的单片机类型,从8051指令集的STC89到STC8H到最新的AI8051U-8BIT,从80251指令集的STC32G/F到AI8051U-32BIT。
因此对于那些没有MDU32和TFPU32加速器单元的STC单片机,那两个基本库仍然是必须的。

qizhiguang 发表于 2024-9-2 15:33:59

下来试试一下,STC那么强是该有自己的编译器了

soma 发表于 2024-9-2 15:48:21

杨为民 发表于 2024-9-2 15:03
(1)程序占用CODE空间大是目前没有引入任何空间优化措施。

(2)CODE空间中空的0000H~0300H空间是预留 ...

好的明白了,希望金水151能成为一个能完全替换且超越keil的存在。

lijn 发表于 2024-9-2 19:19:31

杨为民 发表于 2024-9-2 14:04
(1)STCIDE+金水151编译器是试用阶段,感谢你分享你的使用体验和提出的问题。

(2)由于你的这个问题既 ...

杨老师,谢谢解答。您开发的这个编译器已经很好了。

杨为民 发表于 2024-9-3 09:00:33

lijn 发表于 2024-9-1 20:30
谢谢指导,可以编译C文件了。但编译汇编文件不成功。7个错误,但没有提示在什么地方。 ...

(1)再次感谢你分享你的使用经验,让我找到了金水151编译器的一个BUG。(2)我根据你给出的程序截图重建了一个Keil的项目:
(3)我用STCIDE打开这个项目:
然后进行编译,结果果然是有7个错误:
(4)这让我看到了金水151编译器V2.2版的一个重要BUG:对汇编语言进行编译时具体的每个出错信息没有显示到STCIDE的“输出信息框”中。这个BUG会在以后得版本中解决。
(5)不过为了支持第三方IDE用“MakeFile”的方法使用金水151编译器,编译后所有的编译信息(包括汇编语言出错信息)都会存放在一个与项目工程名称相同的MSG文件中:
(6)MSG文件是一个文本文件,可以用写字板等程序打开查看。对上面程序编译后的MSG文件的内容如下:
这些错误主要由于红绿灯的BIT定义错误引起的,即第4行和第5行中BIT定义的基地址P0没有定义引起的。
(7)如果加上P0端口定义和支线红灯定义(第1、2行程序),编译就可以通过了,下面是完整的程序:
(8)对编译结果HEX文件进行反汇编得到以下结果:
从中可以看出这个编译结果是正确的。(9)重要说明:在上面程序中,对于没有定义的500ms延时函数“DELAY”,函数地址被编译为0000H,并且没有进行出错检测。用户得自己注意(10)笔者在设计金水151时采用这个Keil的C51规范的考虑是为了“避免无用代码扩散”,直接忽略没有定义的函数。比如A模块(一个源程序文件)调用了B模块的一个函数FN1,那么就需要加载模块B。但是如果模块B中还有其他在本项目中没有用到的函数FN2,在FN2中调用了模块C中的函数,这时编译器就需要一个策略来决定要不要加载模块C。
由于本项目没有用到函数FN2,自然也不会用到模块C的任何内容。这时如果加载模块C,就会造成空间浪费,甚至造成连锁反应,还需要加载项目中并没有使用的模块D、模块E等等,这个现象称“无用代码扩散”。如果终止可能的连锁反应,不加载模块C,那么函数FN2就没有完整实现,因为其中访问了不存在的函数,就像上面例子的延时函数DELAY。

xiangzichen 发表于 2024-9-3 11:33:08

真心希望我们自己的编译器越来越健壮.

网老四 发表于 2024-9-3 12:30:39

必须支持

lyldzxx 发表于 2024-9-3 14:16:09

杨老师是STCAI官方的吗?
页: 1 [2] 3 4 5 6
查看完整版本: STCIDE + 金水151 + AIapp-ISP:全国产纯绿色的80x51单片机软件开发工具链