Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 嵌入式系统不需要操作系统的数据库_C_Database_Operating System_Embedded_System - Fatal编程技术网

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

C 嵌入式系统不需要操作系统的数据库,c,database,operating-system,embedded,system,C,Database,Operating System,Embedded,System,是否有不需要操作系统来执行操作的数据库?如果是,请提供详细信息,如尺寸或详细链接 编程语言是C 嵌入式系统编程所需。好吧,这取决于您如何定义“操作系统” 如果将其定义为在x86硬件上运行的GUI;当然大多数数据库在其他系统上运行正常 如果您将其定义为实现POSIX规范或以其他方式允许线程或进程运行并提供安全性度量,那么,您将失去一些需要多线程操作的功能,但您仍然会很好;有很多选择 如果您将其定义为根本没有任何文件操作,并且没有实现大部分C标准库,那么您就非常不走运了 基于ARM的设备几乎肯定

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

编程语言是C


嵌入式系统编程所需。

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

  • 如果将其定义为在x86硬件上运行的GUI;当然大多数数据库在其他系统上运行正常
  • 如果您将其定义为实现POSIX规范或以其他方式允许线程或进程运行并提供安全性度量,那么,您将失去一些需要多线程操作的功能,但您仍然会很好;有很多选择
  • 如果您将其定义为根本没有任何文件操作,并且没有实现大部分C标准库,那么您就非常不走运了
基于ARM的设备几乎肯定有一个随工具链附带的C标准库。是深嵌入式系统的流行选择;例如,它默认包含在免费的CodeSource和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);
其中大多数可以是存根,但您需要,例如,printf()和其他写入操作需要
\u write()
,读取操作需要
\u read()
,malloc和其他内存管理函数需要
\u sbrk()
。例如,请参阅,以了解最小实现。这些函数的定义将决定数据库的工作方式;如果_write()向UART发送一个字符,那么您的数据库将不会非常有用

在标准库正常工作的情况下,其他数据库也应该正常工作。他们将在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>
#包括
#包括
#包括
#包括
#包括“sqlite3.h”
#包括
#包括
#包括
#包括
#包括
#包括

您需要实现这些功能。这不需要操作系统。有了C库,它就可以工作了,但是没有C库,你只能靠自己了。

你能详细说明一下你的意思吗?通过编辑你的原始文章,你不需要操作系统吗?我假设您的意思是,您所寻找的数据库将知道如何执行自己的磁盘访问。我说的对吗?你为什么不想用二进制文件创建自己的基于文件的数据库系统?我是说,你想要一个支持SQL语法的数据库吗?什么样的嵌入式设备?一个简单的AVR/PIC/ARM左右?它应该有多大/多小的占地面积?“为什么不呢?”因为虽然具有教育意义,但与多个在该领域有经验的开发人员开发的成熟db引擎相比,第一次尝试可能很差。它也可能浪费时间。它是基于ARM的设备。如果我在SQL语法中找到任何东西会更好,否则最后一个选项只能是二进制文件;只要你能提供钩子,你就应该能够让它运行。通过谷歌搜索“sqlite移植”,可以找到大量关于各种嵌入式系统端口的参考。如果你真的是在顶层编程(不使用任何现有的代码库/内核),你将有相当多的胶水要写。真的是这样吗?