gpt4 book ai didi

c - 嵌入式系统不需要操作系统的数据库

转载 作者:太空狗 更新时间:2023-10-29 17:24:27 25 4
gpt4 key购买 nike

有没有不需要操作系统来执行操作的数据库?如果是,请提供尺寸等详细信息或详细信息链接。

编程语言是C。

嵌入式系统编程所必需的。

最佳答案

好吧,这取决于您如何定义“操作系统”。

  • 如果您将其定义为在 x86 硬件上运行的具有 GUI 的东西;当然;大多数数据库在其他系统上运行得很好。
  • 如果您将其定义为实现 POSIX 规范或以其他方式允许线程或进程运行并提供安全措施的东西,那么,您将失去一些需要多线程操作的东西,但您仍然没问题;有很多选择。
  • 如果您将它定义为根本没有任何文件操作并且没有实现很多 C 标准库的东西,那您就很不走运了。

您的基于 ARM 的设备几乎肯定有一个随工具链一起提供的 C 标准库。 Newlib是深度嵌入式系统的流行选择;例如,它默认包含在免费的 CodeSourcery 和 YARTGO 工具链中。但是,您需要先实现一些系统调用,然后才能工作。例如,您可以执行 printf() 并在控制台上显示文本吗? malloc() 怎么样?如果这些和其他功能不起作用,我建议您实现它们。 Newlib 期望的基本系统调用是:

int     _system       (const char *);
int _rename (const char *, const char *);
int _isatty (int);
clock_t _times (struct tms *);
int _gettimeofday (struct timeval *, struct timezone *);
void _raise (void);
int _unlink (void);
int _link (void);
int _stat (const char *, struct stat *);
int _fstat (int, struct stat *);
caddr_t _sbrk (int);
int _getpid (int);
int _kill (int, int);
void _exit (int);
int _close (int);
int _open (const char *, int, ...);
int _write (int, char *, int);
int _lseek (int, int, int);
int _read (int, char *, int);

其中大部分可以是 stub ,但是您需要例如 _write() 用于 printf()(和其他写入操作),_read() 用于读取操作,以及用于 malloc 和其他内存管理功能的 _sbrk()。参见,例如,http://wiki.osdev.org/Porting_Newlib一个最小的实现。您对这些函数的定义将决定数据库的工作方式;如果 _write() 向 UART 发送一个字符,那么您的数据库将不会很有用。

随着标准库的运行,sqlite和其他数据库应该工作。他们会在 sqlite 合并的 shell.c 中做这样的事情:

#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <assert.h>
#include "sqlite3.h"
#include <ctype.h>
#include <stdarg.h>
#include <signal.h>
#include <pwd.h>
#include <unistd.h>
#include <sys/types.h>

您需要对它们进行一些实现。这不需要操作系统。有了 C 库,它就可以工作,但没有 C 库,您就只能靠自己了。

关于c - 嵌入式系统不需要操作系统的数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11453404/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com