zoukankan      html  css  js  c++  java
  • 在RIOT操作系统中引入WASM虚拟机

    编译问题

    在默认状况下,RIOT操作系统的编译十分苛刻,会把很多WRANING变成ERROR,因此需要在Makefile中设置WERROR=0,才可以进行正常编译

    运行问题

    由于WASM3的代码编写问题,WASM3虚机会在栈上分配大量空间,特别是在Parse的过程中,在之前是直接临时在栈上分配一个10k+的runtime进行parse。
    而物联网操作系统包括RIOT通常没有内存保护(没有MMU支持),因此栈会溢出
    而通常栈顶会放置该任务的控制块。虽然栈对象溢出并不会导致本任务的控制块被覆写,但是很可能会导致前一个任务的控制块被覆写。
    因为通常idle任务和main任务的栈是系统在startup的时候预置的,一般都是相邻的,而且都是idle在前,main在后,如下图:
    image.png
    因此栈对象的溢出会覆写idle任务的控制块,导致任务调度到idle时发生异常(访问错误指针)
    解决方案有两个方向

    1. (临时)增加任务栈大小,防止栈溢出
    2. 修改WASM3代码,避免在栈上分配较大的对象

    我已经向WASM3提了Issue,但他们似乎不是很理解,只是将parse用的runtime栈复用了,而不是在栈上临时分配一个空间作为栈
    但是重要的是他们的临时runtime对象仍然在栈上临时分配空间,接下来我会把我修改的WASM3代码(将parse用的临时runtime分配在堆上)提一个pull request上去。

  • 相关阅读:
    MyEclipse错误积累--持续更新
    Git错误积累-持续更新
    MySQL错误积累-持续更新
    评价一个人,就是要看他把时间都花在哪了
    收集的yum命令博文
    Github 常用命令
    python库收藏
    [转载]Scikit Learn: 在python中机器学习
    Windows下python安装Matplotlib、Numpy和Scipy模块
    [LeetCode] #45 Jump Game II
  • 原文地址:https://www.cnblogs.com/bforever/p/14247251.html
Copyright © 2011-2022 走看看