首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[TencentOS_tiny_EVB_MX]之程序跳转

[TencentOS_tiny_EVB_MX]之程序跳转

原创
作者头像
诸子东
修改2020-03-16 19:03:44
6540
修改2020-03-16 19:03:44
举报
文章被收录于专栏:物联网相关物联网相关

TencentOS_tiny_EVB_MX 本身是基于STM32的。

关于STM32的程序跳转网上也有不少案例和介绍。

现针对TencentOS_tiny_EVB_MX这个,做一个简单的程序跳转demo分享出来。

一般程序跳转,主要的功能是什么呢。

一般有一个比较简单的程序,可以作为boot程序,这个boot程序的功能,就是用于启动app程序。

可能会有人不太清楚,一个STM的KEIL,怎么还会有boot程序和app程序的区别呢。

这里的boot和app只是个概念,是根据用途定义的。实际上两个程序都是keil编译出来的,和stm32底层没有关系。

这样做的一个好处呢,就是可以把boot设计的简单,功能单一。只支持启动,或者再额外支持可以通过串口或者USB等将编译好的app的keil程序,拷贝到FLASH,再由boot启动运行APP程序。

说白了,就是一个keil程序调用另一个keil程序的过程。

因为对于实际用途,特别是不方便使用keil来烧录程序。

当然,对于IOT的应用来说,更希望具备远程更新程序功能,那么程序跳转的设计就应运而生了。

说了一大堆,开始上代码。

首先拿TencentOS_tiny_EVB_MX里的两个demo作为案例。

hello_world作为boot程序
hello_world作为boot程序

将hello_world作为boot程序,需要添加相应的代码部分。

tencent_cloud_sdk_mqtt 作为app程序部分
tencent_cloud_sdk_mqtt 作为app程序部分

既然FLASH要存在两个程序,就要对FLASH进行空间划分了。

手上的这个FLASH是256K的。

将前面的64K作为BOOT部分

将后面的作为APP部分。起始地址就是0x8010000。

当然需要根据实际的BOOT大小划分。

有读者想问,BOOT部分可以不使用TencentOS_tiny的代码模板嘛。这个就看你喜好了。

只是TencentOS_tiny这个代码模板放着是现成的,能用就用吧,多用一次就熟悉一次。

一 先看BOOT 部分。

BOOT要作什么呢。

BOOT的程序也比较简单,就是写一个跳转函数就可以了。

这样BOOT程序部分就实现了。运行hello_world程序后,执行task1后,就跳转到了APP程序了。

二 APP程序部分

1 KEIL的设置。

需要根据实际的APP地址来设置。

2 设置中断向量表。

在应用程序里,在一开始,最好把中断开起来。因为在BOOT程序,已经把中断关闭的。因此需要在APP这边,先把中断使能了。

到这里,就可以实现程序跳转功能了。运行的效果打印消息就不贴上来了。

那么问题来了。

BOOT程序一般只烧录一遍,APP可能会需要添加功能,修改bug等需要维护,则需要重新烧录。对于本地下载呢,可以直接使用KEIL只烧录APP部分代码就行了

但是对于远程呢,怎么办呢。

即便是能把文件传输到板子呢,是直接烧录到APP所有的FLASH吗、那不会把原来程序刷没呢。

正在运行的程序,被刷掉了,不会异常结束嘛。

那这里,SPI_FLASH就起到作用了。

可以先把收到远程发过来的程序,存放到SPI_FLASH里。SPI_FLASH有8M呢,多存几份都不是问题呢。

然后在BOOT启动的时候,就可以把程序从SPI_FLASH拷贝到FLASH里,这样就可以实现远程更新APP用户程序了。

下一篇文章会介绍下TencentOS_tiny_EVB_MX 中,SPI FLASH驱动的实现。可以读写SPI_FLASH。

貌似在TencentOS_tiny_EVB_MX里,没有看到相应的驱动,不知道是不是还没有实现,还是没有检查仔细。

如果想体验的,可以到https://github.com/xidongliang/TencentOS_tiny_EVB_MX_Plus_QSPI

下载我移植的驱动,不过,没有介绍,需要自己手动启用支持QSPI宏,才能使用QSPI功能。

将会在下一篇文章介绍这个驱动。

就是参考了相关QSPI的驱动,然后将这个驱动移植到了TencentOS_tiny_EVB_MX板子

为了方便用户编程,就直接在原来板子代码上的spi.c和spi.h进行修改。并没有重新生成qspi等库文件。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档