OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 17189|回复: 48

一个想法--STM32能否模拟电脑那样,实现软件(程序即可)的安装和使用呢?

[复制链接]

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-3-18 01:19:33 | 显示全部楼层 |阅读模式
我在想,STM32可否实现执行一段存储在SD卡/外部FLASH的代码?实现类似电脑的软件安装的效果.
比如我先刷程序A到STM32,然后再把程序B存储在SD卡,通过程序A的浏览,找到程序B,并可以执行程序B.在程序B运行完了的时候,可以返回程序A继续执行其他的程序.
如果更爽一点,可以在程序A里面提供一些API函数,在程序B里面可以调用这些API,这样与安装软件更加类似了....
有人感兴趣么?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2201
金钱
2201
注册时间
2012-2-8
在线时间
35 小时
发表于 2012-3-18 01:23:44 | 显示全部楼层
搞个SRAM,
目标程序运行的时候从SD加载到SRAM里,
看上去好像不难,实现起来估计得花好长时间呢
https://github.com/roxma
回复 支持 反对

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2201
金钱
2201
注册时间
2012-2-8
在线时间
35 小时
发表于 2012-3-18 01:37:21 | 显示全部楼层
现在的ARM9带linux操作系统的好像都可以这样,ARM9用的SDRAM空间比较大,上百兆的空间,应用程序直接加载到上面

STM32的参考手册上只提到可以从SRAM启动,不知道效果怎样
https://github.com/roxma
回复 支持 反对

使用道具 举报

2

主题

8

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2012-3-18
在线时间
2 小时
发表于 2012-3-18 01:39:48 | 显示全部楼层
这个可以,就是移植个java虚拟机就行了,avr上都有移植的,比如下面这个:
http://www.ourdev.cn/bbs/bbs_content_all.jsp?bbs_sn=858124
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
 楼主| 发表于 2012-3-18 01:46:35 | 显示全部楼层
移植到STM32上应该很爽.不过是java编程的,没搞过啊...
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2201
金钱
2201
注册时间
2012-2-8
在线时间
35 小时
发表于 2012-3-18 01:51:32 | 显示全部楼层
据说java程序的效率比C慢好多啊。。。
不知在STM32上搞java意义大不大。。。

java编程和c/c++有些类似,if, for, while的语法都是通用的
https://github.com/roxma
回复 支持 反对

使用道具 举报

38

主题

248

帖子

0

精华

版主

Rank: 7Rank: 7Rank: 7

积分
463
金钱
463
注册时间
2011-2-11
在线时间
12 小时
发表于 2012-3-18 02:05:44 | 显示全部楼层
谁给介绍一下jvm啊 很感兴趣
Openedv大力支持的开源RTOS  --Trochili RTOS(飞鸟)
回复 支持 反对

使用道具 举报

20

主题

562

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
670
金钱
670
注册时间
2012-2-28
在线时间
0 小时
发表于 2012-3-18 12:42:08 | 显示全部楼层
没学过通信啊,搞JAVA有难度啊……
努力,前进。
回复 支持 反对

使用道具 举报

1

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2012-3-18
在线时间
2 小时
发表于 2012-3-18 19:06:54 | 显示全部楼层
对于每次只加载 一个程序而言,是容易实现的
首先需要一个加载程序,假设为loader,需要被加载的程序为a,b,c,d,e……
以下所说的情况都没有考虑在程序切换前保存堆栈,状态寄存器等信息,这实际上是多任务切换所必须的,在实际操作的时候注意保存和恢复这些信息
(如果跳回loader是跳到loader起始地址也就是说重新从头运行loader则不需要这样做)
以下的实现与函数参数压栈规则、函数返回规则等相关,所以在不同的cpu上可能会有些差异,主要在于函数用跳转指令跳转之后如何返回的问题,这需要参考编译器实现和语言标准来确定
分为两种情况讨论
1.被加载的程序完全为机器码,也就是说不像exe,elf等格式一样除了机器码还有一些程序段的定位信息及其他一些信息。
这种情况下所有的被加载程序在编译时指定一个基准地址,其他地址分配从这个基准地址开始,用loader找到需要被加载的程序a,loader将a直接复制到基准地址开始的内存空间中(基准地址之前的空间一定要能完全容纳loader),保存此时的程序指针,然后将程序指针指向基准地址实现向a的跳转,所有的被加载程序在结束语句中添加跳转到loader的起始地址的语句,在a的退出函数中清理堆栈并且利用保存的返回指针回到loader继续执行。
优点:简单,容易实现
缺点:运行a之后运行b,之后再运行a,这时需要重新加载a
2.在被加载程序中增加某些信息
这个没仔细研究过,大概说一些解决办法
(1)程序头存放一张表,其中指出了每条函数调用在程序中的位置,程序被编译成位置无关的(对函数的调用实际上是相关的,数据地址是相对地址)。
loader在加载a到某一个地址,根据表中的信息和a被加载的地址,重新修改程序中函数调用的地址,然后再重复1中的工作。loader自己记录一张表存放各个程序对内存的占用情况以便确定加载下一个程序的地址。
(2)程序中的函数调用(以及取函数的地址等)全改为对函数指针的操作,程序头同样存放一张表,表中表明了每个函数指针在程序中的偏移,程序中的数据同样是位置无关的(也就是通过pc相对寻址取得,无论程序被加载到哪个位置,对数据的存取都不会出问题)。loader加载a到某一地址后,根据这个地址和表,修改每个函数指针的值,以便指向函数的实际地址,其他同(1)。这种方法实现起来更容易一些,缺点是不能直接使用函数调用了。
缺点:复杂,容易出错
优点:能同时加载多个程序,利用中断甚至可以实现动态的切换程序(而不是每次都要退出后重新进入程序)。

至于api的实现,实际上也是比较容易的,关键就在于函数地址的确定,比较简单的方式是准备一张表保存所有api函数的地址(类似于中断跳转表那样),如果不熟悉编译器的话。比方我们实现一个api函数memcpy,写一个memcpy.c实现这个函数,为了简便,我们再准备一个main.c其中有个main函数(只是为了编译通过而设,实际上是可以不需要main函数的,只是需要额外的处理),将二者编译之。将生成的二进制文件放到某个地址addr,写一个c源文件(汇编也可),在其中建立同名函数memcpy,函数体中只有一条使用内联汇编写的跳转语句,这条跳转语句跳到【addr+memcpy在程序中的偏移量】(此处要注意如何返回)。将最后写的这个c源文件编译成目标文件即是我们想要的库了,以后其他程序直接与这个目标文件链接即可。这种方法在确定memcpy咋程序中的偏移量时需要查map文件,稍显麻烦,其实还有一些其他自动化的方法……

回复 支持 反对

使用道具 举报

12

主题

216

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
313
金钱
313
注册时间
2011-4-7
在线时间
3 小时
发表于 2012-3-18 21:05:13 | 显示全部楼层
关注不错啊 
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
 楼主| 发表于 2012-3-18 23:03:39 | 显示全部楼层
回复【9楼】crysislinux:
---------------------------------
颇有研究啊.呵呵.
有没有兴趣具体实现一下呢?
感觉这种还是蛮有意义的.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

8

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2012-3-18
在线时间
2 小时
发表于 2012-3-19 17:51:17 | 显示全部楼层
如果能做成java那样的最好不过了,手机上的软件都能安装了吧。

回复【9楼】crysislinux:
---------------------------------
你真有研究
回复 支持 反对

使用道具 举报

33

主题

489

帖子

6

精华

金牌会员

Rank: 6Rank: 6

积分
1565
金钱
1565
注册时间
2011-12-10
在线时间
4 小时
发表于 2012-3-19 20:03:43 | 显示全部楼层
我也感兴趣,虽然这想法有点天真。
学习交流请加Q群:242876057(STM32F4交流群)
回复 支持 反对

使用道具 举报

2

主题

8

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2012-3-18
在线时间
2 小时
发表于 2012-3-19 20:47:23 | 显示全部楼层
我觉得完全可以搞,功能可能实现的还不少呢
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
 楼主| 发表于 2012-3-19 20:53:55 | 显示全部楼层
楼上的有时间搞个看看?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2012-3-18
在线时间
2 小时
发表于 2012-3-20 10:51:58 | 显示全部楼层
回复【11楼】正点原子:
回复【9楼】crysislinux:
---------------------------------
颇有研究啊.呵呵.
有没有兴趣具体实现一下呢?
感觉这种还是蛮有意义的.
---------------------------------
我试试,主要是ram太有限了,程序比较大的话需要把ram的东西缓存到其他存储器上,但这样一来速度就受影响了
我觉得模拟塞班或者安卓那样长按功能/home键然后切换程序还是能做到的,另外提供api之类的比较好,能有效减小程序大小,权当动态库了……


回复 支持 反对

使用道具 举报

1

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2012-3-18
在线时间
2 小时
发表于 2012-3-20 10:56:10 | 显示全部楼层
回复【12楼】zjr0411:
如果能做成java那样的最好不过了,手机上的软件都能安装了吧。
回复【9楼】crysislinux:
---------------------------------
你真有研究
---------------------------------
感觉干不起啊,手机上的java程序很多都互不兼容的
另外我不知道stm32有没有java字节码的硬解码器,初步估计是没有的,这样运行java效率就很低了
回复 支持 反对

使用道具 举报

1

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2012-3-18
在线时间
2 小时
发表于 2012-3-20 11:02:07 | 显示全部楼层
回复【12楼】zjr0411:
如果能做成java那样的最好不过了,手机上的软件都能安装了吧。
回复【9楼】crysislinux:
---------------------------------
你真有研究
---------------------------------
之前也没往这方面想……没耍过stm32,平常都是在linux上搞,结果就是这玩意儿已经帮忙做了很多事了……
cortex-m3没有mmu,所以被加载的程序中涉及地址的部分都要进行处理
我不是很确定函数是否能够实时根据PC的值进行跳转,理论上是可以的,因为每条语句距离每个函数的偏移量都是链接时就已经确定的,数据时肯定能够根据PC的值装载的。我回头再研究下具体是怎么回事
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
 楼主| 发表于 2012-3-20 11:53:29 | 显示全部楼层
回复【18楼】crysislinux:
---------------------------------
是可以根据PC指针进行跳转的.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

48

主题

376

帖子

0

精华

高级会员

Rank: 4

积分
621
金钱
621
注册时间
2011-3-18
在线时间
7 小时
发表于 2012-3-20 12:07:00 | 显示全部楼层
好深入

crysislinux兄:會linux是會用arm9,a8等嗎?

   
回复 支持 反对

使用道具 举报

1

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2012-3-18
在线时间
2 小时
发表于 2012-3-20 13:42:02 | 显示全部楼层
回复【20楼】mbass51:
好深入
crysislinux兄:會linux是會用arm9,a8等嗎?
   
---------------------------------
arm9的
本质上来说具有mmu的cpu都是差不多的
回复 支持 反对

使用道具 举报

1

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2012-3-18
在线时间
2 小时
发表于 2012-3-20 13:44:07 | 显示全部楼层
回复【19楼】正点原子:
回复【18楼】crysislinux:
---------------------------------
是可以根据PC指针进行跳转的.
---------------------------------
后天测试下这几个方案
话说stm32这种,一般都有多少ram?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
 楼主| 发表于 2012-3-20 16:29:48 | 显示全部楼层
回复【22楼】crysislinux:
---------------------------------
一般20K左右.最大64K
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

46

主题

1579

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1970
金钱
1970
注册时间
2011-7-17
在线时间
4 小时
发表于 2012-3-21 07:56:03 | 显示全部楼层
原子哥的想法不错,改天你研究一下如何用sram把windows98移植stm32看看。
Time?And?Relative?Dimension?In?Space.
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
 楼主| 发表于 2012-3-21 08:45:32 | 显示全部楼层
....
回复 支持 反对

使用道具 举报

48

主题

376

帖子

0

精华

高级会员

Rank: 4

积分
621
金钱
621
注册时间
2011-3-18
在线时间
7 小时
发表于 2012-3-21 10:15:34 | 显示全部楼层
回复【21楼】crysislinux:
回复【20楼】mbass51: 好深入 crysislinux兄:會linux是會用arm9,a8等嗎?     --------------------------------- arm9的 本质上来说具有mmu的cpu都是差不多的
---------------------------------
請問如學了stm32再學arm9,要怎樣入門呢?
回复 支持 反对

使用道具 举报

1

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2012-3-18
在线时间
2 小时
发表于 2012-3-21 11:56:32 | 显示全部楼层
回复【26楼】mbass51:
回复【21楼】crysislinux:
回复【20楼】mbass51: 好深入 crysislinux兄:會linux是會用arm9,a8等嗎?     --------------------------------- arm9的 本质上来说具有mmu的cpu都是差不多的
---------------------------------
請問如學了stm32再學arm9,要怎樣入門呢?
---------------------------------
我搞了很短时间的avr就去弄arm9了,不要自己吓自己,如果不是要针对特定平台优化,都差不多的
这种东西对于计算机的基础知识来说都是通用的,只是构架不一样
回复 支持 反对

使用道具 举报

48

主题

376

帖子

0

精华

高级会员

Rank: 4

积分
621
金钱
621
注册时间
2011-3-18
在线时间
7 小时
发表于 2012-3-21 12:20:22 | 显示全部楼层
回复【27楼】crysislinux:
---------------------------------
因聽說好深,學MCU的人學不了,crysislinux兄支持,好了好多
回复 支持 反对

使用道具 举报

1

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2012-3-18
在线时间
2 小时
发表于 2012-3-22 11:05:38 | 显示全部楼层
算是把api实现了,目前的实现方法如下,没考虑多任务函数重入的问题,所以尽量不要在api中使用全局变量
。。。跳转到loader

。。。
。。。函数指针,指向各个api函数,我是用void (*)(void)型的数组api[]存储的,不是这种类型的api函数强制转换一下就可以了。
。。。通过链接脚本,使得api[]被放在PC复位指针+0x4的位置
。。。
…………

。。。
。。。api实现代码,其存放位置没有特殊要求,在api[]之后即可
。。。
…………

以上即为api的结构。api代码 
//start.s
.global _start
_start:

//lib.c
int sum(int, int);
void *memcpy(void *, void *, int);
void (*api[])(void) __attribute__((section(".API")))  = 
{
(void (*)(void))sum,
(void (*)(void))memcpy,
};

int sum(int x, int y)
{
return x+y;
}

void *memcpy(void *_des, void *_src, int len)
{
char *des = _des;
char *src = _src;
int i;
for(i=0;i<len;i++){
*des++ = *src++;
}
return _des;
}

api链接脚本,这里假设pc复位后从0x0开始取指令
SECTIONS
{
.API ALIGN(0x4): 
{
. = 0x4;
}
.text ALIGN(0x4): { *(.text) }
.bss ALIGN(0x4): { *(.bss) }
}
编译后再将生成的文件转换为binary文件即是被放入flash的api库文件。

以下为接口文件,这个文件编译后生成的目标文件是用来与使用api的目标文件进行链接的
//memcpy.c
void *(*memcpy)(void *, void *, int len) = 0x08; //0x08是api数组地址+memcpy在api数组里的偏移。

//memcpy.h
void *(*memcpy)(void *, void *, int len);

应用程序,需要为应用程序也写一个链接脚本
//main.c
#include "memcpy.h"
int main(void)
{
memcpy((void*)12, (void*)24, 20);
return 0;
}

由于api指针的位置和排列是固定的,所以无论应用程序被放到哪个位置运行,均能调用到api函数。只要保持接口不变,即使更改库的实现或者增加库代码,应用程序也不需要重新链接
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
 楼主| 发表于 2012-3-22 11:27:05 | 显示全部楼层
有点看不懂...
尤其是脚本那一段.看来要补习一下了,呵呵.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2012-3-18
在线时间
2 小时
发表于 2012-3-22 11:55:11 | 显示全部楼层
回复【30楼】正点原子:
有点看不懂...
尤其是脚本那一段.看来要补习一下了,呵呵.
---------------------------------
脚本是gnu-ld用的,keil这些用的脚本语法上会有一些差别,我用的工具是gnu也就是gcc,ld那一套
链接脚本的目的只是把某些数据代码放到我想要放的地方,比如api的函数指针,必须固定位置
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
 楼主| 发表于 2012-3-22 12:31:37 | 显示全部楼层
MDK 的.sct文件和你的有点类似:
LR_IROM1 0x08000000 0x00080000  {    ; load region size_region
  ER_IROM1 0x08000000 0x00080000  {  ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
  }
  RW_IRAM1 0x20000000 0x00010000  {  ; RW data
   .ANY (+RW +ZI)
  }
}
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2012-3-9
在线时间
3 小时
发表于 2012-4-12 15:49:19 | 显示全部楼层
我已经实现了,原子~我自己写的小os内核和sd卡的IAP功能
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
 楼主| 发表于 2012-4-12 17:46:40 | 显示全部楼层
发上来给大伙瞧瞧,呵呵.
你的是怎么个实现法?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

39

主题

597

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
2118
金钱
2118
注册时间
2011-9-3
在线时间
122 小时
发表于 2012-4-13 11:36:38 | 显示全部楼层
不错。如果DSRAM够大,做成能够后台运行就爽了。。
回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
179
金钱
179
注册时间
2012-4-25
在线时间
45 小时
发表于 2012-4-25 10:40:38 | 显示全部楼层
回复【33楼】bravesy:

---------------------------------
可以讲讲思路吗!
回复 支持 反对

使用道具 举报

46

主题

284

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
494
金钱
494
注册时间
2011-6-20
在线时间
0 小时
发表于 2012-12-17 10:28:17 | 显示全部楼层
lua脚本可以么?
回复 支持 反对

使用道具 举报

46

主题

1579

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1970
金钱
1970
注册时间
2011-7-17
在线时间
4 小时
发表于 2013-3-16 10:42:54 | 显示全部楼层
这想法,原子你貌相在战舰板上弄过一半,我最近鼓搞nand,希望有nand的存在,可以使这个想法起码在硬件上,得到可以实现的前提。
Time?And?Relative?Dimension?In?Space.
回复 支持 反对

使用道具 举报

2

主题

100

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
278
金钱
278
注册时间
2012-4-15
在线时间
0 小时
发表于 2013-3-18 12:20:08 | 显示全部楼层
关注
喜欢单片机,没什么道理,就像爱吃水煮鱼,对味而已。
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2014-3-4
在线时间
0 小时
发表于 2014-3-4 16:23:04 | 显示全部楼层
有谁用keil来实现了没,求讲解原理及过程
回复 支持 反对

使用道具 举报

19

主题

248

帖子

2

精华

高级会员

Rank: 4

积分
842
金钱
842
注册时间
2012-2-8
在线时间
19 小时
发表于 2014-7-25 17:28:30 | 显示全部楼层
怎么没下文啦
回复 支持 反对

使用道具 举报

17

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
141
金钱
141
注册时间
2013-11-19
在线时间
10 小时
发表于 2015-1-29 22:09:10 | 显示全部楼层
这个用操作系统不能实现吗?
回复 支持 反对

使用道具 举报

19

主题

248

帖子

2

精华

高级会员

Rank: 4

积分
842
金钱
842
注册时间
2012-2-8
在线时间
19 小时
发表于 2015-9-20 16:44:43 | 显示全部楼层
最近也在玩这个,思路大概是这样的。我有一个功能模块 打算可以被更新,那么我就通过链接脚本把它发在固定的位置上,方便更新,以及调用。同时,这个模块可能用到别的函数,那么需要把这些函数存在一个数组里面,确保在重新编译后可以找到这个函数地址。因为当你重新编译工程后,你不知道这个模块调用那些函数的地址和先前是否一样,不一样的话,跳转就出问题。

建议先实现一个简单的非抢占式的调度器,这样实现起来会方便很多。目前实现第一步。弄之前最好了解一下,链接器和加载器的一些知识。
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2016-4-10
在线时间
5 小时
发表于 2016-4-24 21:38:39 | 显示全部楼层
我的方案是在Cortex-M3上开了一个Cortex-M3虚拟机,详情见http://bbs.21ic.com/icview-411005-1-1.html
回复 支持 反对

使用道具 举报

43

主题

481

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1352
金钱
1352
注册时间
2014-12-24
在线时间
321 小时
发表于 2016-4-24 23:31:06 | 显示全部楼层
rt-thread有这个功能,只是应用程序不能用mdk,只能在gcc下编译。
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2016-7-8
在线时间
1 小时
发表于 2016-7-8 10:38:15 | 显示全部楼层
本帖最后由 hiskyer 于 2016-7-8 10:41 编辑

我就是用lua实现的,只是需要外扩RAM,就片上那么点容量,脚本量大了就翘辫子了。我的板子目前运行良好。在可维护性可扩展性方面,传统的MCU固件修改和他根本没法比,狂甩几条街。只要你的RAM和SD卡容量够大,多大的程序都不是问题,STM32嗨起来!
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2016-1-21
在线时间
10 小时
发表于 2016-12-22 00:24:02 | 显示全部楼层
我已经实现了
回复 支持 反对

使用道具 举报

14

主题

89

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
283
金钱
283
注册时间
2015-4-19
在线时间
137 小时
发表于 2018-4-14 08:03:30 | 显示全部楼层
好牛逼,我一直期待现实,不知道为什么有的人一定要安装手机软件,自己用mdk生成的程序 安装不行吗
回复 支持 反对

使用道具 举报

0

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
108
金钱
108
注册时间
2019-5-2
在线时间
26 小时
发表于 2020-11-12 23:19:26 | 显示全部楼层
在STM32上面开上十几个应用,,
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-4 10:57

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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