[uCOS/RTOS] 适用于Cortex-M系列单片机的开源操作系统内核

[复制链接]
 楼主| 446252221 发表于 2016-11-2 14:49 | 显示全部楼层 |阅读模式
这里有一个开源的小型单片机操作系统内核!
使用起来非常简单,应付大多数应用没有问题。
代码通俗易懂,编程风格类似于linux,可以学习一下。
比如linux创建线程的API是pthread_create
这个操作系创建线程的API是kthread_create
还有mutex和sem都非常类似.

开源中国主页:wwwoschina.net/p/klite

 楼主| 446252221 发表于 2016-11-2 14:52 | 显示全部楼层
附上一段使用KLite的演示代码。

  1. /*
  2. * KLite DEMO
  3. * STM32F407,XTAL=16MHz
  4. */
  5. #include <stdarg.h>
  6. #include <stdio.h>
  7. #include <string.h>
  8. #include "kernel.h"
  9. #include "board.h"
  10. #include "nvic.h"
  11. #include "uart.h"

  12. #define MAX_DEBUG_LEN        1024
  13. static kmutex_t debug_mutex;
  14. static char*    debug_buff;

  15. void debug(const char* fmt, ...)
  16. {
  17.         va_list va;
  18.         kmutex_lock(debug_mutex);
  19.         va_start(va,fmt);
  20.         vsnprintf(debug_buff,MAX_DEBUG_LEN,fmt,va);
  21.         va_end(va);
  22.         uart_write(1,debug_buff,strlen(debug_buff));
  23.         kmutex_unlock(debug_mutex);
  24. }

  25. void debug_init(void)
  26. {
  27.         debug_buff = malloc(MAX_DEBUG_LEN);
  28.         debug_mutex = kmutex_create();
  29.         uart_init(1,1024);
  30.         uart_open(1,115200,0);
  31. }

  32. void demo_main(void* arg)
  33. {
  34.         debug("demo thread start.\r\n");
  35.         debug("thread pid=%p, arg=%p\r\n",kthread_self(),arg);
  36.         while(1)
  37.         {
  38.                 sleep(2000);
  39.                 debug("thread<%p> running.kernel time=%d\r\n",kthread_self(),kernel_time());
  40.         }
  41. }

  42. void demo_init(void)
  43. {
  44.         uint32_t ver;
  45.         uint32_t total;
  46.         uint32_t used;
  47.         ver = kernel_version();
  48.         debug("\r\nklite version:%d.%d.%d\r\n",(ver>>24)&0xFF,(ver>>16)&0xFF,ver&0xFFFF);
  49.         kthread_create(demo_main,0,0);
  50.         kthread_create(demo_main,0,0);
  51.         kmem_info(&total,&used);
  52.         debug("memory usage: %d/%d byte\r\n",used,total);
  53. }

  54. void init(void* arg)
  55. {
  56.         board_init();
  57.         nvic_init();
  58.         debug_init();
  59.         demo_init();
  60.         debug("init thread exit!\r\n");
  61. }

  62. int main(void)
  63. {
  64.         kernel_init(0x10000000,0x10000);
  65.         kthread_create(init,0,0);
  66.         kernel_start();
  67. }


helezh 发表于 2016-11-6 22:23 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

6

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部