modify fs.md humancompter.md tmr.md
This commit is contained in:
parent
10fd854116
commit
27a4e38b1e
|
@ -5,10 +5,10 @@
|
|||
|
||||
在物联网领域,主要使用的存储设备为FLASH,所以可以选择Jffs2等适合FLASH特性的日志型文件系统;FATFS由于其同时兼容Linux和Windows,选择其作为文件系统便于在“端”、“边”、“云”之间以统一的格式交互和保存数据。Ext4作为业内用户使用较多的文件系统,也可以将其轻量级的版本应用于物联网领域。
|
||||
|
||||
XiUOS研发计划支持FATFS,Jffs2,LWext4三种文件系统.XiUOS 1.0版本只支持FATFS。为了增强兼容性和支持VFS的特性,XiUOS通过设计IoT-VFS的构件,为用户提供了树形的文件组织结构。当前版本的IoT-VFS在功能上保证了FATFS的VFS特性,同时允许用户使用统一的VFS的接口来操作设备。IoT-VFS具有以下特性:
|
||||
* 统一采用UNIX风格路径格式,目录与文件层级清晰分明;
|
||||
* 面向用户提供POSIX文件接口,降低应用程序移植难度;
|
||||
* 可以在任意路径挂载不同文件系统,并且可以便捷地添加对新的文件系统的支持。
|
||||
XiUOS研发计划支持FATFS,Jffs2,LWext4三种文件系统,目前XiUOS 1.0版本只支持FATFS。为了增强兼容性和支持VFS的特性,XiUOS通过设计IoT-VFS的构件,为用户提供了树形的文件组织结构。当前版本的IoT-VFS在功能上保证了FATFS的VFS特性,同时允许用户使用统一的VFS的接口来操作设备。IoT-VFS具有以下特性:
|
||||
* 统一采用UNIX风格路径格式,目录与文件层级清晰分明
|
||||
* 面向用户提供POSIX文件接口,降低应用程序移植难度
|
||||
* 可以在任意路径挂载不同文件系统,并且可以便捷地添加对新的文件系统的支持
|
||||
|
||||
在IoT-VFS的支持下,应用程序开发者无须了解底层文件系统的接口细节,只需使用标准POSIX文件接口进行应用开发。对于已有的POSIX应用程序,也可以直接进行源代码级别的移植。使用IoT-VFS的应用程序架构如下图所示。
|
||||
|
||||
|
@ -25,7 +25,7 @@ int xs_MountFilesystem(const char *device_name,
|
|||
enum xs_FilesystemType fs_type, const char *path);
|
||||
```
|
||||
|
||||
该函数用于将指定设备上的物理文件系统挂载到指定路径。若挂载成功则返回0;若失败则返回对应错误码。
|
||||
该函数用于将指定设备上的物理文件系统挂载到指定路径,若挂载成功返回0,失败返回对应错误码。
|
||||
|
||||
| 参数 | 描述 |
|
||||
| --- | --- |
|
||||
|
@ -37,7 +37,7 @@ int xs_MountFilesystem(const char *device_name,
|
|||
int xs_UnmountFileSystem(const char *path);
|
||||
```
|
||||
|
||||
该函数用于卸载指定路径上挂载的文件系统。若卸载成功则返回0;若失败则返回对应错误码。
|
||||
该函数用于卸载指定路径上挂载的文件系统,若卸载成功返回0,失败返回对应错误码。
|
||||
|
||||
| 参数 | 描述 |
|
||||
| --- | --- |
|
||||
|
@ -49,7 +49,7 @@ int xs_UnmountFileSystem(const char *path);
|
|||
int open(const char *path, int flags, ...);
|
||||
```
|
||||
|
||||
该函数用于打开一个文件。若文件打开成功则返回该文件的描述符(非负),后续读写该文件由该描述符标识;若不成功则返回-1,此时errno会被置为对应错误码。在打开文件时可以指定打开选项,即flags参数。可选的选项有打开时截断文件(O_TRUNC)和向末尾写入(O_APPEND)。
|
||||
该函数用于打开一个文件。若文件打开成功则返回该文件的描述符(非负),后续读写该文件由该描述符标识,若不成功则返回-1,此时errno会被置为对应错误码。在打开文件时可以指定打开选项,即flags参数。可选的选项有打开时截断文件(O_TRUNC)和向末尾写入(O_APPEND)。
|
||||
|
||||
| 参数 | 描述 |
|
||||
| --- | --- |
|
||||
|
@ -60,7 +60,7 @@ int open(const char *path, int flags, ...);
|
|||
int close(int fd);
|
||||
```
|
||||
|
||||
该函数用于关闭一个已打开的文件。若文件关闭成功则返回0;若不成功则返回-1,此时errno会被置为对应错误码。
|
||||
该函数用于关闭一个已打开的文件。若文件关闭成功则返回0,若不成功则返回-1,此时errno会被置为对应错误码。
|
||||
|
||||
| 参数 | 描述 |
|
||||
| --- | --- |
|
||||
|
@ -70,7 +70,7 @@ int close(int fd);
|
|||
int read(int fd, void *buf, size_t len);
|
||||
```
|
||||
|
||||
该函数用于从文件读取数据。若读取成功则返回读取到的字节数;若不成功则返回-1,此时errno会被置为对应错误码。
|
||||
该函数用于从文件读取数据。若读取成功则返回读取到的字节数,若不成功则返回-1,此时errno会被置为对应错误码。
|
||||
|
||||
| 参数 | 描述 |
|
||||
| --- | --- |
|
||||
|
@ -82,7 +82,7 @@ int read(int fd, void *buf, size_t len);
|
|||
int write(int fd, const void *buf, size_t len);
|
||||
```
|
||||
|
||||
该函数用于向文件写入数据。若写入成功则返回读取到的字节数;若不成功则返回-1,此时errno会被置为对应错误码。
|
||||
该函数用于向文件写入数据。若写入成功则返回读取到的字节数,若不成功则返回-1,此时errno会被置为对应错误码。
|
||||
|
||||
| 参数 | 描述 |
|
||||
| --- | --- |
|
||||
|
@ -94,7 +94,7 @@ int write(int fd, const void *buf, size_t len);
|
|||
off_t lseek(int fd, off_t offset, int whence);
|
||||
```
|
||||
|
||||
该函数用于重定位文件读写指针。若重定位成功则返回新的读写指针位置,即距离文件起始处的字节数;若不成功则返回-1,此时errno会被置为对应错误码。
|
||||
该函数用于重定位文件读写指针。若重定位成功则返回新的读写指针位置,即距离文件起始处的字节数,若不成功则返回-1,此时errno会被置为对应错误码。
|
||||
|
||||
| 参数 | 描述 |
|
||||
| --- | --- |
|
||||
|
@ -106,7 +106,7 @@ off_t lseek(int fd, off_t offset, int whence);
|
|||
int rename(const char *from, const char *to);
|
||||
```
|
||||
|
||||
该函数用于重命名文件。若重命名成功则返回0;若失败则返回-1,此时errno会被置为对应错误码。
|
||||
该函数用于重命名文件。若重命名成功则返回0,若失败则返回-1,此时errno会被置为对应错误码。
|
||||
|
||||
| 参数 | 描述 |
|
||||
| --- | --- |
|
||||
|
@ -117,7 +117,7 @@ int rename(const char *from, const char *to);
|
|||
int unlink(const char *path);
|
||||
```
|
||||
|
||||
该函数用于删除一个文件。若删除成功则返回0;若失败则返回-1,此时errno会被置为对应错误码。
|
||||
该函数用于删除一个文件。若删除成功则返回0,若失败则返回-1,此时errno会被置为对应错误码。
|
||||
|
||||
| 参数 | 描述 |
|
||||
| --- | --- |
|
||||
|
@ -127,7 +127,7 @@ int unlink(const char *path);
|
|||
int stat(const char *path, struct stat *buf);
|
||||
```
|
||||
|
||||
该函数用于获取文件的元数据。stat结构与POSIX定义相同。若获取成功则返回0;若失败则返回-1,此时errno会被置为对应错误码。
|
||||
该函数用于获取文件的元数据。stat结构与POSIX定义相同。若获取成功则返回0,若失败则返回-1,此时errno会被置为对应错误码。
|
||||
|
||||
| 参数 | 描述 |
|
||||
| --- | --- |
|
||||
|
@ -138,7 +138,7 @@ int stat(const char *path, struct stat *buf);
|
|||
int fstat(int fd, struct stat *buf);
|
||||
```
|
||||
|
||||
该函数用于获取文件的元数据。stat结构与POSIX定义相同。若获取成功则返回0;若失败则返回-1,此时errno会被置为对应错误码。
|
||||
该函数用于获取文件的元数据。stat结构与POSIX定义相同。若获取成功则返回0,若失败则返回-1,此时errno会被置为对应错误码。
|
||||
|
||||
| 参数 | 描述 |
|
||||
| --- | --- |
|
||||
|
@ -149,7 +149,7 @@ int fstat(int fd, struct stat *buf);
|
|||
int fsync(int fd);
|
||||
```
|
||||
|
||||
该函数用于将指定文件数据写回存储设备,从而防止系统掉电数据丢失。若写回成功则返回0;若失败则返回-1,此时errno会被置为对应错误码。
|
||||
该函数用于将指定文件数据写回存储设备,从而防止系统掉电数据丢失。若写回成功则返回0,失败则返回-1,此时errno会被置为对应错误码。
|
||||
|
||||
| 参数 | 描述 |
|
||||
| --- | --- |
|
||||
|
@ -159,7 +159,7 @@ int fsync(int fd);
|
|||
int ftruncate(int fd, off_t length);
|
||||
```
|
||||
|
||||
该函数用于将文件截断至指定长度。若截断成功则返回0;若失败则返回-1,此时errno会被置为对应错误码。
|
||||
该函数用于将文件截断至指定长度。若截断成功则返回0,失败则返回-1,此时errno会被置为对应错误码。
|
||||
|
||||
| 参数 | 描述 |
|
||||
| --- | --- |
|
||||
|
@ -170,7 +170,7 @@ int ftruncate(int fd, off_t length);
|
|||
int mkdir(const char *path, mode_t mode);
|
||||
```
|
||||
|
||||
该函数用于创建一个目录。若创建成功则返回0;若失败则返回-1,此时errno会被置为对应错误码。
|
||||
该函数用于创建一个目录。若创建成功则返回0,若失败则返回-1,此时errno会被置为对应错误码。
|
||||
|
||||
| 参数 | 描述 |
|
||||
| --- | --- |
|
||||
|
@ -181,7 +181,7 @@ int mkdir(const char *path, mode_t mode);
|
|||
DIR *opendir(const char *path);
|
||||
```
|
||||
|
||||
该函数用于打开一个目录。若打开成功则返回一个目录句柄;若失败则返回XS_NULL。
|
||||
该函数用于打开一个目录。若打开成功则返回一个目录句柄,若失败则返回XS_NULL。
|
||||
|
||||
| 参数 | 描述 |
|
||||
| --- | --- |
|
||||
|
@ -191,7 +191,7 @@ DIR *opendir(const char *path);
|
|||
int closedir(DIR *dirp);
|
||||
```
|
||||
|
||||
该函数用于关闭一个已打开的目录。若关闭成功则返回0;若失败则返回-1,此时errno会被置为对应错误码。
|
||||
该函数用于关闭一个已打开的目录。若关闭成功则返回0,若失败则返回-1,此时errno会被置为对应错误码。
|
||||
|
||||
| 参数 | 描述 |
|
||||
| --- | --- |
|
||||
|
@ -201,7 +201,7 @@ int closedir(DIR *dirp);
|
|||
struct dirent *readdir(DIR *dirp);
|
||||
```
|
||||
|
||||
该函数用于读取目录的目录项。目录项由dirent结构表示,目前该结构仅包含文件或目录的类型(d_kind)与名称(d_name)。若读取成功则返回一个dirent指针;若读取失败则返回XS_NULL,此时errno会被置为对应错误码。
|
||||
该函数用于读取目录的目录项。目录项由dirent结构表示,目前该结构仅包含文件或目录的类型(d_kind)与名称(d_name)。若读取成功则返回一个dirent指针,若读取失败则返回XS_NULL,此时errno会被置为对应错误码。
|
||||
|
||||
| 参数 | 描述 |
|
||||
| --- | --- |
|
||||
|
@ -211,7 +211,7 @@ struct dirent *readdir(DIR *dirp);
|
|||
int rmdir(const char *path);
|
||||
```
|
||||
|
||||
该函数用于删除一个目录。若删除成功则返回0;若失败则返回-1,此时errno会被置为对应错误码。
|
||||
该函数用于删除一个目录。若删除成功则返回0,若失败则返回-1,此时errno会被置为对应错误码。
|
||||
|
||||
| 参数 | 描述 |
|
||||
| --- | --- |
|
||||
|
@ -221,7 +221,7 @@ int rmdir(const char *path);
|
|||
int chdir(const char *path);
|
||||
```
|
||||
|
||||
该函数用于切换当前工作目录。若切换成功则返回0;若失败则返回-1,此时errno会被置为对应错误码。
|
||||
该函数用于切换当前工作目录。若切换成功则返回0,若失败则返回-1,此时errno会被置为对应错误码。
|
||||
|
||||
| 参数 | 描述 |
|
||||
| --- | --- |
|
||||
|
@ -231,7 +231,7 @@ int chdir(const char *path);
|
|||
char *getcwd(char *buf, size_t size);
|
||||
```
|
||||
|
||||
该函数用于获取当前的工作目录。若获取成功则返回工作目录字符串(与buf参数相同);若失败则返回XS_NULL,此时errno会被置为对应错误码。
|
||||
该函数用于获取当前的工作目录。若获取成功则返回工作目录字符串(与buf参数相同),若失败则返回 XS_NULL,此时errno会被置为对应错误码。
|
||||
|
||||
| 参数 | 描述 |
|
||||
| --- | --- |
|
||||
|
@ -252,7 +252,7 @@ void rewinddir(DIR *dirp);
|
|||
long telldir(DIR *dirp);
|
||||
```
|
||||
|
||||
该函数用于获取目录的读取位置,即下一个readdir返回目录项的位置。若获取成功则返回0;若失败则返回-1,此时errno会被置为对应错误码。
|
||||
该函数用于获取目录的读取位置,即下一个readdir返回目录项的位置。若获取成功则返回0,若失败则返回-1,此时errno会被置为对应错误码。
|
||||
|
||||
| 参数 | 描述 |
|
||||
| --- | --- |
|
||||
|
@ -262,7 +262,7 @@ long telldir(DIR *dirp);
|
|||
void seekdir(DIR *dirp, off_t offset);
|
||||
```
|
||||
|
||||
该函数用于设置目录的读取位置,即下一个readdir返回目录项的位置。若设置成功则返回0;若失败则返回-1,此时errno会被置为对应错误码。
|
||||
该函数用于设置目录的读取位置,即下一个readdir返回目录项的位置。若设置成功则返回0,若失败则返回-1,此时errno会被置为对应错误码。
|
||||
|
||||
| 参数 | 描述 |
|
||||
| --- | --- |
|
||||
|
|
|
@ -14,11 +14,11 @@
|
|||
shell的运行过程:
|
||||
* 在命令行输入命令
|
||||
* shell对命令进行解析
|
||||
* 执行相应的操作。
|
||||
* 执行相应的操作
|
||||
|
||||
建立一个命令与函数的一一对应的关系,定义结构体。
|
||||
根据定义建立一个表,将所有的命令以及对应的函数进行声明
|
||||
获得输入的命令,并将其和命令表中的命令进行匹配,然后执行相应的函数
|
||||
获得输入的命令,并将其和命令表中的命令进行匹配,然后执行相应的函数。
|
||||
|
||||
使用串口进行命令的输入和输出,在输入命令并回车之后,程序解析命令,根据空格将输入分开为命令和参数,对命令进行匹配,匹配到命令之后,执行函数。伪代码如下:
|
||||
```c
|
||||
|
@ -26,17 +26,17 @@ shell的运行过程:
|
|||
|
||||
while(TRUE) { /* repeat forever */
|
||||
type_prompt(); /* display prompt on the screen */
|
||||
read_command(command,parameters); /* read input from terminal */
|
||||
read_command(command, parameters); /* read input from terminal */
|
||||
execve(command,parameters,0); /* execute command */
|
||||
}
|
||||
```
|
||||
### 总结
|
||||
与linux的bash、csh 等相比,我们实现的tshell比较简洁,不能执行shell脚本,没有编写完整解释器的缘故,不支持正则表达式等高端的功能。优点是资源占用率低,对串口的兼容性较好。
|
||||
与linux的bash、csh 等相比,我们实现的 tshell 比较简洁,目前不兼容shell 脚本。由于没有编写完整解释器的缘故,不支持正则表达式等高端的功能。优点是资源占用率低,对串口的兼容性较好。
|
||||
|
||||
|
||||
## LittlevGL
|
||||
|
||||
随着智能家用电器、智能手环、手表等物联网智能设备的普及,嵌入式系统对GUI的界面需求也越来越高。基于此背景,XiUOS集成了开源图形库LittlevGL开发框架,提供创建嵌入式GUI所需的一切。目前XiUOS已经支持KD233开发板。
|
||||
随着智能家居、智能手环、手表等物联网智能设备的普及,嵌入式系统对GUI的界面需求也越来越高。基于此背景,XiUOS集成了开源图形库LittlevGL开发框架,提供创建嵌入式GUI所需的一切。目前XiUOS已经支持KD233开发板。
|
||||
|
||||
LittlevGL是一个基于MIT协议的免费开源图形库,具有易于使用的图形元素、漂亮的视觉效果和低内存占用,它支持常用的控件,如按钮、图表、列表、滑块、图像等,并且支持触摸、鼠标、键盘等多种输入方式。更多特性访问官方网址:[https://littlevgl.com/](https://littlevgl.com/)。
|
||||
|
||||
|
|
|
@ -11,20 +11,20 @@
|
|||
|
||||
## 简介
|
||||
每一个操作系统都需要一个时钟计数,提供“心跳”计数,该时钟可以提供系统处理所有和时钟相关的事件。
|
||||
XiUOS的“心跳”通过芯片提供的硬件定时器产生的周期性中断进行计数,XiUOS可以在menuconfig界面进行配置,配置单位为毫秒。
|
||||
配置界面如下
|
||||
XiUOS的“心跳”通过芯片提供的硬件定时器产生的周期性中断进行计数,XiUOS可以在menuconfig界面进行配置,配置单位为毫秒。
|
||||
配置界面如下:
|
||||
|
||||
<img src="./imagesrc/tmr_config.png" width="100%"/>
|
||||
|
||||
界面中的数值将配置给变量XS_TICK_PER_SECOND,该变量解释为每秒钟支持的节拍数(tick)。例如,XS_TICK_PER_SECOND
|
||||
界面中的数值将配置给变量 XS_TICK_PER_SECOND,该变量解释为每秒钟支持的节拍数(tick)。当 XS_TICK_PER_SECOND
|
||||
配置为100,则tick节拍表示10毫秒,即一个时间片(timeslice)为10毫秒。
|
||||
当节拍配置成功后,系统支持的调度算法、软件定时器等依赖于该时钟周期服务的事件就可以正常工作了。例如,在XiUOS支持的时间片轮转算法当中,每进行的一次线程切换为10个tick。
|
||||
在节拍配置成功后,系统支持的调度算法、软件定时器等依赖于该时钟周期服务的事件就可以正常工作了。例如,在XiUOS支持的时间片轮转算法当中,每进行的一次线程切换为10个tick。
|
||||
|
||||
节拍计数执行流程如下图所示
|
||||
节拍计数执行流程如下图所示:
|
||||
|
||||
<img src="./imagesrc/tmr_process.png" width="100%"/>
|
||||
|
||||
在每一个定时器中断到来时,进行常规的中断执行流,定时器按照每一个tick单位进行触发中断,在中断服务程序当中进行自增,并对当前运行线程的时间片进行计算;同步可处理定时器的计数时间。
|
||||
在每一个定时器中断到来时,系统进行常规的中断执行流,定时器按照每一个tick单位进行触发中断,在中断服务程序当中进行自增,并对当前运行线程的时间片进行计算,同步可处理定时器的计数时间。
|
||||
|
||||
<span id="func_api"></span>
|
||||
|
||||
|
|
Loading…
Reference in New Issue