Ein kleines Front-End- und Back-End-System für MCU

Einführung in JxOS

JxOS ist ein kleines Front-End- und Back-End-System für MCUs, das Dienste wie Nachrichten und Ereignisse sowie gängige Funktionsmodule wie Software-Timer, Low-Power-Management, Tasten und LEDs bereitstellt.

Die Adresse des Gitee-Lagers lautet (in den Browser kopieren und öffnen):

https://gitee.com/jeremyceng/JxOS/tree/master

Auf dieser Basis wird eine einfache drahtlose Netzwerkfunktion basierend auf 433 implementiert.

Die Designidee dieses Projekts besteht darin, Funktionsmodule stark von der Hardware zu entkoppeln, um die Wiederverwendbarkeit von Codemodulen zu verbessern, die Kompatibilität zwischen verschiedenen Hardwareplattformen und Compilern zu verbessern, ohne komplexe Datenstrukturen und Syntax zu verwenden, und Projekte auf verschiedenen Plattformen zu realisieren. Schnelle Transplantation zwischen MCUs; Bereitstellung praktischer, stabiler und häufig verwendeter Funktionsmodule, um eine schnelle Projektentwicklung zu erreichen; Definieren Sie ein Standard-Anwendungsentwicklungs-Framework, um den Arbeitsaufwand und die Schwierigkeit der Anwendungsentwicklung zu reduzieren.

Die Hardwareplattformen, die dieses System für Entwicklungsprojekte verwendet haben, sind: N76E003, STM8S103K, PC, KF8TS2716

Softwarearchitektur

JxOS
├───demo_code    参考代码,未整理代码
├───jxos     jxos
│   ├───bsp     过时分类,将逐步归类到 driver 和 lib 中
│   ├───kernel    内核,提供系统内核功能:任务、事件、消息、公告板、邮箱、管道、注册、内存分配……
│   ├───driver    使用 静态 初始化的功能代码模块,使用config.h文件进行配置;此目录下的代码大部分与硬件相关,如:传感器、按键扫描、屏幕…… (driver 与 lib 有时并没有清晰的界限,如driver:led_blink 就有可能抽象成 lib:sw_pwm)
│   ├───lib     使用 动态 初始化的功能代码模块,使用初始化函数进行配置;此目录下的模代码大部分与硬件无关,如:环形缓冲区、crc16、栈、软件定时器…… 
│   ├───sys_service   基于任务实现的系统服务,如:低功耗管理、软件定时器、打印输出……(只有对外接口,不发出对外消息)
│   └───std_app    基于任务实现的常用标准应用,如独立按键扫描、按键多次点击、指示灯闪烁……(此类模块和user app属于同一级别,只不过已经标准化;此类模块发出对外消息,也有对外接口,用于兼容不能支持消息功能的硬件平台)
├───platform
│   ├───N76E003    ┐
│   ├───N76E003    ├───  基于 jxos 实现的,使用不同平台硬件的具体项目
│   └───STM8S103K3 ┘
├───JSnet   ┐
├───....    ├───   基于 jxos 实现的功能模块
└───SRTnet  ┘
  1. Der Kernel bietet Systemkernfunktionen: Aufgaben, Ereignisse, Nachrichten, Bulletin Boards, Postfächer, Pipes, Registrierung, Speicherzuweisung ...
  2. Der Treiber verwendet ein statisch initialisiertes Funktionscodemodul und verwendet die Datei config.h zur Konfiguration. Der größte Teil des Codes in diesem Verzeichnis bezieht sich auf Hardware, z. B. Sensoren, Tastenscans, Bildschirme ... (Der Treiber und die Bibliothek tun dies manchmal keine klare Grenze haben, z. B. „driver:led_blink“ kann in „lib:sw_pwm“ abstrahiert werden.
  3. lib verwendet dynamisch initialisierte Funktionscodemodule und verwendet Initialisierungsfunktionen für die Konfiguration; die meisten Modulcodes in diesem Verzeichnis haben nichts mit Hardware zu tun, wie zum Beispiel: Ringpuffer, crc16, Stapel, Software-Timer ...
  4. sys_service ist ein Systemdienst, der auf der Aufgabenimplementierung basiert, z. B.: Energiesparverwaltung, Software-Timer, Druckausgabe ... (nur externe Schnittstelle, es werden keine externen Nachrichten gesendet)
  5. std_app ist eine häufig verwendete Standardanwendung, die auf der Grundlage von Aufgaben wie dem unabhängigen Scannen von Tasten, dem mehrfachen Klicken auf Tasten, dem Blinken der Anzeigelampe usw. implementiert wird. (Dieser Modultyp gehört zur gleichen Ebene wie die Benutzer-App, wurde jedoch standardisiert; dieser Typ des Moduls sendet externe Nachrichten und verfügt auch über externe Schnittstellen. , für Kompatibilität mit Hardwareplattformen, die keine Messaging-Funktionen unterstützen)
  6. Die Plattform basiert auf jxos und ist ein spezifisches Projekt, das unterschiedliche Plattformhardware verwendet.
  7. In einigen Compilerumgebungen kann es bestimmte Einschränkungen geben (Funktionszeiger werden nicht unterstützt, der Aufruf anderer Funktionen in Interrupt-Handling-Funktionen wird nicht unterstützt, Funktionszeiger mit Parametern werden nicht unterstützt und Strukturen werden nicht unterstützt), sodass die von std_app bereitgestellten Nachrichten möglicherweise nicht unterstützt werden nicht verwendet werden. Als Ergänzung stellt std_app auch globale Variablen zur Weitergabe von Informationen und Funktionsschnittstellen zur Weitergabe von Informationen bereit.
  8. Um die Codekompatibilität zu verbessern, sollten Sie versuchen, keine Funktionszeiger zu verwenden
  9. Um die Wiederverwendbarkeit des Codes zu verbessern, werden die Funktionen in std_app so weit wie möglich im Treiber und in der Bibliothek implementiert. Der Code in std_app wird nur zur Bereitstellung von System-Ticks und einheitlichen externen Schnittstellenfunktionen verwendet.
  10. Module und std_app können mehrere Dateien mit unterschiedlichen Implementierungsmethoden bereitstellen, behalten jedoch eine einheitliche externe Schnittstelle bei.
  11. Extern werden zwei Sätze von Schnittstellenlösungen bereitgestellt: jxos_public.h bietet Schnittstellen auf hoher Ebene (Nachrichten und Ereignisse usw.) und jxos_public_lite.h bietet Schnittstellen auf niedriger Ebene (globale Variablen, Funktionen).

  Information Direct: Lernroute zur Linux-Kernel-Quellcode-Technologie + Video-Tutorial zum Kernel-Quellcode

Learning Express: Linux-Kernel-Quellcode, Speicheroptimierung, Dateisystem, Prozessverwaltung, Gerätetreiber/Netzwerkprotokollstapel

Anweisungen

  1. Importieren Sie jxos_public.h, um alle externen Schnittstellen des Systems aufzurufen
  2. Jedes Projekt konfiguriert das System über jxos_init_config.c und jxos_config.h, dh jedes Projekt verfügt über eine unabhängige Konfigurationsdatei.
  3. Implementieren Sie in jxos_init_config.c die Hardware-Initialisierung von Systemmodulen, die Hardware-Unterstützung erfordern, und die Initialisierungssequenz von Benutzeraufgaben.
  4. Konfigurieren Sie die Parameter und die Aktivierung des Systemmoduls in jxos_config.h
  5. Das Ereignis wird zur Signalsynchronisierung innerhalb der Task verwendet, hauptsächlich um das Interrupt-Signal an die Task weiterzuleiten
  6. msg wird für die Nachrichtenübermittlung zwischen Aufgaben verwendet. Verwenden Sie jxos_msg_get_handle, um das Nachrichtenhandle über den Nachrichtennamen (String) abzurufen.
如何建立新项目:
 获取 Jxos 所有文件和目录结构
 在 \platform 目录下建立当前工程的目录(platform\芯片型号\工程命名\)
 在 \工程名称 目录下新建工程文件(keil、iar 等IDE的newproject)
 在 \工程名称 目录下新建 \config 目录,增加 jxos_config.h type.h 系统配置文件
 在 \config 目录下增加工程用到的功能模块的配置文件 (如 button_config.h sim_timer_config.h ...)
 在 \工程名称 目录下新建 \framework 目录
 在 \framework 目录下增加 main.c ,实现main函数,在main函数中调用jxos_run() ( void main(void) {jxos_run();} )
 在 \framework 目录下增加 isr.c ,实现工程需要的中断处理函数
 在 \framework 目录下增加 callback_handler.c ,实现工程用到的功能模块的callback函数
 建议在 \工程名称 目录下新建 \app 目录,实现用户功能任务
 建议在 \芯片型号 目录下增加芯片需要用到的库文件目录
 在IDE的新工程中导入 jxos.c
 在IDE的新工程中导入需要的Jxos模块的文件(kernel、sys_service ...)
 在IDE的新工程中导入 main.c, isr.c, callback_handler.c
 在IDE的新工程中导入用户任务文件 (\工程名称\app\)
 在IDE的新工程中增加include目录,包括:\joxs,\platform\芯片型号\工程命名\config
 在IDE的新工程中增加其他的include目录,如芯片库文件的头文件
 按照框架实现用户任务

如何配置与使用 kernel
如何配置与使用 sys_service
如何配置与使用 std_app
如何使用标准框架的 driver 模块
如何使用标准框架的 lib 模块

Ursprünglicher Autor: [ Learn Embedded Together ]

おすすめ

転載: blog.csdn.net/youzhangjing_/article/details/132637654