迪文科技论坛

 找回密码
 立即注册
搜索
查看: 1487|回复: 11

【提问】OS 代码空间的问题

[复制链接]

4

主题

37

回帖

201

积分

中级会员

Rank: 3Rank: 3

积分
201
发表于 2023-11-29 17:33:47 | 显示全部楼层 |阅读模式
资料上显示,T5L51内部的两个51芯片,程序空间都是64K,这也是标准的51内核能支持的最大code(只有16根数据线)大小。
而我使用的情景,需要自己写OS代码,当成一个Host,自己控制GUI,还要与外部核心板(负责业务逻辑)通讯,这样很多显示的不同语言的切换,以及页面的按键和切换,都交给OS来做。
问题就来了,由于迪文只能一个一个页面的写,哪怕两个页面很相似也必须写成两个,这会导致代码量急剧增加。现在我的方式是自己手动优化代码,该合在一起的代码合在一起,然后把编译器优化级别调成最高(我印象中一般编译器最高优化级别是有风险的,所以我自己的习惯是使用次高优先级别),堪堪能装下。
我记得以前用51的时候,貌似有什么分bank技术,不知道有没有人有什么办法(官方的更好)能让OS有更大的代码空间?我相信真正用过迪文深入了解的人,会知道它深层次的优点和缺点。
回复

使用道具 举报

15

主题

117

回帖

2042

积分

金牌会员

Rank: 6Rank: 6

积分
2042
发表于 2023-11-30 09:17:00 | 显示全部楼层
动态加载。一部分代码固定,一部分代码通过flash实时加载进来运行,可以扩展的空间理论上不限制。
回复

使用道具 举报

4

主题

37

回帖

201

积分

中级会员

Rank: 3Rank: 3

积分
201
 楼主| 发表于 2023-11-30 10:19:55 | 显示全部楼层
cuijia 发表于 2023-11-30 09:17
动态加载。一部分代码固定,一部分代码通过flash实时加载进来运行,可以扩展的空间理论上不限制。 ...

刚才有看论坛其他大佬的说法。貌似是用迪文的那个OS来做,现在我的OS完全是自己用keil写的那种
回复

使用道具 举报

15

主题

117

回帖

2042

积分

金牌会员

Rank: 6Rank: 6

积分
2042
发表于 2023-11-30 10:57:06 | 显示全部楼层
幽游梦蝶 发表于 2023-11-30 10:19
刚才有看论坛其他大佬的说法。貌似是用迪文的那个OS来做,现在我的OS完全是自己用keil写的那种 ...

我这里有两个具体实施方案,您可以参考下,

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

4

主题

37

回帖

201

积分

中级会员

Rank: 3Rank: 3

积分
201
 楼主| 发表于 2023-11-30 11:52:02 | 显示全部楼层
cuijia 发表于 2023-11-30 10:57
我这里有两个具体实施方案,您可以参考下,

谢谢               
回复

使用道具 举报

4

主题

37

回帖

201

积分

中级会员

Rank: 3Rank: 3

积分
201
 楼主| 发表于 2023-11-30 17:30:38 | 显示全部楼层
cuijia 发表于 2023-11-30 10:57
我这里有两个具体实施方案,您可以参考下,

刚才有稍微啃一下您给的代码,方案二似乎有些致命缺陷,不太实用。
回复

使用道具 举报

4

主题

37

回帖

201

积分

中级会员

Rank: 3Rank: 3

积分
201
 楼主| 发表于 2023-12-1 12:49:58 | 显示全部楼层

我想我理清楚了芯片底层的逻辑,两份文档描述都有点问题(看上去有些互斥,但至少是有歧义的),我在琢磨是不是另开一个帖子来描述这个。
从发布的demo的文件日期来看,其实方案二是2021年先发布的,方案一才是2022年后来发布的,从我个人的分析来看,方案一要优于方案二很多。
回复

使用道具 举报

15

主题

117

回帖

2042

积分

金牌会员

Rank: 6Rank: 6

积分
2042
发表于 2023-12-1 13:49:02 | 显示全部楼层
幽游梦蝶 发表于 2023-12-1 12:49
我想我理清楚了芯片底层的逻辑,两份文档描述都有点问题(看上去有些互斥,但至少是有歧义的),我在琢磨 ...

对,用方案一,方案二加载代码的时候要关总中断,这个就不太好,中断数据可能会丢。
回复

使用道具 举报

4

主题

37

回帖

201

积分

中级会员

Rank: 3Rank: 3

积分
201
 楼主| 发表于 2023-12-1 14:55:01 | 显示全部楼层
关于我认为方案二有缺陷,我暂时能想到的:
1、切换D_PAGESEL本身就是一种不安全稳定的行为
2、文档也描述了,切换函数不能使用外部的变量(xdata),对于8051内核来说,内部才256(idata),又要用来做堆栈,其实T5L51的速度不是问题,但data/idata不要轻易去使用
3、在切换搬运的过程中产生了中断,如果中断中又对xdata进行了改变,这个就是大事件了。有人说屏蔽掉中断呀,他妈的,如果实时性要求高,不允许中断呢?(我的系统就如此)
4、这个两种方案应该都可能是个隐患,在于Keil C51独特的编译,有一个overlay的技术,我暂时还不能确定会不会成为大麻烦。
回复

使用道具 举报

15

主题

117

回帖

2042

积分

金牌会员

Rank: 6Rank: 6

积分
2042
发表于 2023-12-1 17:09:22 | 显示全部楼层
幽游梦蝶 发表于 2023-12-1 14:55
关于我认为方案二有缺陷,我暂时能想到的:
1、切换D_PAGESEL本身就是一种不安全稳定的行为
2、文档也描述 ...

这个动态加载在实际项目中有很多应用了,基本都比较稳定。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|迪文科技论坛 ( 京ICP备05033781号-1 )

GMT+8, 2026-4-15 06:15 , Processed in 0.025485 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表