Proposal: Embedded Programming and Design
Let's discuss how far "up" or "down" this site should go. Which belong here, which are better left to SO, EE or elsewhere.
- IDE, tools, configuring the "desktop" for programming given platforms
- building (compiling) the crosscompilers for your platform (that's
-mtune=arm920t
and not-mtune=armel
!) - using debug tools with platforms too small to run them (gdb over sockets?)
- "Please suggest a platform that has" (CAN, Ethernet, >64MB RAM, SPI, RS485, 32 GPIO, runs on 3.3V, MicroSD and is rated for up to -40°C) - these are a "list" questions but the list of answers will more frequently be "none" than "too many".
- Configuring and use of simulators/emulators.
- Compiling Linux kernel for given platform (finding the right modules for specific hardware can be a pain in the neck.)
- Linux questions unlikely to be of "common interest" on Linux sites ("I'm writing a kernel module that requires function called in 0.1ms intervals measured with at least 0.01ms precision. How do I go about that?" or "Can I get the kernel to ignore the Write Protect flag on the SD card?")
- C for Small Embedded (interrupt functions, bit type variables, lack of "normal" IO)
- Bypassing hardware bugs - "Errata sheet says feature X of chip Y is bugged. How badly? Can I emulate this somehow?"
- Interfacing embedded devices and peripherals (Does M-7065D expose inputs on Modbus-RTU by "Read Coils 32-36" or by "Read Inputs 0-4"? How to read USB keyboard under Linux on TS-7200?)
- Understanding and caveats of protocols common in Embedded (can I listen on 2 different addresses on CAN? How can I identify devices on RS-485?)
- Ratings, safety and testing (The device will work below -40°C for which it is rated; how can I assure it will work correctly? How can I assure the device fails gracefully on short circuit?)
- Understanding and using system registers (EP9302 CAN config is spread over 2 or 3 registers, none longer than a byte but each must be written with a 32-bit write command, 8-bit write will be ignored.)
- Tiny communication protocols (get two ACE microcontrollers, 1K Flash, 64 bytes RAM, 6 pins, to talk over infrared - say, garage gate remote controller.)
- Tearing through abstraction layers to get from userspace to raw iron. ("I have the locations in /dev/kmem mmap()'ed but readouts are late by a second or two vs reality" or "I want a function (in userspace) executed no longer than 1ms after power zero-crossing")
- PLC and ladder languages, similar alternatives
- SCADA, industrial control systems
- Filesystems for embedded (YAFFS vs JFFS2 vs UBIFS - what are advantages and weaknesses of each? How do I prepare a blank JFFS2 partition? How to get it to SD over /dev/mtdblock?)
- Writing/editing hardware drivers (edit given kernel module to adapt it to RTOS)
- Kiosk software ("Embeddifying" normal OSes, making them maintenance-proof and sandboxing the UI, deferring all maintenance notifications from screen to remote)
- Network infrastructure software (adapting OS for running on a router or such)
- Redundancy operation (recognize own fault, defer operation to backup)
- hacking firmware (CHDK, OpenWRT, car computers, programmable calculators)
- Userspace software for smartphones
- Hacking/writing/editing OS for smartphones
- Hacking/writing/editing firmware for dumbphones
- System architecture design (better to write that calculation/processing in assembly for the microcontroller, or better to have it sent over TCP/IP to the PC?)
Programmable Logic
- FPGAs (Xilinx Virtex and Spartan, Altera Arria and Cyclone, etc.)
- CPLDs (Xilinx Coolrunner, Altera MAX, Lattice MACH and iCE, Atmel ATF, etc.)
- PLAs
- ASICs
- PSoCs (Cypress PSoC, etc)
- Discrete Logic Devices (7400 series, 4000 series)
Which are a good fit here, and which would better belong to other sites?
Anything else I forgot?