{"id":49555811,"url":"https://github.com/tikuos/tikuos","last_synced_at":"2026-05-03T02:05:17.468Z","repository":{"id":310753366,"uuid":"1040920441","full_name":"tikuos/tikuOS","owner":"tikuos","description":"Simple. Ubiquitous. Intelligence, Everywhere.","archived":false,"fork":false,"pushed_at":"2026-04-26T01:29:17.000Z","size":4878,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-26T03:29:48.293Z","etag":null,"topics":["embedded","low-power","microcontroller","operating-system","rtos"],"latest_commit_sha":null,"homepage":"http://tiku-os.org","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tikuos.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-08-19T17:49:11.000Z","updated_at":"2026-04-26T01:29:21.000Z","dependencies_parsed_at":null,"dependency_job_id":"81649519-9287-4a99-8f42-478aa8326317","html_url":"https://github.com/tikuos/tikuOS","commit_stats":null,"previous_names":["tikuos/tikuos"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/tikuos/tikuOS","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tikuos%2FtikuOS","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tikuos%2FtikuOS/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tikuos%2FtikuOS/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tikuos%2FtikuOS/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tikuos","download_url":"https://codeload.github.com/tikuos/tikuOS/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tikuos%2FtikuOS/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32555839,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-03T00:31:16.350Z","status":"online","status_checked_at":"2026-05-03T02:00:09.297Z","response_time":103,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["embedded","low-power","microcontroller","operating-system","rtos"],"created_at":"2026-05-03T02:05:15.408Z","updated_at":"2026-05-03T02:05:17.457Z","avatar_url":"https://github.com/tikuos.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003e\n  \u003cbr\u003e\n  \u003cpre\u003e\n  ___ _ _         ___  ___\n |_ _|_) |_ _  _/ _ \\/ __|\n  | || | / / || | (_) \\__ \\\n  |_||_|_\\_\\\\_,_|\\___/|___/\n  \u003c/pre\u003e\n  \u003cbr\u003e\n  \u003cem\u003eSimple. Ubiquitous. Intelligence, Everywhere.\u003c/em\u003e\n\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"#quick-start\"\u003e\u003cimg src=\"https://img.shields.io/badge/build-make-blue?style=flat-square\" alt=\"Build\"\u003e\u003c/a\u003e\n  \u003ca href=\"#supported-boards\"\u003e\u003cimg src=\"https://img.shields.io/badge/MCU-MSP430FR-red?style=flat-square\" alt=\"MCU\"\u003e\u003c/a\u003e\n  \u003ca href=\"#license\"\u003e\u003cimg src=\"https://img.shields.io/badge/license-Apache%202.0-green?style=flat-square\" alt=\"License\"\u003e\u003c/a\u003e\n  \u003ca href=\"#interactive-shell\"\u003e\u003cimg src=\"https://img.shields.io/badge/shell-38%20commands-orange?style=flat-square\" alt=\"Shell\"\u003e\u003c/a\u003e\n  \u003ca href=\"http://tiku-os.org\"\u003e\u003cimg src=\"https://img.shields.io/badge/web-tiku--os.org-purple?style=flat-square\" alt=\"Website\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  TikuOS is an operating system for \u003cstrong\u003emicrowatt computers\u003c/strong\u003e: tiny, ubiquitous devices that run for years on a coin cell or indefinitely on harvested energy. It is the first OS designed for sub-milliwatt communication primitives, including backscatter and tunnel diode based beyond-backscatter transceivers, with IP networking and machine intelligence as integral parts of the operating system.\n\u003c/p\u003e\n\n---\n\n## Supported Boards\n\n| Board | MCU | RAM | FRAM | Notable | Status |\n|-------|-----|-----|------|---------|--------|\n| MSP-EXP430FR5969 LaunchPad | MSP430FR5969 | 2 KB | 64 KB | — | :green_circle: Primary |\n| MSP-EXP430FR6989 LaunchPad | MSP430FR6989 | 2 KB | 128 KB | On-board FH-1138P 96-segment LCD, HIFRAM/large mode | :green_circle: Primary |\n| MSP-EXP430FR5994 LaunchPad | MSP430FR5994 | 8 KB | 256 KB | 208 KB HIFRAM, 8 KB merged SRAM (`LEA_ENABLE=0` default) | :green_circle: Primary |\n\n---\n\n## Quick Start\n\n```bash\n# Build for a specific target\nmake MCU=msp430fr5969\nmake MCU=msp430fr6989 MEMORY_MODEL=large   # FR6989 needs large mode for HIFRAM\n\n# Build and flash\nmake flash MCU=msp430fr5969\nmake flash MCU=msp430fr6989 MEMORY_MODEL=large\n\n# Open serial monitor\nmake monitor\n```\n\n---\n\n## :computer: Interactive Shell\n\nTikuOS includes a full interactive shell over UART or Telnet. Control GPIO pins, read sensors, manage processes, configure boot sequences, and inspect memory — **all without recompiling**. Build with `TIKU_SHELL_COLOR=1` for ANSI color output.\n\n```\n  ___ _ _         ___  ___\n |_ _|_) |_ _  _/ _ \\/ __|\n  | || | / / || | (_) \\__ \\\n  |_||_|_\\_\\\\_,_|\\___/|___/  v0.04\n  Simple. Ubiquitous. Intelligence, Everywhere.\n\n  MSP430FR5969  |  SRAM 2048B  FRAM 64KB\n  Type 'help' for commands.\n\ntikuOS\u003e help\n --- System ---\n  help       Show available commands\n  info       Device, CPU, uptime, clock\n  free       Memory usage (SRAM/FRAM)\n  reboot     System reset\n  history    Last N commands from FRAM\n  calc       Integer arithmetic\n  clear      Clear screen (ANSI)\n --- Processes ---\n  ps         List active processes\n  start      Start/resume by name\n  kill       Stop a process (by pid)\n  resume     Resume a stopped process\n  queue      List pending events\n  timer      Software timer status\n  every      Schedule a recurring command\n  once       Schedule a one-shot command\n  jobs       List/delete scheduled jobs\n  on         Register a reactive rule\n  rules      List/delete reactive rules\n --- Filesystem ---\n  ls         List directory\n  tree       Recursive directory listing\n  cd         Change directory\n  pwd        Print working directory\n  read       Read a VFS node\n  watch      Read VFS node every N sec\n  changed    Block until VFS node changes\n  write      Write a VFS node\n  name       Read/set device name\n  irq        Enable/disable GPIO edge IRQ\n  alias      Define/list FRAM-backed aliases\n  unalias    Remove an alias\n  toggle     Flip a binary VFS node\n  cat        Read (alias)\n  echo       Print arguments + newline\n --- Hardware ---\n  gpio       Read/write GPIO pins\n  adc        Read analog channel\n --- Power ---\n  sleep      Set low-power idle mode\n  wake       Show active wake sources\n --- Boot ---\n  init       Manage FRAM boot entries\n```\n\n\u003e :bulb: Opt-in extras (off by default; enable via `EXTRA_CFLAGS`): `if`\n\u003e (conditional), `i2c` (bus scan/read/write), `delay`, `repeat`, `peek`,\n\u003e `poke`. See `kernel/shell/tiku_shell_config.h` for the full list and\n\u003e rationale (each has a FRAM cost on FR5969).\n\n\u003e :art: Build with `TIKU_SHELL_COLOR=1` for ANSI colored output (cyan logo, green prompt, categorized help). Add a screenshot from picocom here.\n\n---\n\n### :zap: Configurable Boot Sequence (FRAM-backed)\n\n\u003e **Every other RTOS:** change boot behavior :arrow_right: recompile :arrow_right: reflash.\n\u003e\n\u003e **TikuOS:** change boot behavior :arrow_right: edit over shell :arrow_right: reboot.\n\n```\ntikuOS\u003e init add 05 network start net\nOK: 'network' at seq 05\n\ntikuOS\u003e init add 10 mqtt    start mqtt\nOK: 'mqtt' at seq 10\n\ntikuOS\u003e init add 20 leds    write /dev/led0 1\nOK: 'leds' at seq 20\n\ntikuOS\u003e init list\n 05  network      [on ]  start net\n 10  mqtt         [on ]  start mqtt\n 20  leds         [on ]  write /dev/led0 1\n```\n\nBoot entries are stored in **FRAM** — they survive power cycles without flash erase cycles. Same firmware, different boot sequences per device. Disable a service without removing it:\n\n```\ntikuOS\u003e init disable mqtt\nOK: disabled 'mqtt'\n\ntikuOS\u003e init list\n 05  network      [on ]  start net\n 10  mqtt         [off]  start mqtt\n 20  leds         [on ]  write /dev/led0 1\n```\n\nReboot. New behavior. No recompile. No reflash.\n\n---\n\n### :wrench: Hardware Debugging from the Shell\n\nToggle GPIO pins, read ADC channels, inspect memory — a live hardware debugging tool on a microcontroller.\n\n```\ntikuOS\u003e gpio 4 6 t\nP4.6 -\u003e 1\n\ntikuOS\u003e gpio 4 6\nP4.6 = 1 (output)\n\ntikuOS\u003e adc temp\nAtemp = 1847 (0x737)\n\ntikuOS\u003e adc bat\nAbat = 2048 (0x800)\n```\n\n---\n\n### :bar_chart: Memory Introspection\n\nReal numbers from linker symbols and the stack pointer — not placeholders.\n\n```\ntikuOS\u003e free\n--- Compile-time ---\nSRAM   2048 total\n  .data+.bss   1058\n  reservd        990\nFRAM  65535 total\n  code        42508\n  const/data   5620\n  unallocd    17407\n--- Runtime ---\nSRAM\n  stack now      80\n  free now      910\nFRAM\n  free now    17407\n  config rgn   1024 allocated\n  init table     70 (1/8 entries)\n--- Processes (1/8) ---\n pid  name        sram  fram  state\n   0  Shell          0     0  running\n```\n\n---\n\n### :battery: Power Management\n\nEnter low-power modes from the shell. See what will wake you up.\n\n```\ntikuOS\u003e sleep lpm3\nIdle: LPM3\n\ntikuOS\u003e wake\nWake sources:\n  Timer A0 (sys clock)  [on ]  wakes LPM0-3\n  Timer A1 (htimer)     [off]  wakes LPM0-3\n  UART RX  (eUSCI_A0)   [on ]  wakes LPM0\n  Watchdog (interval)   [off]  wakes LPM0-3\n  GPIO IRQ              [off]  wakes LPM0-4\n\nNote: LPM4 disables all clocks.\n  Only GPIO IRQ can wake from LPM4.\n```\n\n---\n\n### :open_file_folder: Virtual Filesystem\n\nA unified namespace for the entire system — peripherals, OS state, config, and processes are all paths, just like a desktop operating system. No other MCU RTOS does this. The same `read`/`write` interface works for LEDs, sensors, timers, processes, and everything else.\n\n```\n/\n├── sys/\n│   ├── version              \"0.04\"\n│   ├── device/\n│   │   ├── name             user-set device name (FRAM-backed, R/W)\n│   │   ├── id               unique tiku-XXXX hostname-style ID\n│   │   ├── mcu              silicon part number (\"MSP430FR5969\")\n│   │   └── version          OS version string\n│   ├── uptime               seconds since boot\n│   ├── mem/\n│   │   ├── sram             RAM size in bytes\n│   │   ├── nvm              FRAM size in bytes\n│   │   ├── free             live stack headroom (SP - BSS end)\n│   │   └── used             sum of per-process SRAM allocation\n│   ├── cpu/\n│   │   └── freq             clock Hz (8000000)\n│   ├── power/\n│   │   ├── mode             current LPM (off/LPM0/LPM3/LPM4)\n│   │   └── wake             active wake sources\n│   ├── timer/\n│   │   ├── count            active software timers\n│   │   ├── next             ticks until next expiration\n│   │   ├── fired            total expirations since boot\n│   │   └── list/{0..3}      per-timer mode, remaining, interval\n│   ├── clock/\n│   │   └── ticks            raw tick counter\n│   ├── watchdog/\n│   │   ├── mode             R/W \"watchdog\" or \"interval\"\n│   │   ├── clock            R/W \"aclk\" or \"smclk\"\n│   │   ├── interval         R/W divider (64/512/8192/32768)\n│   │   └── kick             W   write to kick the timer\n│   ├── htimer/\n│   │   ├── now              hardware timer counter\n│   │   └── scheduled        1 if pending, 0 if idle\n│   ├── boot/\n│   │   ├── reason           last reset cause (brownout/wdt/rstnmi/...)\n│   │   ├── count            hibernate boot counter\n│   │   ├── stage            boot stage (init/cpu/.../complete)\n│   │   ├── rstiv            raw SYSRSTIV hex (0x0016, ...)\n│   │   ├── clock/\n│   │   │   ├── mclk         live MCLK frequency in Hz\n│   │   │   ├── smclk        live SMCLK frequency in Hz\n│   │   │   ├── aclk         live ACLK frequency in Hz\n│   │   │   └── fault        clock fault flag (0 or 1)\n│   │   └── mpu/\n│   │       └── violations   MPU violation flags (hex bitmask)\n│   └── sched/\n│       └── idle             scheduler idle entry count\n├── dev/\n│   ├── led0                 read/write (0, 1, t=toggle)\n│   ├── led1                 read/write\n│   ├── console              R/W system console (UART)\n│   ├── null                 R/W data sink (always empty on read)\n│   ├── zero                 R   zero source (fills buffer with NUL)\n│   ├── gpio/{1..4}/{0..7}   per-pin read/write (0, 1, t, i=input)\n│   ├── gpio_dir/{1..4}      per-port pin direction (I=input, O=output)\n│   ├── uart/\n│   │   ├── overruns         UART overrun count since boot\n│   │   └── baud             configured baud rate\n│   ├── adc/\n│   │   ├── temp             on-chip temperature sensor (raw ADC)\n│   │   └── battery          battery voltage (raw ADC)\n│   ├── i2c/\n│   │   └── scan             list responding I2C addresses\n│   └── spi/\n│       └── config           SPI mode, bit order, prescaler (or \"n/a\")\n└── proc/\n    ├── count                number of active processes\n    ├── queue/\n    │   ├── length           pending events in queue\n    │   └── space            free event slots\n    ├── catalog/\n    │   ├── count            available-but-not-started processes\n    │   └── {0..7}/name      catalog entry name\n    └── {0..7}/              per-process directory\n        ├── name             process name\n        ├── state            running/ready/waiting/sleeping/stopped\n        ├── pid              numeric process id\n        ├── sram_used        SRAM bytes allocated\n        ├── fram_used        FRAM bytes allocated\n        ├── uptime           seconds since start\n        ├── wake_count       times scheduled\n        └── events           pending events for this process\n```\n\n```\ntikuOS\u003e cat /sys/version\n0.04\n\ntikuOS\u003e cat /sys/device/mcu\nMSP430FR5969\n\ntikuOS\u003e cat /sys/device/name\ntiku\n\ntikuOS\u003e cat /sys/mem/free\n752\n\ntikuOS\u003e cat /sys/timer/fired\n1862\n\ntikuOS\u003e cat /sys/timer/list/0\nevt rem=6 int=6\n\ntikuOS\u003e cat /sys/watchdog/mode\nwatchdog\ntikuOS\u003e write /sys/watchdog/interval 8192\ntikuOS\u003e cat /sys/watchdog/interval\n8192\n\ntikuOS\u003e cat /sys/boot/reason\nrstnmi\ntikuOS\u003e cat /sys/boot/rstiv\n0x0004\ntikuOS\u003e cat /sys/boot/stage\ncomplete\ntikuOS\u003e cat /sys/boot/clock/mclk\n8000000\ntikuOS\u003e cat /sys/boot/clock/fault\n0\ntikuOS\u003e cat /sys/boot/mpu/violations\n0x00\n\ntikuOS\u003e cat /sys/sched/idle\n0\n\ntikuOS\u003e cat /dev/uart/baud\n115200\n\ntikuOS\u003e cat /dev/gpio_dir/1\nOOOOOOOO\n\ntikuOS\u003e write /dev/console hello\ntikuOS\u003e write /dev/null anything\n\ntikuOS\u003e cat /proc/0/name\nShell\n\ntikuOS\u003e cat /proc/0/wake_count\n2063\n\ntikuOS\u003e cat /proc/queue/space\n31\n\ntikuOS\u003e ls /dev\n  led0\n  led1\n  console\n  null\n  zero\n  gpio/\n  gpio_dir/\n  uart/\n  adc/\n  i2c/\n  spi/\n\ntikuOS\u003e write /dev/led0 1\n\ntikuOS\u003e cat /sys/cpu/freq\n8000000\n```\n\n---\n\n### Build Options\n\n| Flag | Effect |\n|------|--------|\n| `TIKU_SHELL_ENABLE=1` | Enable interactive shell (UART) |\n| `TIKU_INIT_ENABLE=1` | Enable FRAM-backed init system (implies shell) |\n| `TIKU_SHELL_COLOR=1` | Enable ANSI color output (banner, prompt, help, free) |\n| `UART_BAUD=115200` | Set UART baud rate (default 9600) |\n| `MCU=msp430fr5969` | Target MCU (also `msp430fr6989`) |\n| `MEMORY_MODEL=large` | 20-bit pointers + HIFRAM placement (required on FR6989 for builds with examples + tikukits) |\n\n```bash\n# Shell with color output\nmake TIKU_SHELL_ENABLE=1 TIKU_SHELL_COLOR=1 MCU=msp430fr5969\n\n# Shell + init system + color\nmake TIKU_INIT_ENABLE=1 TIKU_SHELL_COLOR=1 MCU=msp430fr5969\n\n# Flash and connect\nmake flash MCU=msp430fr5969 \u0026\u0026 make monitor\n\n# Connect over Telnet (requires TCP stack)\ntelnet 172.16.7.2\n```\n\n\u003e :bulb: **Tip:** Color requires a terminal that renders ANSI escapes (picocom, screen, minicom, PuTTY). Disable for raw serial logging.\n\n---\n\n## Minimal Example\n\n```c\n#include \"tiku.h\"\n\nTIKU_PROCESS(blink_process, \"Blink\");\n\nstatic struct tiku_timer timer;\n\nTIKU_PROCESS_THREAD(blink_process, ev, data)\n{\n    TIKU_PROCESS_BEGIN();\n\n    tiku_common_led1_init();\n    tiku_timer_set_event(\u0026timer, TIKU_CLOCK_SECOND);\n\n    while (1) {\n        TIKU_PROCESS_WAIT_EVENT_UNTIL(ev == TIKU_EVENT_TIMER);\n        tiku_common_led1_toggle();\n        tiku_timer_reset(\u0026timer);\n    }\n\n    TIKU_PROCESS_END();\n}\n\nTIKU_AUTOSTART_PROCESSES(\u0026blink_process);\n```\n\n---\n\n## Handbook\n\n- **API References**\n  - [Core Kernel API Reference](handbook/references/api-reference.md)\n\n---\n\n## License\n\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not\nuse this software except in compliance with the License. You may obtain a copy\nof the License at:\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed\nunder the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\nCONDITIONS OF ANY KIND, either express or implied. See the License for the\nspecific language governing permissions and limitations under the License.\n\n---\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"http://tiku-os.org\"\u003etiku-os.org\u003c/a\u003e · \u003ca href=\"mailto:ambuj@tiku-os.org\"\u003eambuj@tiku-os.org\u003c/a\u003e\n\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftikuos%2Ftikuos","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftikuos%2Ftikuos","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftikuos%2Ftikuos/lists"}