Rust on RTL8710 running FreeRTOS
polyfractal.com
polyfractal.com
https://github.com/yesco/esp-lisp
https://github.com/zeroflag/punyforth
(and of course lua which i didn't try because its official... https://github.com/nodemcu/nodemcu-firmware)
Pascal, maybe, but it's about the same thing as C.
Scheme would be nice, but it's both more resource-hungry and the static checking is sort of bolted on.
With Rust's security features I hope we'll have fewer crashing or crackable embedded devices.
http://www.mikroe.com/mikropascal/
Scheme, do people actually know how powerful RTL8710 is in regards to the computers used to create Scheme?
RTL8710 has a ARM Cortex M3 @ 166 MHz with 48KB available to user and 1MB flash.
Scheme was developed on the ITS OS, running on PDP-10, which could have up to 256 kilowords (not KB), and ran at about 30 MHz.
I am with you on Rust.
The majority of these tiny devices have more resources than 70's mainframes, that used safer systems programming languages.
C++ has had many benefits over C for embedded s/w for many years and has similarly failed. Note that contrary to popular belief, C++ does not result in larger, more inefficient s/w than C (for the correct C++ subset).
The momentum behind the C ecosystem is so overwhelming that Rust simply will not get a foothold anytime soon.
Altough most of the units shipped will be above this, won't a decent share of projects(in general ,not just the IOT) be below that threshold ?
I'd love to learn and start using Rust in our work, but we are client-project-driven, so it will be hard to justify the investment and productivity drop. I think it would make it easier to attract top talent, though things are weird in the embedded world.
But it only took an afternoon to bolt Rust into the C build because Rust's FFI story is really nice (imo). So I get the best of both worlds: existing C HAL and SDK with the pleasantness and safety of Rust.*
* With the assumption/hope that the HAL isn't buggy, since Rust will rely on that to not explode :)
You could also say this for C on Unix in 1990. Or x86 assembly for PCs in 1985. In 1990, the idea that, 25 years later, we would be deploying network services written in JavaScript was unthinkable.
Change takes time, and C won't die, ever—but history shows that change eventually does happen.
You can still say this on 2017.
No UNIX kernel will ever be written in anything other than C, the way they are married to each other and the way UNIX culture works.
To get rid of C we need to get rid of UNIX, even a POSIX like OS coded in say Ada, needs to expose C like semantics for POSIX compatibility.
Which means we still have a long way ahead in what concerns improving security.
I cringed when I saw this at the top of HN because I knew the shame that is my soldering skill would be seen by a few hundred people :)
Strongly recommend you post a link to this at the PADI Stamp forums, I'm sure others will appreciate it. http://forum.pine64.org/forumdisplay.php?fid=57
Fair warning, my hardware skills are shoddy at best, but I may be able to help with the Rust side :)
Most of the rest of libstd requires a known OS abstraction to exist.
Most of the algorithmy stuff (e.g. regex) has been moved out of the stdlib so you can pull it in separately if the crate supports no_std.
Not perfect, and a lot more crates could support no_std, but it's sometimes good enough.
The specs say it has 0.9 mA light sleep, and a 10 uA deep sleep. Assuming the specs are correct (I haven't test it yet... not sure anyone else has either) you could definitely run it off a battery if you aren't waking it up too often.
The real problem with the RTL8710 (and ESP8266, and any other chip that uses WiFi) is that WiFi is very energy intensive. It takes a lot of juice to blast out a 2.4Ghz signal.
I don't know what the numbers are for the RTL8710, but the ESP8266 uses 50-170mA when receiving/transmitting data, which will drain a battery very quickly. (Source: http://bbs.espressif.com/viewtopic.php?t=133)
ESP8266 consumes ~70mA with both CPU and WiFi running but idle, and 15mA with CPU idling and WiFi powered down [1]. That's 55mA or (@3.3v) ~180mW for _idle_ (i.e. receiving) WiFi circuitry. Again - that's WiFi only, with exactly zero RF power transmitted.
Now transmit. EU restricts amount of RF power radiated by a WiFi station/AP to 100mW. In US and few other places you can go slightly higher, but then other challenges arise, so for practical purpose most WiFi chipsets top out at 100 mW (a.k.a. 20dBm). Assuming RF power amplifier has efficiency of 32% [2], transmit duty cycle of 50% (that's transmitting half of the time and receiving for another half - pretty intense traffic here), we get:
(100/32%)*50% = just 156mW consumed towards "blasting out" some RF.
Clearly, receiving WiFi takes more. And there is a good reason for that. Most modern designs implement Rx as: Low-noise amplifier with some bandpass filtering -> Zero-IF mixer -> quadrature ADC -> DSP. It's the latter that does FFT, I/Q constellation tracking, demodulation, forward error correction, etc. essentially in software. And that takes a lot of power.
[1] http://bbs.espressif.com/viewtopic.php?t=133
[2] http://ww1.microchip.com/downloads/en/DeviceDoc/75003C.pdf
TIL :)