找回密码
 立即注册
查看: 26|回复: 5

动态链接的设想

[复制链接]
已绑定手机

61

主题

411

回帖

1103

积分

金牌会员

积分
1103
发表于 4 小时前 来自手机 | 显示全部楼层 |阅读模式
同样的功能,比如oled显示,flash读写,文件系统,bootloader里面有,用户程序里也要用,那放两份同样的代码很浪费空间啊。能不能获取bootloader里面的函数地址。写一个函数表(只有声明,以及其跳转地址),开发用户程序时候直接把函数表编译进去,使用时自动跳转到bootloader里面的对应函数来执行。
这样底层api我就可以都藏到bootloader里面充当“系统调用”,你开发你的用户程序,想操作硬件就走“系统调用”,既节省空间,又可以保证我的核心代码不泄露,还可以使用户程序完全和硬件无关(硬件操作都封装成APi运行时链接,换硬件只用换一套函数表即可),有尝试过的吗
回复

使用道具 举报 送花

已绑定手机

61

主题

411

回帖

1103

积分

金牌会员

积分
1103
 楼主| 发表于 4 小时前 来自手机 | 显示全部楼层
更进一步,如果能写出来完全自包含的函数,把他编译到固定地址,是不是就可以被rtos当做任务函数直接挂载(这个有点抽象,而且自包含不是很现实,除非用一点tirck)
回复

使用道具 举报 送花

已绑定手机

61

主题

411

回帖

1103

积分

金牌会员

积分
1103
 楼主| 发表于 4 小时前 来自手机 | 显示全部楼层
完全自包含不是很现实,你总得调用外部函数吧,你总得操作外设吧,这怎么搞?问题就在这了,如果你要用刚刚动态链接的思路,把外部调用以函数表的形式给出,加载器的rtos这边提供好所需的所有函数,那完全自包含不就很容易了,说不定还有戏,有想品鉴一下的吗
回复

使用道具 举报 送花

已绑定手机

61

主题

411

回帖

1103

积分

金牌会员

积分
1103
 楼主| 发表于 4 小时前 来自手机 | 显示全部楼层
就是说bootloader加载跳转userapp了就拉回不来了,控制权全交出去了。如果能在bootloader里跑个抢占式rtos,userapp是一个完全自包含的函数。完全自包含是很严格的条件,本来很不实用几乎嘛也干不了,但是加载器提供给你了函数表,于是乎userapp可以使用“系统调用”的方式发挥功能。同时,如果划分多个app,并在“系统调用”的函数里塞个垫片劫持一下,就可以实现多任务同时发起一个调用时候的“锁”,感觉这样就很美妙了(已经开始幻想了?),这么搞有可行行吗
回复

使用道具 举报 送花

已绑定手机

61

主题

411

回帖

1103

积分

金牌会员

积分
1103
 楼主| 发表于 4 小时前 来自手机 | 显示全部楼层
因为是待加载的完全自包含,并且系统调用肯定是你事先写好的不会有bug的代码(额,这个层面有💩那啥也别说了),所以还有个先天优势就是相比于普通rtos你没那么容易把系统写死,因为毕竟完全自包含这个限制下,你不能随便拉一个外部函数就来调,随便拉一块内存就访问(哦对,任务函数里想使用内存,要么函数里开数组吃任务栈,要么使用“系统调用”的malloc使用加载器里面的堆)
回复

使用道具 举报 送花

已绑定手机

61

主题

411

回帖

1103

积分

金牌会员

积分
1103
 楼主| 发表于 4 小时前 来自手机 | 显示全部楼层
这么搞有什么问题吗,感觉这么搞就有比较贴近真正意义上的系统了,多任务,从外部装载任务,假装的系统调用(其实就是函数指针表)和所谓动态链接(其实本质还是静态链接,额,因为地址都已经定死了)
回复

使用道具 举报 送花

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

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-9-23 16:02 , Processed in 0.066097 second(s), 61 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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