移植rt-thread到esp8266笔记

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/boymax1/article/details/53591599

esp8266是今年非常火的一块wifi SoC,貌似是国人搞出来的产品,模块的价格非常的便宜,生态也搞的非常好。

rt-thread是自己非常喜欢的一个嵌入式的硬实时的操作系统,所以在拿到板子以后非常想把rt-thread移植到esp8266。

这一周课余的时间尝试开始进行移植的工作。

首先是在移植的过程,碰到的一些问题。

最主要的问题在于esp8266的内存问题,具体的内存分布可以阅读以下的文章进行了解:

http://blog.csdn.net/yannanxiu/article/details/51371798

从中可以了解到几个关于模块内rom的问题:

1、片内rom是不允许改写的,里面已经事先烧录了提供的bootloader用来进行启动后的初始化

2、由片内rom引导后会将spi flash中首地址指向flash.bin按各段拷贝到内存中

3、代码段text会拷贝到iram1中,大小不能超过32KB。原有的固件已经占有27KB左右,所以text段只能存放自己的代码大约5KB(这个也是自己认为这个模块最大的局限)

4、若代码超过32KB,需要将部分代码放入irom1.text段中,当然sdk中提供了ICACHE_FLASH_ATTR这个宏在链接时可以将当前函数放在irom1.text段的地址空间中

5、text段中的代码实质是直接在内存中运行的,如果调用irom1.text段中的代码,会通过spi flash进行寻址然后放入cache中调用(具体效率会损失多少有待测试)

6、data和rodata加载到dram0上,因此这二者和不能大于80KB(0x14000)

7、关于有些段的长度可以增减,可以在链接脚本中的说明中看到

对于从spi flash中加载代码对rt-thread调度器效率的影响待移植完成后进行测试(或者可以将核心的部分代码放在text段,但是5KB目测应该不够)

官方也提供了freertos的移植,说明还是有一定移植的意义的。

现在移植的过程主要分为两个部分,一个是对hal层进行的移植,另一个是驱动层的移植,两部分同时的进行。


1、hal层移植

rt-thread对hal层的管理十分的清晰,所有的文件都放在libcpu目录中。

而esp8266官方也提供了libhal库,方便用户进行适当的移植,并且这个库是开源的。

适当的吐槽一下esp8266提供的官方sdk是半开源的,不过已经卖的那么便宜了,也可以理解。

rt-thread对于hal层的实现提供了几个十分明了的接口,主要是全局的开关,以及线程上下文切换时底层硬件需要完成的工作,还有一些异常的处理。

在esp8266官方提供的freertos中相关的移植的代码可以用来借鉴。

(移植完成以后详细的介绍)


2、驱动层移植

驱动层移植主要是将设备绑定至rt-thread的设备系统,esp8266官方sdk中提供了相关的外围设备的基本驱动。

从中,自己选择了最基本的串口驱动进行移植,现在已经基本完成rt-thread串口驱动的接口的实现。

(移植完成以后详细的介绍)


待续。。。

展开阅读全文

没有更多推荐了,返回首页