diff --git a/README.md b/README.md index edca96b74a842131341a1efb4de352a5ff8ef8ed..ad350fd5a5bbd2bbfa713cb3f5fdc1da15f7dd5c 100644 --- a/README.md +++ b/README.md @@ -52,7 +52,7 @@ rt-thread-version:RT-Thread 各种版本,标准版本、nano版本、smart > [!NOTE] > 注:修改文档需要符合以下规则: -> +> >(1)修改文档段落或添加文章后,文档中包含的中英文之间需要添加空格,可以使用 vscode-pangu 插件进行格式化。 > >(2)为文章添加图片时,不要使用 URL 方式进行链接(URL 可能会失效),需要将图片上传至该仓库,采用相对路径进行链接,保证图片有效性。[正确示范](https://gitee.com/rtthread/docs-online/pulls/47/files) vs [错误示范](https://gitee.com/rtthread/docs-online/pulls/44/files)。 diff --git a/development-tools/env/env.md b/development-tools/env/env.md index c133baf5b0d8a4a36988cc96d6b2e89925492241..256a7c3c7a7d9edc22c28cd9deaa3bb0d70fffdb 100644 --- a/development-tools/env/env.md +++ b/development-tools/env/env.md @@ -68,7 +68,7 @@ scons 是 RT-Thread 使用的编译构建工具,可以使用 scons 相关命 ![编译工程成功](./figures/scons_done.png) -如果使用 mdk/iar 来进行项目开发,可以直接使用 BSP 中的工程文件或者使用以下命令中的其中一种,重新生成工程,再进行编译下载。 +如果使用 mdk/iar 来进行项目开发,可以直接使用 BSP 中的工程文件或者使用以下命令中的其中一种,重新生成工程,再进行编译下载。 ``` scons --target=iar @@ -150,7 +150,7 @@ optional arguments: * 使用 `menuconfig -s` 命令进入 Env 配置界面 - ![Env 配置界面](./figures/menuconfig_s.png) + ![Env 配置界面](./figures/menuconfig_s.png) 按下回车进入配置菜单,里面共有 3 个配置选项 diff --git a/development-tools/kconfig/kconfig.md b/development-tools/kconfig/kconfig.md index 254a130cbfbe44c6d7465018d75d1cfea474a80b..a5a2a3bb4db1c7886b1a4b06ac24db1dd7096b63 100644 --- a/development-tools/kconfig/kconfig.md +++ b/development-tools/kconfig/kconfig.md @@ -189,7 +189,7 @@ endmenu 当没有选中 "Enable CAN" 选项时,下面通过 if 判断的 Enable CAN1 选项并不会显示出来,如下图所示 -![if0](figures/if0.png) +![if0](figures/if0.png) ![if1](figures/if1.png) 当上一级菜单选中 "Enable CAN" 时 @@ -326,7 +326,7 @@ config BSP_USING_GPIO 将上述语句中的 `bool` 后面的注释去掉。 ```c config BSP_USING_GPIO - bool + bool default y ``` @@ -359,7 +359,7 @@ depends on可以以一定的逻辑 “depends” 多个条件,具体写法如 ```c config BSP_USING_UART3 - depends on RT_USNING_A || !RT_USNING_B + depends on RT_USNING_A || !RT_USNING_B ``` -这句话表示的是UART3串口会在 RT_USNING_A 选定或者 RT_USNING_B 不选定的情况下,显示 BSP_USING_UART3 的配置菜单选项,默认为不选状态。 \ No newline at end of file +这句话表示的是UART3串口会在 RT_USNING_A 选定或者 RT_USNING_B 不选定的情况下,显示 BSP_USING_UART3 的配置菜单选项,默认为不选状态。 diff --git a/development-tools/rtthread-studio/README.md b/development-tools/rtthread-studio/README.md index 99b404b6d67d00c34bf6de546e2fc28252f083d3..9f2a724da89a59ac94371fdd91a29029d27f77f7 100644 --- a/development-tools/rtthread-studio/README.md +++ b/development-tools/rtthread-studio/README.md @@ -5,4 +5,4 @@ RT-Thread Studio 作为一个开发工具软件,需要有一个从了解到熟悉,从熟悉到能熟练应用的过程,特别是对于以前没有用过基于 eclipse 的开发工具软件的用户,建议先熟悉软件基本使用方法和主要功能入口,然后再尝试进行项目开发,遇到问题可以先参考查阅相关文档和视频教程以及 FAQs,若找不到解决办法,可以在 Studio QQ 群(941959043)或 Studio 论坛发帖,Studio 支持人员会协助解决问题。 -![image-20210127181544774](figures/image-20210127181325681.png) \ No newline at end of file +![image-20210127181544774](figures/image-20210127181325681.png) diff --git a/development-tools/rtthread-studio/changelog/changelog.md b/development-tools/rtthread-studio/changelog/changelog.md index 3d2357e1224f51da2011c363d9f60f39ae19ba8d..0651f8720a33149dd45d45cf9ff3582b01c3a959 100644 --- a/development-tools/rtthread-studio/changelog/changelog.md +++ b/development-tools/rtthread-studio/changelog/changelog.md @@ -54,45 +54,45 @@ ##### [V1.1.4更新发布](https://club.rt-thread.org/ask/article/306.html) -- 工程向导开发和完善 - 1.新增基于开发板创建工程模式替代老的基于bsp模式 +- 工程向导开发和完善 + 1.新增基于开发板创建工程模式替代老的基于bsp模式 -- 工具链支持 - 1.新增RISC-V工具链支持 +- 工具链支持 + 1.新增RISC-V工具链支持 -- 构建功能完善 - 1.解决停止并启动调试没自动构建的问题 - 2.解决只修改了链接脚本后构建无效的问题 +- 构建功能完善 + 1.解决停止并启动调试没自动构建的问题 + 2.解决只修改了链接脚本后构建无效的问题 -- SDK Manager完善 - 1.新增开发板类型资源包 - 2.完善美化SDK Manger图标 - 3.解决SDK资源包安装失败的问题 +- SDK Manager完善 + 1.新增开发板类型资源包 + 2.完善美化SDK Manger图标 + 3.解决SDK资源包安装失败的问题 -- 新开发板支持 - 1.新增IMXRT1064/1052开发板的支持 +- 新开发板支持 + 1.新增IMXRT1064/1052开发板的支持 -- RT-Thread配置完善 - 1.解决LWIP配置选项ICMP名称问题 +- RT-Thread配置完善 + 1.解决LWIP配置选项ICMP名称问题 2.解决RT-Thread配置页面在构建时没有自动保存的问题 -- QEMU功能完善 - 1.新增芯来rvstar开发板qemu仿真支持 - 2.新增vexpress-a9的qemu仿真支持 - 3.新增qemu点击下载直接启动运行模式 +- QEMU功能完善 + 1.新增芯来rvstar开发板qemu仿真支持 + 2.新增vexpress-a9的qemu仿真支持 + 3.新增qemu点击下载直接启动运行模式 4.新增STM32 sdio模拟支持 -- 调试器功能完善 - 1.新增ST-LINK调试支持复位 - 2.新增ST-LINK调试支持查看外设寄存器 - 3.新增ST-LINK外部FLASH下载算法支持 - 4.解决ST-LINK下载Verify时日志出现乱码的问题 - 5.新增DAP-LINK对多下载算法的支持 - 6.新增DAP-LINK调试器对雅特力芯片下载和调试的支持 - 7.新增DAP-LINK下载调试参数配置便于加快下载速度 +- 调试器功能完善 + 1.新增ST-LINK调试支持复位 + 2.新增ST-LINK调试支持查看外设寄存器 + 3.新增ST-LINK外部FLASH下载算法支持 + 4.解决ST-LINK下载Verify时日志出现乱码的问题 + 5.新增DAP-LINK对多下载算法的支持 + 6.新增DAP-LINK调试器对雅特力芯片下载和调试的支持 + 7.新增DAP-LINK下载调试参数配置便于加快下载速度 8.解决J-Link下载时工程路径有空格弹框需要手动输入起始地址的问题 -- 语言切换完善 +- 语言切换完善 1.解决切换到英文后部分窗口仍有中文的问题 ##### [V1.1.3更新发布](https://club.rt-thread.org/ask/article/45.html) @@ -179,7 +179,7 @@ - 解决软件包版本显示不正确的问题 - 解决工程重命名后芯片切换和调试配置打不开问题 - 解决删除工程时占用异常的问题 -- 升级工程生成器 +- 升级工程生成器 ##### [V1.0.2更新发布](https://www.rt-thread.org/qa/thread-423613-1-1.html) @@ -209,10 +209,10 @@ - 采用带封装命名的芯片名形式 - 优化完善工程生成器 - -​ + +​ diff --git a/development-tools/rtthread-studio/drivers/cubemx/rtthread-studio-cubemx.md b/development-tools/rtthread-studio/drivers/cubemx/rtthread-studio-cubemx.md index f7bbeef31523d5a1fefd331d488231d108137e87..945080146a916d29c01722b32c6378da5c7a9b7e 100644 --- a/development-tools/rtthread-studio/drivers/cubemx/rtthread-studio-cubemx.md +++ b/development-tools/rtthread-studio/drivers/cubemx/rtthread-studio-cubemx.md @@ -1,6 +1,6 @@ # RT-Thread Studio 结合 STM32CubeMx 开发其他驱动文档 -使用 `RT-Thread Studio` 新建 RT-Thread 的项目时直接就将 RT-Thread 实时操作系统移植到对应的芯片上了,省去了系统移植的步骤。 +使用 `RT-Thread Studio` 新建 RT-Thread 的项目时直接就将 RT-Thread 实时操作系统移植到对应的芯片上了,省去了系统移植的步骤。 使用 `STM32CubeMx` 配置工具可以方便快速的配置芯片外设的时钟和引脚,使驱动的开发变得简单。 @@ -86,12 +86,12 @@ - 如果使用外部时钟,则需要更新工程中的`stm32xxxx_hal_conf.h` 中的对应的外部时钟频率的值,以 HSE 为例,需要修改下面的时钟频率为实际使用的值: ```c - + #define HSE_VALUE ((uint32_t)8000000U) /*!< Value of the External oscillator in Hz */ - + ``` - - + + ## 使用外设 @@ -195,4 +195,4 @@ int main(void) - `stm32xxxx_hal_msp.c` 函数中主要完成的是外设引脚和时钟的初始化,所以在使用 `CubeMx` 生成外设的配置代码时不能选择为每个外设都生成 `.c/.h` 文件 -- 使用 `CubeMx` 外设时只需要配置实际使用的外设,如果 `stm32xxxx_hal_msp.c` 文件和 `drv_uart.c` 文件或者 `drv_spi.c` 文件外设的初始化函数重定义,需要删除 `stm32xxxx_hal_msp.c` 文件中外设的初始化函数。 \ No newline at end of file +- 使用 `CubeMx` 外设时只需要配置实际使用的外设,如果 `stm32xxxx_hal_msp.c` 文件和 `drv_uart.c` 文件或者 `drv_spi.c` 文件外设的初始化函数重定义,需要删除 `stm32xxxx_hal_msp.c` 文件中外设的初始化函数。 diff --git a/development-tools/rtthread-studio/drivers/eth/rtthread-studio-eth.md b/development-tools/rtthread-studio/drivers/eth/rtthread-studio-eth.md index e71fe0c30cd069259371b1978a3e4719b5fcc790..3a7c7a75284ec28c646e80d09b77e60da2115ddc 100644 --- a/development-tools/rtthread-studio/drivers/eth/rtthread-studio-eth.md +++ b/development-tools/rtthread-studio/drivers/eth/rtthread-studio-eth.md @@ -177,4 +177,4 @@ ping www.baidu.com ## 注意事项 -- 本例中只配置了 `lwIP` 协议栈以及 `ETH` 相关的驱动,更多关于 `RT-Thread` 网络部分的使用及介绍可以参考 [netdev 网卡](https://www.rt-thread.org/document/site/programming-manual/netdev/netdev/),[SAL套接字抽象层](https://www.rt-thread.org/document/site/programming-manual/sal/sal/)。 \ No newline at end of file +- 本例中只配置了 `lwIP` 协议栈以及 `ETH` 相关的驱动,更多关于 `RT-Thread` 网络部分的使用及介绍可以参考 [netdev 网卡](https://www.rt-thread.org/document/site/programming-manual/netdev/netdev/),[SAL套接字抽象层](https://www.rt-thread.org/document/site/programming-manual/sal/sal/)。 diff --git a/development-tools/rtthread-studio/drivers/pin/rtthread-studio-pin.md b/development-tools/rtthread-studio/drivers/pin/rtthread-studio-pin.md index 30752ebd042353dcddb1d7d990322151a3916f00..dcbaea58a26c7bd874c5d0efa370f884b6886d31 100644 --- a/development-tools/rtthread-studio/drivers/pin/rtthread-studio-pin.md +++ b/development-tools/rtthread-studio/drivers/pin/rtthread-studio-pin.md @@ -4,10 +4,10 @@ 一般情况下 MCU 引出供用户使用的引脚有很多个,RT-Thread 提供的 PIN 设备驱动将这些 GPIO 引脚抽象为了一个 PIN 设备,应用程序通过 PIN 设备管理接口就可以访问控制引脚。PIN 设备驱动有以下特点: -- 在 PIN 驱动文件中为每个引脚重新编号,这不同于芯片手册中的编号。使用时可以通过 PIN 驱动中的引脚号操作 PIN 设备。 +- 在 PIN 驱动文件中为每个引脚重新编号,这不同于芯片手册中的编号。使用时可以通过 PIN 驱动中的引脚号操作 PIN 设备。 - 可设置引脚输入/输出模式、可读取/设置引脚电平状态、可设置引脚中断回调函数等。 -使用 RT-Thread Studio 创建基于 RT-Thread 完整版的工程时,默认开启了 RT-Thread 的 PIN 设备,所以用户无须重新配置或修改源码,即可直接使用 PIN 设备。 +使用 RT-Thread Studio 创建基于 RT-Thread 完整版的工程时,默认开启了 RT-Thread 的 PIN 设备,所以用户无须重新配置或修改源码,即可直接使用 PIN 设备。 ## 创建 RT-Thread 完整版工程 @@ -66,4 +66,4 @@ int main(void) ![pin-device](figures/pin-device.png) -PIN 设备的更多使用说明请参考 [PIN 设备](https://www.rt-thread.org/document/site/programming-manual/device/pin/pin/) \ No newline at end of file +PIN 设备的更多使用说明请参考 [PIN 设备](https://www.rt-thread.org/document/site/programming-manual/device/pin/pin/) diff --git a/development-tools/rtthread-studio/drivers/soft-i2c/rtthread-studio-soft-i2c.md b/development-tools/rtthread-studio/drivers/soft-i2c/rtthread-studio-soft-i2c.md index 59422ad7b6251c6f56a079b5571b453e24034ffd..f8a9d7c1073ade3f831b4f550b7a932d684c3622 100644 --- a/development-tools/rtthread-studio/drivers/soft-i2c/rtthread-studio-soft-i2c.md +++ b/development-tools/rtthread-studio/drivers/soft-i2c/rtthread-studio-soft-i2c.md @@ -81,7 +81,7 @@ RT-Thread Setting ![list_device](figures/list_device.png) -更多 I2C 总线的应用请参考 [I2C 总线设备应用示例](https://www.rt-thread.org/document/site/programming-manual/device/i2c/i2c/#i2c_4) +更多 I2C 总线的应用请参考 [I2C 总线设备应用示例](https://www.rt-thread.org/document/site/programming-manual/device/i2c/i2c/#i2c_4) ## 注意事项 diff --git a/development-tools/rtthread-studio/drivers/uart/v4.0.2/rtthread-studio-uart-v4.0.2.md b/development-tools/rtthread-studio/drivers/uart/v4.0.2/rtthread-studio-uart-v4.0.2.md index ab36d17e19d31c686be2573e4f430b03d70f3e6d..09357cc603e49e6dced111b2eba264546e0a2dda 100644 --- a/development-tools/rtthread-studio/drivers/uart/v4.0.2/rtthread-studio-uart-v4.0.2.md +++ b/development-tools/rtthread-studio/drivers/uart/v4.0.2/rtthread-studio-uart-v4.0.2.md @@ -58,7 +58,7 @@ int main(void) ### 修改默认串口 -上节中基于 Studio 的图形化界面成功配置了串口的输出,但是一些实际的应用的可能需要使用其他串口输出信息,这种情况则可以通过修改一些宏定义及 RT-Thread Setting 文件来实现。 +上节中基于 Studio 的图形化界面成功配置了串口的输出,但是一些实际的应用的可能需要使用其他串口输出信息,这种情况则可以通过修改一些宏定义及 RT-Thread Setting 文件来实现。 #### 修改 `board.h` 宏 @@ -129,7 +129,7 @@ RT-Thread Setting 如果要使用串口 DMA 的功能,需要使用 RT-Thread Setting 打开 DMA 的支持。配置路径为 ```c -RT-Thread Setting +RT-Thread Setting ----组件 --------设备驱动程序 ------------使用 UART 设备驱动程序 @@ -161,4 +161,4 @@ RT-Thread Setting 测试程序已经成功使用 DMA 进行了接收。 -更多关于串口的使用请查看 [UART设备](https://www.rt-thread.org/document/site/programming-manual/device/uart/uart/) \ No newline at end of file +更多关于串口的使用请查看 [UART设备](https://www.rt-thread.org/document/site/programming-manual/device/uart/uart/) diff --git a/development-tools/rtthread-studio/drivers/usb-device/rtthread-studio-usb-device.md b/development-tools/rtthread-studio/drivers/usb-device/rtthread-studio-usb-device.md index de8334a327565a53ee177ded5072dbaba58ba9e3..7bcd91f08a95997d97d6e69150cb2a4da93d4d5a 100644 --- a/development-tools/rtthread-studio/drivers/usb-device/rtthread-studio-usb-device.md +++ b/development-tools/rtthread-studio/drivers/usb-device/rtthread-studio-usb-device.md @@ -82,11 +82,11 @@ void HAL_PCD_MspInit(PCD_HandleTypeDef* hpcd) /* USER CODE BEGIN USB_OTG_FS_MspInit 0 */ /* USER CODE END USB_OTG_FS_MspInit 0 */ - + __HAL_RCC_GPIOA_CLK_ENABLE(); - /**USB_OTG_FS GPIO Configuration + /**USB_OTG_FS GPIO Configuration PA11 ------> USB_OTG_FS_DM - PA12 ------> USB_OTG_FS_DP + PA12 ------> USB_OTG_FS_DP */ GPIO_InitStruct.Pin = GPIO_PIN_11|GPIO_PIN_12; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; @@ -132,11 +132,11 @@ void SystemClock_Config(void) RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; - /** Configure LSE Drive Capability + /** Configure LSE Drive Capability */ HAL_PWR_EnableBkUpAccess(); __HAL_RCC_LSEDRIVE_CONFIG(RCC_LSEDRIVE_LOW); - /** Initializes the CPU, AHB and APB busses clocks + /** Initializes the CPU, AHB and APB busses clocks */ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI|RCC_OSCILLATORTYPE_HSE |RCC_OSCILLATORTYPE_LSE; @@ -154,7 +154,7 @@ void SystemClock_Config(void) { Error_Handler(); } - /** Initializes the CPU, AHB and APB busses clocks + /** Initializes the CPU, AHB and APB busses clocks */ RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; @@ -186,7 +186,7 @@ void SystemClock_Config(void) { Error_Handler(); } - /** Configure the main internal regulator output voltage + /** Configure the main internal regulator output voltage */ if (HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1) != HAL_OK) { diff --git a/development-tools/rtthread-studio/faq/studio-faq.md b/development-tools/rtthread-studio/faq/studio-faq.md index 102bd0793f743aa55e777b7b83d99fb152633117..83446eb91212a1d40c12e923085665aea74b486a 100644 --- a/development-tools/rtthread-studio/faq/studio-faq.md +++ b/development-tools/rtthread-studio/faq/studio-faq.md @@ -89,9 +89,9 @@ RT-Thread Studio 升级前请先关闭科学上网工具,或尝试删除安装 - 如果更新失败提示信息里有 “No Repository found”或发生下图所示错误,请手动探测更新。在更新页面内,取消勾选 “Group items by category”和“Contact all update sites during install to find required software” 并勾选"Eclipse Platform Launcher Executables",然后尝试安装studio更新,若安装过程中出错,关闭后重试一次即可 。 ![upadte_error1](figures/upadte_error1.png) - + ![upadte_error2](figures/upadte_error2.png) - + ![upadte_error3](figures/upadte_error3.png) ## 如何打开关闭的项目 @@ -103,7 +103,7 @@ RT-Thread Studio 升级前请先关闭科学上网工具,或尝试删除安装 - 问题描述: Error loading Python DLL `xxx/MEI85262/python36.dll`. LoadLibrary:找不到指定程序 -![python36.png](figures/python36.png) +![python36.png](figures/python36.png) - 解决方法:请手动安装 Visual C++ Redistributable, [点我下载](https://realthread.cowtransfer.com/s/96d5e5928fc54e) @@ -117,7 +117,7 @@ RT-Thread Studio 从 V 1.1.4 版本开始支持`显示/隐藏`被排除构建的 - 如果想`显示/隐藏`这些资源,请先点击项目资源管理器右上角的倒三角,会展示如下菜单,点击过滤器和定制: -![exclude_build_1](figures/exclude_build_1.png) +![exclude_build_1](figures/exclude_build_1.png) - 在过滤器和定制中,有很多可以选择过滤的资源,`勾选/取消勾选` RTT Excluded Resource ,即可`隐藏/显示`被排除构建的资源。 @@ -173,9 +173,9 @@ RT-Thread Studio 为用户提供了一键解决命令行长度限制的方法, ![image-20201111183636804](figures/project_root.png) - -## 如何解决第一次启动Studio时登录页面不显示的问题 + +## 如何解决第一次启动Studio时登录页面不显示的问题 进入Studio安装目录,打开`studio.ini` 文件,将Dorg.rtthread.studio.browser.systemdefault=false 值修改为Dorg.rtthread.studio.browser.systemdefault=true (该方法仅支持V2.0及以后的版本) @@ -203,13 +203,13 @@ RT-Thread Studio 为用户提供了一键解决命令行长度限制的方法, - 打开并编辑对应目录下的 SConscript 文件,在 src = Split(''' ''') 中添加需要加入编译的源文件的名字,例如加入 application.c , - ![](figures/SConsAddFile.png) + ![](figures/SConsAddFile.png) - 之后右键点击工程,更新软件包 ![](figures/UpdatePack.png) - + ## 如何解决pkgs update运行无效或studio下载软件包无响应 @@ -234,7 +234,7 @@ RT-Thread Studio 为用户提供了一键解决命令行长度限制的方法, 采用把官方py2.7安装目录下的_ssl.pyd替换studio内同名文件即可 该文件提供下载如下,请自行下载替换: -[_ssl.pyd](/figures/_ssl.pyd) +[_ssl.pyd](/figures/_ssl.pyd) ps:论坛参考帖子 -- https://club.rt-thread.org/ask/question/424358.html @@ -242,4 +242,4 @@ ps:论坛参考帖子 -- https://club.rt-thread.org/ask/question/424358.html 采用把官方py2.7安装目录下的python27.dll替换studio内同名文件即可 -ps:论坛参考帖子 -- https://club.rt-thread.org/ask/question/429846.html \ No newline at end of file +ps:论坛参考帖子 -- https://club.rt-thread.org/ask/question/429846.html diff --git a/development-tools/rtthread-studio/um/studio-user-begin.md b/development-tools/rtthread-studio/um/studio-user-begin.md index cc75b22635b3588d3ea95c7171f7f9dcdf676c7c..ed3d03c3add7385154880375004b30a0a67d5f89 100644 --- a/development-tools/rtthread-studio/um/studio-user-begin.md +++ b/development-tools/rtthread-studio/um/studio-user-begin.md @@ -106,4 +106,4 @@ ## 视频教程 -访问官网 [RT-Thread Studio 视频教程](https://www.rt-thread.org/page/video.html),在官网观看视频教程。 \ No newline at end of file +访问官网 [RT-Thread Studio 视频教程](https://www.rt-thread.org/page/video.html),在官网观看视频教程。 diff --git a/development-tools/rtthread-studio/um/studio-user-manual.md b/development-tools/rtthread-studio/um/studio-user-manual.md index 50a6778ae8fe593faf5d13cdaa23eedb9624875d..b790be78b637e96521485ea5936dec655d5ae694 100644 --- a/development-tools/rtthread-studio/um/studio-user-manual.md +++ b/development-tools/rtthread-studio/um/studio-user-manual.md @@ -250,7 +250,7 @@ RT-Thread Studio 定制了一套配置 MDK 工程的界面,只要打开工程 在 Studio 资源管理器窗口中点击右键,在下拉菜单中选择导入功能,然后选择导入 IAR 项目到工作空间,然后点击下一步, 如下图所示: -​ ![image-20210311151216392](figures/iar_1.png) +​ ![image-20210311151216392](figures/iar_1.png) 点击浏览选择工程目录下要导入的 IAR 工程,然后输入导入后的工程名,点击完成即可, 如下图所示: @@ -307,7 +307,7 @@ RT-Thread Studio 定制了一套配置 MDK 工程的界面,只要打开工程 > elif CROSS_TOOL == 'iar': > PLATFORM = 'iar' > EXEC_PATH = r'C:/Program Files (x86)/IAR Systems/Embedded Workbench 8.0' - + - **WARNING Can't auto specific link.lds file, Please specific a linker file mannually.** 出现这种错误意味着在导入过程中不能自动替换链接脚本文件,需要手动指定链接脚本的位置。 @@ -420,19 +420,19 @@ RT-Thread Studio 为 STM32CubeMX 提供了快捷的配置入口,可将 STM32Cu 选中你所创建的项目,右键点击会弹出以下界面,选择最下面的一个选项`属性`(图中红色矩形样式),点击进入。 -![](figures/Encoding_02.png) +![](figures/Encoding_02.png) 点击`属性`之后,弹出以下页面,默认的是`从容器继承`,我们选择`其他`, 下拉框选择编码,然后点击`Apply and Close`即可 ![](figures/Encoding_03.png) -- **设置工作区间的编码格式** +- **设置工作区间的编码格式** 通过`窗口`菜单打开`首选项`窗口弹出如下图界面: ![](figures/Encoding_04.png) -​ 点击`常规`选项后再点击`工作空间`会出现设置编码格式的选项。默认的是`缺省值(GBK)`,这里我们选择`其他`,下拉框选择编码,然后点击`Apply and Close`即可 +​ 点击`常规`选项后再点击`工作空间`会出现设置编码格式的选项。默认的是`缺省值(GBK)`,这里我们选择`其他`,下拉框选择编码,然后点击`Apply and Close`即可 ![](figures/Encoding_05.png) @@ -450,7 +450,7 @@ RT-Thread Studio 为 STM32CubeMX 提供了快捷的配置入口,可将 STM32Cu ### 重构 -通过 ` 重构 ` 菜单或者直接在源 码编辑器内右键菜单,可以选择对应的重构系列功能,如下图所示: +通过 ` 重构 ` 菜单或者直接在源 码编辑器内右键菜单,可以选择对应的重构系列功能,如下图所示: ![rebuild](figures/rebuild.png) @@ -617,7 +617,7 @@ RT-Thread Studio 为 STM32CubeMX 提供了快捷的配置入口,可将 STM32Cu ![addformat](figures/addformat.png) -### 取消启动调试前的自动构建 +### 取消启动调试前的自动构建 首先通过`窗口`菜单打开`首选项`窗口,然后展开`运行/调试`选项并点击进入`启动`选项,最后将`在启动之前构建(如必需)`选项取消勾选即可取消启动调试前的自动构建,如下图所示: @@ -816,7 +816,7 @@ RT-Thread Studio 自 V2.0.0 版本开始支持 PlatformIO 工程的创建、编 1. 在github.com 新建一个仓库,存储制作好的开发板支持包,需要满足以下格式 + 仓库名字以 “sdk-bsp-” 为首,例如 sdk-bsp-stm32h750-realthread-artpi - + 开发板支持包描述文件 (yaml) 需要位于仓库的根目录下 + + 开发板支持包描述文件 (yaml) 需要位于仓库的根目录下 参考仓库:https://github.com/RT-Thread-Studio/sdk-bsp-stm32h750-realthread-artpi @@ -928,7 +928,7 @@ RT-Thread Studio 基于 eclipse 平台开发,eclipse 是一个高度可定制 由于首选项数量大,种类多,首选项对话框左侧以树形的形式展示所有的首选项,点击对应的首选项类别即可展开对应的首选项配置树,若要查找某个首选项,可直接在 ` 输入过滤文本 ` 框中,输入关键字,进行查找。 -首选项右侧即为具体的可配置项页面,修改 后直接点击 ` 应用 ` 即可保存配置,若想恢复当前配置页默认值,点击 ` 恢复默认值 ` 按钮即可。 +首选项右侧即为具体的可配置项页面,修改 后直接点击 ` 应用 ` 即可保存配置,若想恢复当前配置页默认值,点击 ` 恢复默认值 ` 按钮即可。 首选项配置还可以通过左下角 ` 导入 `,` 导出 ` 功能,将配置进行保存或者在不同用户间传递或者共享配置,导出功能将把所有配置导出到 `.epf` 文件中,其它用户直接导入这个 `.epf` 文件,即可使用该文件记录的所有配置。 diff --git a/development-tools/scons/scons.md b/development-tools/scons/scons.md index 78ac27d8a2b7a548a0377e1ba2a31843e30208f0..1ca237475a6b2580d22c1a6bda393e9e44a26287 100644 --- a/development-tools/scons/scons.md +++ b/development-tools/scons/scons.md @@ -209,9 +209,9 @@ cwd = str(Dir('#')) objs = [] list = os.listdir(cwd) for d in list: - path = os.path.join(cwd, d) + path = os.path.join(cwd, d) if os.path.isfile(os.path.join(path, 'SConscript')): - objs = objs + SConscript(os.path.join(d, 'SConscript')) + objs = objs + SConscript(os.path.join(d, 'SConscript')) Return('objs') ``` @@ -351,7 +351,7 @@ else: LINKFLAGS = '' if GetDepend('FINSH_USING_MSH'): - src = src + msh_src + src = src + msh_src if not GetDepend('FINSH_USING_MSH_ONLY'): src = src + fsh_src @@ -485,12 +485,12 @@ src = Split(''' LIBPATH = [cwd + '/libs'] # LIBPATH 指定库的路径,表示库的搜索路径是当前目录下的'libs'目录 if rtconfig.CROSS_TOOL == 'gcc': - LIBS = ['abc_gcc'] # GCC 下 LIBS 指定库的名称 + LIBS = ['abc_gcc'] # GCC 下 LIBS 指定库的名称 elif rtconfig.CROSS_TOOL == 'keil': - LIBS = ['libabc_keil'] # ARMCC 下 LIBS 指定库的名称 + LIBS = ['libabc_keil'] # ARMCC 下 LIBS 指定库的名称 else: - LIBS = ['libabc_iar'] # IAR 下 LIBS 指定库的名称 - + LIBS = ['libabc_iar'] # IAR 下 LIBS 指定库的名称 + group = DefineGroup('ABC', src, depend = [''], LIBS = LIBS, LIBPATH=LIBPATH) Return('group') @@ -515,23 +515,23 @@ CPU='cortex-m3' CROSS_TOOL='gcc' if os.getenv('RTT_CC'): - CROSS_TOOL = os.getenv('RTT_CC') + CROSS_TOOL = os.getenv('RTT_CC') # cross_tool provides the cross compiler # EXEC_PATH is the compiler execute path, for example, CodeSourcery, Keil MDK, IAR if CROSS_TOOL == 'gcc': - PLATFORM = 'gcc' - EXEC_PATH = '/usr/local/gcc-arm-none-eabi-5_4-2016q3/bin/' + PLATFORM = 'gcc' + EXEC_PATH = '/usr/local/gcc-arm-none-eabi-5_4-2016q3/bin/' elif CROSS_TOOL == 'keil': - PLATFORM = 'armcc' - EXEC_PATH = 'C:/Keilv5' + PLATFORM = 'armcc' + EXEC_PATH = 'C:/Keilv5' elif CROSS_TOOL == 'iar': - PLATFORM = 'iar' - EXEC_PATH = 'C:/Program Files/IAR Systems/Embedded Workbench 6.0 Evaluation' + PLATFORM = 'iar' + EXEC_PATH = 'C:/Program Files/IAR Systems/Embedded Workbench 6.0 Evaluation' if os.getenv('RTT_EXEC_PATH'): - EXEC_PATH = os.getenv('RTT_EXEC_PATH') + EXEC_PATH = os.getenv('RTT_EXEC_PATH') BUILD = 'debug' @@ -589,10 +589,10 @@ BUILD = 'hello, world' ```c if os.getenv('RTT_CC'): - CROSS_TOOL = os.getenv('RTT_CC') + CROSS_TOOL = os.getenv('RTT_CC') ... ... if os.getenv('RTT_EXEC_PATH'): - EXEC_PATH = os.getenv('RTT_EXEC_PATH') + EXEC_PATH = os.getenv('RTT_EXEC_PATH') ``` 上面 2 个 if 判断会设置 CROSS_TOOL 和 EXEC_PATH 为 Env 的默认值。 diff --git a/other/novice-guide/README.md b/other/novice-guide/README.md index 805ce6fc667fdf1b2dc60672af421819c9f5368b..e7a82ff975353e6b7786cf564747cc2bb40dd7a4 100644 --- a/other/novice-guide/README.md +++ b/other/novice-guide/README.md @@ -7,7 +7,7 @@ 初次使用 RT-Thread 操作系统进行开发的小伙伴,可以参考本篇文档的学习路线进行上手入门。

-##### +##### # 版本简介 @@ -20,7 +20,7 @@ RT-Thread 主要采用 C 语言编写,浅显易懂,方便移植。它把面 相较于 Linux 操作系统,RT-Thread 体积小,成本低,功耗低、启动快速,除此以外 RT-Thread 还具有实时性高、占用资源小等特点,非常适用于各种资源受限(如成本、功耗限制等)的场合。虽然 32 位 MCU 是它的主要运行平台,实际上很多带有 MMU、基于 ARM9、ARM11 甚至 Cortex-A 系列级别 CPU 的应用处理器在特定应用场合也适合使用 RT-Thread。 -适用于需要使用 RT-Thread 的丰富功能,如各类外设、物联网组件、软件包等的场景。[更多...](/rt-thread-version/rt-thread-standard/README.md) +适用于需要使用 RT-Thread 的丰富功能,如各类外设、物联网组件、软件包等的场景。[更多...](/rt-thread-version/rt-thread-standard/README.md) ![Software_framework_diagram](figures/4.png) @@ -69,15 +69,15 @@ RT-Thread Smart 是基于 RT-Thread 操作系统上的混合操作系统,简 推荐使用 [潘多拉开发板](https://item.taobao.com/item.htm?id=583527145598) 配套使用 [潘多拉开发板教程. pdf](https://www.rt-thread.org/document/site/tutorial/iot_board_tutorial.pdf),或者以下主流的学习板进行学习,不建议没有任何基础就将 RT-Thread 移植到一块开发板上。 -- [RT-Thread 潘多拉 STM32L475 上手指南](/rt-thread-version/rt-thread-standard/tutorial/quick-start/iot_board/quick-start.md) +- [RT-Thread 潘多拉 STM32L475 上手指南](/rt-thread-version/rt-thread-standard/tutorial/quick-start/iot_board/quick-start.md) - [野火霸道 STM32F103 上手指南](/rt-thread-version/rt-thread-standard/tutorial/quick-start/stm32f103-fire-arbitrary/quick-start.md) -- [正点原子 nanoSTM32F103 上手指南](/rt-thread-version/rt-thread-standard/tutorial/quick-start/stm32f103-atk-nano/quick-start) -- [野火挑战者 STM32F429 上手指南](/rt-thread-version/rt-thread-standard/tutorial/quick-start/stm32f429-fire-challenger/quick-start.md) -- [正点原子探索者 STM32F407 上手指南](/rt-thread-version/rt-thread-standard/tutorial/quick-start/stm32f407-atk-explorer/quick-start.md) -- [正点原子阿波罗 STM32F429 上手指南](/rt-thread-version/rt-thread-standard/tutorial/quick-start/stm32f429-atk-apolo/quick-start.md) -- [野火 I.MX RT1052 上手指南](/rt-thread-version/rt-thread-standard/tutorial/quick-start/imxrt1052-fire-mini/quick-start.md) -- [正点原子 I.MX RT1052 号令者上手指南](/rt-thread-version/rt-thread-standard/tutorial/quick-start/imxrt1052-atk-commander/quick-start.md) -- [其他...](/rt-thread-version/rt-thread-standard/tutorial/quick-start/iot_board/quick-start.md) +- [正点原子 nanoSTM32F103 上手指南](/rt-thread-version/rt-thread-standard/tutorial/quick-start/stm32f103-atk-nano/quick-start) +- [野火挑战者 STM32F429 上手指南](/rt-thread-version/rt-thread-standard/tutorial/quick-start/stm32f429-fire-challenger/quick-start.md) +- [正点原子探索者 STM32F407 上手指南](/rt-thread-version/rt-thread-standard/tutorial/quick-start/stm32f407-atk-explorer/quick-start.md) +- [正点原子阿波罗 STM32F429 上手指南](/rt-thread-version/rt-thread-standard/tutorial/quick-start/stm32f429-atk-apolo/quick-start.md) +- [野火 I.MX RT1052 上手指南](/rt-thread-version/rt-thread-standard/tutorial/quick-start/imxrt1052-fire-mini/quick-start.md) +- [正点原子 I.MX RT1052 号令者上手指南](/rt-thread-version/rt-thread-standard/tutorial/quick-start/imxrt1052-atk-commander/quick-start.md) +- [其他...](/rt-thread-version/rt-thread-standard/tutorial/quick-start/iot_board/quick-start.md) #### 内核学习 diff --git a/rt-thread-version/rt-thread-nano/finsh-port/an0045-finsh-port.md b/rt-thread-version/rt-thread-nano/finsh-port/an0045-finsh-port.md index 25a39c5503c1e6fd5d836d95a43c599b3b9bd385..e726be7d93535673f09147a0ed36c503933e08a9 100644 --- a/rt-thread-version/rt-thread-nano/finsh-port/an0045-finsh-port.md +++ b/rt-thread-version/rt-thread-nano/finsh-port/an0045-finsh-port.md @@ -258,8 +258,8 @@ rt_inline enum rt_ringbuffer_state rt_ringbuffer_status(struct rt_ringbuffer *rb return RT_RINGBUFFER_HALFFULL; } -/** - * get the size of data in rb +/** + * get the size of data in rb */ rt_size_t rt_ringbuffer_data_len(struct rt_ringbuffer *rb) { @@ -413,13 +413,13 @@ void rt_hw_console_output(const char *str) char rt_hw_console_getchar(void) { char ch = 0; - + /* 从 ringbuffer 中拿出数据 */ while (rt_ringbuffer_getchar(&uart_rxcb, (rt_uint8_t *)&ch) != 1) { rt_sem_take(&shell_rx_sem, RT_WAITING_FOREVER); - } - return ch; + } + return ch; } /* uart 中断 */ @@ -443,10 +443,10 @@ void USART2_IRQHandler(void) if (ch == -1) { break; - } + } /* 读取到数据,将数据存入 ringbuffer */ rt_ringbuffer_putchar(&uart_rxcb, ch); - } + } rt_sem_release(&shell_rx_sem); } diff --git a/rt-thread-version/rt-thread-nano/nano-config/an0043-nano-config.md b/rt-thread-version/rt-thread-nano/nano-config/an0043-nano-config.md index ee7e5423058974cf43217fd232c6e09f61c09a2e..420299605511635b5c12cbb2fbac20bc281cc53d 100644 --- a/rt-thread-version/rt-thread-nano/nano-config/an0043-nano-config.md +++ b/rt-thread-version/rt-thread-nano/nano-config/an0043-nano-config.md @@ -12,7 +12,7 @@ RT-Thread Nano 的配置在 rtconfig.h 中进行,通过开关宏定义来使 2、设置 RT-Thread 操作系统节拍,表示多少 tick 每秒,如默认值为 100 ,表示一个时钟节拍(os tick)长度为 10ms。常用值为 100 或 1000。时钟节拍率越快,系统的额外开销就越大。 ```c -#define RT_TICK_PER_SECOND 1000 +#define RT_TICK_PER_SECOND 1000 ``` 3、字节对齐时设定对齐的字节个数,默认 4,常使用 ALIGN(RT_ALIGN_SIZE) 进行字节对齐。 @@ -22,7 +22,7 @@ RT-Thread Nano 的配置在 rtconfig.h 中进行,通过开关宏定义来使 4、设置对象名称的最大长度,默认 8 个字符,一般无需修改。 ```c -#define RT_NAME_MAX 8 +#define RT_NAME_MAX 8 ``` 5、设置使用组件自动初始化功能,默认需要使用,开启该宏则可以使用自动初始化功能。 @@ -65,9 +65,9 @@ RT-Thread Nano 的配置在 rtconfig.h 中进行,通过开关宏定义来使 #undef RT_USING_TIMER_SOFT #endif -#define RT_TIMER_THREAD_PRIO 4 // 设置软件定时器线程的优先级,默认为 4 +#define RT_TIMER_THREAD_PRIO 4 // 设置软件定时器线程的优先级,默认为 4 -#define RT_TIMER_THREAD_STACK_SIZE 512 // 设置软件定时器线程的栈大小,默认为 512 字节 +#define RT_TIMER_THREAD_STACK_SIZE 512 // 设置软件定时器线程的栈大小,默认为 512 字节 ``` ## IPC 配置 diff --git a/rt-thread-version/rt-thread-nano/nano-port-cube/an0041-nano-port-cube.md b/rt-thread-version/rt-thread-nano/nano-port-cube/an0041-nano-port-cube.md index e41dcad59a9a24d642b8128b9b2bb356a94bf1a2..edd7db4760943e7b9b5139152787ebd46425d69c 100644 --- a/rt-thread-version/rt-thread-nano/nano-port-cube/an0041-nano-port-cube.md +++ b/rt-thread-version/rt-thread-nano/nano-port-cube/an0041-nano-port-cube.md @@ -100,7 +100,7 @@ void rt_hw_board_init() { HAL_Init(); SystemClock_Config(); - + /* System Clock Update */ SystemCoreClockUpdate(); @@ -186,4 +186,4 @@ void rt_hw_board_init() ### Q: CubeMX 如何升级 -**A**:本文创建工程基于 CubeMX 5.0.0,如果比较低的版本,建议升级,升级方式: `help -> Check for updates`,进入后,点击 Refresh,CubeMX 自动去获取最新的程序,成功获取后选择版本,点击 `Install now`,等待完成安装。 \ No newline at end of file +**A**:本文创建工程基于 CubeMX 5.0.0,如果比较低的版本,建议升级,升级方式: `help -> Check for updates`,进入后,点击 Refresh,CubeMX 自动去获取最新的程序,成功获取后选择版本,点击 `Install now`,等待完成安装。 diff --git a/rt-thread-version/rt-thread-nano/nano-port-iar/an0040-nano-port-iar.md b/rt-thread-version/rt-thread-nano/nano-port-iar/an0040-nano-port-iar.md index 9f215d0c6b5ac6a33da983ae872df9cee7641f59..2969a585f5c88c8f222adc4629e43d30938ca09f 100644 --- a/rt-thread-version/rt-thread-nano/nano-port-iar/an0040-nano-port-iar.md +++ b/rt-thread-version/rt-thread-nano/nano-port-iar/an0040-nano-port-iar.md @@ -100,7 +100,7 @@ void rt_hw_board_init() { HAL_Init(); SystemClock_Config(); - + /* System Clock Update */ SystemCoreClockUpdate(); diff --git a/rt-thread-version/rt-thread-nano/nano-port-keil/an0039-nano-port-keil.md b/rt-thread-version/rt-thread-nano/nano-port-keil/an0039-nano-port-keil.md index cf1f16f813ac2b62878a9c0ab8b766b5dbe85466..b593394cd4095d99dc99b8b6b4bbbbc51730e72b 100644 --- a/rt-thread-version/rt-thread-nano/nano-port-keil/an0039-nano-port-keil.md +++ b/rt-thread-version/rt-thread-nano/nano-port-keil/an0039-nano-port-keil.md @@ -121,7 +121,7 @@ void rt_os_tick_callback(void) /* cortex-m 架构使用 SysTick_Handler() */ SysTick_Handler() { - rt_os_tick_callback(); + rt_os_tick_callback(); } void rt_hw_board_init(void) diff --git a/rt-thread-version/rt-thread-nano/nano-port-principle/an0044-nano-port-principle.md b/rt-thread-version/rt-thread-nano/nano-port-principle/an0044-nano-port-principle.md index d40fc56ed7093379a284b1c9c45cc5714648bdb5..bb691c0516a71332418bb42c4624ab5b915119f3 100644 --- a/rt-thread-version/rt-thread-nano/nano-port-principle/an0044-nano-port-principle.md +++ b/rt-thread-version/rt-thread-nano/nano-port-principle/an0044-nano-port-principle.md @@ -42,7 +42,7 @@ startup.s:主要完成初始化时钟、配置中断向量表;完成全局 / //修改前: bl SystemInit bl main - + //修改后: bl SystemInit bl entry /* 修改此处,由 main 改为 entry */ @@ -123,15 +123,15 @@ int entry(void) /* board.c */ void rt_hw_board_init(void) { - /* 第一部分:系统初始化、系统时钟配置等 */ + /* 第一部分:系统初始化、系统时钟配置等 */ HAL_init(); // 一些系统层初始化,若需要则增加此部分 - SystemClock_Config(); // 配置系统时钟 - SystemCoreClockUpdate(); // 更新系统时钟频率 SystemCoreClock + SystemClock_Config(); // 配置系统时钟 + SystemCoreClockUpdate(); // 更新系统时钟频率 SystemCoreClock - /* 第二部分:配置 OS Tick 的频率,实现 OS 节拍(并在中断服务例程中实现 OS Tick 递增) */ - _SysTick_Config(SystemCoreClock / RT_TICK_PER_SECOND); + /* 第二部分:配置 OS Tick 的频率,实现 OS 节拍(并在中断服务例程中实现 OS Tick 递增) */ + _SysTick_Config(SystemCoreClock / RT_TICK_PER_SECOND); - /* 第三部分:初始化硬件外设,若有需要,则放在此处调用 */ + /* 第三部分:初始化硬件外设,若有需要,则放在此处调用 */ /* 第四部分:系统动态内存堆初始化 */ #if defined(RT_USING_USER_MAIN) && defined(RT_USING_HEAP) @@ -143,7 +143,7 @@ void rt_hw_board_init(void) rt_components_board_init(); #endif - /* 第六部分:其他初始化 */ + /* 第六部分:其他初始化 */ } ``` @@ -158,7 +158,7 @@ void rt_hw_board_init(void) void rt_hw_board_init() { /* 第一部分:系统初始化、系统时钟配置等 */ - rt_hw_clock_init() // 时钟初始化,函数名不做要求,函数自行实现,如 SystemClock_Config()、SystemCoreClockUpdate() + rt_hw_clock_init() // 时钟初始化,函数名不做要求,函数自行实现,如 SystemClock_Config()、SystemCoreClockUpdate() ... } ``` @@ -176,21 +176,21 @@ OS 节拍也叫时钟节拍或 OS tick。任何操作系统都需要提供一个 void rt_hw_board_init() { ... - /* 第二部分:配置 OS Tick 的频率,实现 OS 节拍(并在中断服务例程中实现 OS Tick 递增) */ - _SysTick_Config(SystemCoreClock / RT_TICK_PER_SECOND); // 使用 SysTick 实现时钟节拍 + /* 第二部分:配置 OS Tick 的频率,实现 OS 节拍(并在中断服务例程中实现 OS Tick 递增) */ + _SysTick_Config(SystemCoreClock / RT_TICK_PER_SECOND); // 使用 SysTick 实现时钟节拍 ... } /* systick 中断服务例程 */ void SysTick_Handler(void) { - /* enter interrupt */ - rt_interrupt_enter(); + /* enter interrupt */ + rt_interrupt_enter(); - rt_tick_increase(); + rt_tick_increase(); - /* leave interrupt */ - rt_interrupt_leave(); + /* leave interrupt */ + rt_interrupt_leave(); } ``` @@ -201,7 +201,7 @@ void SysTick_Handler(void) void rt_hw_board_init() { ... - /* 第二部分:配置 OS Tick 的频率,实现 OS 节拍(并在中断服务例程中实现 OS Tick 递增) */ + /* 第二部分:配置 OS Tick 的频率,实现 OS 节拍(并在中断服务例程中实现 OS Tick 递增) */ rt_hw_timer_init(); // 使用 硬件定时器 实现时钟节拍,一般命名为 rt_hw_timer_init() ... } @@ -234,7 +234,7 @@ static void rt_hw_timer_isr(int vector, void *param) void rt_hw_board_init(void) { .... - /* 第三部分:初始化硬件外设,若有需要,则放在此处调用 */ + /* 第三部分:初始化硬件外设,若有需要,则放在此处调用 */ uart_init(); .... } @@ -263,7 +263,7 @@ RT_WEAK void *rt_heap_begin_get(void) RT_WEAK void *rt_heap_end_get(void) { - return rt_heap + RT_HEAP_SIZE; + return rt_heap + RT_HEAP_SIZE; } void rt_hw_board_init(void) @@ -279,7 +279,7 @@ void rt_hw_board_init(void) 如果不想使用数组作为动态内存堆,则可以重新指定系统 HEAP 的大小,例如使用 RAM ZI 段结尾处作为 HEAP 的起始地址(这里需检查与链接脚本是否对应),使用 RAM 的结尾地址作为 HEAP 的结尾地址,这样可以将空余RAM 全部作为动态内存 heap 使用。如下示例重新定义了 HEAP 的起始地址与结尾地址,并作为初始化参数进行系统 HEAP 初始化。 ```c -#define STM32_SRAM1_START (0x20000000) +#define STM32_SRAM1_START (0x20000000) #define STM32_SRAM1_END (STM32_SRAM1_START + 20 * 1024) // 结束地址 = 0x20000000(基址) + 20K(RAM大小) #if defined(__CC_ARM) || defined(__CLANG_ARM) diff --git a/rt-thread-version/rt-thread-smart/architecture/architecture.md b/rt-thread-version/rt-thread-smart/architecture/architecture.md index 5c10aceec7158a9a9806480c9a6e092d76d0d598..3b495201c0932b09573e411c0b67e713eb9626d5 100644 --- a/rt-thread-version/rt-thread-smart/architecture/architecture.md +++ b/rt-thread-version/rt-thread-smart/architecture/architecture.md @@ -222,4 +222,4 @@ int main(int argc, char **argv) 整体的消息流图如下所示 -![IPC 消息图](figures/ipc-seq.png) \ No newline at end of file +![IPC 消息图](figures/ipc-seq.png) diff --git a/rt-thread-version/rt-thread-standard/README.md b/rt-thread-version/rt-thread-standard/README.md index 18bfa87e2b2c0e51a6ecb3bd862efa1f58215113..96002eb2d26ca0f919ca8928dde7a311b2268719 100644 --- a/rt-thread-version/rt-thread-standard/README.md +++ b/rt-thread-version/rt-thread-standard/README.md @@ -33,4 +33,4 @@ RT-Thread 与其他很多 RTOS 如 FreeRTOS、uC/OS 的主要区别之一是, - 工具类软件包:CmBacktrace、EasyFlash、EasyLogger、SystemView。 - 系统相关的软件包:RTGUI、Persimmon UI、lwext4、partition、SQLite 等等。 - 外设库与驱动类软件包:RealTek RTL8710BN SDK。 -- 其他。 \ No newline at end of file +- 其他。 diff --git a/rt-thread-version/rt-thread-standard/_sidebar.md b/rt-thread-version/rt-thread-standard/_sidebar.md index bb457a9111ee175bff95125beb403ae7473c0aa0..3b0f9880263b06ccb9938daa5e4361fd2375359d 100644 --- a/rt-thread-version/rt-thread-standard/_sidebar.md +++ b/rt-thread-version/rt-thread-standard/_sidebar.md @@ -3,9 +3,9 @@ - **RT-Thread 标准版本** - 简介 - + - [RT-Thread 简介](/rt-thread-version/rt-thread-standard/README.md) - + - 快速上手 - [Keil模拟器STM32F103](/rt-thread-version/rt-thread-standard/tutorial/quick-start/stm32f103-simulator/stm32f103-simulator.md) - [RT-Thread潘多拉STM32L475](/rt-thread-version/rt-thread-standard/tutorial/quick-start/iot_board/quick-start.md) @@ -18,7 +18,7 @@ - [野火I.MX RT1052](/rt-thread-version/rt-thread-standard/tutorial/quick-start/imxrt1052-fire-mini/quick-start.md) - [正点原子号令者I.MX RT1052](/rt-thread-version/rt-thread-standard/tutorial/quick-start/imxrt1052-atk-commander/quick-start.md) - [其他开发板...](/rt-thread-version/rt-thread-standard/tutorial/quick-start/more.md) - + - 内核 - [内核基础](/rt-thread-version/rt-thread-standard/programming-manual/basic/basic.md) - [线程管理](/rt-thread-version/rt-thread-standard/programming-manual/thread/thread.md) @@ -29,7 +29,7 @@ - [中断管理](/rt-thread-version/rt-thread-standard/programming-manual/interrupt/interrupt.md) - [内核移植](/rt-thread-version/rt-thread-standard/programming-manual/porting/porting.md) - [SMP 介绍与移植](/rt-thread-version/rt-thread-standard/programming-manual/smp/smp.md) - + - 设备和驱动 - [I/O设备模型](/rt-thread-version/rt-thread-standard/programming-manual/device/device.md) - [UART设备](/rt-thread-version/rt-thread-standard/programming-manual/device/uart/uart_v1/uart.md) @@ -50,7 +50,7 @@ - [CRYPTO 设备](/rt-thread-version/rt-thread-standard/programming-manual/device/crypto/crypto.md) - [AUDIO设备](/rt-thread-version/rt-thread-standard/programming-manual/device/audio/audio.md) - [Pulse Encoder设备](/rt-thread-version/rt-thread-standard/programming-manual/device/pulse_encoder/pulse_encoder.md) - + - 组件 - 网络组件 - [net 组件总概](/rt-thread-version/rt-thread-standard/programming-manual/net/net_introduce.md) @@ -66,7 +66,7 @@ - [POSIX接口](/rt-thread-version/rt-thread-standard/programming-manual/posix/posix.md) - [电源管理](/rt-thread-version/rt-thread-standard/programming-manual/pm/pm.md) - [RT-Link 组件](/rt-thread-version/rt-thread-standard/programming-manual/rtlink/rtlink.md) - + - 软件包 - 物联网 - [网络工具集 (NetUtils) 应用](/rt-thread-version/rt-thread-standard/application-note/packages/netutils/an0018-system-netutils.md) @@ -83,7 +83,7 @@ - [MicroPython 固件开发指南](/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/firmware-develop.md) - [MicroPython C 模块扩展](/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/external_c_modules.md) - [更多软件包...](/rt-thread-version/rt-thread-standard/packages-manual/more.md) - + - 应用开发 - 开发环境搭建 - [在windows平台使用QEMU运行RT-Thread](/rt-thread-version/rt-thread-standard/application-note/setup/qemu/windows/an0006-qemu-windows.md) @@ -154,12 +154,12 @@ - [RT-Thread连接ROS控制小车](/rt-thread-version/rt-thread-standard/tutorial/smart-car/ros-camera-car/ros-camera-car.md) - [RT-Thread连接RPLidar激光雷达](/rt-thread-version/rt-thread-standard/tutorial/smart-car/rplidar-connect/rplidar-connect.md) - [RT-Thread搭配ROS实现目标检测小车](/rt-thread-version/rt-thread-standard/tutorial/smart-car/object-detection/object-detection.md) - + - 代码贡献 - [传感器驱动开发指南](/rt-thread-version/rt-thread-standard/development-guide/sensor/sensor_driver_development.md) - [软件包开发指南](/rt-thread-version/rt-thread-standard/development-guide/package/package.md) - [向RT-Thread贡献代码](/rt-thread-version/rt-thread-standard/development-guide/github/github.md) - + - [RT-Thread 标准版的版本选择](/rt-thread-version/rt-thread-standard/application-note/setup/rt-thread-version/an0030-rtthread-version.md) - [API参考手册](https://www.rt-thread.org/document/api/) diff --git a/rt-thread-version/rt-thread-standard/application-note/README.md b/rt-thread-version/rt-thread-standard/application-note/README.md index 0bcf310463e7d9e504fca86350812b91c1731dec..398923dcaf2fdda66e3d2a6efea50bd78f147828 100644 --- a/rt-thread-version/rt-thread-standard/application-note/README.md +++ b/rt-thread-version/rt-thread-standard/application-note/README.md @@ -2,4 +2,4 @@ ---------- -RT-Thread应用笔记是针对某一技术点的专题介绍,方便开发者更快更好的学习和掌握该技术点。 \ No newline at end of file +RT-Thread应用笔记是针对某一技术点的专题介绍,方便开发者更快更好的学习和掌握该技术点。 diff --git a/rt-thread-version/rt-thread-standard/application-note/components/at/an0014-at-client.md b/rt-thread-version/rt-thread-standard/application-note/components/at/an0014-at-client.md index bf80d08e6d1ee06b85475137c4695803b1274436..95f5b980766b0b81a5950fada22d5e452d804b13 100644 --- a/rt-thread-version/rt-thread-standard/application-note/components/at/an0014-at-client.md +++ b/rt-thread-version/rt-thread-standard/application-note/components/at/an0014-at-client.md @@ -311,4 +311,4 @@ AT Socket 功能完成设备通过串口 AT 命令进行网络数据通讯,设 **A:** 检查 esp8266 设备串口接线,反接 RX/TX 接线,检查设备供电,进 AT Client CLI 模式确定命令发送是否正常。 -更多 AT 组件或者 AT Device 软件包相关问题请查看 [ AT 相关问题汇总贴](https://www.rt-thread.org/qa/thread-11919-1-1.html)。 \ No newline at end of file +更多 AT 组件或者 AT Device 软件包相关问题请查看 [ AT 相关问题汇总贴](https://www.rt-thread.org/qa/thread-11919-1-1.html)。 diff --git a/rt-thread-version/rt-thread-standard/application-note/components/cplusplus/an0035-cpp.md b/rt-thread-version/rt-thread-standard/application-note/components/cplusplus/an0035-cpp.md index 7536b56f9bb6b14e8d7a5849d47b2cfd9aec3f9d..f619c5cb42ba290f41bb8a157ae05f3b4ad0b1b2 100644 --- a/rt-thread-version/rt-thread-standard/application-note/components/cplusplus/an0035-cpp.md +++ b/rt-thread-version/rt-thread-standard/application-note/components/cplusplus/an0035-cpp.md @@ -90,7 +90,7 @@ `__ctors_start__` 分配了 `C++` 全局构造函数段的起始地址, `__ctors_end__` 分配了 `C++` 全局构造函数段的结束地址,所以全局构造函数在系统初始化的时候,就会被链接到这里分配的段地址中。 - + @@ -114,29 +114,29 @@ #include - #define MIN_VALUE (1e-4) + #define MIN_VALUE (1e-4) #define IS_DOUBLE_ZERO(d) (abs(d) < MIN_VALUE) - double div_func(double x, double y) + double div_func(double x, double y) { if (IS_DOUBLE_ZERO(y)) { throw y; /* throw exception */ } - return x / y; + return x / y; } void throw_exceptions(void *args) { - try + try { div_func(6, 3); rt_kprintf("there is no err\n"); div_func(4, 0); /* create exception*/ rt_kprintf("you can run here?\n"); } - catch(double) /* catch exception */ + catch(double) /* catch exception */ { rt_kprintf("error of dividing zero\n"); } diff --git a/rt-thread-version/rt-thread-standard/application-note/components/cplusplus/main/main.cpp b/rt-thread-version/rt-thread-standard/application-note/components/cplusplus/main/main.cpp index 4340da9596532d48ff6dc013867aebdd3d385438..4e48ae9f4ccf7a3febd432b5a8568e49f169f421 100644 --- a/rt-thread-version/rt-thread-standard/application-note/components/cplusplus/main/main.cpp +++ b/rt-thread-version/rt-thread-standard/application-note/components/cplusplus/main/main.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006-2018, RT-Thread Development Team + * Copyright (c) 2006-2021, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * diff --git a/rt-thread-version/rt-thread-standard/application-note/components/dfs/an0012-dfs.md b/rt-thread-version/rt-thread-standard/application-note/components/dfs/an0012-dfs.md index 42eb81a338961c8ee010d38b720863041f90039d..8bf0349b46e0bd68a720df04765ef8dadecfbd3a 100644 --- a/rt-thread-version/rt-thread-standard/application-note/components/dfs/an0012-dfs.md +++ b/rt-thread-version/rt-thread-standard/application-note/components/dfs/an0012-dfs.md @@ -104,7 +104,7 @@ static int rt_hw_spi_flash_with_sfud_init(void) return RT_ERROR; }; - return RT_EOK; + return RT_EOK; } INIT_COMPONENT_EXPORT(rt_hw_spi_flash_with_sfud_init) ``` @@ -237,4 +237,4 @@ DFS 框架的初始化主要是对内部数据结构以及资源的初始化。 * [《虚拟文件系统》](../../../programming-manual/filesystem/filesystem.md) -* [《Env 用户手册》](../../../programming-manual/env/env.md) \ No newline at end of file +* [《Env 用户手册》](../../../programming-manual/env/env.md) diff --git a/rt-thread-version/rt-thread-standard/application-note/components/dfs/an0027-littlefs.md b/rt-thread-version/rt-thread-standard/application-note/components/dfs/an0027-littlefs.md index d4b3dae96208d4aaf6b6f1209b7e95a54a3d990b..5da85bc8ffe7f14186c91f5729be1a23631dcd91 100644 --- a/rt-thread-version/rt-thread-standard/application-note/components/dfs/an0027-littlefs.md +++ b/rt-thread-version/rt-thread-standard/application-note/components/dfs/an0027-littlefs.md @@ -126,7 +126,7 @@ fal 组件并没有加入自动初始化的代码,所以我们需要在 main #define DBG_LEVEL DBG_INFO #include /* 定义要使用的分区名字 */ -#define FS_PARTITION_NAME "filesystem" +#define FS_PARTITION_NAME "filesystem" int main(void) { @@ -134,7 +134,7 @@ int main(void) struct rt_device *mtd_dev = RT_NULL; ... - /* 初始化 fal */ + /* 初始化 fal */ fal_init(); /* 生成 mtd 设备 */ mtd_dev = fal_mtd_nor_device_create(FS_PARTITION_NAME); @@ -172,7 +172,7 @@ int main(void) return RT_EOK; } - + ``` ### 验证 fal 分区和 MTD 设备 diff --git a/rt-thread-version/rt-thread-standard/application-note/components/dlmodule/an0023-dlmodule.md b/rt-thread-version/rt-thread-standard/application-note/components/dlmodule/an0023-dlmodule.md index 2681684e05a4c96eb3023140fadbb9c1867dad3d..ff9c35b0a007e0afee5c63443024a5dbfcedc52b 100644 --- a/rt-thread-version/rt-thread-standard/application-note/components/dlmodule/an0023-dlmodule.md +++ b/rt-thread-version/rt-thread-standard/application-note/components/dlmodule/an0023-dlmodule.md @@ -194,7 +194,7 @@ int main(int argc, char *argv[]) printf("hello world from RTT::dynamic module!\n"); - /* 打印命令行参数 */ + /* 打印命令行参数 */ for(i = 0;i < argc;i ++) { printf("argv[%d]:%s\n",i,argv[i]); diff --git a/rt-thread-version/rt-thread-standard/application-note/components/network/an0010-lwip-driver-porting.md b/rt-thread-version/rt-thread-standard/application-note/components/network/an0010-lwip-driver-porting.md index c5ab7c1310f18063679419507896b497969f78d8..40796fd63326ee5b37e6b2fcdc851df29e91b298 100644 --- a/rt-thread-version/rt-thread-standard/application-note/components/network/an0010-lwip-driver-porting.md +++ b/rt-thread-version/rt-thread-standard/application-note/components/network/an0010-lwip-driver-porting.md @@ -64,22 +64,22 @@ RT-Thread 网络设备继承了标准设备,是由 eth_device 结构体定义 ``` struct eth_device { - /* 标准设备 */ - struct rt_device parent; - - /* lwIP 网络接口 */ - struct netif *netif; - /* 发送应答信号量 */ - struct rt_semaphore tx_ack; - - /* 网络状态标志 */ - rt_uint16_t flags; - rt_uint8_t link_changed; - rt_uint8_t link_status; - - /* 数据包收发接口 */ - struct pbuf* (*eth_rx)(rt_device_t dev); - rt_err_t (*eth_tx)(rt_device_t dev, struct pbuf* p); + /* 标准设备 */ + struct rt_device parent; + + /* lwIP 网络接口 */ + struct netif *netif; + /* 发送应答信号量 */ + struct rt_semaphore tx_ack; + + /* 网络状态标志 */ + rt_uint16_t flags; + rt_uint8_t link_changed; + rt_uint8_t link_status; + + /* 数据包收发接口 */ + struct pbuf* (*eth_rx)(rt_device_t dev); + rt_err_t (*eth_tx)(rt_device_t dev, struct pbuf* p); }; ``` @@ -469,8 +469,8 @@ RT-Thread 实时操作系统提供了一套设备管理框架 ,应用程序通 drv_eth.c 中的 `rt_hw_stm32_eth_init` 是 ETH 设备初始化入口,负责 stm32_eth_device 结构体的初始化,并将其注册到 RT-Thread。 ```c - /* 设置工作速度和模式 */ - stm32_eth_device.ETH_Speed = ETH_Speed_100M; + /* 设置工作速度和模式 */ + stm32_eth_device.ETH_Speed = ETH_Speed_100M; stm32_eth_device.ETH_Mode = ETH_Mode_FullDuplex; /* 利用 STM32 全球唯一 ID 设置 MAC 地址 */ @@ -481,7 +481,7 @@ drv_eth.c 中的 `rt_hw_stm32_eth_init` 是 ETH 设备初始化入口,负责 s stm32_eth_device.dev_addr[4] = *(rt_uint8_t*)(0x1FFF7A10+2); stm32_eth_device.dev_addr[5] = *(rt_uint8_t*)(0x1FFF7A10+0); - /* 设置标准驱动接口 */ + /* 设置标准驱动接口 */ stm32_eth_device.parent.parent.init = rt_stm32_eth_init; stm32_eth_device.parent.parent.open = rt_stm32_eth_open; stm32_eth_device.parent.parent.close = rt_stm32_eth_close; @@ -490,7 +490,7 @@ drv_eth.c 中的 `rt_hw_stm32_eth_init` 是 ETH 设备初始化入口,负责 s stm32_eth_device.parent.parent.control = rt_stm32_eth_control; stm32_eth_device.parent.parent.user_data = RT_NULL; - /* 设置网络驱动接收和发送接口 */ + /* 设置网络驱动接收和发送接口 */ stm32_eth_device.parent.eth_rx = rt_stm32_eth_rx; stm32_eth_device.parent.eth_tx = rt_stm32_eth_tx; diff --git a/rt-thread-version/rt-thread-standard/application-note/components/network/an0011-network-started.md b/rt-thread-version/rt-thread-standard/application-note/components/network/an0011-network-started.md index 2a2b65f8f577100f2f82f3460c635823920bb554..0ca798521ec606e4a798b9c24a95076123dbbdab 100644 --- a/rt-thread-version/rt-thread-standard/application-note/components/network/an0011-network-started.md +++ b/rt-thread-version/rt-thread-standard/application-note/components/network/an0011-network-started.md @@ -154,7 +154,7 @@ void tcpclient(int argc, char **argv) const char *url; int port; - /* 接收到的参数小于 3 个 */ + /* 接收到的参数小于 3 个 */ if (argc < 3) { rt_kprintf("Usage: tcpclient URL PORT\n"); @@ -299,7 +299,7 @@ void udpclient(int argc, char **argv) struct sockaddr_in server_addr; const char *url; - /* 接收到的参数小于 3 个 */ + /* 接收到的参数小于 3 个 */ if (argc < 3) { rt_kprintf("Usage: udpclient URL PORT [COUNT = 10]\n"); @@ -427,4 +427,4 @@ msh />mqtt_publish RT-Thread! ## 参考资料 -* [《Env 用户手册》](../../../../../../development-tools/env/env.md) \ No newline at end of file +* [《Env 用户手册》](../../../../../../development-tools/env/env.md) diff --git a/rt-thread-version/rt-thread-standard/application-note/debug/cmbacktrace/an0013-CmBacktrace.md b/rt-thread-version/rt-thread-standard/application-note/debug/cmbacktrace/an0013-CmBacktrace.md index 19e1366a8a1e35c738b239f0215ca022aab4de76..41b0e9e9933e7da919e6c49822cd46200cff9cc5 100644 --- a/rt-thread-version/rt-thread-standard/application-note/debug/cmbacktrace/an0013-CmBacktrace.md +++ b/rt-thread-version/rt-thread-standard/application-note/debug/cmbacktrace/an0013-CmBacktrace.md @@ -230,4 +230,4 @@ D:\rt-thread\bsp\imxrt1052-evk/..\..\components\finsh\/shell.c:613 ## 参考资料 -* [《Env 用户手册》](../../../programming-manual/env/env.md) \ No newline at end of file +* [《Env 用户手册》](../../../programming-manual/env/env.md) diff --git a/rt-thread-version/rt-thread-standard/application-note/debug/systemview/an0009-systemview.md b/rt-thread-version/rt-thread-standard/application-note/debug/systemview/an0009-systemview.md index b762cfd3ccb99322fef09110722b84d2ce2651c0..a24214ef718eb8fc2e8d199bd9f2a2b196d77536 100644 --- a/rt-thread-version/rt-thread-standard/application-note/debug/systemview/an0009-systemview.md +++ b/rt-thread-version/rt-thread-standard/application-note/debug/systemview/an0009-systemview.md @@ -65,7 +65,7 @@ RT-Thread 提供的 [SystemView 软件包](https://github.com/RT-Thread/segger_d 开启事后分析模式之后,**需要**在工程里调用函数 SEGGER_SYSVIEW_Start() 启动录制。系统事件会被不断的记录下来,并在缓冲区满时覆盖旧的事件。所以当读取缓冲区时,只能读取到最新的事件。 > [!NOTE] -> 当系统运行了很长时间并突然崩溃时,事后分析可能会很有用。在这种情况下,可以从目标中的缓冲区中读取最新的事件,SystemView 可以显示系统崩溃之前发生的情况。 +> 当系统运行了很长时间并突然崩溃时,事后分析可能会很有用。在这种情况下,可以从目标中的缓冲区中读取最新的事件,SystemView 可以显示系统崩溃之前发生的情况。 关闭事后分析模式之后,就处于连续记录模式,可以在 PC 端控制录制的开始和结束,连续记录系统的运行。要分析下面的 demo 的运行,需要开启连续记录模式。 @@ -227,4 +227,4 @@ void demo_init(void) ## 参考资料 -* [《Env 用户手册》](../../../programming-manual/env/env.md) \ No newline at end of file +* [《Env 用户手册》](../../../programming-manual/env/env.md) diff --git a/rt-thread-version/rt-thread-standard/application-note/driver/gpio/an0002-rtthread-driver-gpio.md b/rt-thread-version/rt-thread-standard/application-note/driver/gpio/an0002-rtthread-driver-gpio.md index 7835a61835a5df1f0d299f48f2c3f5e8629553bd..68b3a09633270524878ac87b98b080c645eafab9 100644 --- a/rt-thread-version/rt-thread-standard/application-note/driver/gpio/an0002-rtthread-driver-gpio.md +++ b/rt-thread-version/rt-thread-standard/application-note/driver/gpio/an0002-rtthread-driver-gpio.md @@ -106,9 +106,9 @@ ![按键原理图](figures/an0002_7.png) ```c -#define KEY1 2 //PE3--2,在 drv_gpio.c 文件 pin_index pins[] 中查到 PE3 编号为 2 -#define KEY2 1 //PE2--1,在 drv_gpio.c 文件 pin_index pins[] 中查到 PE2 编号为 1 -#define WK_UP 34 //PA0--34,在 drv_gpio.c 文件 pin_index pins[] 中查到 PA0 编号为 34 +#define KEY1 2 //PE3--2,在 drv_gpio.c 文件 pin_index pins[] 中查到 PE3 编号为 2 +#define KEY2 1 //PE2--1,在 drv_gpio.c 文件 pin_index pins[] 中查到 PE2 编号为 1 +#define WK_UP 34 //PA0--34,在 drv_gpio.c 文件 pin_index pins[] 中查到 PA0 编号为 34 void key_thread_entry(void* parameter) { //PE2、PE3 设置上拉输入 @@ -164,7 +164,7 @@ void key_thread_entry(void* parameter) 示例 3:配置 GPIO 为外部中断模式、下降沿触发,检测按键信号。根据原理图,GPIOE4 连接到按键 KEY0,按键被按下时 MCU 应探测到电平下降沿。 ```c -#define KEY0 3 //PE4--3,在 gpio.c 文件 pin_index pins[] 中查到 PE4 编号为 3 +#define KEY0 3 //PE4--3,在 gpio.c 文件 pin_index pins[] 中查到 PE4 编号为 3 void hdr_callback(void *args)// 回调函数 { char *a = args;// 获取参数 diff --git a/rt-thread-version/rt-thread-standard/application-note/driver/i2c/an0003-rtthread-driver-i2c.md b/rt-thread-version/rt-thread-standard/application-note/driver/i2c/an0003-rtthread-driver-i2c.md index 85a3fac86f3e2a1eefdb533b12794cc417258421..327ed79b2d8a3fd9201a5678bbe81b1cd13e7e07 100644 --- a/rt-thread-version/rt-thread-standard/application-note/driver/i2c/an0003-rtthread-driver-i2c.md +++ b/rt-thread-version/rt-thread-standard/application-note/driver/i2c/an0003-rtthread-driver-i2c.md @@ -89,7 +89,7 @@ RT-Thread I2C 设备驱动目前只支持主机模式,使用 RT-Thread I2C 设 本文示例代码底层驱动 `drv_mpu6050.c` 中 `mpu6050_hw_init()` 查找设备源码如下: ```c -#define MPU6050_I2CBUS_NAME "i2c2" /* I2C 设备名称, 必须和 drv_i2c.c 注册的 I2C 设备名称一致 */ +#define MPU6050_I2CBUS_NAME "i2c2" /* I2C 设备名称, 必须和 drv_i2c.c 注册的 I2C 设备名称一致 */ static struct rt_i2c_bus_device *mpu6050_i2c_bus; /* I2C 设备句柄 */ ... ... ... ... @@ -127,7 +127,7 @@ RT-Thread I2C 设备驱动的核心 API 是 `rt_i2c_transfer()`,它传递的 本文示例代码底层驱动 `drv_mpu6050.c` 发送数据源码如下: ```c -#define MPU6050_ADDR 0X68 +#define MPU6050_ADDR 0X68 // 写 mpu6050 单个寄存器 //reg: 寄存器地址 @@ -163,7 +163,7 @@ rt_err_t mpu6050_write_reg(rt_uint8_t reg, rt_uint8_t data) 本文示例代码底层驱动 `drv_mpu6050.c` 发送数据源码如下: ```c -#define MPU6050_ADDR 0X68 +#define MPU6050_ADDR 0X68 // 写 mpu6050 单个寄存器 //reg: 寄存器地址 @@ -200,7 +200,7 @@ rt_err_t mpu6050_write_reg(rt_uint8_t reg, rt_uint8_t data) 本文示例代码底层驱动 `drv_mpu6050.c` 接收数据源码如下: ```c -#define MPU6050_ADDR 0X68 +#define MPU6050_ADDR 0X68 // 读取寄存器数据 //reg: 要读取的寄存器地址 @@ -241,7 +241,7 @@ rt_err_t mpu6050_read_reg(rt_uint8_t reg, rt_uint8_t len, rt_uint8_t *buf) 本文示例代码底层驱动 `drv_mpu6050.c` 接收数据源码如下: ```c -#define MPU6050_ADDR 0X68 +#define MPU6050_ADDR 0X68 // 读取寄存器数据 //reg: 要读取的寄存器地址 @@ -276,7 +276,7 @@ rt_err_t mpu6050_read_reg(rt_uint8_t reg, rt_uint8_t len, rt_uint8_t *buf) 本文示例代码底层驱动 `drv_mpu6050.c` 使用 `mpu6050_read_reg()` 函数读取 MPU6050 的 3 轴加速度数据: ```c -#define MPU_ACCEL_XOUTH_REG 0X3B // 加速度值, X 轴高 8 位寄存器 +#define MPU_ACCEL_XOUTH_REG 0X3B // 加速度值, X 轴高 8 位寄存器 // 得到加速度值 (原始值) //gx,gy,gz: 陀螺仪 x,y,z 轴的原始读数 (带符号) @@ -285,15 +285,15 @@ rt_err_t mpu6050_accelerometer_get(rt_int16_t *ax, rt_int16_t *ay, rt_int16_t *a { rt_uint8_t buf[6], ret; - ret = mpu6050_read_reg(MPU_ACCEL_XOUTH_REG, 6, buf); - if (ret == 0) - { - *ax = ((rt_uint16_t)buf[0] << 8) | buf[1]; - *ay = ((rt_uint16_t)buf[2] << 8) | buf[3]; - *az = ((rt_uint16_t)buf[4] << 8) | buf[5]; + ret = mpu6050_read_reg(MPU_ACCEL_XOUTH_REG, 6, buf); + if (ret == 0) + { + *ax = ((rt_uint16_t)buf[0] << 8) | buf[1]; + *ay = ((rt_uint16_t)buf[2] << 8) | buf[3]; + *az = ((rt_uint16_t)buf[4] << 8) | buf[5]; return RT_EOK; - } + } else { return -RT_ERROR; diff --git a/rt-thread-version/rt-thread-standard/application-note/driver/pwm/an0037-rtthread-driver-pwm.md b/rt-thread-version/rt-thread-standard/application-note/driver/pwm/an0037-rtthread-driver-pwm.md index 1f4b3502f7fe4f3e252e10b48a1bb82546c0b7dc..eb83e4a8206c03f7346856f22939332703fc420f 100644 --- a/rt-thread-version/rt-thread-standard/application-note/driver/pwm/an0037-rtthread-driver-pwm.md +++ b/rt-thread-version/rt-thread-standard/application-note/driver/pwm/an0037-rtthread-driver-pwm.md @@ -1,4 +1,4 @@ -# STM32 上使用 PWM +# STM32 上使用 PWM 本文描述了如何在搭载了 RT-Thread 操作系统的平台上使用 PWM 输出波形,包括 PWM 的应用、配置和驱动的添加等。并给出了在正点原子 `STM32L475 pandora` 开发板上验证的代码示例。 @@ -10,9 +10,9 @@ ![正点原子开发板](figures/board.png) -## 使用 PWM +## 使用 PWM -### 在 menuconfig 中打开 PWM 通道 +### 在 menuconfig 中打开 PWM 通道 打开 Env 工具,使用 menuconfig 工具配置工程,在 Env 命令行中输入 menuconfig 进入配置界面。在 menuconfig 配置界面依次选择 `Hardware Driver Config ---> On-chip Peripheral Drivers ---> Enable pwm ---> Enable timer2 output pwm` 如下图所示: @@ -22,7 +22,7 @@ ![list_device](figures/list_device.png) -### 使用 PWM 输出波形 +### 使用 PWM 输出波形 应用程序可以通过 RT-Thread 提供的设备管理接口来访问 PWM 设备硬件,相关接口如下所示: | **函数** | **描述** | diff --git a/rt-thread-version/rt-thread-standard/application-note/driver/spi/an0004-rtthread-driver-spi.md b/rt-thread-version/rt-thread-standard/application-note/driver/spi/an0004-rtthread-driver-spi.md index c8bfcb6d2c5ca19552385ef6395bb6636271fec2..c591781bc20bb850f45dfcf9f6ee1d707af31703 100644 --- a/rt-thread-version/rt-thread-standard/application-note/driver/spi/an0004-rtthread-driver-spi.md +++ b/rt-thread-version/rt-thread-standard/application-note/driver/spi/an0004-rtthread-driver-spi.md @@ -115,13 +115,13 @@ RT-Thread SPI设备驱动使用流程大致如下: 本文示例代码底层驱动`drv_ssd1351.c` 中 `rt_hw_ssd1351_config()`挂载ssd1351设备到SPI总线源码如下: ```c -#define SPI_BUS_NAME "spi1" /* SPI总线名称 */ -#define SPI_SSD1351_DEVICE_NAME "spi10" /* SPI设备名称 */ +#define SPI_BUS_NAME "spi1" /* SPI总线名称 */ +#define SPI_SSD1351_DEVICE_NAME "spi10" /* SPI设备名称 */ ... ... static struct rt_spi_device spi_dev_ssd1351; /* SPI设备ssd1351对象 */ -static struct stm32_hw_spi_cs spi_cs; /* SPI设备CS片选引脚 */ +static struct stm32_hw_spi_cs spi_cs; /* SPI设备CS片选引脚 */ ... ... @@ -139,7 +139,7 @@ static int rt_hw_ssd1351_config(void) OLED_TRACE("rt_spi_bus_attach_device!\r\n"); return res; } - + ... ... } ``` @@ -176,37 +176,37 @@ static int rt_hw_ssd1351_config(void) rt_err_t ssd1351_write_cmd(const rt_uint8_t cmd) { rt_size_t len; - + rt_pin_write(DC_PIN, PIN_LOW); /* 命令低电平 */ len = rt_spi_send(&spi_dev_ssd1351, &cmd, 1); if (len != 1) { - OLED_TRACE("ssd1351_write_cmd error. %d\r\n",len); + OLED_TRACE("ssd1351_write_cmd error. %d\r\n",len); return -RT_ERROR; } - else + else { return RT_EOK; } - + } rt_err_t ssd1351_write_data(const rt_uint8_t data) { rt_size_t len; - + rt_pin_write(DC_PIN, PIN_HIGH); /* 数据高电平 */ - + len = rt_spi_send(&spi_dev_ssd1351, &data, 1); - + if (len != 1) { - OLED_TRACE("ssd1351_write_data error. %d\r\n",len); + OLED_TRACE("ssd1351_write_data error. %d\r\n",len); return -RT_ERROR; } - else + else { return RT_EOK; } diff --git a/rt-thread-version/rt-thread-standard/application-note/driver/usb/an0046-rtthread-driver-usbh.md b/rt-thread-version/rt-thread-standard/application-note/driver/usb/an0046-rtthread-driver-usbh.md index 1b006c38a2f29ac345ae1f31d366bb457b8f409d..627c475598c311bfdfd112d582c8df9885e7b96b 100644 --- a/rt-thread-version/rt-thread-standard/application-note/driver/usb/an0046-rtthread-driver-usbh.md +++ b/rt-thread-version/rt-thread-standard/application-note/driver/usb/an0046-rtthread-driver-usbh.md @@ -38,7 +38,7 @@ USB(Universal Serial Bus)是一种支持热插拔的通用串行总线。它使 ## ENV 配置 -### 打开 USB Host +### 打开 USB Host RT-Thread 可以很方便的通过 ENV 来配置和生成工程。在 `rt-thread\bsp\stm32\stm32f767-atk-apollo` 目录下打开 ENV 工具,使用 menuconfig 进入如下配置界面并选中。 ---- Hardware Drivers Config @@ -70,7 +70,7 @@ RT-Thread 可以很方便的通过 ENV 来配置和生成工程。在 `rt-thread 在 `main.c` 文件中加入以下测试代码并下载 ```c -#include +#include #define TEST_FN "/test_usbh.c" static char test_data[120], buffer[120]; diff --git a/rt-thread-version/rt-thread-standard/application-note/packages/freemodbus/an0036-freemodbus.md b/rt-thread-version/rt-thread-standard/application-note/packages/freemodbus/an0036-freemodbus.md index 3d0309f82008ce695663576fc6d8568ebf85b883..301d422bfab045ef6fc9b2cc7b21ee0814e4d968 100644 --- a/rt-thread-version/rt-thread-standard/application-note/packages/freemodbus/an0036-freemodbus.md +++ b/rt-thread-version/rt-thread-standard/application-note/packages/freemodbus/an0036-freemodbus.md @@ -34,7 +34,7 @@ FreeModbus 是一款开源的 Modbus 协议栈,但是只有从机开源,主 RT-Thread online packages ---> IoT - internet of things ---> [*] FreeModbus: Modbus master and slave stack ---> - [*] Master mode ---> + [*] Master mode ---> [ ] Slave mode ---- Version (latest) ---> ``` @@ -155,7 +155,7 @@ Modbus Slave 需要先配置从机参数,然后连接主机。 在 RT-Thread 源码目录下找到潘多拉的bsp `rt-thread\bsp\stm32\stm32l475-atk-pandora` ,在此目录下打开 ENV 工具。 -#### 配置 FreeModebus 软件包 +#### 配置 FreeModebus 软件包 1. 输入 menuconfig 命令打开配置工具 @@ -167,7 +167,7 @@ Modbus Slave 需要先配置从机参数,然后连接主机。 RT-Thread online packages ---> IoT - internet of things ---> [*] FreeModbus: Modbus master and slave stack ---> - [ ] Master mode ---- + [ ] Master mode ---- [*] Slave mode ---> Version (latest) ---> ``` @@ -222,7 +222,7 @@ static void send_thread_entry(void *parameter) { level = rt_hw_interrupt_disable(); /* 改变保持寄存器 3 的数据 */ - usRegHoldingBuf[3] = (USHORT)(rt_tick_get() / 100); + usRegHoldingBuf[3] = (USHORT)(rt_tick_get() / 100); rt_hw_interrupt_enable(level); /* 数据产生的速率为 1个/秒 */ @@ -284,7 +284,7 @@ msh />mb_slave_samlpe RTU # 运行 RTU 模式的从机示例程序 msh /> ``` -### 运行 Modbus Poll +### 运行 Modbus Poll Modbus Poll 是一个 Modbus 主机仿真器,用于测试和调试Modbus从设备。该软件支持ModbusRTU、ASCII、TCP/IP。用来帮助开发人员测试Modbus从设备,或者其它Modbus协议的测试和仿真。下载安装软件 [Modbus Poll]() 。 @@ -316,7 +316,7 @@ Modbus Poll 是一个 Modbus 主机仿真器,用于测试和调试Modbus从设 FreeModbus 的**从机**支持 TCP 模式,可以在**已经连接网络,且可做服务端**的设备上运行,并利用 TCP 协议和 远端主机进行通讯。 -### 配置 FreeModebus 软件包 +### 配置 FreeModebus 软件包 按上一节的操作,打开并配置 FreeModbus 软件包,配置支持 TCP 模式。 @@ -351,7 +351,7 @@ msh />mb_slave_samlpe TCP # 运行 TCP 模式的从机示例程序 msh /> ``` -### 运行 Modbus Poll +### 运行 Modbus Poll 单击菜单【Connection】中【connect.. F3】进行连接参数设置,会弹出参数设置对话框。选择 TCP/IP 连接方式,配置 从机设备的 IP 地址和端口号,点击 OK 即可。 diff --git a/rt-thread-version/rt-thread-standard/application-note/packages/mbedtls_wireshark_sniffer/an0029-mbedtls_wireshark_sniffer.md b/rt-thread-version/rt-thread-standard/application-note/packages/mbedtls_wireshark_sniffer/an0029-mbedtls_wireshark_sniffer.md index fb0c92d7a3b8325f97e8e6e956f0360b88b90f54..08225dc9f276051e0d60cc12e4ad6e5d900aeea5 100644 --- a/rt-thread-version/rt-thread-standard/application-note/packages/mbedtls_wireshark_sniffer/an0029-mbedtls_wireshark_sniffer.md +++ b/rt-thread-version/rt-thread-standard/application-note/packages/mbedtls_wireshark_sniffer/an0029-mbedtls_wireshark_sniffer.md @@ -30,12 +30,12 @@ - 客户端通过random_c,random_s,pre_master计算出密钥 - 客户端发送change cipher spec通知服务器后续使用此密钥和加密算法进行通信 - 发送握手数据. - -## server change cipher spec + +## server change cipher spec - 服务器接收 pre_master,并使用服务器私钥(非对称加密的私钥)解密 - 服务器通过random_c, random_s, pre_master计算出密钥 - 服务器发送change cipher spec告诉客户端后续的通讯都采用协商的密钥和协商的加密算法通讯 - + ## hangshake message finish 客户端接收服务器发送的握手消息,验证通过后,握手完成。 @@ -107,7 +107,7 @@ int mbedtls_ssl_derive_keys( mbedtls_ssl_context *ssl ) #include #include -#include +#include #include "netdb.h" static int port = 5000; @@ -143,7 +143,7 @@ void udpcli_send(char* ip, char* random_c, int random_len, char* master, int mas for(i = 0; i < 48; i++) { sprintf(&master_ptr[i*2], "%02x", master[i]); - } + } rt_kprintf("random : %s\n", random_ptr); rt_kprintf("master : %s\n", master_ptr); diff --git a/rt-thread-version/rt-thread-standard/application-note/packages/netutils/an0018-system-netutils.md b/rt-thread-version/rt-thread-standard/application-note/packages/netutils/an0018-system-netutils.md index 9abaac3c23b2af48708f222e27aea3c8b5aa2f8d..9cb31d2db020980beb8ebeec0f294946d14a638e 100644 --- a/rt-thread-version/rt-thread-standard/application-note/packages/netutils/an0018-system-netutils.md +++ b/rt-thread-version/rt-thread-standard/application-note/packages/netutils/an0018-system-netutils.md @@ -146,7 +146,7 @@ msh /> > [!NOTE] > NTP API 方法执行时会占用较多的线程堆栈,使用时保证堆栈空间充足(≥1.5K)。 -> +> > NTP API 方法 **不支持可重入**,并发使用时,请注意加锁。 ## TFTP 工具 @@ -356,4 +356,4 @@ tcpdump 的使用请参考组件目录下的 README ,此处不再赘述。 ## 参考资料 -* [《Env 用户手册》](../../../programming-manual/env/env.md) \ No newline at end of file +* [《Env 用户手册》](../../../programming-manual/env/env.md) diff --git a/rt-thread-version/rt-thread-standard/application-note/packages/rw007_module_using/an0034-rw007-module-using.md b/rt-thread-version/rt-thread-standard/application-note/packages/rw007_module_using/an0034-rw007-module-using.md index baec98fbedbfcffc9dae00544508062e836950f0..2f725561f5888ee351084df4885ed2670e5152c8 100644 --- a/rt-thread-version/rt-thread-standard/application-note/packages/rw007_module_using/an0034-rw007-module-using.md +++ b/rt-thread-version/rt-thread-standard/application-note/packages/rw007_module_using/an0034-rw007-module-using.md @@ -100,7 +100,7 @@ pin 序号与引脚名对应关系如下表: ## STM32 bsp 配置(Menuconfig) -### 步骤一:下载 RT-Thread SDK +### 步骤一:下载 RT-Thread SDK * Github 链接:[RT-Thread/rt-thread: RT-Thread is an open source IoT operating system from China.](https://github.com/RT-Thread/rt-thread) * Gitee 链接:[RT-Thread/rt-thread: RT-Thread is an open source IoT operating system from China.](https://gitee.com/rtthread/rt-thread) @@ -138,13 +138,13 @@ pin 序号与引脚名对应关系如下表: ![cubemx 配置](figures/cubemx_setting.png) - - + + ![CubeMX 配置 SPI ](figures/stm32_f401_cubeMX_Setting.gif) - + ### 步骤三 :通过`menuconfig`配置 RW007 软件包 diff --git a/rt-thread-version/rt-thread-standard/application-note/setup/qemu/ubuntu/an0005-qemu-ubuntu.md b/rt-thread-version/rt-thread-standard/application-note/setup/qemu/ubuntu/an0005-qemu-ubuntu.md index b32acd60a72fd4c8de99dc49537ee00db394fffe..2b85a3a953c4ec4c9aff9c92e19fd56e17613588 100644 --- a/rt-thread-version/rt-thread-standard/application-note/setup/qemu/ubuntu/an0005-qemu-ubuntu.md +++ b/rt-thread-version/rt-thread-standard/application-note/setup/qemu/ubuntu/an0005-qemu-ubuntu.md @@ -1,4 +1,4 @@ -# 在 Ubuntu 平台开发 RT-Thread +# 在 Ubuntu 平台开发 RT-Thread 本文描述了如何在 Ubuntu 平台使用 QEMU 运行 RT-Thread qemu-vexpress-a9 BSP 工程。 diff --git a/rt-thread-version/rt-thread-standard/application-note/setup/qemu/vscode/an0021-qemu-vscode.md b/rt-thread-version/rt-thread-standard/application-note/setup/qemu/vscode/an0021-qemu-vscode.md index 34d06e21043d0373b87987783723fe0792deecd5..f77dc25c29f742815322f785e81266c878a6f28a 100644 --- a/rt-thread-version/rt-thread-standard/application-note/setup/qemu/vscode/an0021-qemu-vscode.md +++ b/rt-thread-version/rt-thread-standard/application-note/setup/qemu/vscode/an0021-qemu-vscode.md @@ -85,14 +85,14 @@ QEMU 也运行了起来,如下图所示。 | 参数 | 描述 | | ------------- | --------------- | -| x | 按十六进制格式显示变量 | -| d | 按十进制格式显示变量 | -| u | 按十六进制格式显示无符号整型 | -| o | 按八进制格式显示变量 | -| t | 按二进制格式显示变量 | -| a | 按十六进制格式显示变量 | -| c | 按字符格式显示变量 | -| f | 按浮点数格式显示变量 | +| x | 按十六进制格式显示变量 | +| d | 按十进制格式显示变量 | +| u | 按十六进制格式显示无符号整型 | +| o | 按八进制格式显示变量 | +| t | 按二进制格式显示变量 | +| a | 按十六进制格式显示变量 | +| c | 按字符格式显示变量 | +| f | 按浮点数格式显示变量 | * u 表示从当前地址往后请求的字节数,如果不指定的话,GDB 默认是 4 个 bytes。u 参数可以用下面的字符来代替,b 表示单字节,h 表示双字节,w 表示四字 节,g 表示八字节。当我们指定了字节长度后,GDB 会从指内存定的内存地址开始,读写指定字节,并把其当作一个值取出来。 * addr 表示一个内存地址。 @@ -133,4 +133,4 @@ QEMU 也运行了起来,如下图所示。 ### Q: VS Code 出现错误提示:Unable to start debugging.Unexpected GDB output from command "-interpreter-exec console" ........ -**A:** 请修改 qemu-dbg.bat 文件,特别是有更新源代码的情况下。有问题请按照文档步骤检查一遍是否每一步都做了。 \ No newline at end of file +**A:** 请修改 qemu-dbg.bat 文件,特别是有更新源代码的情况下。有问题请按照文档步骤检查一遍是否每一步都做了。 diff --git a/rt-thread-version/rt-thread-standard/application-note/setup/qemu/windows/an0006-qemu-windows.md b/rt-thread-version/rt-thread-standard/application-note/setup/qemu/windows/an0006-qemu-windows.md index 0e236beb151c10fd2384820ad5958280dd7909b2..7aeefe5b60a534feadf668f0d678b322c0aee1e2 100644 --- a/rt-thread-version/rt-thread-standard/application-note/setup/qemu/windows/an0006-qemu-windows.md +++ b/rt-thread-version/rt-thread-standard/application-note/setup/qemu/windows/an0006-qemu-windows.md @@ -28,12 +28,12 @@ qemu-vexpress-a9 BSP 主要文件及目录描述如下所示: | 文件 / 目录 | 描述 | | ------------- | --------------- | -| .vscode | vscode 配置文件 | -| applications | 用户应用代码目录 | -| cpu | 芯片相关 | -| drivers | RT-Thread 提供的底层驱动 | -| qemu.bat | Windows 平台运行脚本文件 | -| qemu.sh | Linux 平台运行脚本文件 | +| .vscode | vscode 配置文件 | +| applications | 用户应用代码目录 | +| cpu | 芯片相关 | +| drivers | RT-Thread 提供的底层驱动 | +| qemu.bat | Windows 平台运行脚本文件 | +| qemu.sh | Linux 平台运行脚本文件 | | qemu-dbg.bat | Windows 平台调试脚本文件 | | qemu-dbg.sh | Linux 平台调试脚本文件 | | README.md | BSP 说明文件 | @@ -109,7 +109,7 @@ RT-Thread 支持 Finsh,用户可以在命令行模式使用命令操作。输 打开 qemu-vexpress-a9 BSP 目录下的 qemu.bat 文件,在下图所示位置添加以下配置内容: -`-net nic -net tap,ifname=tap` +`-net nic -net tap,ifname=tap` 其中 ifname=tap 的意思是网卡的名称是 tap。 diff --git a/rt-thread-version/rt-thread-standard/application-note/setup/standard-project/an0017-standard-project.md b/rt-thread-version/rt-thread-standard/application-note/setup/standard-project/an0017-standard-project.md index 78126c4efdbca76dc0d6a46f837e5a05602185e5..3bd74a95418be0cb4f29ae86a29b023034a2692b 100644 --- a/rt-thread-version/rt-thread-standard/application-note/setup/standard-project/an0017-standard-project.md +++ b/rt-thread-version/rt-thread-standard/application-note/setup/standard-project/an0017-standard-project.md @@ -36,11 +36,11 @@ RT-Thread 完全开源开放,支持几十款 BSP,支持多种编译器,支 | 文件 / 目录 | 描述 | | ------------- | --------------- | -| applications | 用户应用代码目录 | +| applications | 用户应用代码目录 | | drivers 或 board | RT-Thread 提供的底层驱动/板级相关的移植 | -| Libraries | 芯片官网下载的固件库 | -| rt-thread | RT-Thread 源代码 | -| Kconfig | menuconfig 使用的文件 | +| Libraries | 芯片官网下载的固件库 | +| rt-thread | RT-Thread 源代码 | +| Kconfig | menuconfig 使用的文件 | | project.ewww | 用户使用的 IAR 工程文件 | | project.uvprojx | 用户使用的 MDK 工程文件 | | template. uvprojx | MDK 工程模板文件 | @@ -178,7 +178,7 @@ from building import * cwd = os.path.join(str(Dir('#')), 'applications') # 获取当前目录下所有的 C 文件 -src = Glob('*.c') +src = Glob('*.c') # 将当前目录和 SConstruct 所在的目录保存到 list 变量 CPPPATH 中 CPPPATH = [cwd, str(Dir('#'))] diff --git a/rt-thread-version/rt-thread-standard/application-note/system/optimization/Optimize-code-size/an0049-optimize-code-size.md b/rt-thread-version/rt-thread-standard/application-note/system/optimization/Optimize-code-size/an0049-optimize-code-size.md index 6509ef43f9b21d3cff5741a136074615f600620e..1bd1e86c32c17dc43b7dd19ac8af888e49285f38 100644 --- a/rt-thread-version/rt-thread-standard/application-note/system/optimization/Optimize-code-size/an0049-optimize-code-size.md +++ b/rt-thread-version/rt-thread-standard/application-note/system/optimization/Optimize-code-size/an0049-optimize-code-size.md @@ -43,8 +43,8 @@ MCU:STM32L475VET6,512KB FLASH ,128KB RAM 当前系统体积大小如下所示: ```information - text data bss dec hex filename - 260932 1648 5388 267968 416c0 rtthread.elf + text data bss dec hex filename + 260932 1648 5388 267968 416c0 rtthread.elf Used Size(B) Used Size(KB) Flash: 262580 B 256.43 KB RAM: 7036 B 6.87 KB @@ -61,8 +61,8 @@ RAM: 7036 B 6.87 KB ![1563873528253](figures/disable-ulog.png) ```information - text data bss dec hex filename - 257000 1648 5120 263768 40658 rtthread.elf + text data bss dec hex filename + 257000 1648 5120 263768 40658 rtthread.elf Used Size(B) Used Size(KB) Flash: 258648 B 252.59 KB RAM: 6768 B 6.61 KB @@ -74,7 +74,7 @@ RAM: 6768 B 6.61 KB ![除能 FAL 软件包](figures/fal.png) -关闭 QSPI Flash 设备,在Hardware选项中,将已经适配好的 QSPI FLASH相关设备除能。 +关闭 QSPI Flash 设备,在Hardware选项中,将已经适配好的 QSPI FLASH相关设备除能。 ![QspiFlash](figures/QspiFlash.png) @@ -87,8 +87,8 @@ RAM: 6768 B 6.61 KB ![1563874891663](figures/disable-dfs.png) ``` - text data bss dec hex filename - 172148 1308 3556 177012 2b374 rtthread.elf + text data bss dec hex filename + 172148 1308 3556 177012 2b374 rtthread.elf Used Size(B) Used Size(KB) Flash: 173456 B 169.39 KB RAM: 4864 B 4.75 KB @@ -101,8 +101,8 @@ RAM: 4864 B 4.75 KB ![关闭LCD和Audio设备驱动](figures/disable_hd_drivers.png) ```information - text data bss dec hex filename - 95204 1260 2864 99328 18400 rtthread.elf + text data bss dec hex filename + 95204 1260 2864 99328 18400 rtthread.elf Used Size(B) Used Size(KB) Flash: 96464 B 94.20 KB RAM: 4124 B 4.03 KB @@ -113,8 +113,8 @@ RAM: 4124 B 4.03 KB ![裁剪掉TIMER、PWM、ADC、RTC外设驱动](figures/disable_hd_drivers2.png) ```information - text data bss dec hex filename - 68856 384 2524 71764 11854 rtthread.elf + text data bss dec hex filename + 68856 384 2524 71764 11854 rtthread.elf Used Size(B) Used Size(KB) Flash: 69240 B 67.62 KB RAM: 2908 B 2.84 KB @@ -125,8 +125,8 @@ RAM: 2908 B 2.84 KB ![1563876671738](figures/disable-finsh.png) ```information - text data bss dec hex filename - 55500 384 2240 58124 e30c rtthread.elf + text data bss dec hex filename + 55500 384 2240 58124 e30c rtthread.elf Used Size(B) Used Size(KB) Flash: 55884 B 54.57 KB RAM: 2624 B 2.56 KB @@ -139,8 +139,8 @@ RAM: 2624 B 2.56 KB ![1563878646561](figures/disable-kernel-ipc.png) ```information - text data bss dec hex filename - 54888 336 2232 57456 e070 rtthread.elf + text data bss dec hex filename + 54888 336 2232 57456 e070 rtthread.elf Used Size(B) Used Size(KB) Flash: 55224 B 53.93 KB RAM: 2568 B 2.51 KB @@ -243,8 +243,8 @@ RT-Thread-Studio 默认选择的是 -O0(关闭所有优化)等级,按照 ![开启-O2优化等级](figures/Optimazation1.png) ```information - text data bss dec hex filename - 38724 336 2232 41292 a14c rtthread.elf + text data bss dec hex filename + 38724 336 2232 41292 a14c rtthread.elf Used Size(B) Used Size(KB) Flash: 39060 B 38.14 KB RAM: 2568 B 2.51 KB @@ -255,8 +255,8 @@ RAM: 2568 B 2.51 KB ![开启-Os化等级](figures/Optimazation2.png) ```information - text data bss dec hex filename - 35140 336 2232 37708 934c rtthread.elf + text data bss dec hex filename + 35140 336 2232 37708 934c rtthread.elf Used Size(B) Used Size(KB) Flash: 35476 B 34.64 KB RAM: 2568 B 2.51 KB diff --git a/rt-thread-version/rt-thread-standard/application-note/system/pm/an0025-pm.md b/rt-thread-version/rt-thread-standard/application-note/system/pm/an0025-pm.md index 43955e57c7e05552a23e51a43dfcc7fa3abc719c..52b7957f8eefa163279f168923d151931a743e22 100644 --- a/rt-thread-version/rt-thread-standard/application-note/system/pm/an0025-pm.md +++ b/rt-thread-version/rt-thread-standard/application-note/system/pm/an0025-pm.md @@ -260,10 +260,10 @@ regulator,下文简称 LPR)。稳压器在复位后处于使能状态,根 - CPU 工作频率 -通过降低 CPU 的主频达到降低功耗的目的: -MR 工作在 Range 1 正常模式时,SYSCLK 最高可以工作在 80M; -MR 工作在 Range 2 时,SYSCLK 最高不能超过 26 M; -低功耗运行模式和低功耗休眠模式,即 Vcore 域由 LPR 供电,SYSCLK 必须小于 2M。 +通过降低 CPU 的主频达到降低功耗的目的: +MR 工作在 Range 1 正常模式时,SYSCLK 最高可以工作在 80M; +MR 工作在 Range 2 时,SYSCLK 最高不能超过 26 M; +低功耗运行模式和低功耗休眠模式,即 Vcore 域由 LPR 供电,SYSCLK 必须小于 2M。 - 芯片本身的低功耗处理 @@ -271,9 +271,9 @@ MR 工作在 Range 2 时,SYSCLK 最高不能超过 26 M; ### 移植的具体实现 -上文简要说明 STM32 的低功耗模式和工作原理,下面介绍 RT-Thread PM 的功能和移植接口。 +上文简要说明 STM32 的低功耗模式和工作原理,下面介绍 RT-Thread PM 的功能和移植接口。 -RT-Thread 低功耗管理系统从设计上分离运行模式和休眠模式,独立管理,运行模式用于变频和变电压,休眠调用芯片的休眠特性。对于多数芯片和开发来说,可能并不需要考虑变频和变电压,仅需关注休眠模式。 +RT-Thread 低功耗管理系统从设计上分离运行模式和休眠模式,独立管理,运行模式用于变频和变电压,休眠调用芯片的休眠特性。对于多数芯片和开发来说,可能并不需要考虑变频和变电压,仅需关注休眠模式。 STM32 L4 系列的芯片有运行模式和低功耗运行模式的概念,同时 MR 还有 Range 2 模式,可用于变频场景。 @@ -381,7 +381,7 @@ INIT_BOARD_EXPORT(rt_hw_pm_init); - 移植时间补偿接口 -某些情况下,我们可能需要系统在空闲时进入 Stop 模式,以达到更低的将功耗效果。L476 Stop 2 模式下的电流可以达到 1.6 uA 左右,ST 手册上对 Stop2 模式的描述如下: +某些情况下,我们可能需要系统在空闲时进入 Stop 模式,以达到更低的将功耗效果。L476 Stop 2 模式下的电流可以达到 1.6 uA 左右,ST 手册上对 Stop2 模式的描述如下: Stop 2 模式基于 Cortex-M4 深度睡眠模式与外设时钟门控。在 Stop 2 模式下, Vcore 域中的所有时钟都会停止, PLL、 MSI、 HSI16 和 HSE 振荡器也被禁止。一些带有唤醒功能(I2C3 和 LPUART)的外设可以开启 HSI16 以获取帧,如果该帧不是唤醒帧,也可以在接收到帧后关闭 HSI16。SRAM1、 SRAM2、 SRAM3 和寄存器内容将保留,所有 I/O 引脚的状态与运行模式下相同。 @@ -447,7 +447,7 @@ int rt_hw_pm_init(void) /* Enable Power Clock */ __HAL_RCC_PWR_CLK_ENABLE(); - + /* initialize timer mask */ timer_mask = 1UL << PM_SLEEP_MODE_DEEP; @@ -466,4 +466,4 @@ STM32L476 的运行模式移植主要是通过改变CPU 频率 和 稳压器, ## 参考资料 -* [《用户指南-电源管理》](../../../programming-manual/pm/pm.md) +* [《用户指南-电源管理》](../../../programming-manual/pm/pm.md) diff --git a/rt-thread-version/rt-thread-standard/development-guide/package/package.md b/rt-thread-version/rt-thread-standard/development-guide/package/package.md index 5419a6ba2a014f4d31af76083765cb3e208b8328..3b01de162f7d7175daf79688d404d78d17e9f5b2 100644 --- a/rt-thread-version/rt-thread-standard/development-guide/package/package.md +++ b/rt-thread-version/rt-thread-standard/development-guide/package/package.md @@ -64,7 +64,7 @@ ], "site" : [ { - "version" : "v1.0.0", + "version" : "v1.0.0", "URL" : "https://pahomqtt-1.0.0.zip", # 根据版本号修改软件包压缩包的下载地址 "filename" : "pahomqtt-1.0.0.zip", "VER_SHA" : "fill in the git version SHA value" # 压缩包形式无需填写 @@ -103,15 +103,15 @@ }, { "version" : "latest", # 最新版本 - "URL" : "https://github.com/RT-Thread-packages/paho-mqtt.git", + "URL" : "https://github.com/RT-Thread-packages/paho-mqtt.git", "filename" : "paho-mqtt.zip", - "VER_SHA" : "master" # 填入 master + "VER_SHA" : "master" # 填入 master } ] } ``` -#### 修改 Kconfig 文件 +#### 修改 Kconfig 文件 **Kconfig** 文件内容大致如下: @@ -133,7 +133,7 @@ 软件包可以上传到 git 上或者其他可供下载的地方,推荐使用 git 仓库的方式进行保存,这样方便更新软件包版本。 -参考:[RT-Thread 软件包仓库]( https://github.com/RT-Thread-packages) +参考:[RT-Thread 软件包仓库]( https://github.com/RT-Thread-packages) ### 测试软件包 diff --git a/rt-thread-version/rt-thread-standard/development-guide/sensor/sensor_driver.md b/rt-thread-version/rt-thread-standard/development-guide/sensor/sensor_driver.md index fbc56a1a6a3fddcd0df8fdcf64593d17b50007fa..de534bb4c237bbde35f8ad473b6c7304958276ef 100644 --- a/rt-thread-version/rt-thread-standard/development-guide/sensor/sensor_driver.md +++ b/rt-thread-version/rt-thread-standard/development-guide/sensor/sensor_driver.md @@ -45,7 +45,7 @@ struct rt_sensor_device const struct rt_sensor_ops *ops; /* The sensor ops */ struct rt_sensor_module *module; /* The sensor module */ - + rt_err_t (*irq_handle)(rt_sensor_t sensor); /* Called when an interrupt is generated, registered by the driver */ }; typedef struct rt_sensor_device *rt_sensor_t; diff --git a/rt-thread-version/rt-thread-standard/development-guide/sensor/sensor_driver_development.md b/rt-thread-version/rt-thread-standard/development-guide/sensor/sensor_driver_development.md index 5708673115337d1fca2eaa229d3724dcee46915b..b3f0d07764fc8e10ed1780c2433e31db83be0c8b 100644 --- a/rt-thread-version/rt-thread-standard/development-guide/sensor/sensor_driver_development.md +++ b/rt-thread-version/rt-thread-standard/development-guide/sensor/sensor_driver_development.md @@ -6,7 +6,7 @@ 本文档为 RT-Thread Sensor 驱动框架下传感器驱动的开发指南文档,给开发团队提供开发标准和规范。 -### 阅读对象 +### 阅读对象 - 进行传感器驱动开发的工程人员 @@ -193,7 +193,7 @@ int rt_hw_xxx_init(const char *name, struct rt_sensor_config *cfg) rt_memcpy(&sensor->config, cfg, sizeof(struct rt_sensor_config)); sensor->ops = &sensor_ops; - + result = rt_hw_sensor_register(sensor, name, RT_DEVICE_FLAG_RDONLY | RT_DEVICE_FLAG_FIFO_RX, RT_NULL); if (result != RT_EOK) { @@ -233,7 +233,7 @@ struct rt_sensor_intf int lps22hb_port(void) { struct rt_sensor_config cfg; - + cfg.intf.dev_name = "i2c1"; cfg.intf.user_data = (void *)0x55; cfg.irq_pin.pin = irq_pin; diff --git a/rt-thread-version/rt-thread-standard/development-guide/touch/touch_device.md b/rt-thread-version/rt-thread-standard/development-guide/touch/touch_device.md index 2c9341092c1793af79596024b899900e8b50c358..771cd1ece8bb228ef834a6092e2e03ee6bfd8648 100644 --- a/rt-thread-version/rt-thread-standard/development-guide/touch/touch_device.md +++ b/rt-thread-version/rt-thread-standard/development-guide/touch/touch_device.md @@ -135,14 +135,14 @@ struct rt_touch_ops 该接口根据控制命令 cmd 和控制参数 arg 控制 Touch 设备。 参数 cmd 可取以下宏定义值: ```c -#define RT_TOUCH_CTRL_GET_ID (0) -#define RT_TOUCH_CTRL_GET_INFO (1) -#define RT_TOUCH_CTRL_SET_MODE (2) -#define RT_TOUCH_CTRL_SET_X_RANGE (3) -#define RT_TOUCH_CTRL_SET_Y_RANGE (4) -#define RT_TOUCH_CTRL_SET_X_TO_Y (5) -#define RT_TOUCH_CTRL_DISABLE_INT (6) -#define RT_TOUCH_CTRL_ENABLE_INT (7) +#define RT_TOUCH_CTRL_GET_ID (0) +#define RT_TOUCH_CTRL_GET_INFO (1) +#define RT_TOUCH_CTRL_SET_MODE (2) +#define RT_TOUCH_CTRL_SET_X_RANGE (3) +#define RT_TOUCH_CTRL_SET_Y_RANGE (4) +#define RT_TOUCH_CTRL_SET_X_TO_Y (5) +#define RT_TOUCH_CTRL_DISABLE_INT (6) +#define RT_TOUCH_CTRL_ENABLE_INT (7) ``` ### Touch 设备注册 @@ -193,12 +193,12 @@ int rt_hw_touch_register(rt_touch_t touch, ```c struct rt_touch_data { - rt_uint8_t event; - rt_uint8_t track_id; - rt_uint8_t width; - rt_uint16_t x_coordinate; - rt_uint16_t y_coordinate; - rt_tick_t timestamp; + rt_uint8_t event; + rt_uint8_t track_id; + rt_uint8_t width; + rt_uint16_t x_coordinate; + rt_uint16_t y_coordinate; + rt_tick_t timestamp; }; ``` @@ -224,4 +224,4 @@ struct rt_touch_data * 《Touch 设备使用指南》 -* 《Touch 设备驱动开发指南》 \ No newline at end of file +* 《Touch 设备驱动开发指南》 diff --git a/rt-thread-version/rt-thread-standard/development-guide/touch/touch_gt9147_driver.md b/rt-thread-version/rt-thread-standard/development-guide/touch/touch_gt9147_driver.md index cc0203ab211154a76012b69974bc9f8530d12270..46ac2609b5d22188340dc57fbf0db4bc56014387 100644 --- a/rt-thread-version/rt-thread-standard/development-guide/touch/touch_gt9147_driver.md +++ b/rt-thread-version/rt-thread-standard/development-guide/touch/touch_gt9147_driver.md @@ -110,9 +110,9 @@ GT9147 是标准的 I2C 从设备,所以使用 I2C 总线读取数据,下图 读 GT9147 寄存器的源代码如下: ```c -static rt_err_t gt9147_read_regs(struct rt_i2c_client *dev, - rt_uint8_t *cmd_buf, - rt_uint8_t cmd_len, +static rt_err_t gt9147_read_regs(struct rt_i2c_client *dev, + rt_uint8_t *cmd_buf, + rt_uint8_t cmd_len, rt_uint8_t read_len, rt_uint8_t *read_buf) { @@ -205,17 +205,17 @@ static rt_size_t gt9147_read_point(struct rt_touch_device *touch, void *buf, rt_ } /*有触点抬起 */ - if (pre_touch > touch_num) + if (pre_touch > touch_num) { for (read_index = 0; read_index < pre_touch; read_index++) { rt_uint8_t j; - for (j = 0; j < touch_num; j++) + for (j = 0; j < touch_num; j++) { read_id = read_buf[j * 8] & 0x0F; - if (pre_id[read_index] == read_id) + if (pre_id[read_index] == read_id) break; if (j >= touch_num - 1) @@ -230,7 +230,7 @@ static rt_size_t gt9147_read_point(struct rt_touch_device *touch, void *buf, rt_ } /* 有触点按下 */ - if (touch_num) + if (touch_num) { rt_uint8_t off_set; @@ -239,9 +239,9 @@ static rt_size_t gt9147_read_point(struct rt_touch_device *touch, void *buf, rt_ off_set = read_index * 8; read_id = read_buf[off_set] & 0x0f; pre_id[read_index] = read_id; - input_x = read_buf[off_set + 1] | (read_buf[off_set + 2] << 8); /* x */ - input_y = read_buf[off_set + 3] | (read_buf[off_set + 4] << 8); /* y */ - input_w = read_buf[off_set + 5] | (read_buf[off_set + 6] << 8); /* size */ + input_x = read_buf[off_set + 1] | (read_buf[off_set + 2] << 8); /* x */ + input_y = read_buf[off_set + 3] | (read_buf[off_set + 4] << 8); /* y */ + input_w = read_buf[off_set + 5] | (read_buf[off_set + 6] << 8); /* size */ /* 按下事件 */ gt9147_touch_down(buf, read_id, input_x, input_y, input_w); } @@ -317,18 +317,18 @@ static void gt9147_touch_down(void *buf, int8_t id, int16_t x, int16_t y, int16_ } ``` -### 控制 GT9147 +### 控制 GT9147 Touch 框架中定义了 Touch 控制设备的宏,宏定义如下所示: ```c -#define RT_TOUCH_CTRL_GET_ID (0) -#define RT_TOUCH_CTRL_GET_INFO (1) -#define RT_TOUCH_CTRL_SET_MODE (2) -#define RT_TOUCH_CTRL_SET_X_RANGE (3) -#define RT_TOUCH_CTRL_SET_Y_RANGE (4) -#define RT_TOUCH_CTRL_SET_X_TO_Y (5) -#define RT_TOUCH_CTRL_DISABLE_INT (6) -#define RT_TOUCH_CTRL_ENABLE_INT (7) +#define RT_TOUCH_CTRL_GET_ID (0) +#define RT_TOUCH_CTRL_GET_INFO (1) +#define RT_TOUCH_CTRL_SET_MODE (2) +#define RT_TOUCH_CTRL_SET_X_RANGE (3) +#define RT_TOUCH_CTRL_SET_Y_RANGE (4) +#define RT_TOUCH_CTRL_SET_X_TO_Y (5) +#define RT_TOUCH_CTRL_DISABLE_INT (6) +#define RT_TOUCH_CTRL_ENABLE_INT (7) ``` 其中 `RT_TOUCH_CTRL_DISABLE_INT` 和 `RT_TOUCH_CTRL_ENABLE_INT` 已经在框架层中实现,所以从设备驱动需要实现剩下的宏定义,对接到 Touch 从设备的代码如下: @@ -348,25 +348,25 @@ static rt_err_t gt9147_control(struct rt_touch_device *device, int cmd, void *da switch(cmd) { - case RT_TOUCH_CTRL_SET_X_RANGE: + case RT_TOUCH_CTRL_SET_X_RANGE: { /* 设置 X 轴分辨率 */ func_set_x_range(); break; } - case RT_TOUCH_CTRL_SET_Y_RANGE: + case RT_TOUCH_CTRL_SET_Y_RANGE: { /* 设置 Y 轴分辨率 */ func_set_y_range(); break; } - case RT_TOUCH_CTRL_SET_X_TO_Y: + case RT_TOUCH_CTRL_SET_X_TO_Y: { /* 交换 X、Y 轴坐标 */ func_set_x_to_y(); break; } - case RT_TOUCH_CTRL_SET_MODE: + case RT_TOUCH_CTRL_SET_MODE: { /* 设置触摸芯片工作模式 */ func_set_mode(); diff --git a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/external_c_modules.md b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/external_c_modules.md index 3825ee20b783e7b603b3df6a080e5705094622de..e5504fdbc8512b4b59622768570b5e241b032672 100644 --- a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/external_c_modules.md +++ b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/external_c_modules.md @@ -40,7 +40,7 @@ MP_DEFINE_CONST_FUN_OBJ_2(add_obj, add); 生成器会处理好需要导出到 MicroPython 的函数的入参和出参,而开发者只需要编写相应的代码来处理这些输入参数,并且把返回值赋给输出参数即可。 通过包含头文件的方式,可以调用先前编写的 C 函数来对输入参数进行处理,或者根据输入参数来执行相应的动作,添加控制硬件的驱动的原理也是一样的。 -最终使用 Python 调用 C 函数的效果如下: +最终使用 Python 调用 C 函数的效果如下: ```python >>> import userfunc diff --git a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/firmware-develop.md b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/firmware-develop.md index 975af760cd949efd8dd238309b088f2e0ee41074..0a512c084288388f86c34c8009e2fa63b815b5a4 100644 --- a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/firmware-develop.md +++ b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/firmware-develop.md @@ -51,7 +51,7 @@ RT-Thread MicroPython mini 版本占用资源最大不超过: 配置完成后,记得要使用 `scons --target=mkd5` 重新生成工程,使配置在工程中生效。 -## 在 main 线程中启动 MicroPython +## 在 main 线程中启动 MicroPython 最后要在 main 线程中启动 MicroPython,代码修改如下所示: @@ -100,4 +100,4 @@ int main(void) 重新编译工程并下载程序到板卡中,就会在 main 线程中自动启动 MicroPython,接下来就可以使用 [**RT-Thread MicroPython 开发环境**](https://marketplace.visualstudio.com/items?itemName=RT-Thread.rt-thread-micropython) 来进行应用开发了。 通过开发环境连接到开发板,即可看到 MicroPython 的交互环境 REPL,如下图所示: -![en_connect_board](assets/en_connect_board.gif) \ No newline at end of file +![en_connect_board](assets/en_connect_board.gif) diff --git a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/micropython-ide.md b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/micropython-ide.md index c4589a9334bd672e9674acd055111693071aeae3..7134a0e40ca96f2ffbf4a9dc889272ee5273fdb7 100644 --- a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/micropython-ide.md +++ b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/micropython-ide.md @@ -21,4 +21,4 @@ RT-Thread 为广大开发者提供了 VSCode 最好用的 MicroPython 插件 来 可通过查看如下文档进一步了解并使用 RT-Thread MicroPython IDE: -- [RT-Thread MicroPython Develop Environment](https://marketplace.visualstudio.com/items?itemName=RT-Thread.rt-thread-micropython) \ No newline at end of file +- [RT-Thread MicroPython Develop Environment](https://marketplace.visualstudio.com/items?itemName=RT-Thread.rt-thread-micropython) diff --git a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/micropython_for_pandora_iot_board.md b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/micropython_for_pandora_iot_board.md index 83e4df985bff0118c10ad2b10dde88d23447a3cc..b0d26b6809309d99909fefe0b4a688c6b1de0560 100644 --- a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/micropython_for_pandora_iot_board.md +++ b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/micropython_for_pandora_iot_board.md @@ -41,7 +41,7 @@ Pandora MicroPython 固件硬件功能如下所示: 推荐遵循如下步骤开始进行 MicroPython 开发: - 在您的开发板上烧录合适的固件 -- 在 PC 机上安装 RT-Thread MicroPython 开发环境并连接上开发板 +- 在 PC 机上安装 RT-Thread MicroPython 开发环境并连接上开发板 接下来就可以尽情挥洒您的创意了,更详细的内容可以点击下文中的链接来进一步了解。 @@ -73,4 +73,4 @@ Pandora MicroPython 固件硬件功能如下所示: - 在 github 上提交 issue - [RT-Thread MicroPython 官方论坛](https://www.rt-thread.org/qa/forum.php?mod=forumdisplay&fid=2&filter=typeid&typeid=20) -- RT-Thread MicroPython 交流 QQ 群:703840633 \ No newline at end of file +- RT-Thread MicroPython 交流 QQ 群:703840633 diff --git a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/micropython_for_w601_iot_board.md b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/micropython_for_w601_iot_board.md index ac7e19742b89a19f699a12ea9939b27a16f47c59..e32fa4b73008522904ba8c677f8c43b63b29f183 100644 --- a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/micropython_for_w601_iot_board.md +++ b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/micropython_for_w601_iot_board.md @@ -39,7 +39,7 @@ W601 IoT Board MicroPython 固件硬件功能如下所示: 推荐遵循如下步骤开始进行 MicroPython 开发: - 在您的开发板上烧录合适的固件 -- 在 PC 机上安装 RT-Thread MicroPython 开发环境并连接上开发板 +- 在 PC 机上安装 RT-Thread MicroPython 开发环境并连接上开发板 接下来就可以尽情挥洒您的创意了,更详细的内容可以点击下文中的链接来进一步了解。 @@ -71,4 +71,4 @@ W601 IoT Board MicroPython 固件硬件功能如下所示: - 在 github 上提交 issue - [RT-Thread MicroPython 官方论坛](https://www.rt-thread.org/qa/forum.php?mod=forumdisplay&fid=2&filter=typeid&typeid=20) -- RT-Thread MicroPython 交流 QQ 群:703840633 \ No newline at end of file +- RT-Thread MicroPython 交流 QQ 群:703840633 diff --git a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/spec-librarys/machine.md b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/spec-librarys/machine.md index cea6db977b0a167b32b1cb4f59ea5db63ea55579..d9b371d1848f77a6d0cb14430e72aa25368399b0 100644 --- a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/spec-librarys/machine.md +++ b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/spec-librarys/machine.md @@ -8,35 +8,35 @@ #### 复位相关函数 -##### **machine.info**() +##### **machine.info**() 显示关于系统介绍和内存占用等信息。 -##### **machine.rest**() +##### **machine.rest**() 重启设备,类似于按下复位按钮。 -##### **machine.reset_cause**() +##### **machine.reset_cause**() 获得复位的原因,查看可能的返回值的常量。 #### 中断相关函数 -##### **machine.disable_irq**() +##### **machine.disable_irq**() 禁用中断请求。返回先前的 `IRQ` 状态,该状态应该被认为是一个未知的值。这个返回值应该在 `disable_irq` 函数被调用之前被传给 `enable_irq` 函数来重置中断到初始状态。 -##### **machine.enable_irq**(state) +##### **machine.enable_irq**(state) 重新使能中断请求。状态参数应该是从最近一次禁用功能的调用中返回的值。 #### 功耗相关函数 -##### **machine.freq**() +##### **machine.freq**() 返回 `CPU` 的运行频率。 -##### **machine.idle**() +##### **machine.idle**() 阻断给 `CPU` 的时钟信号,在较短或者较长的周期里减少功耗。当中断发生时,外设将继续工作。 -##### **machine.sleep**() +##### **machine.sleep**() 停止 `CPU` 并禁止除了 `WLAN` 之外的所有外设。系统会从睡眠请求的地方重新恢复工作。为了确保唤醒一定会发生,应当首先配置中断源。 -##### **machine.deepsleep**() +##### **machine.deepsleep**() 停止 `CPU` 和所有外设(包括网络接口)。执行从主函数中恢复,就像被复位一样。复位的原因可以检查 `machine.DEEPSLEEP` 参数获得。为了确保唤醒一定会发生,应该首先配置中断源,比如一个引脚的变换或者 `RTC` 的超时。 ### 常数 diff --git a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/spec-librarys/machine/ADC.md b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/spec-librarys/machine/ADC.md index 43639d2a656f8f03bdeae6fdf743298bda1bc499..87225ed411b93b695ea3404fbcf60bfda1895d56 100644 --- a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/spec-librarys/machine/ADC.md +++ b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/spec-librarys/machine/ADC.md @@ -5,7 +5,7 @@ - ADC(Analog-to-Digital Converter,模数转换器),用于将连续变化的模拟信号转化为离散的数字信号。 - ADC 设备两个重要参数:采样值、分辨率; - 采样值:当前时间由模拟信号转化的数值信号的数值; - - 分辨率:以二进制(或十进制)数的位数来表示,一般有 8 位、10 位、12 位、16 位等,它说明模数转换器对输入信号的分辨能力,位数越多,表示分辨率越高,采样值会更精确。 + - 分辨率:以二进制(或十进制)数的位数来表示,一般有 8 位、10 位、12 位、16 位等,它说明模数转换器对输入信号的分辨能力,位数越多,表示分辨率越高,采样值会更精确。 ### 构造函数 diff --git a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/spec-librarys/machine/I2C.md b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/spec-librarys/machine/I2C.md index a1fd7f89e35ee5e23321fbeb13b7582f7b8df4da..7eb29b9c4fd639067d1c7d345c6b27f022179cfc 100644 --- a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/spec-librarys/machine/I2C.md +++ b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/spec-librarys/machine/I2C.md @@ -13,8 +13,8 @@ #### **class machine.I2C**(id= -1, scl, sda, freq=400000) 使用下面的参数构造并返回一个新的 `I2C` 对象: -- **id** :标识特定的 `I2C` 外设。如果填入 id = -1,即选择软件模拟的方式实现 `I2C`,这时可以使用任意引脚来模拟 `I2C` 总线 ,这样在初始化时就必须指定 `scl` 和 `sda` 。 -软件 I2C 的初始化方式可参考 [软件 I2C 示例](#i2c_2)。 +- **id** :标识特定的 `I2C` 外设。如果填入 id = -1,即选择软件模拟的方式实现 `I2C`,这时可以使用任意引脚来模拟 `I2C` 总线 ,这样在初始化时就必须指定 `scl` 和 `sda` 。 +软件 I2C 的初始化方式可参考 [软件 I2C 示例](#i2c_2)。 硬件 I2C 的初始化方式可参考 [硬件 I2C 示例](#i2c_3)。 - **scl** : 应该是一个 `Pin` 对象,指定为一个用于 `scl` 的 `Pin` 对象。 @@ -54,7 +54,7 @@ 从 `addr` 指定的从设备中读取 n 个字节,如果 `stop = True`,那么在传输结束时会产生一个停止信号。函数会返回一个存储着读到数据的字节对象。 #### **I2C.readfrom_into**(addr, buf, stop=True) -从 `addr` 指定的从设备中读取数据存储到 `buf` 中,读取的字节数将是 `buf` 的长度,如果 `stop = True`,那么在传输结束时会产生一个停止信号。 +从 `addr` 指定的从设备中读取数据存储到 `buf` 中,读取的字节数将是 `buf` 的长度,如果 `stop = True`,那么在传输结束时会产生一个停止信号。 这个方法没有返回值。 #### **I2C.writeto**(addr, buf, stop=True) @@ -68,11 +68,11 @@ 从 `addr` 指定的从设备中 `memaddr` 地址开始读取 n 个字节。`addrsize` 参数指定地址的长度。返回一个存储读取数据的字节对象。 #### **I2C.readfrom_mem_into**(addr, memaddr, buf, \*, addrsize=8) -从 `addr` 指定的从设备中 `memaddr` 地址读取数据到 `buf` 中,,读取的字节数是 `buf` 的长度。 +从 `addr` 指定的从设备中 `memaddr` 地址读取数据到 `buf` 中,,读取的字节数是 `buf` 的长度。 这个方法没有返回值。 #### **I2C.writeto_mem**(addr, memaddr, buf, \*, addrsize=8) -将 `buf` 里的数据写入 `addr` 指定的从机的 `memaddr` 地址中。 +将 `buf` 里的数据写入 `addr` 指定的从机的 `memaddr` 地址中。 这个方法没有返回值。 ### 示例 @@ -97,7 +97,7 @@ b'\x12' # starting at memory-address 8 in the slav #### 硬件 I2C -需要先开启 `I2C` 设备驱动,查找设备可以在 `msh` 中输入`list_device` 命令。 +需要先开启 `I2C` 设备驱动,查找设备可以在 `msh` 中输入`list_device` 命令。 在构造函数的第一个参数传入 `0`,系统就会搜索名为 `i2c0` 的设备,找到之后使用这个设备来构建 `I2C` 对象: ```python diff --git a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/spec-librarys/machine/PWM.md b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/spec-librarys/machine/PWM.md index 7269984ec2ea3f625ad5faddebe91312205864ef..419d4b7115934b191d009cfc3f992409342054c6 100644 --- a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/spec-librarys/machine/PWM.md +++ b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/spec-librarys/machine/PWM.md @@ -54,4 +54,4 @@ 200 >>> pwm.deinit() # 关闭 PWM 对象 >>> pwm.init(3, 1000, 100) # 开启并重新配置 PWM 对象 -``` \ No newline at end of file +``` diff --git a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/spec-librarys/machine/Pin.md b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/spec-librarys/machine/Pin.md index 8b1039d519bb2bc948555da9ff8dc4a2f0678e54..24f73109a7768c43bdd44a2527ed79d3917e1910 100644 --- a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/spec-librarys/machine/Pin.md +++ b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/spec-librarys/machine/Pin.md @@ -32,7 +32,7 @@ 根据输入的参数重新初始化引脚。只有那些被指定的参数才会被设置,其余引脚的状态将保持不变,详细的参数可以参考上面的构造函数。 #### **Pin.value**([x]) -如果没有给定参数 `x` ,这个方法可以获得引脚的值。 +如果没有给定参数 `x` ,这个方法可以获得引脚的值。 如果给定参数 `x` ,如 `0` 或 `1`,那么设置引脚的值为 逻辑 `0` 或 逻辑 `1`。 #### **Pin.name**() @@ -54,7 +54,7 @@ ### 常量 -下面的常量用来配置 `Pin` 对象。 +下面的常量用来配置 `Pin` 对象。 #### 选择引脚模式: ##### **Pin.IN** @@ -64,15 +64,15 @@ #### 选择上/下拉模式: ##### **Pin.PULL_UP** ##### **Pin.PULL_DOWN** -##### **None** +##### **None** 使用值 `None` 代表不进行上下拉。 #### 选择中断触发模式: ##### **Pin.IRQ_FALLING** ##### **Pin.IRQ_RISING** ##### **Pin.IRQ_RISING_FALLING** -##### **Pin.IRQ_LOW_LEVEL** -##### **Pin.IRQ_HIGH_LEVEL** +##### **Pin.IRQ_LOW_LEVEL** +##### **Pin.IRQ_HIGH_LEVEL** ### 示例一 @@ -107,4 +107,4 @@ def func(v): key_0.irq(trigger=Pin.IRQ_RISING, handler=func) ``` -更多内容可参考 [machine.Pin](http://docs.micropython.org/en/latest/pyboard/library/machine.Pin.html) 。 \ No newline at end of file +更多内容可参考 [machine.Pin](http://docs.micropython.org/en/latest/pyboard/library/machine.Pin.html) 。 diff --git a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/spec-librarys/machine/RTC.md b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/spec-librarys/machine/RTC.md index be8e4b13a5e409513f52bc699961f9680fa54054..7f129c5d04aab0a40dff5df4325b38647717b8f9 100644 --- a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/spec-librarys/machine/RTC.md +++ b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/spec-librarys/machine/RTC.md @@ -10,7 +10,7 @@ #### **class machine.RTC**() -所以在给定的总线上构造一个 `RTC` 对象,无入参对象,使用方式可参考 [示例](#_3)。 +所以在给定的总线上构造一个 `RTC` 对象,无入参对象,使用方式可参考 [示例](#_3)。 ### 方法 diff --git a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/spec-librarys/machine/SPI.md b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/spec-librarys/machine/SPI.md index 93994d2a8e5d136e4fe07b84fbe5c5d6b803fa3b..84f07cf8ee1c9ea10ac3b894c57d4318622fe68a 100644 --- a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/spec-librarys/machine/SPI.md +++ b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/spec-librarys/machine/SPI.md @@ -40,7 +40,7 @@ 读出 n 字节的同时不断的写入 `write` 给定的单字节。返回一个存放着读出数据的字节对象。 #### **SPI.readinto**(buf, write=0x00) -读出 n 字节到 `buf` 的同时不断地写入 `write` 给定的单字节。 +读出 n 字节到 `buf` 的同时不断地写入 `write` 给定的单字节。 这个方法返回读入的字节数。 #### **SPI.write**(buf) @@ -78,7 +78,7 @@ b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' #### 硬件 SPI -需要先开启 `SPI` 设备驱动,查找设备可以在 `msh` 中输入`list_device` 命令。 +需要先开启 `SPI` 设备驱动,查找设备可以在 `msh` 中输入`list_device` 命令。 在构造函数的第一个参数传入 `50`,系统就会搜索名为 `spi50` 的设备,找到之后使用这个设备来构建 `SPI` 对象: ``` diff --git a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/spec-librarys/machine/Timer.md b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/spec-librarys/machine/Timer.md index 54cfe59108e4471b060ab81b3fe57fd52b76b034..c3e14cf9abaa1d57e0f409e406b4edcece6c6aa1 100644 --- a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/spec-librarys/machine/Timer.md +++ b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/spec-librarys/machine/Timer.md @@ -59,7 +59,7 @@ timer.init(wdt.PERIOD, 5000, callback_test) # 设置定时器模式为周期 >>> timer = Timer(15) # 创建 Timer 对象,当前设备编号为 11 >>> # 进入粘贴模式 paste mode; Ctrl-C to cancel, Ctrl-D to finish -=== def callback_test(device): # 定义超时回调函数 +=== def callback_test(device): # 定义超时回调函数 === print("Timer callback test") >>> timer.init(timer.PERIODIC, 5000, callback_test) # 初始化 Timer 对象,设置定时器模式为循环执行,超时时间为 5 秒,超时回调函数 callback_test >>> Timer callback test # 5 秒超时循环执行回调函数,打印日志 diff --git a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/spec-librarys/machine/UART.md b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/spec-librarys/machine/UART.md index e10ea9c9d6120000b1dcc2c93374d63fea58401a..7055db34ef99da40430f1e3fc27520f177f3777d 100644 --- a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/spec-librarys/machine/UART.md +++ b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/spec-librarys/machine/UART.md @@ -9,10 +9,10 @@ 在 RT-Thread MicroPython 中 `UART` 对象的构造函数如下: #### **class machine.UART**(id, ...) -在给定总线上构造一个 `UART` 对象,`id` 取决于特定的移植。 -初始化参数可以参考下面的 `UART.init` 方法。 +在给定总线上构造一个 `UART` 对象,`id` 取决于特定的移植。 +初始化参数可以参考下面的 `UART.init` 方法。 -使用硬件 UART 在初始化时只需传入 `UART` 设备的编号即可,如传入 `1` 表示 `uart1` 设备。 +使用硬件 UART 在初始化时只需传入 `UART` 设备的编号即可,如传入 `1` 表示 `uart1` 设备。 初始化方式可参考 [示例](#_3)。 ### 方法 @@ -57,4 +57,4 @@ uart.readinto(buf) # read and store into the given buffer uart.write('abc') # write the 3 characters ``` - 更多内容可参考 [machine.UART](http://docs.micropython.org/en/latest/pyboard/library/machine.UART.html) 。 \ No newline at end of file + 更多内容可参考 [machine.UART](http://docs.micropython.org/en/latest/pyboard/library/machine.UART.html) 。 diff --git a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/spec-librarys/micropython.md b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/spec-librarys/micropython.md index 040e8e3ef93caae8710bd3a679cedbbc7ed1c127..ace86da65ded19ec35b2022b7409ac6605da6bc7 100644 --- a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/spec-librarys/micropython.md +++ b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/spec-librarys/micropython.md @@ -69,4 +69,4 @@ This function can be used to prevent the capturing of Ctrl-C on the incoming str Note: If schedule() is called from a preempting IRQ, when memory allocation is not allowed and the callback to be passed to schedule() is a bound method, passing this directly will fail. This is because creating a reference to a bound method causes memory allocation. A solution is to create a reference to the method in the class constructor and to pass that reference to schedule(). This is discussed in detail here reference documentation under “Creation of Python objects”. -There is a finite queue to hold the scheduled functions and schedule() will raise a RuntimeError if the queue is full. \ No newline at end of file +There is a finite queue to hold the scheduled functions and schedule() will raise a RuntimeError if the queue is full. diff --git a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/spec-librarys/rtthread.md b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/spec-librarys/rtthread.md index 5fe265767f6ce8e77029a71999bba595f3e9a72f..cf3a94314ab56abd61502ed14d9f629f848a84d2 100644 --- a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/spec-librarys/rtthread.md +++ b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/spec-librarys/rtthread.md @@ -4,20 +4,20 @@ ### 函数 -#### rtthread.current_tid() +#### rtthread.current_tid() 返回当前线程的 id 。 -#### rtthread.is_preempt_thread() +#### rtthread.is_preempt_thread() 返回是否是可抢占线程。 ### 示例 ``` >>> import rtthread ->>> +>>> >>> rtthread.is_preempt_thread() # determine if it's a preemptible thread True >>> rtthread.current_tid() # current thread id 268464956 ->>> +>>> ``` diff --git a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/cmath.md b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/cmath.md index 1add57e4af11ef3ea9e476c4814b52050ec4fe25..2040001a82734c494f48716cfbaa02926eb4f5e8 100644 --- a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/cmath.md +++ b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/cmath.md @@ -4,39 +4,39 @@ ### 函数 -#### **cmath.cos**(z) +#### **cmath.cos**(z) 返回``z``的余弦。 -#### **cmath.exp**(z) +#### **cmath.exp**(z) 返回``z``的指数。 -#### **cmath.log**(z) +#### **cmath.log**(z) 返回``z``的对数。 -#### **cmath.log10**(z) +#### **cmath.log10**(z) 返回``z``的常用对数。 -#### **cmath.phase**(z) +#### **cmath.phase**(z) 返回``z``的相位, 范围是(-pi, +pi],以弧度表示。 -#### **cmath.polar**(z) +#### **cmath.polar**(z) 返回``z``的极坐标。 -#### **cmath.rect**(r, phi) +#### **cmath.rect**(r, phi) 返回`模量r`和相位``phi``的复数。 -#### **cmath.sin**(z) +#### **cmath.sin**(z) 返回``z``的正弦。 -#### **cmath.sqrt**(z) +#### **cmath.sqrt**(z) 返回``z``的平方根。 ### 常数 -#### **cmath.e** +#### **cmath.e** 自然对数的指数。 -#### **cmath.pi** +#### **cmath.pi** 圆周率。 更多内容可参考 [cmath](http://docs.micropython.org/en/latest/pyboard/library/cmath.html) 。 diff --git a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/gc.md b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/gc.md index b5147cf7be25097cdb7078b86b9419a56a9c16c7..3ee838eefb1dcc7e8292d96ec18fbc2c9069fd71 100644 --- a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/gc.md +++ b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/gc.md @@ -4,19 +4,19 @@ ### 函数 -#### **gc.enable**() -允许自动回收内存碎片。 +#### **gc.enable**() +允许自动回收内存碎片。 -#### **gc.disable**() -禁止自动回收,但可以通过collect()函数进行手动回收内存碎片。 +#### **gc.disable**() +禁止自动回收,但可以通过collect()函数进行手动回收内存碎片。 -#### **gc.collect**() +#### **gc.collect**() 运行一次垃圾回收。 -#### **gc.mem_alloc**() -返回已分配的内存数量。 +#### **gc.mem_alloc**() +返回已分配的内存数量。 -#### **gc.mem_free**() -返回剩余的内存数量。 +#### **gc.mem_free**() +返回剩余的内存数量。 更多内容可参考 [gc](http://docs.micropython.org/en/latest/pyboard/library/gc.html) 。 diff --git a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/math.md b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/math.md index 7de3bd809966f08f99f20bf86829dd5db47551c1..8c0faf70d6bcfcb8fea9690904d5bba3877f168f 100644 --- a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/math.md +++ b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/math.md @@ -6,7 +6,7 @@ ### 常数 -#### **math.e** +#### **math.e** 自然对数的底数。 示例: @@ -15,7 +15,7 @@ >>>print(math.e) 2.718282 ``` -#### **math.pi** +#### **math.pi** 圆周长与直径的比值。 示例: @@ -28,13 +28,13 @@ ### 函数 #### **math.acos(x)** -传入弧度值,计算cos(x)的反三角函数。 +传入弧度值,计算cos(x)的反三角函数。 -#### **math.acosh(x)** +#### **math.acosh(x)** 返回 ``x`` 的逆双曲余弦。 #### **math.asin(x)** -传入弧度值,计算sin(x)的反三角函数。 +传入弧度值,计算sin(x)的反三角函数。 示例: ``` @@ -56,7 +56,7 @@ Return the inverse hyperbolic tangent of x. #### **math.ceil(x)** -向上取整。 +向上取整。 示例: ``` @@ -65,11 +65,11 @@ 6 ``` -#### **math.copysign(x, y)** +#### **math.copysign(x, y)** Return x with the sign of y. -#### **math.cos(x)** -传入弧度值,计算余弦。 +#### **math.cos(x)** +传入弧度值,计算余弦。 示例:计算cos60° ``` @@ -77,11 +77,11 @@ 0.5 ``` -#### **math.cosh(x)** +#### **math.cosh(x)** Return the hyperbolic cosine of x. -#### **math.degrees(x)** -弧度转化为角度。 +#### **math.degrees(x)** +弧度转化为角度。 示例: ``` @@ -90,14 +90,14 @@ 60.00002 ``` -#### **math.erf(x)** +#### **math.erf(x)** Return the error function of x. -#### **math.erfc(x)** +#### **math.erfc(x)** Return the complementary error function of x. -#### **math.exp(x)** -计算e的x次方(幂)。 +#### **math.exp(x)** +计算e的x次方(幂)。 示例: ``` @@ -106,11 +106,11 @@ 7.389056 ``` -#### **math.expm1(x)** -计算 math.exp(x) - 1。 +#### **math.expm1(x)** +计算 math.exp(x) - 1。 -#### **math.fabs(x)** -计算绝对值。 +#### **math.fabs(x)** +计算绝对值。 示例: ``` @@ -122,8 +122,8 @@ 5.0 ``` -#### **math.floor(x)** -向下取整。 +#### **math.floor(x)** +向下取整。 示例: ``` @@ -135,8 +135,8 @@ -3 ``` -#### **math.fmod(x, y)** -取x除以y的模。 +#### **math.fmod(x, y)** +取x除以y的模。 示例: ``` @@ -145,11 +145,11 @@ 4.0 ``` -#### **math.frexp(x)** +#### **math.frexp(x)** Decomposes a floating-point number into its mantissa and exponent. The returned value is the tuple (m, e) such that x == m * 2**e exactly. If x == 0 then the function returns (0.0, 0), otherwise the relation 0.5 <= abs(m) < 1 holds. -#### **math.gamma(x)** -返回伽马函数。 +#### **math.gamma(x)** +返回伽马函数。 示例: ``` @@ -158,20 +158,20 @@ 33.08715 ``` -#### **math.isfinite(x)** +#### **math.isfinite(x)** Return True if x is finite. -#### **math.isinf(x)** +#### **math.isinf(x)** Return True if x is infinite. -#### **math.isnan(x)** +#### **math.isnan(x)** Return True if x is not-a-number -#### **math.ldexp(x, exp)** +#### **math.ldexp(x, exp)** Return x * (2**exp). -#### **math.lgamma(x)** -返回伽马函数的自然对数。 +#### **math.lgamma(x)** +返回伽马函数的自然对数。 示例: ``` @@ -180,8 +180,8 @@ 3.499145 ``` -#### **math.log(x)** -计算以e为底的x的对数。 +#### **math.log(x)** +计算以e为底的x的对数。 示例: ``` @@ -190,8 +190,8 @@ 2.302585 ``` -#### **math.log10(x)** -计算以10为底的x的对数。 +#### **math.log10(x)** +计算以10为底的x的对数。 示例: ``` @@ -200,8 +200,8 @@ 1.0 ``` -#### **math.log2(x)** - 计算以2为底的x的对数。 +#### **math.log2(x)** + 计算以2为底的x的对数。 示例: ``` @@ -210,11 +210,11 @@ 3.0 ``` -#### **math.modf(x)** +#### **math.modf(x)** Return a tuple of two floats, being the fractional and integral parts of x. Both return values have the same sign as x. -#### **math.pow(x, y)** -计算 x 的 y 次方(幂)。 +#### **math.pow(x, y)** +计算 x 的 y 次方(幂)。 示例: ``` @@ -223,8 +223,8 @@ 8.0 ``` -#### **math.radians(x)** -角度转化为弧度。 +#### **math.radians(x)** +角度转化为弧度。 示例: ``` @@ -233,8 +233,8 @@ 1.047198 ``` -#### **math.sin(x)** -传入弧度值,计算正弦。 +#### **math.sin(x)** +传入弧度值,计算正弦。 示例:计算sin90° ``` @@ -242,11 +242,11 @@ 1.0 ``` -#### **math.sinh(x)** +#### **math.sinh(x)** Return the hyperbolic sine of x. -#### **math.sqrt(x)** -计算平方根。 +#### **math.sqrt(x)** +计算平方根。 示例: ``` @@ -255,8 +255,8 @@ 3.0 ``` -#### **math.tan(x)** -传入弧度值,计算正切。 +#### **math.tan(x)** +传入弧度值,计算正切。 示例:计算tan60° ``` @@ -264,11 +264,11 @@ 1.732051 ``` -#### **math.tanh(x)** +#### **math.tanh(x)** Return the hyperbolic tangent of x. -#### **math.trunc(x)** -取整。 +#### **math.trunc(x)** +取整。 示例: ``` diff --git a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/rtthread.md b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/rtthread.md index 4591032fc8ebfd8bd24efc414d566886210a1035..8107062ba456fb805fe8ff242fcf5580ac2e85b2 100644 --- a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/rtthread.md +++ b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/rtthread.md @@ -4,20 +4,20 @@ ### 函数 -#### rtthread.current_tid() +#### rtthread.current_tid() 返回当前线程的 id 。 -#### rtthread.is_preempt_thread() +#### rtthread.is_preempt_thread() 返回是否是可抢占线程。 -#### rtthread.stacks_analyze() +#### rtthread.stacks_analyze() 返回当前系统线程和栈使用信息。 ### 示例 ``` >>> import rtthread ->>> +>>> >>> rtthread.is_preempt_thread() # determine if code is running in a preemptible thread True >>> rtthread.current_tid() # current thread id @@ -30,5 +30,5 @@ tshell 20 ready 0x00000260 0x00001000 39% 0x00000003 000 tidle 31 ready 0x00000070 0x00000100 51% 0x0000000f 000 SysMonitor 30 suspend 0x000000a4 0x00000200 32% 0x00000005 000 timer 4 suspend 0x00000080 0x00000200 25% 0x00000009 000 ->>> +>>> ``` diff --git a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/sys.md b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/sys.md index e4eb9077715b6ba87469de75c7c633c919ebecf8..1593f0247239ce1f8f09aa49ac0a2a6e8b7aaa8d 100644 --- a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/sys.md +++ b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/sys.md @@ -4,51 +4,51 @@ ### 函数 -#### **sys.exit**(retval=0) +#### **sys.exit**(retval=0) 终止当前程序给定的退出代码。 函数会抛出 `SystemExit` 异常。 -#### **sys.print_exception**(exc, file=sys.stdout) +#### **sys.print_exception**(exc, file=sys.stdout) 打印异常与追踪到一个类似文件的对象 file (或者缺省 `sys.stdout` ). -> 提示:这是 CPython 中回溯模块的简化版本。不同于 `traceback.print_exception()`,这个函数用异常值代替了异常类型、异常参数和回溯对象。文件参数在对应位置,不支持更多参数。CPython 兼容回溯模块在 `micropython-lib`。 +> 提示:这是 CPython 中回溯模块的简化版本。不同于 `traceback.print_exception()`,这个函数用异常值代替了异常类型、异常参数和回溯对象。文件参数在对应位置,不支持更多参数。CPython 兼容回溯模块在 `micropython-lib`。 ### 常数 -#### **sys.argv** +#### **sys.argv** 当前程序启动时参数的可变列表。 -#### **sys.byteorder** +#### **sys.byteorder** 系统字节顺序 (“little” or “big”). -#### **sys.implementation** - 关于当前 Python 实现的信息,对于 MicroPython 来说,有以下属性: - - 名称 - ‘’micropython“ - - 版本 - 元组(主要,次要,小),比如(1,9,3) +#### **sys.implementation** + 关于当前 Python 实现的信息,对于 MicroPython 来说,有以下属性: + - 名称 - ‘’micropython“ + - 版本 - 元组(主要,次要,小),比如(1,9,3) -#### **sys.modules** +#### **sys.modules** 已加载模块的字典。在一部分移植中,它可能不包含内置模块。 -#### **sys.path** +#### **sys.path** 用来搜索导入模块地址的列表。 -#### **sys.platform** +#### **sys.platform** 返回当前平台的信息。 -#### **sys.stderr** +#### **sys.stderr** 标准错误流。 -#### **sys.stdin** +#### **sys.stdin** 标准输入流。 -#### **sys.stdout** +#### **sys.stdout** 标准输出流。 -#### **sys.version** +#### **sys.version** 符合的 Python 语言版本,如字符串。 -#### **sys.version_info** +#### **sys.version_info** 本次实现使用的 Python 语言版本,用一个元组的方式表示。 -### 示例 +### 示例 ``` >>> import sys diff --git a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/uarray.md b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/uarray.md index e352a082a79c194e676714665f0a96885be7d03d..0f658f3594e0ae1d5e35b219b180bfd75323c9e7 100644 --- a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/uarray.md +++ b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/uarray.md @@ -4,7 +4,7 @@ ### 构造函数 -#### **class array.array**(typecode[, iterable]) +#### **class array.array**(typecode[, iterable]) 用给定类型的元素创建数组。数组的初始内容由 iterable 提供,如果没有提供,则创建一个空数组。 ``` @@ -26,8 +26,8 @@ array('f') ### 方法 -#### **array.append**(val) -将一个新元素追加到数组的末尾。 +#### **array.append**(val) +将一个新元素追加到数组的末尾。 示例: @@ -40,8 +40,8 @@ array('f', [3.0, 6.0]) array('f', [3.0, 6.0, 7.0]) ``` -#### **array.extend**(iterable) -将一个新的数组追加到数组的末尾,注意追加的数组和原来数组的数据类型要保持一致。 +#### **array.extend**(iterable) +将一个新的数组追加到数组的末尾,注意追加的数组和原来数组的数据类型要保持一致。 示例: diff --git a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/ubinascii.md b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/ubinascii.md index 17ebf299a1fdf48dbd5b5f930f6bb53499eff1f4..0b32ab3a01a6404a24c8e3de547006ecbab01779 100644 --- a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/ubinascii.md +++ b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/ubinascii.md @@ -4,8 +4,8 @@ ### 函数 -#### **ubinascii.hexlify**(data[, sep]) -将字符串转换为十六进制表示的字符串。 +#### **ubinascii.hexlify**(data[, sep]) +将字符串转换为十六进制表示的字符串。 示例: @@ -15,12 +15,12 @@ b'68656c6c6f2052542d546872656164' >>> ubinascii.hexlify('summer') b'73756d6d6572' ``` -如果指定了第二个参数sep,它将用于分隔两个十六进制数。 +如果指定了第二个参数sep,它将用于分隔两个十六进制数。 示例: ``` -如果指定了第二个参数sep,它将用于分隔两个十六进制数。 +如果指定了第二个参数sep,它将用于分隔两个十六进制数。 示例: >>> ubinascii.hexlify('hello RT-Thread'," ") b'68 65 6c 6c 6f 20 52 54 2d 54 68 72 65 61 64' @@ -28,8 +28,8 @@ b'68 65 6c 6c 6f 20 52 54 2d 54 68 72 65 61 64' b'68,65,6c,6c,6f,20,52,54,2d,54,68,72,65,61,64' ``` -#### **ubinascii.unhexlify**(data) -转换十六进制字符串为二进制字符串,功能和 hexlify 相反。 +#### **ubinascii.unhexlify**(data) +转换十六进制字符串为二进制字符串,功能和 hexlify 相反。 示例: @@ -38,10 +38,10 @@ b'68,65,6c,6c,6f,20,52,54,2d,54,68,72,65,61,64' b'summer' ``` -#### **ubinascii.a2b_base64**(data) +#### **ubinascii.a2b_base64**(data) Base64编码的数据转换为二进制表示。返回字节串。 -#### **ubinascii.b2a_base64**(data) +#### **ubinascii.b2a_base64**(data) 编码base64格式的二进制数据。返回的字符串。 更多内容可参考 [ubinascii](http://docs.micropython.org/en/latest/pyboard/library/ubinascii.html) 。 diff --git a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/ucollections.md b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/ucollections.md index 7e68dbf6ff7b8a3f6103ef20839c788f652cb02b..2bcf1602507acfd27a27906df92eb9918f43d8f9 100644 --- a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/ucollections.md +++ b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/ucollections.md @@ -4,7 +4,7 @@ ### 类 -#### **ucollections.namedtuple**(name, fields) +#### **ucollections.namedtuple**(name, fields) 这是工厂函数创建一个新的 `namedtuple` 型与一个特定的字段名称和集合。`namedtuple` 是元组允许子类要访问它的字段不仅是数字索引,而且还具有属性使用符号字段名访问语法。 字段是字符串序列指定字段名称。为了兼容的实现也可以用空间分隔的字符串命名的字段(但效率较低) 。 代码示例: @@ -19,7 +19,7 @@ assert t2.name == t2[1] ucollections.OrderedDict(...) ``` -#### **ucollections.OrderedDict**(...) +#### **ucollections.OrderedDict**(...) 字典类型的子类,会记住并保留键/值的追加顺序。当有序的字典被迭代输出时,键/值 会按照他们被添加的顺序返回 : ```python diff --git a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/uctypes.md b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/uctypes.md index 810c0843e47fdbaf32b95ab06111134047626159..79a92172d787ef108b9dc45833eb35310217bdf6 100644 --- a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/uctypes.md +++ b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/uctypes.md @@ -37,8 +37,8 @@ b'1123' ### 方法 -#### **uctypes.sizeof**(struct) -按字节返回数据的大小。参数可以是类或者数据对象 (或集合)。 +#### **uctypes.sizeof**(struct) +按字节返回数据的大小。参数可以是类或者数据对象 (或集合)。 示例: ```python >>> a = b"0123" @@ -49,8 +49,8 @@ b'1123' 3 ``` -#### **uctypes.addressof**(obj) -返回对象地址。参数需要是 bytes, bytearray 。 +#### **uctypes.addressof**(obj) +返回对象地址。参数需要是 bytes, bytearray 。 示例: ```python @@ -59,8 +59,8 @@ b'1123' 1073504048 ``` -#### **uctypes.bytes_at**(addr, size) -捕捉从 addr 开始到 size 个地址偏移量结束的内存数据为 bytearray 对象并返回。 +#### **uctypes.bytes_at**(addr, size) +捕捉从 addr 开始到 size 个地址偏移量结束的内存数据为 bytearray 对象并返回。 示例: ```python @@ -69,8 +69,8 @@ b'1123' b'0123' ``` -#### **uctypes.bytearray_at**(addr, size) -捕捉给定大小和地址内存为 bytearray 对象。与 bytes_at() 函数不同的是,它可以被再次写入,可以访问给定地址的参数。 +#### **uctypes.bytearray_at**(addr, size) +捕捉给定大小和地址内存为 bytearray 对象。与 bytes_at() 函数不同的是,它可以被再次写入,可以访问给定地址的参数。 示例: ```python diff --git a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/uhashlib.md b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/uhashlib.md index 93f359f3210b8a28bf8ef0dbc3da7ab117f0729d..c2f77c66dcef71a0daf7a489c80a92d76ff8df9a 100644 --- a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/uhashlib.md +++ b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/uhashlib.md @@ -4,33 +4,33 @@ ### 算法功能 -#### **SHA256** +#### **SHA256** 当代的散列算法(SHA2系列),它适用于密码安全的目的。被包含在 MicroPython 内核中,除非有特定的代码大小限制,否则推荐任何开发板都支持这个功能。 #### **SHA1** 上一代的算法,不推荐新的应用使用这种算法,但是 SHA1 算法是互联网标准和现有应用程序的一部分,所以针对网络连接便利的开发板会提供这种功能。 -#### **MD5** +#### **MD5** 一种遗留下来的算法,作为密码使用被认为是不安全的。只有特定的开发板,为了兼容老的应用才会提供这种算法。 ### 函数 -#### **class uhashlib.sha256**([data]) +#### **class uhashlib.sha256**([data]) 创建一个SHA256哈希对象并提供 data 赋值。 -#### **class uhashlib.sha1**([data]) +#### **class uhashlib.sha1**([data]) 创建一个SHA1哈希对象并提供 data 赋值。 -#### **class uhashlib.md5**([data]) +#### **class uhashlib.md5**([data]) 创建一个MD5哈希对象并提供 data 赋值。 -#### **hash.update**(data) +#### **hash.update**(data) 将更多二进制数据放入哈希表中。 -#### **hash.digest**() +#### **hash.digest**() 返回字节对象哈希的所有数据。调用此方法后,将无法将更多数据送入哈希。 -#### **hash.hexdigest**() +#### **hash.hexdigest**() 此方法没有实现, 使用 ubinascii.hexlify(hash.digest()) 达到类似效果。 更多内容可参考 [uhashlib](http://docs.micropython.org/en/latest/pyboard/library/uhashlib.html) 。 diff --git a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/uheapq.md b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/uheapq.md index be7dfdad9a1b64ff2a0d0fcf97110052ec955041..219a7f76949cb44dfdf9aed59d819d738310a166 100644 --- a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/uheapq.md +++ b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/uheapq.md @@ -4,13 +4,13 @@ ### 函数 -#### **uheapq.heappush**(heap, item) +#### **uheapq.heappush**(heap, item) 将对象压入堆中。 -#### **uheapq.heappop**(heap) +#### **uheapq.heappop**(heap) 从 heap 弹出第一个元素并返回。 如果是堆时空的会抛出 IndexError。 -#### **uheapq.heapify**(x) +#### **uheapq.heapify**(x) 将列表 x 转换成堆。 更多内容可参考 [uheapq](http://docs.micropython.org/en/latest/pyboard/library/uheapq.html) 。 diff --git a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/uio.md b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/uio.md index 6f5476e208d44f8e147ada33bff8a6427cbb2e79..32cbcdf38796b413e573d1989266df5f7a3278ba 100644 --- a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/uio.md +++ b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/uio.md @@ -13,15 +13,15 @@ #### **class uio.FileIO**(...) 这个文件类型用二进制方式打开文件,等于使用``open(name, “rb”)``。 不应直接使用这个实例。 -#### **class uio.TextIOWrapper**(...) +#### **class uio.TextIOWrapper**(...) 这个类型以文本方式打开文件,等同于使用``open(name, “rt”)``不应直接使用这个实例。 -#### **class uio.StringIO**([string]) +#### **class uio.StringIO**([string]) -#### **class uio.BytesIO**([string]) +#### **class uio.BytesIO**([string]) 内存文件对象。`StringIO` 用于文本模式 I/O (用 “t” 打开文件),`BytesIO` 用于二进制方式 (用 “b” 方式)。文件对象的初始内容可以用字符串参数指定(`stringio`用普通字符串,`bytesio`用`bytes`对象)。所有的文件方法,如 `read(), write(), seek(), flush(), close()` 都可以用在这些对象上,包括下面方法: -#### **getvalue**() +#### **getvalue**() 获取缓存区内容。 更多内容可参考 [uio](http://docs.micropython.org/en/latest/pyboard/library/uio.html) 。 diff --git a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/ujson.md b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/ujson.md index fd8ecb8f726e2dba7087a98e45b8a921e2b0889d..efc2b30ad7b0b029965302d7b7d2f011880b7061 100644 --- a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/ujson.md +++ b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/ujson.md @@ -4,7 +4,7 @@ ### 函数 -#### **ujson.dumps**(obj) +#### **ujson.dumps**(obj) 将 dict 类型转换成 str。 @@ -23,8 +23,8 @@ obj:要转换的对象 {3: 4, 1: 2, "a": 6} ``` -#### **ujson.loads**(str) -解析 JSON 字符串并返回对象。如果字符串格式错误将引发 ValueError 异常。 +#### **ujson.loads**(str) +解析 JSON 字符串并返回对象。如果字符串格式错误将引发 ValueError 异常。 示例: ``` diff --git a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/uos.md b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/uos.md index 73f270d5bc8195b0336d9e6ca6f70051b913286f..9fdb190ab543c137ea26fea4a3c28227de5e05ea 100644 --- a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/uos.md +++ b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/uos.md @@ -4,38 +4,38 @@ ### 函数 -#### **uos.chdir**(path) +#### **uos.chdir**(path) 更改当前目录。 -#### **uos.getcwd**() +#### **uos.getcwd**() 获取当前目录。 #### **uos.listdir**([dir]) 没有参数就列出当前目录,否则列出给定目录。 -#### **uos.mkdir**(path) +#### **uos.mkdir**(path) 创建一个目录。 -#### **uos.remove**(path) +#### **uos.remove**(path) 删除文件。 -#### **uos.rmdir**(path) +#### **uos.rmdir**(path) 删除目录。 -#### **uos.rename**(old_path, new_path) +#### **uos.rename**(old_path, new_path) 重命名文件或者文件夹。 -#### **uos.stat**(path) +#### **uos.stat**(path) 获取文件或目录的状态。 -#### **uos.sync**() +#### **uos.sync**() 同步所有的文件系统。 ### 示例 ``` >>> import uos ->>> uos. # Tab +>>> uos. # Tab __name__ uname chdir getcwd listdir mkdir remove rmdir stat unlink mount umount @@ -50,7 +50,7 @@ stat unlink mount umount >>> uos.rmdir("11") >>> uos.listdir() ['web_root', 'rtthread'] ->>> +>>> ``` 更多内容可参考 [uos](http://docs.micropython.org/en/latest/pyboard/library/uos.html) 。 diff --git a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/urandom.md b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/urandom.md index 794b56a36ab7701739402384e5068dd2e3faf13b..6488221e7de8e3726699ff547c3356ba5e334d40 100644 --- a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/urandom.md +++ b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/urandom.md @@ -2,9 +2,9 @@ `urandom` 模块实现了伪随机数生成器。 -### 函数 +### 函数 -#### **urandom.choice**(obj) +#### **urandom.choice**(obj) 随机生成对象 obj 中的元数。 @@ -27,11 +27,11 @@ D 2 ``` -#### **urandom.getrandbits**(size) +#### **urandom.getrandbits**(size) 随机生成 0 到 size 个位二进制数范围内的正整数。 比如 : -- size = 4,那么便是从 0 到0b1111中随机一个正整数。 +- size = 4,那么便是从 0 到0b1111中随机一个正整数。 - size = 8,那么便是从 0 到 0b11111111中随机一个正整数。 ```python @@ -51,9 +51,9 @@ size:位大小 155 ``` -#### **urandom.randint**(start, end) +#### **urandom.randint**(start, end) -随机生成一个 start 到 end 之间的整数。 +随机生成一个 start 到 end 之间的整数。 ``` start:指定范围内的开始值,包含在范围内 @@ -70,8 +70,8 @@ end:指定范围内的结束值,包含在范围内 2 ``` -#### **urandom.random**() -随机生成一个 0 到 1 之间的浮点数。 +#### **urandom.random**() +随机生成一个 0 到 1 之间的浮点数。 示例: ```python @@ -81,7 +81,7 @@ end:指定范围内的结束值,包含在范围内 0.3168149 ``` -#### **urandom.randrange**(start, end, step) +#### **urandom.randrange**(start, end, step) 随机生成 start 到 end 并且递增为 step 的范围内的正整数。例如,randrange(0, 8, 2)中,随机生成的数为 0、2、4、6 中任一个。 @@ -102,10 +102,10 @@ step:递增基数 2 ``` -#### **urandom.seed**(sed) +#### **urandom.seed**(sed) -指定随机数种子,通常和其他随机数生成函数搭配使用。 -**注意:** +指定随机数种子,通常和其他随机数生成函数搭配使用。 +**注意:** MicroPython 中的随机数其实是一个稳定算法得出的稳定结果序列,而不是一个随机序列。sed 就是这个算法开始计算的第一个值。所以就会出现只要 sed 是一样的,那么后续所有“随机”结果和顺序也都完全一致。 ``` @@ -153,7 +153,7 @@ end 从上面可以看到生成两个随机数列表是一样的,你也可以多生成几个随机数列表查看结果。 -#### **urandom.uniform**(start, end) +#### **urandom.uniform**(start, end) 随机生成start到end之间的浮点数。 diff --git a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/ure.md b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/ure.md index 7c8805f6fbcf9ebf581903bb1ebe7ce1fe2d08b7..4d13c098d7758185fd9198d377a6e2cf597876e3 100644 --- a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/ure.md +++ b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/ure.md @@ -24,29 +24,29 @@ ### 函数 -#### **ure.compile**(regex) +#### **ure.compile**(regex) 编译正则表达式,返回 regex 对象。 -#### **ure.match**(regex, string) +#### **ure.match**(regex, string) 用 string 匹配 regex,匹配总是从字符串的开始匹配。 -#### **ure.search**(regex, string) +#### **ure.search**(regex, string) 在 string 中搜索 regex。不同于匹配,它搜索第一个匹配位置的正则表达式字符串 (结果可能会是0)。 -#### **ure.DEBUG** +#### **ure.DEBUG** 标志值,显示表达式的调试信息。 ### **正则表达式对象**: 编译正则表达式,使用 `ure.compile()` 创建实例。 -#### **regex.match**(string) -#### **regex.search**(string) -#### **regex.split**(string, max_split=-1) +#### **regex.match**(string) +#### **regex.search**(string) +#### **regex.split**(string, max_split=-1) ### **匹配对象** : 匹配对象是 match() 和 search() 方法的返回值。 -#### **match.group**([index]) +#### **match.group**([index]) 只支持数字组。 更多内容可参考 [ure](http://docs.micropython.org/en/latest/pyboard/library/ure.html) 。 diff --git a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/uselect.md b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/uselect.md index 0743c5c5d5fba088cfcb471dd532dbafa20cd18e..c201cd8c6c460272f57393de705388bed7310fb4 100644 --- a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/uselect.md +++ b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/uselect.md @@ -4,17 +4,17 @@ ### 常数 -#### **select.POLLIN** - 读取可用数据 +#### **select.POLLIN** - 读取可用数据 -#### **select.POLLOUT** - 写入更多数据 +#### **select.POLLOUT** - 写入更多数据 -#### **select.POLLERR** - 发生错误 +#### **select.POLLERR** - 发生错误 -#### **select.POLLHUP** - 流结束/连接终止检测 +#### **select.POLLHUP** - 流结束/连接终止检测 ### 函数 -#### **select.select**(rlist, wlist, xlist[, timeout]) +#### **select.select**(rlist, wlist, xlist[, timeout]) 监控对象何时可读或可写,一旦监控的对象状态改变,返回结果(阻塞线程)。这个函数是为了兼容,效率不高,推荐用 `poll` 函数 。 ``` @@ -40,7 +40,7 @@ def selectTest(): ### Poll 类 -#### **select.poll**() +#### **select.poll**() 创建 poll 实例。 示例: @@ -51,8 +51,8 @@ def selectTest(): ``` -#### **poll.register**(obj[, eventmask]) -注册一个用以监控的对象,并设置被监控对象的监控标志位 flag。 +#### **poll.register**(obj[, eventmask]) +注册一个用以监控的对象,并设置被监控对象的监控标志位 flag。 ``` obj:被监控的对象 @@ -63,8 +63,8 @@ flag:被监控的标志 select.POLLOUT — 可写 ``` -#### **poll.unregister**(obj) -解除监控的对象的注册。 +#### **poll.unregister**(obj) +解除监控的对象的注册。 ``` obj:注册过的对象 @@ -79,8 +79,8 @@ obj:注册过的对象 >>>poller.unregister(s) ``` -#### **poll.modify**(obj, eventmask) -修改已注册的对象监控标志。 +#### **poll.modify**(obj, eventmask) +修改已注册的对象监控标志。 ``` obj:已注册的被监控对象 @@ -96,7 +96,7 @@ flag:修改为的监控标志 >>>poller.modify(s, READ_ONLY) ``` -#### **poll.poll**([timeout]) +#### **poll.poll**([timeout]) 等待至少一个已注册的对象准备就绪。返回 (obj, event, ...) 元组, event 元素指定了一个流发生的事件,是上面所描述的 `select.POLL*`常量组合。 根据平台和版本的不同,在元组中可能有其他元素,所以不要假定元组的大小是 2 。如果超时,则返回空列表。 更多内容可参考 [uselect](http://docs.micropython.org/en/latest/pyboard/library/uselect.html) 。 diff --git a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/usocket.md b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/usocket.md index 0413e449c4a8ccc937a44a6d4a7d9a1ff0f44ddc..e6a08c794d194b627de08bbc93cddde1890fd4c4 100644 --- a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/usocket.md +++ b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/usocket.md @@ -1,6 +1,6 @@ ## **usocket** – 套接字模块 -`usocket` 模块提供对BSD套接字接口的访问。 +`usocket` 模块提供对BSD套接字接口的访问。 ### 常数 @@ -25,11 +25,11 @@ #### **socket.socket** -`socket.socket(socket.AF_INET, socket.SOCK_STREAM, socket.IPPROTO_TCP)` +`socket.socket(socket.AF_INET, socket.SOCK_STREAM, socket.IPPROTO_TCP)` 创建新的套接字,使用指定的地址、类型和协议号。 -#### **socket.getaddrinfo**(host, port) +#### **socket.getaddrinfo**(host, port) 将主机域名(host)和端口(port)转换为用于创建套接字的5元组序列。元组列表的结构如下: ``` @@ -44,21 +44,21 @@ [(2, 1, 0, '', ('118.31.15.152', 10000))] ``` -#### **socket.close**() +#### **socket.close**() 关闭套接字。一旦关闭后,套接字所有的功能都将失效。远端将接收不到任何数据 (清理队列数据后)。 虽然在垃圾回收时套接字会自动关闭,但还是推荐在必要时用 close() 去关闭。 -#### **socket.bind**(address) +#### **socket.bind**(address) 将套接字绑定到地址,套接字不能是已经绑定的。 -#### **socket.listen**([backlog]) +#### **socket.listen**([backlog]) 监听套接字,使服务器能够接收连接。 ``` backlog:接受套接字的最大个数,至少为0,如果没有指定,则默认一个合理值。 ``` -#### **socket.accept**() -接收连接请求。 -**注意:** +#### **socket.accept**() +接收连接请求。 +**注意:** 只能在绑定地址端口号和监听后调用,返回 conn 和 address。 ``` @@ -66,21 +66,21 @@ conn:新的套接字对象,可以用来收发消息 address:连接到服务器的客户端地址 ``` -#### **socket.connect**(address) +#### **socket.connect**(address) 连接服务器。 ``` address:服务器地址和端口号的元组或列表 ``` -#### **socket.send**(bytes) +#### **socket.send**(bytes) 发送数据,并返回成功发送的字节数,返回字节数可能比发送的数据长度少。 ``` bytes:bytes类型数据 ``` -#### **socket.recv**(bufsize) +#### **socket.recv**(bufsize) 接收数据,返回接收到的数据对象。 ``` @@ -93,7 +93,7 @@ bufsize:指定一次接收的最大数据量 data = conn.recv(1024) ``` -#### **socket.sendto**(bytes, address) +#### **socket.sendto**(bytes, address) 发送数据,目标由address决定,常用于UDP通信,返回发送的数据大小。 ``` @@ -107,7 +107,7 @@ address:目标地址和端口号的元组 data = sendto("hello RT-Thread", ("192.168.10.110", 100)) ``` -#### **socket.recvfrom**(bufsize) +#### **socket.recvfrom**(bufsize) 接收数据,常用于UDP通信,并返回接收到的数据对象和对象的地址。 ``` @@ -120,7 +120,7 @@ bufsize:指定一次接收的最大数据量 data,addr=fd.recvfrom(1024) ``` -#### **socket.setsockopt**(level, optname, value) +#### **socket.setsockopt**(level, optname, value) 根据选项值设置套接字。 ``` @@ -135,42 +135,42 @@ value:可以是一个整数,也可以是一个表示缓冲区的bytes类对 s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) ``` -#### **socket.settimeout**(value) -设置超时时间,单位:秒。 +#### **socket.settimeout**(value) +设置超时时间,单位:秒。 示例: ``` s.settimeout(2) ``` -#### **socket.setblocking**(flag) +#### **socket.setblocking**(flag) 设置阻塞或非阻塞模式: 如果 flag 是 false,设置非阻塞模式。 -#### **socket.read**([size]) +#### **socket.read**([size]) Read up to size bytes from the socket. Return a bytes object. If size is not given, it reads all data available from the socket until EOF; as such the method will not return until the socket is closed. This function tries to read as much data as requested (no “short reads”). This may be not possible with non-blocking socket though, and then less data will be returned. -#### **socket.readinto**(buf[, nbytes]) +#### **socket.readinto**(buf[, nbytes]) Read bytes into the buf. If nbytes is specified then read at most that many bytes. Otherwise, read at most len(buf) bytes. Just as read(), this method follows “no short reads” policy. Return value: number of bytes read and stored into buf. -#### **socket.readline**() -接收一行数据,遇换行符结束,并返回接收数据的对象 。 +#### **socket.readline**() +接收一行数据,遇换行符结束,并返回接收数据的对象 。 -#### **socket.write**(buf) -将字节类型数据写入套接字,并返回写入成功的数据大小。 +#### **socket.write**(buf) +将字节类型数据写入套接字,并返回写入成功的数据大小。 ### 示例 #### TCP Server example ``` ->>> import usocket +>>> import usocket >>> s = usocket.socket(usocket.AF_INET,usocket.SOCK_STREAM) # Create STREAM TCP socket ->>> s.bind(('192.168.12.32', 6001)) +>>> s.bind(('192.168.12.32', 6001)) >>> s.listen(5) >>> s.setblocking(True) ->>> sock,addr=s.accept() ->>> sock.recv(10) +>>> sock,addr=s.accept() +>>> sock.recv(10) b'rt-thread\r' >>> s.close() ``` @@ -178,10 +178,10 @@ b'rt-thread\r' #### TCP Client example ``` ->>> import usocket +>>> import usocket >>> s = usocket.socket(usocket.AF_INET,usocket.SOCK_STREAM) ->>> s.connect(("192.168.10.110",6000)) ->>> s.send("micropython") +>>> s.connect(("192.168.10.110",6000)) +>>> s.send("micropython") 11 >>> s.close() ``` diff --git a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/ussl.md b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/ussl.md index 6351659e7e2c155bd5544ae79956a0d55310e16e..5f699294d2b62ad2eaecb371c47c506ca0563f8b 100644 --- a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/ussl.md +++ b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/ussl.md @@ -25,4 +25,4 @@ Warning: Some implementations of `ussl` module do NOT validate server certificat - `ussl.CERT_OPTIONAL` - `ussl.CERT_REQUIRED` -- Supported values for **cert_reqs** parameter. \ No newline at end of file +- Supported values for **cert_reqs** parameter. diff --git a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/ustruct.md b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/ustruct.md index 18cff7209c9592f7670dbe02697767fcb539cebb..903ecbf27c259af03a60233ecacfd4a62310e747 100644 --- a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/ustruct.md +++ b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/ustruct.md @@ -7,7 +7,7 @@ ### 函数 -#### **ustruct.calcsize**(fmt) +#### **ustruct.calcsize**(fmt) 返回存放某一类型数据 fmt 需要的字节数。 ``` @@ -36,7 +36,7 @@ fmt:数据类型 1 ``` -#### **ustruct.pack**(fmt, v1, v2, ...) +#### **ustruct.pack**(fmt, v1, v2, ...) 按照格式字符串 fmt 打包参数 v1, v2, ... 。返回值是参数打包后的字节对象。 ``` @@ -50,7 +50,7 @@ fmt:同上 b'\x03\x00\x00\x00\x02\x00\x00\x00' ``` -#### **ustruct.unpack**(fmt, data) +#### **ustruct.unpack**(fmt, data) 从 fmt 中解包数据。返回值是解包后参数的元组。 ``` @@ -67,10 +67,10 @@ b'\x01\x02' (1, 2) ``` -#### **ustruct.pack_into**(fmt, buffer, offset, v1, v2, ...) -按照格式字符串 fmt 压缩参数 v1, v2, ... 到缓冲区 buffer,开始位置是 offset。当offset 为负数时,从缓冲区末尾开始计数。 +#### **ustruct.pack_into**(fmt, buffer, offset, v1, v2, ...) +按照格式字符串 fmt 压缩参数 v1, v2, ... 到缓冲区 buffer,开始位置是 offset。当offset 为负数时,从缓冲区末尾开始计数。 -#### **ustruct.unpack_from**(fmt, data, offset=0) +#### **ustruct.unpack_from**(fmt, data, offset=0) 以 fmt 作为规则从 data 的 offset 位置开始解包数据,如果 offset 是负数就是从缓冲区末尾开始计算。返回值是解包后的参数元组。 ```python >>> buf = struct.pack("bb", 1, 2) diff --git a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/utime.md b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/utime.md index 38ec6c5182b5b642d17467aa585e54f0ef23d5d7..a629749309744284122bf39e53e8235a3430ce3e 100644 --- a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/utime.md +++ b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/utime.md @@ -17,7 +17,7 @@ utime 模块提供获取当前时间和日期、测量时间间隔和延迟的 #### utime.localtime([secs]) - 从初始时间的秒转换为元组: (年, 月, 日, 时, 分, 秒, 星期, `yearday`) 。如果 `secs` 是空或者 `None`,那么使用当前时间。 + 从初始时间的秒转换为元组: (年, 月, 日, 时, 分, 秒, 星期, `yearday`) 。如果 `secs` 是空或者 `None`,那么使用当前时间。 * `year` 年份包括世纪(例如2014) * `month` 范围 1-12 @@ -46,7 +46,7 @@ utime 模块提供获取当前时间和日期、测量时间间隔和延迟的 #### utime.ticks_ms() - 返回不断递增的毫秒计数器,在某些值后会重新计数(未指定)。计数值本身无特定意义,只适合用在``ticks_diff()``。 + 返回不断递增的毫秒计数器,在某些值后会重新计数(未指定)。计数值本身无特定意义,只适合用在``ticks_diff()``。 注: 直接在这些值上执行标准数学运算(+,-)或关系运算符(<,>,>,> =)会导致无效结果。执行数学运算然后传递结果作为参数给`ticks_diff()` 或 ` ticks_add() ` 也将导致函数产生无效结果。 #### utime.ticks_us() diff --git a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/uzlib.md b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/uzlib.md index 4be9fe0af853294e14ae77e333795cc0ff4b5688..cc4dfe8e496f3478ff2dca71fc90cc95afd17721 100644 --- a/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/uzlib.md +++ b/rt-thread-version/rt-thread-standard/packages-manual/micropython-docs/std-librarys/uzlib.md @@ -4,7 +4,7 @@ ### 函数 -#### **uzlib.decompress**(data) +#### **uzlib.decompress**(data) 返回解压后的 bytes 数据。 更多内容可参考 [uzlib](http://docs.micropython.org/en/latest/pyboard/library/uzlib.html) 。 diff --git a/rt-thread-version/rt-thread-standard/packages-manual/more.md b/rt-thread-version/rt-thread-standard/packages-manual/more.md index e2b279ad23ce56c75fffc6ea08b84f08e82dae29..ee2c1e0eb57b3394962537e70cc651d24cfe19d3 100644 --- a/rt-thread-version/rt-thread-standard/packages-manual/more.md +++ b/rt-thread-version/rt-thread-standard/packages-manual/more.md @@ -118,4 +118,4 @@ RT-Thread上的音视频软件包 | [tinycrypt](http://packages.rt-thread.org/detail.html?package=tinycrypt) | 一个简小并且可配置的加解密软件包 | | [yd_crypto](http://packages.rt-thread.org/detail.html?package=yd_crypto) | 用于微控制器的加解密算法库,平台无关、算法独立、易移植、易使用。 | -[更多安全相关软件包...](http://packages.rt-thread.org/search.html?classify=security) \ No newline at end of file +[更多安全相关软件包...](http://packages.rt-thread.org/search.html?classify=security) diff --git a/rt-thread-version/rt-thread-standard/programming-manual/at/at.md b/rt-thread-version/rt-thread-standard/programming-manual/at/at.md index 64ea5b19fc3164a7b20084f219e54d768f4f1e89..adbb8edb93220f3afcab7a8d3affdd01953f207c 100644 --- a/rt-thread-version/rt-thread-standard/programming-manual/at/at.md +++ b/rt-thread-version/rt-thread-standard/programming-manual/at/at.md @@ -868,7 +868,7 @@ at_obj_exec_cmd(client, resp, "AT+CIFSR"); at_delete_resp(resp); ``` -其他函数使用的流程区别类似于上述 `at_obj_exec_cmd()` 函数,主要是先通过 `at_client_get()` 函数获取客户端对象,再通过传入的对象判断是哪个客户端,实现多客户端的支持。 +其他函数使用的流程区别类似于上述 `at_obj_exec_cmd()` 函数,主要是先通过 `at_client_get()` 函数获取客户端对象,再通过传入的对象判断是哪个客户端,实现多客户端的支持。 ## 常见问题 @@ -882,4 +882,4 @@ at_delete_resp(resp); ### Q: AT Socket 功能数据接收超时或者数据接收不全? -**A:** 该错误可能是 AT 使用的串口设备中接收数据缓冲区过小(RT_SERIAL_RB_BUFSZ 默认为 64 bytes),数据未及时接收完就被覆盖导致的,适当增加串口接收数据的缓冲区大小(如 256 bytes)。 \ No newline at end of file +**A:** 该错误可能是 AT 使用的串口设备中接收数据缓冲区过小(RT_SERIAL_RB_BUFSZ 默认为 64 bytes),数据未及时接收完就被覆盖导致的,适当增加串口接收数据的缓冲区大小(如 256 bytes)。 diff --git a/rt-thread-version/rt-thread-standard/programming-manual/basic/basic.md b/rt-thread-version/rt-thread-standard/programming-manual/basic/basic.md index c4de4547d66994ad53ae17f4d78ca1d16efbb59c..8c6d6a141b4be6e341658af694cf573eafe98abb 100644 --- a/rt-thread-version/rt-thread-standard/programming-manual/basic/basic.md +++ b/rt-thread-version/rt-thread-standard/programming-manual/basic/basic.md @@ -308,7 +308,7 @@ void thread1_entry(void* parameter) for (i = 0; i < 10; i ++) { rt_kprintf("%d\n", i); - + /* 延时 100ms */ rt_thread_mdelay(100); } @@ -344,10 +344,10 @@ int thread_sample_init() thread1_entry, RT_NULL, &thread1_stack[0], sizeof(thread1_stack), 200, 10); - + /* 启动线程 */ if (result == RT_EOK) rt_thread_startup(&thread1); - + /* 创建线程 2 */ /* 线程的入口是 thread2_entry, 参数是 RT_NULL * 栈空间是 512,优先级是 250,时间片是 25 个 OS Tick @@ -355,10 +355,10 @@ int thread_sample_init() thread2_ptr = rt_thread_create("thread2", thread2_entry, RT_NULL, 512, 250, 25); - + /* 启动线程 */ if (thread2_ptr != RT_NULL) rt_thread_startup(thread2_ptr); - + return 0; } ``` diff --git a/rt-thread-version/rt-thread-standard/programming-manual/device/adc/adc.md b/rt-thread-version/rt-thread-standard/programming-manual/device/adc/adc.md index 40c907ddc5da4088affbec20a82f6e0681d8aa8b..9341a269997603feae2ec09a6b80a0bf0ea3225b 100644 --- a/rt-thread-version/rt-thread-standard/programming-manual/device/adc/adc.md +++ b/rt-thread-version/rt-thread-standard/programming-manual/device/adc/adc.md @@ -58,8 +58,8 @@ rt_device_t rt_device_find(const char* name); 一般情况下,注册到系统的 ADC 设备名称为 adc0,adc1等,使用示例如下所示: ```c -#define ADC_DEV_NAME "adc1" /* ADC 设备名称 */ -rt_adc_device_t adc_dev; /* ADC 设备句柄 */ +#define ADC_DEV_NAME "adc1" /* ADC 设备名称 */ +rt_adc_device_t adc_dev; /* ADC 设备句柄 */ /* 查找设备 */ adc_dev = (rt_adc_device_t)rt_device_find(ADC_DEV_NAME); ``` @@ -84,9 +84,9 @@ rt_err_t rt_adc_enable(rt_adc_device_t dev, rt_uint32_t channel); 使用示例如下所示: ```c -#define ADC_DEV_NAME "adc1" /* ADC 设备名称 */ +#define ADC_DEV_NAME "adc1" /* ADC 设备名称 */ #define ADC_DEV_CHANNEL 5 /* ADC 通道 */ -rt_adc_device_t adc_dev; /* ADC 设备句柄 */ +rt_adc_device_t adc_dev; /* ADC 设备句柄 */ /* 查找设备 */ adc_dev = (rt_adc_device_t)rt_device_find(ADC_DEV_NAME); /* 使能设备 */ @@ -111,12 +111,12 @@ rt_uint32_t rt_adc_read(rt_adc_device_t dev, rt_uint32_t channel); 使用 ADC 采样电压值的使用示例如下所示: ```c -#define ADC_DEV_NAME "adc1" /* ADC 设备名称 */ +#define ADC_DEV_NAME "adc1" /* ADC 设备名称 */ #define ADC_DEV_CHANNEL 5 /* ADC 通道 */ #define REFER_VOLTAGE 330 /* 参考电压 3.3V,数据精度乘以100保留2位小数*/ #define CONVERT_BITS (1 << 12) /* 转换位数为12位 */ -rt_adc_device_t adc_dev; /* ADC 设备句柄 */ +rt_adc_device_t adc_dev; /* ADC 设备句柄 */ rt_uint32_t value; /* 查找设备 */ adc_dev = (rt_adc_device_t)rt_device_find(ADC_DEV_NAME); @@ -151,9 +151,9 @@ rt_err_t rt_adc_disable(rt_adc_device_t dev, rt_uint32_t channel); 使用示例如下所示: ```c -#define ADC_DEV_NAME "adc1" /* ADC 设备名称 */ +#define ADC_DEV_NAME "adc1" /* ADC 设备名称 */ #define ADC_DEV_CHANNEL 5 /* ADC 通道 */ -rt_adc_device_t adc_dev; /* ADC 设备句柄 */ +rt_adc_device_t adc_dev; /* ADC 设备句柄 */ rt_uint32_t value; /* 查找设备 */ adc_dev = (rt_adc_device_t)rt_device_find(ADC_DEV_NAME); @@ -268,4 +268,4 @@ MSH_CMD_EXPORT(adc_vol_sample, adc voltage convert sample); ### Q: menuconfig 找不到 ADC 设备的配置选项? **A:** 使用的源代码还不支持 ADC 设备驱动框架。建议更新源代码。 - \ No newline at end of file + diff --git a/rt-thread-version/rt-thread-standard/programming-manual/device/audio/audio.md b/rt-thread-version/rt-thread-standard/programming-manual/device/audio/audio.md index 0419382f58ed5f5628b2981ccf17e25499354233..6234841849949a83445f0b9c3d2061a54e7b0a8e 100644 --- a/rt-thread-version/rt-thread-standard/programming-manual/device/audio/audio.md +++ b/rt-thread-version/rt-thread-standard/programming-manual/device/audio/audio.md @@ -139,7 +139,7 @@ caps.udata.config.samplerate = 44100; /* 采样率 */ caps.udata.config.channels = 2; /* 采样通道 */ caps.udata.config.samplebits = 16; /* 采样位数 */ rt_device_control(device, AUDIO_CTL_CONFIGURE, &caps); - + ``` #### 设置播放的主音量 @@ -169,7 +169,7 @@ caps.udata.config.samplerate = 44100; /* 采样率 */ caps.udata.config.channels = 2; /* 采样通道 */ caps.udata.config.samplebits = 16; /* 采样位数 */ rt_device_control(device, AUDIO_CTL_CONFIGURE, &caps); - + ``` #### 设置录音的主音量 diff --git a/rt-thread-version/rt-thread-standard/programming-manual/device/crypto/crypto.md b/rt-thread-version/rt-thread-standard/programming-manual/device/crypto/crypto.md index 2252444e94c4b5d3a1046673b062a33726ba321f..b8e4de37896de78f2af582a2cf4982f6dc97156d 100644 --- a/rt-thread-version/rt-thread-standard/programming-manual/device/crypto/crypto.md +++ b/rt-thread-version/rt-thread-standard/programming-manual/device/crypto/crypto.md @@ -93,7 +93,7 @@ hash 算法常用类型及子类型如下 HWCRYPTO_TYPE_SHA256 = HWCRYPTO_TYPE_SHA2 | (0x02 << 8), HWCRYPTO_TYPE_SHA384 = HWCRYPTO_TYPE_SHA2 | (0x03 << 8), HWCRYPTO_TYPE_SHA512 = HWCRYPTO_TYPE_SHA2 | (0x04 << 8), - + ``` 如果创建 MD5 类型的 hash 算法,使用示例如下 @@ -227,7 +227,7 @@ rt_err_t rt_hwcrypto_hash_set_type(struct rt_hwcrypto_ctx *ctx, hwcrypto_type ty | 其他 | 失败 | - 常用 hash 算法类型,参考创建 hash 上下文中类型介绍 -- 设置类型仅在数据运算之前有效,运算中途更改类型,将导致运算结果错误 +- 设置类型仅在数据运算之前有效,运算中途更改类型,将导致运算结果错误 ## 对称加解密算法 @@ -853,7 +853,7 @@ void rt_hwcrypto_crc_destroy(struct rt_hwcrypto_ctx *ctx); 应用程序根据 CRC 的上下文、输入数据及其长度,计算 CRC 计算结果,如下所示: ```c -rt_uint32_t rt_hwcrypto_crc_update(struct rt_hwcrypto_ctx *ctx, +rt_uint32_t rt_hwcrypto_crc_update(struct rt_hwcrypto_ctx *ctx, const rt_uint8_t *input, rt_size_t length); ``` @@ -871,7 +871,7 @@ rt_uint32_t rt_hwcrypto_crc_update(struct rt_hwcrypto_ctx *ctx, 应用程序根据 CRC 的上下文与配置信息,并且释放资源,如下所示: ```c -void rt_hwcrypto_crc_cfg(struct rt_hwcrypto_ctx *ctx, +void rt_hwcrypto_crc_cfg(struct rt_hwcrypto_ctx *ctx, struct hwcrypto_crc_cfg *cfg); ``` @@ -924,13 +924,13 @@ int main(void) .flags = 0, }; - /* 创建设备的上下文 */ - ctx = rt_hwcrypto_crc_create(rt_hwcrypto_dev_default(), HWCRYPTO_CRC_CRC32);/* 设置 CRC 配置 */ + /* 创建设备的上下文 */ + ctx = rt_hwcrypto_crc_create(rt_hwcrypto_dev_default(), HWCRYPTO_CRC_CRC32);/* 设置 CRC 配置 */ rt_hwcrypto_crc_cfg(ctx, &cfg); /* 输入数据,获取其 CRC 计算值 */ result = rt_hwcrypto_crc_update(ctx, temp, sizeof(temp)); /* 打印结果 */ - rt_kprintf("result: %x \n", result); + rt_kprintf("result: %x \n", result); /* 释放 ctx */ rt_hwcrypto_crc_destroy(ctx); } @@ -967,19 +967,19 @@ rt_uint32_t rt_hwcrypto_rng_update(void); ```c void hw_rng(void) { - rt_uint32_t result=0; - int i, num0=0, num1 =0; - const int max_test = 1000 * 1000; + rt_uint32_t result=0; + int i, num0=0, num1 =0; + const int max_test = 1000 * 1000; for (i = 0; i < max_test; i++) { - result = rt_hwcrypto_rng_update(); - result%2 ? num1++ : num0++; + result = rt_hwcrypto_rng_update(); + result%2 ? num1++ : num0++; } - LOG_I(" num1: %d, num0: %d ",num1, num0); + LOG_I(" num1: %d, num0: %d ",num1, num0); } -``` +``` ## 大数运算 @@ -1254,7 +1254,7 @@ int main(void) memset(buf_out, 0, sizeof(buf_out)); /* 对测试数据进行 SHA1 运算 */ hw_hash(buf_in, buf_out, HWCRYPTO_TYPE_SHA1); - + /* 打印 20 字节长度的 SHA1 结果 */ LOG_HEX("SHA1 ", 8, buf_out, 20); diff --git a/rt-thread-version/rt-thread-standard/programming-manual/device/dac/dac.md b/rt-thread-version/rt-thread-standard/programming-manual/device/dac/dac.md index dcd1839139daab350c3b50d39f95e1658342ed4c..74b37443b71e7373e50f74d824054d7887224594 100644 --- a/rt-thread-version/rt-thread-standard/programming-manual/device/dac/dac.md +++ b/rt-thread-version/rt-thread-standard/programming-manual/device/dac/dac.md @@ -263,4 +263,4 @@ MSH_CMD_EXPORT(dac_vol_sample, dac voltage convert sample); ### Q: menuconfig 找不到 DAC 设备的配置选项? -**A:** 使用的源代码还不支持 DAC 设备驱动框架。建议更新源代码。 \ No newline at end of file +**A:** 使用的源代码还不支持 DAC 设备驱动框架。建议更新源代码。 diff --git a/rt-thread-version/rt-thread-standard/programming-manual/device/device.md b/rt-thread-version/rt-thread-standard/programming-manual/device/device.md index 477982ac3067544c60123394bed6bd1a02679855..d5f250dcee738318b2cbe9ffb1ab5f9b968e277d 100644 --- a/rt-thread-version/rt-thread-standard/programming-manual/device/device.md +++ b/rt-thread-version/rt-thread-standard/programming-manual/device/device.md @@ -60,9 +60,9 @@ struct rt_device rt_err_t (*rx_indicate)(rt_device_t dev, rt_size_t size); rt_err_t (*tx_complete)(rt_device_t dev, void *buffer); - const struct rt_device_ops *ops; /* 设备操作方法 */ + const struct rt_device_ops *ops; /* 设备操作方法 */ - /* 设备的私有数据 */ + /* 设备的私有数据 */ void *user_data; }; typedef struct rt_device *rt_device_t; @@ -312,8 +312,8 @@ oflags 支持以下的参数: #define RT_DEVICE_OFLAG_CLOSE 0x000 /* 设备已经关闭(内部使用)*/ #define RT_DEVICE_OFLAG_RDONLY 0x001 /* 以只读方式打开设备 */ #define RT_DEVICE_OFLAG_WRONLY 0x002 /* 以只写方式打开设备 */ -#define RT_DEVICE_OFLAG_RDWR 0x003 /* 以读写方式打开设备 */ -#define RT_DEVICE_OFLAG_OPEN 0x008 /* 设备已经打开(内部使用)*/ +#define RT_DEVICE_OFLAG_RDWR 0x003 /* 以读写方式打开设备 */ +#define RT_DEVICE_OFLAG_OPEN 0x008 /* 设备已经打开(内部使用)*/ #define RT_DEVICE_FLAG_STREAM 0x040 /* 设备以流模式打开 */ #define RT_DEVICE_FLAG_INT_RX 0x100 /* 设备以中断接收模式打开 */ #define RT_DEVICE_FLAG_DMA_RX 0x200 /* 设备以 DMA 接收模式打开 */ diff --git a/rt-thread-version/rt-thread-standard/programming-manual/device/hwtimer/hwtimer.md b/rt-thread-version/rt-thread-standard/programming-manual/device/hwtimer/hwtimer.md index 171dfa0c96fa93717928b5251fe7b8d28f13b846..68babe797561418780c9fcf62eee38faf0b33736 100644 --- a/rt-thread-version/rt-thread-standard/programming-manual/device/hwtimer/hwtimer.md +++ b/rt-thread-version/rt-thread-standard/programming-manual/device/hwtimer/hwtimer.md @@ -46,7 +46,7 @@ rt_device_t rt_device_find(const char* name); ```c #define HWTIMER_DEV_NAME "timer0" /* 定时器名称 */ -rt_device_t hw_dev; /* 定时器设备句柄 */ +rt_device_t hw_dev; /* 定时器设备句柄 */ /* 查找定时器设备 */ hw_dev = rt_device_find(HWTIMER_DEV_NAME); ``` @@ -71,7 +71,7 @@ rt_err_t rt_device_open(rt_device_t dev, rt_uint16_t oflags); ```c #define HWTIMER_DEV_NAME "timer0" /* 定时器名称 */ -rt_device_t hw_dev; /* 定时器设备句柄 */ +rt_device_t hw_dev; /* 定时器设备句柄 */ /* 查找定时器设备 */ hw_dev = rt_device_find(HWTIMER_DEV_NAME); /* 以读写方式打开设备 */ @@ -97,7 +97,7 @@ rt_err_t rt_device_set_rx_indicate(rt_device_t dev, rt_err_t (*rx_ind)(rt_device ```c #define HWTIMER_DEV_NAME "timer0" /* 定时器名称 */ -rt_device_t hw_dev; /* 定时器设备句柄 */ +rt_device_t hw_dev; /* 定时器设备句柄 */ /* 定时器超时回调函数 */ static rt_err_t timeout_cb(rt_device_t dev, rt_size_t size) @@ -116,7 +116,7 @@ static int hwtimer_sample(int argc, char *argv[]) rt_device_open(hw_dev, RT_DEVICE_OFLAG_RDWR); /* 设置超时回调函数 */ rt_device_set_rx_indicate(hw_dev, timeout_cb); - + return 0; } ``` @@ -144,7 +144,7 @@ rt_err_t rt_device_control(rt_device_t dev, rt_uint8_t cmd, void* arg); | **控制字** | **描述** | | ---------------------- | ------------------------ | | HWTIMER_CTRL_FREQ_SET | 设置计数频率 | -| HWTIMER_CTRL_STOP | 停止定时器 | +| HWTIMER_CTRL_STOP | 停止定时器 | | HWTIMER_CTRL_INFO_GET | 获取定时器特征信息 | | HWTIMER_CTRL_MODE_SET | 设置定时器模式 | @@ -156,15 +156,15 @@ rt_err_t rt_device_control(rt_device_t dev, rt_uint8_t cmd, void* arg); 设置定时器模式时,参数 arg 可取如下值: ```c -HWTIMER_MODE_ONESHOT 单次定时 -HWTIMER_MODE_PERIOD 周期性定时 +HWTIMER_MODE_ONESHOT 单次定时 +HWTIMER_MODE_PERIOD 周期性定时 ``` 设置定时器计数频率和定时模式的使用示例如下所示: ```c #define HWTIMER_DEV_NAME "timer0" /* 定时器名称 */ -rt_device_t hw_dev; /* 定时器设备句柄 */ +rt_device_t hw_dev; /* 定时器设备句柄 */ rt_hwtimer_mode_t mode; /* 定时器模式 */ rt_uint32_t freq = 10000; /* 计数频率 */ @@ -227,9 +227,9 @@ typedef struct rt_hwtimerval ```c #define HWTIMER_DEV_NAME "timer0" /* 定时器名称 */ -rt_device_t hw_dev; /* 定时器设备句柄 */ +rt_device_t hw_dev; /* 定时器设备句柄 */ rt_hwtimer_mode_t mode; /* 定时器模式 */ -rt_hwtimerval_t timeout_s; /* 定时器超时值 */ +rt_hwtimerval_t timeout_s; /* 定时器超时值 */ /* 定时器超时回调函数 */ static rt_err_t timeout_cb(rt_device_t dev, rt_size_t size) @@ -256,7 +256,7 @@ static int hwtimer_sample(int argc, char *argv[]) timeout_s.sec = 5; /* 秒 */ timeout_s.usec = 0; /* 微秒 */ rt_device_write(hw_dev, 0, &timeout_s, sizeof(timeout_s)); - + return 0; } ``` @@ -282,7 +282,7 @@ rt_size_t rt_device_read(rt_device_t dev, rt_off_t pos, void* buffer, rt_size_t 使用示例如下所示: ```c -rt_hwtimerval_t timeout_s; /* 用于保存定时器经过时间 */ +rt_hwtimerval_t timeout_s; /* 用于保存定时器经过时间 */ /* 读取定时器经过时间 */ rt_device_read(hw_dev, 0, &timeout_s, sizeof(timeout_s)); ``` @@ -309,7 +309,7 @@ rt_err_t rt_device_close(rt_device_t dev); ```c #define HWTIMER_DEV_NAME "timer0" /* 定时器名称 */ -rt_device_t hw_dev; /* 定时器设备句柄 */ +rt_device_t hw_dev; /* 定时器设备句柄 */ /* 查找定时器设备 */ hw_dev = rt_device_find(HWTIMER_DEV_NAME); ... ... @@ -411,4 +411,4 @@ static int hwtimer_sample(int argc, char *argv[]) } /* 导出到 msh 命令列表中 */ MSH_CMD_EXPORT(hwtimer_sample, hwtimer sample); -``` \ No newline at end of file +``` diff --git a/rt-thread-version/rt-thread-standard/programming-manual/device/i2c/i2c.md b/rt-thread-version/rt-thread-standard/programming-manual/device/i2c/i2c.md index a31e2f1f44bddcca0559f27ca738eb20ead09a26..eb83a305b019cb4369bb068bbc760523dec252eb 100644 --- a/rt-thread-version/rt-thread-standard/programming-manual/device/i2c/i2c.md +++ b/rt-thread-version/rt-thread-standard/programming-manual/device/i2c/i2c.md @@ -106,12 +106,12 @@ struct rt_i2c_msg 标志 flags 可取值为以下宏定义,根据需要可以与其他宏使用位运算 “|” 组合起来使用。 ```c -#define RT_I2C_WR 0x0000 /* 写标志 */ -#define RT_I2C_RD (1u << 0) /* 读标志 */ -#define RT_I2C_ADDR_10BIT (1u << 2) /* 10 位地址模式 */ -#define RT_I2C_NO_START (1u << 4) /* 无开始条件 */ -#define RT_I2C_IGNORE_NACK (1u << 5) /* 忽视 NACK */ -#define RT_I2C_NO_READ_ACK (1u << 6) /* 读的时候不发送 ACK */ +#define RT_I2C_WR 0x0000 /* 写标志 */ +#define RT_I2C_RD (1u << 0) /* 读标志 */ +#define RT_I2C_ADDR_10BIT (1u << 2) /* 10 位地址模式 */ +#define RT_I2C_NO_START (1u << 4) /* 无开始条件 */ +#define RT_I2C_IGNORE_NACK (1u << 5) /* 忽视 NACK */ +#define RT_I2C_NO_READ_ACK (1u << 6) /* 读的时候不发送 ACK */ ``` 使用示例如下所示: @@ -129,10 +129,10 @@ static rt_err_t read_regs(struct rt_i2c_bus_device *bus, rt_uint8_t len, rt_uint { struct rt_i2c_msg msgs; - msgs.addr = AHT10_ADDR; /* 从机地址 */ - msgs.flags = RT_I2C_RD; /* 读标志 */ - msgs.buf = buf; /* 读写数据缓冲区指针 */ - msgs.len = len; /* 读写数据字节数 */ + msgs.addr = AHT10_ADDR; /* 从机地址 */ + msgs.flags = RT_I2C_RD; /* 读标志 */ + msgs.buf = buf; /* 读写数据缓冲区指针 */ + msgs.len = len; /* 读写数据字节数 */ /* 调用I2C设备接口传输数据 */ if (rt_i2c_transfer(bus, &msgs, 1) == 1) diff --git a/rt-thread-version/rt-thread-standard/programming-manual/device/pin/pin.md b/rt-thread-version/rt-thread-standard/programming-manual/device/pin/pin.md index fb22d4cdf81567437a055b3ff48c90d56440f93c..c808372c5b9db6861b261a6efa3a6738df3c451a 100644 --- a/rt-thread-version/rt-thread-standard/programming-manual/device/pin/pin.md +++ b/rt-thread-version/rt-thread-standard/programming-manual/device/pin/pin.md @@ -11,7 +11,7 @@ ![5 种中断触发模式](figures/pin2.png) * 输入输出模式可控制。 - + * 输出模式一般包括:推挽、开漏、上拉、下拉。引脚为输出模式时,可以通过配置引脚输出的电平状态为高电平或低电平来控制连接的外围设备。 * 输入模式一般包括:浮空、上拉、下拉、模拟。引脚为输入模式时,可以读取引脚的电平状态,即高电平或低电平。 @@ -53,7 +53,7 @@ GET_PIN(port, pin) 获取引脚号为 PF9 的 LED0 对应的引脚编号的示例代码如下所示: ```c -#define LED0_PIN GET_PIN(F, 9) +#define LED0_PIN GET_PIN(F, 9) ``` @@ -74,7 +74,7 @@ static const rt_uint16_t pins[] = __STM32_PIN_DEFAULT, __STM32_PIN(8, A, 14), __STM32_PIN(9, B, 6), - ... ... + ... ... } ``` @@ -96,11 +96,11 @@ void rt_pin_mode(rt_base_t pin, rt_base_t mode); 目前 RT-Thread 支持的引脚工作模式可取如所示的 5 种宏定义值之一,每种模式对应的芯片实际支持的模式需参考 PIN 设备驱动程序的具体实现: ```c -#define PIN_MODE_OUTPUT 0x00 /* 输出 */ -#define PIN_MODE_INPUT 0x01 /* 输入 */ -#define PIN_MODE_INPUT_PULLUP 0x02 /* 上拉输入 */ -#define PIN_MODE_INPUT_PULLDOWN 0x03 /* 下拉输入 */ -#define PIN_MODE_OUTPUT_OD 0x04 /* 开漏输出 */ +#define PIN_MODE_OUTPUT 0x00 /* 输出 */ +#define PIN_MODE_INPUT 0x01 /* 输入 */ +#define PIN_MODE_INPUT_PULLUP 0x02 /* 上拉输入 */ +#define PIN_MODE_INPUT_PULLDOWN 0x03 /* 下拉输入 */ +#define PIN_MODE_OUTPUT_OD 0x04 /* 开漏输出 */ ``` 使用示例如下所示: @@ -171,7 +171,7 @@ status = rt_pin_read(BEEP_PIN_NUM); ```c rt_err_t rt_pin_attach_irq(rt_int32_t pin, rt_uint32_t mode, - void (*hdr)(void *args), void *args); + void (*hdr)(void *args), void *args); ``` | **参数** | **描述** | @@ -187,11 +187,11 @@ rt_err_t rt_pin_attach_irq(rt_int32_t pin, rt_uint32_t mode, 中断触发模式 mode 可取如下 5 种宏定义值之一: ```c -#define PIN_IRQ_MODE_RISING 0x00 /* 上升沿触发 */ -#define PIN_IRQ_MODE_FALLING 0x01 /* 下降沿触发 */ +#define PIN_IRQ_MODE_RISING 0x00 /* 上升沿触发 */ +#define PIN_IRQ_MODE_FALLING 0x01 /* 下降沿触发 */ #define PIN_IRQ_MODE_RISING_FALLING 0x02 /* 边沿触发(上升沿和下降沿都触发)*/ -#define PIN_IRQ_MODE_HIGH_LEVEL 0x03 /* 高电平触发 */ -#define PIN_IRQ_MODE_LOW_LEVEL 0x04 /* 低电平触发 */ +#define PIN_IRQ_MODE_HIGH_LEVEL 0x03 /* 高电平触发 */ +#define PIN_IRQ_MODE_LOW_LEVEL 0x04 /* 低电平触发 */ ``` 使用示例如下所示: @@ -224,7 +224,7 @@ rt_err_t rt_pin_irq_enable(rt_base_t pin, rt_uint32_t enabled); | **参数** | **描述** | |----------|----------------| -| pin | 引脚编号 | +| pin | 引脚编号 | | enabled | 状态,可取 2 种值之一:PIN_IRQ_ENABLE(开启),PIN_IRQ_DISABLE(关闭) | | **返回** | —— | | RT_EOK | 使能成功 | diff --git a/rt-thread-version/rt-thread-standard/programming-manual/device/pulse_encoder/pulse_encoder.md b/rt-thread-version/rt-thread-standard/programming-manual/device/pulse_encoder/pulse_encoder.md index 332d2bd07ea160593a86c0376ea411d0dad585a2..d0a72c04d7163473bec40aab0b49550f3ac2de80 100644 --- a/rt-thread-version/rt-thread-standard/programming-manual/device/pulse_encoder/pulse_encoder.md +++ b/rt-thread-version/rt-thread-standard/programming-manual/device/pulse_encoder/pulse_encoder.md @@ -37,7 +37,7 @@ rt_device_t rt_device_find(const char* name); ```c #define PULSE_ENCODER_DEV_NAME "pulse1" /* 脉冲编码器名称 */ -rt_device_t pulse_encoder_dev; /* 脉冲编码器设备句柄 */ +rt_device_t pulse_encoder_dev; /* 脉冲编码器设备句柄 */ /* 查找脉冲编码器设备 */ pulse_encoder_dev = rt_device_find(PULSE_ENCODER_DEV_NAME); ``` @@ -92,7 +92,7 @@ rt_err_t rt_device_control(rt_device_t dev, rt_uint8_t cmd, void* arg); | **控制字** | **描述** | | ---------------------- | ------------------------ | | PULSE_ENCODER_CMD_GET_TYPE | 获取脉冲编码器类型 | -| PULSE_ENCODER_CMD_ENABLE | 使能脉冲编码器 | +| PULSE_ENCODER_CMD_ENABLE | 使能脉冲编码器 | | PULSE_ENCODER_CMD_DISABLE | 失能脉冲编码器 | | PULSE_ENCODER_CMD_CLEAR_COUNT | 清空编码器计数值 | @@ -219,4 +219,4 @@ static int pulse_encoder_sample(int argc, char *argv[]) } /* 导出到 msh 命令列表中 */ MSH_CMD_EXPORT(pulse_encoder_sample, pulse encoder sample); -``` \ No newline at end of file +``` diff --git a/rt-thread-version/rt-thread-standard/programming-manual/device/pwm/pwm.md b/rt-thread-version/rt-thread-standard/programming-manual/device/pwm/pwm.md index 5b6c4e47e52245cc95ed12a809c10fb061a7bccb..34a019298386208ddd906a60ffacfe71636bf253 100644 --- a/rt-thread-version/rt-thread-standard/programming-manual/device/pwm/pwm.md +++ b/rt-thread-version/rt-thread-standard/programming-manual/device/pwm/pwm.md @@ -41,8 +41,8 @@ rt_device_t rt_device_find(const char* name); 一般情况下,注册到系统的 PWM 设备名称为 pwm0,pwm1等,使用示例如下所示: ```c -#define PWM_DEV_NAME "pwm3" /* PWM 设备名称 */ -struct rt_device_pwm *pwm_dev; /* PWM 设备句柄 */ +#define PWM_DEV_NAME "pwm3" /* PWM 设备名称 */ +struct rt_device_pwm *pwm_dev; /* PWM 设备句柄 */ /* 查找设备 */ pwm_dev = (struct rt_device_pwm *)rt_device_find(PWM_DEV_NAME); ``` @@ -53,8 +53,8 @@ pwm_dev = (struct rt_device_pwm *)rt_device_find(PWM_DEV_NAME); ```c rt_err_t rt_pwm_set(struct rt_device_pwm *device, - int channel, - rt_uint32_t period, + int channel, + rt_uint32_t period, rt_uint32_t pulse); ``` @@ -76,8 +76,8 @@ PWM 的输出频率由周期时间 period 决定,例如周期时间为 0.5ms ( ```c #define PWM_DEV_NAME "pwm3" /* PWM设备名称 */ -#define PWM_DEV_CHANNEL 4 /* PWM通道 */ -struct rt_device_pwm *pwm_dev; /* PWM设备句柄 */ +#define PWM_DEV_CHANNEL 4 /* PWM通道 */ +struct rt_device_pwm *pwm_dev; /* PWM设备句柄 */ rt_uint32_t period, pulse; period = 500000; /* 周期为0.5ms,单位为纳秒ns */ @@ -109,8 +109,8 @@ rt_err_t rt_pwm_enable(struct rt_device_pwm *device, int channel); ```c #define PWM_DEV_NAME "pwm3" /* PWM设备名称 */ -#define PWM_DEV_CHANNEL 4 /* PWM通道 */ -struct rt_device_pwm *pwm_dev; /* PWM设备句柄 */ +#define PWM_DEV_CHANNEL 4 /* PWM通道 */ +struct rt_device_pwm *pwm_dev; /* PWM设备句柄 */ rt_uint32_t period, pulse; period = 500000; /* 周期为0.5ms,单位为纳秒ns */ @@ -144,8 +144,8 @@ rt_err_t rt_pwm_disable(struct rt_device_pwm *device, int channel); ```c #define PWM_DEV_NAME "pwm3" /* PWM设备名称 */ -#define PWM_DEV_CHANNEL 4 /* PWM通道 */ -struct rt_device_pwm *pwm_dev; /* PWM设备句柄 */ +#define PWM_DEV_CHANNEL 4 /* PWM通道 */ +struct rt_device_pwm *pwm_dev; /* PWM设备句柄 */ rt_uint32_t period, pulse; period = 500000; /* 周期为0.5ms,单位为纳秒ns */ @@ -222,7 +222,7 @@ static int pwm_led_sample(int argc, char *argv[]) period = 500000; /* 周期为0.5ms,单位为纳秒ns */ dir = 1; /* PWM脉冲宽度值的增减方向 */ pulse = 0; /* PWM脉冲宽度值,单位为纳秒ns */ - + /* 查找设备 */ pwm_dev = (struct rt_device_pwm *)rt_device_find(PWM_DEV_NAME); if (pwm_dev == RT_NULL) @@ -235,7 +235,7 @@ static int pwm_led_sample(int argc, char *argv[]) rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, period, pulse); /* 使能设备 */ rt_pwm_enable(pwm_dev, PWM_DEV_CHANNEL); - + while (1) { rt_thread_mdelay(50); @@ -262,4 +262,4 @@ static int pwm_led_sample(int argc, char *argv[]) } /* 导出到 msh 命令列表中 */ MSH_CMD_EXPORT(pwm_led_sample, pwm sample); -``` \ No newline at end of file +``` diff --git a/rt-thread-version/rt-thread-standard/programming-manual/device/rtc/rtc.md b/rt-thread-version/rt-thread-standard/programming-manual/device/rtc/rtc.md index fabb7ec675369e25b8dddf0c4b5a9ceb2dce3712..899f3103d5c9cc783f95edbc1e0153caabec1da9 100644 --- a/rt-thread-version/rt-thread-standard/programming-manual/device/rtc/rtc.md +++ b/rt-thread-version/rt-thread-standard/programming-manual/device/rtc/rtc.md @@ -77,14 +77,14 @@ time_t time(time_t *t) | **参数** | **描述** | | ---------- | ------------------------------- | -|t |时间数据指针 | +|t |时间数据指针 | | **返回** | —— | | 当前时间值 | | 使用示例如下所示: ```c -time_t now; /* 保存获取的当前时间值 */ +time_t now; /* 保存获取的当前时间值 */ /* 获取时间 */ now = time(RT_NULL); /* 打印输出时间信息 */ @@ -101,7 +101,7 @@ rt_kprintf("%s\n", ctime(&now)); 在 menuconfig 中可以启用使用软件模拟 RTC 的功能,这个模式非常适用于对时间精度要求不高,没有硬件 RTC 的产品。配置选项如下所示: ```c -RT-Thread Components → +RT-Thread Components → Device Drivers: -*- Using RTC device drivers /* 使用 RTC 设备驱动 */ [ ] Using software simulation RTC device /* 使用软件模拟 RTC */ @@ -123,7 +123,7 @@ RT-Thread online packages → 开启 NTP 后 RTC 的自动同步功能将会自动开启,还可以设置同步周期和首次同步的延时时间: ```c -RT-Thread Components → +RT-Thread Components → Device Drivers: -*- Using RTC device drivers /* 使用 RTC 设备驱动 */ [ ] Using software simulation RTC device /* 使用软件模拟 RTC */ diff --git a/rt-thread-version/rt-thread-standard/programming-manual/device/sensor/sensor.md b/rt-thread-version/rt-thread-standard/programming-manual/device/sensor/sensor.md index f6a4a0ddd7651512d0f8cbc7b73cba8c1dc44fdd..a8f5e47899d71da7ec2501fcc5fe98644ccc0352 100644 --- a/rt-thread-version/rt-thread-standard/programming-manual/device/sensor/sensor.md +++ b/rt-thread-version/rt-thread-standard/programming-manual/device/sensor/sensor.md @@ -88,7 +88,7 @@ FIFO(First Input First Output)即先进先出。 FIFO 传输方式需要传 以轮询模式打开传感器设备使用示例如下所示: ```c -#define SAMPLE_SENSOR_NAME "acce_st" /* 传感器设备名称 */ +#define SAMPLE_SENSOR_NAME "acce_st" /* 传感器设备名称 */ int main(void) { rt_device_t dev; @@ -215,8 +215,8 @@ rt_err_t rt_device_set_rx_indicate(rt_device_t dev, rt_err_t (*rx_ind)(rt_device 一般情况下接收回调函数可以发送一个信号量或者事件通知传感器数据处理线程有数据到达。使用示例如下所示: ```c -#define SAMPLE_SENSOR_NAME "acce_st" /* 传感器设备名称 */ -static rt_device_t dev; /* 传感器设备句柄 */ +#define SAMPLE_SENSOR_NAME "acce_st" /* 传感器设备名称 */ +static rt_device_t dev; /* 传感器设备句柄 */ static struct rt_semaphore rx_sem; /* 用于接收消息的信号量 */ /* 接收数据回调函数 */ @@ -264,7 +264,7 @@ rt_size_t rt_device_read(rt_device_t dev, rt_off_t pos, void* buffer, rt_size_t 传感器使用中断接收模式并配合接收回调函数的使用示例如下所示: ```c -static rt_device_t dev; /* 传感器设备句柄 */ +static rt_device_t dev; /* 传感器设备句柄 */ static struct rt_semaphore rx_sem; /* 用于接收消息的信号量 */ /* 接收数据的线程 */ @@ -312,7 +312,7 @@ static void sensor_fifo_rx_entry(void *parameter) res = rt_device_read(dev, 0, data, 32); for (i = 0; i < res; i++) { - sensor_show_data(dev, &data[i]); + sensor_show_data(dev, &data[i]); } } } @@ -321,7 +321,7 @@ int main(void) static rt_thread_t tid1 = RT_NULL; rt_device_t dev; struct rt_sensor_data data; - + sensor_rx_sem = rt_sem_create("sen_rx_sem", 0, RT_IPC_FLAG_FIFO); tid1 = rt_thread_create("sen_rx_thread", sensor_fifo_rx_entry, dev, @@ -329,7 +329,7 @@ int main(void) 15, 5); if (tid1 != RT_NULL) rt_thread_startup(tid1); - + dev = rt_device_find("acce_st"); rt_device_set_rx_indicate(dev, rx_cb); rt_device_open(dev, RT_SEN_FLAG_FIFO); diff --git a/rt-thread-version/rt-thread-standard/programming-manual/device/spi/spi.md b/rt-thread-version/rt-thread-standard/programming-manual/device/spi/spi.md index 41b14869564dd49a1958d5f5ba2988fe89154389..ee82be4750367d1705212cffd20a90f26f65232b 100644 --- a/rt-thread-version/rt-thread-standard/programming-manual/device/spi/spi.md +++ b/rt-thread-version/rt-thread-standard/programming-manual/device/spi/spi.md @@ -107,7 +107,7 @@ struct rt_spi_configuration 原型如下: ```c struct rt_spi_configuration { - rt_uint8_t mode; /* 模式 */ + rt_uint8_t mode; /* 模式 */ rt_uint8_t data_width; /* 数据宽度,可取8位、16位、32位 */ rt_uint16_t reserved; /* 保留 */ rt_uint32_t max_hz; /* 最大频率 */ @@ -216,8 +216,8 @@ rt_device_t rt_device_find(const char* name); 一般情况下,注册到系统的 SPI 设备名称为 spi10, qspi10等,使用示例如下所示: ```c -#define W25Q_SPI_DEVICE_NAME "qspi10" /* SPI 设备名称 */ -struct rt_spi_device *spi_dev_w25q; /* SPI 设备句柄 */ +#define W25Q_SPI_DEVICE_NAME "qspi10" /* SPI 设备名称 */ +struct rt_spi_device *spi_dev_w25q; /* SPI 设备句柄 */ /* 查找 spi 设备获取设备句柄 */ spi_dev_w25q = (struct rt_spi_device *)rt_device_find(W25Q_SPI_DEVICE_NAME); @@ -244,12 +244,12 @@ struct rt_spi_message *rt_spi_transfer_message(struct rt_spi_device *device,str ```c struct rt_spi_message { - const void *send_buf; /* 发送缓冲区指针 */ - void *recv_buf; /* 接收缓冲区指针 */ - rt_size_t length; /* 发送 / 接收 数据字节数 */ + const void *send_buf; /* 发送缓冲区指针 */ + void *recv_buf; /* 接收缓冲区指针 */ + rt_size_t length; /* 发送 / 接收 数据字节数 */ struct rt_spi_message *next; /* 指向继续发送的下一条消息的指针 */ - unsigned cs_take : 1; /* 片选选中 */ - unsigned cs_release : 1; /* 释放片选 */ + unsigned cs_take : 1; /* 片选选中 */ + unsigned cs_release : 1; /* 释放片选 */ }; ``` sendbuf 为发送缓冲区指针,其值为 RT_NULL 时,表示本次传输为只接收状态,不需要发送数据。 @@ -269,10 +269,10 @@ cs_take 值为 1 时,表示在传输数据前,设置对应的 CS 为有效 使用示例如下所示: ```c -#define W25Q_SPI_DEVICE_NAME "qspi10" /* SPI 设备名称 */ -struct rt_spi_device *spi_dev_w25q; /* SPI 设备句柄 */ +#define W25Q_SPI_DEVICE_NAME "qspi10" /* SPI 设备名称 */ +struct rt_spi_device *spi_dev_w25q; /* SPI 设备句柄 */ struct rt_spi_message msg1, msg2; -rt_uint8_t w25x_read_id = 0x90; /* 命令 */ +rt_uint8_t w25x_read_id = 0x90; /* 命令 */ rt_uint8_t id[5] = {0}; /* 查找 spi 设备获取设备句柄 */ diff --git a/rt-thread-version/rt-thread-standard/programming-manual/device/touch/touch.md b/rt-thread-version/rt-thread-standard/programming-manual/device/touch/touch.md index f7a18bc661a1a4e0b9f9fcd111915bbaaab190f6..d3decf1a5d887d82826cc254bdcc3bb23bcdebcf 100644 --- a/rt-thread-version/rt-thread-standard/programming-manual/device/touch/touch.md +++ b/rt-thread-version/rt-thread-standard/programming-manual/device/touch/touch.md @@ -7,7 +7,7 @@ Touch(触摸芯片)是 UI 设计中进行人机交互重要的一部分, Touch 设备与主机通讯一般都是采用 I2C 总线协议来进行数据交互,所以一个 Touch 设备,就是一个标准的 I2C 从设备,而且为了提高接收 Touch 数据的实时性,触摸芯片都会提供中断支持,当有触摸事件(抬起,按下,移动)发生时,会触发中断通知 MCU 有触摸事件。主机可以通过中断回调函数去读取触摸点信息。 Touch 设备与主机通讯连接如下图所示: - + ![touch设备读取数据流程](figures/touch_pro.png) RT-Thread 为了方便使用 Touch 设备,抽象出了 Touch 设备驱动框架,并且向上层提供统一的操作接口,提高上层代码的可重用性。 @@ -162,7 +162,7 @@ rt_device_control(touch_dev, RT_TOUCH_CTRL_SET_MODE, (void *)RT_DEVICE_FLAG_RDON ```c rt_uint16_t x = 400; -rt_device_control(touch_dev, RT_TOUCH_CTRL_SET_X_RANGE, &x); +rt_device_control(touch_dev, RT_TOUCH_CTRL_SET_X_RANGE, &x); ``` #### 设置 Y 轴范围 @@ -219,12 +219,12 @@ rt_err_t rt_device_set_rx_indicate(rt_device_t dev, rt_err_t (*rx_ind)(rt_device ```c struct rt_touch_data { - rt_uint8_t event; - rt_uint8_t track_id; - rt_uint8_t width; - rt_uint16_t x_coordinate; - rt_uint16_t y_coordinate; - rt_tick_t timestamp; + rt_uint8_t event; + rt_uint8_t track_id; + rt_uint8_t width; + rt_uint16_t x_coordinate; + rt_uint16_t y_coordinate; + rt_tick_t timestamp; }; ``` * event:触摸事件,包括抬起事件、按下事件和移动事件。 @@ -274,7 +274,7 @@ if (rt_device_read(dev, 0, read_data, 5) == 5) { if (read_data[i].event == RT_TOUCH_EVENT_DOWN || read_data[i].event == RT_TOUCH_EVENT_MOVE) { - rt_kprintf("%d %d %d %d %d\n", + rt_kprintf("%d %d %d %d %d\n", read_data[i].track_id, read_data[i].x_coordinate, read_data[i].y_coordinate, diff --git a/rt-thread-version/rt-thread-standard/programming-manual/device/touch/touch_list.md b/rt-thread-version/rt-thread-standard/programming-manual/device/touch/touch_list.md index e872b24ab30653417e65458b2012b0de6ebdf406..258a46027c1f07d9c874692ff3a2cb757aac11f9 100644 --- a/rt-thread-version/rt-thread-standard/programming-manual/device/touch/touch_list.md +++ b/rt-thread-version/rt-thread-standard/programming-manual/device/touch/touch_list.md @@ -5,4 +5,4 @@ | 厂商 | 传感器 | 备注 | | -------------- | ------------------------------------------------------------ | ------------------------ | | **GT** | | | -| | **[gt9147](https://github.com/RT-Thread-packages/gt9147)** | 支持 5 点触控 +| | **[gt9147](https://github.com/RT-Thread-packages/gt9147)** | 支持 5 点触控 diff --git a/rt-thread-version/rt-thread-standard/programming-manual/device/uart/uart_v1/uart.md b/rt-thread-version/rt-thread-standard/programming-manual/device/uart/uart_v1/uart.md index dc539b0555bdb6993c25840ecfbebe137659aca7..d06fd958044a420d19f9b445d3324a03d44f594e 100644 --- a/rt-thread-version/rt-thread-standard/programming-manual/device/uart/uart_v1/uart.md +++ b/rt-thread-version/rt-thread-standard/programming-manual/device/uart/uart_v1/uart.md @@ -52,7 +52,7 @@ rt_device_t rt_device_find(const char* name); ```c #define SAMPLE_UART_NAME "uart2" /* 串口设备名称 */ -static rt_device_t serial; /* 串口设备句柄 */ +static rt_device_t serial; /* 串口设备句柄 */ /* 查找串口设备 */ serial = rt_device_find(SAMPLE_UART_NAME); ``` @@ -93,13 +93,13 @@ DMA(Direct Memory Access)即直接存储器访问。 DMA 传输方式无需 > [!NOTE] > 注:* RT_DEVICE_FLAG_STREAM:流模式用于向串口终端输出字符串:当输出的字符是 `"\n"` (对应 16 进制值为 0x0A)时,自动在前面输出一个 `"\r"`(对应 16 进制值为 0x0D) 做分行。 -流模式 RT_DEVICE_FLAG_STREAM 可以和接收发送模式参数使用或 “|” 运算符一起使用。 +流模式 RT_DEVICE_FLAG_STREAM 可以和接收发送模式参数使用或 “|” 运算符一起使用。 以**中断接收及轮询发送模式**使用串口设备的示例如下所示: ```c #define SAMPLE_UART_NAME "uart2" /* 串口设备名称 */ -static rt_device_t serial; /* 串口设备句柄 */ +static rt_device_t serial; /* 串口设备句柄 */ /* 查找串口设备 */ serial = rt_device_find(SAMPLE_UART_NAME); @@ -630,7 +630,7 @@ static int uart_dma_sample(int argc, char *argv[]) sizeof(struct rx_msg), /* 一条消息的最大长度 */ sizeof(msg_pool), /* 存放消息的缓冲区大小 */ RT_IPC_FLAG_FIFO); /* 如果有多个线程等待,按照先来先得到的方法分配消息 */ - + /* 以 DMA 接收及轮询发送方式打开串口设备 */ rt_device_open(serial, RT_DEVICE_FLAG_DMA_RX); /* 设置接收回调函数 */ @@ -718,7 +718,7 @@ static void data_parsing(void) char ch; char data[ONE_DATA_MAXLEN]; static char i = 0; - + while (1) { ch = uart_sample_get_char(); diff --git a/rt-thread-version/rt-thread-standard/programming-manual/device/uart/uart_v2/uart.md b/rt-thread-version/rt-thread-standard/programming-manual/device/uart/uart_v2/uart.md index 330e0ca7b8c939f279eb1b9b6a79d092240e8f05..500ba63f00771ec79da5ca986206d579790947d7 100644 --- a/rt-thread-version/rt-thread-standard/programming-manual/device/uart/uart_v2/uart.md +++ b/rt-thread-version/rt-thread-standard/programming-manual/device/uart/uart_v2/uart.md @@ -534,7 +534,7 @@ rt_err_t rt_device_close(rt_device_t dev); struct serial_configure { rt_uint32_t baud_rate; - + rt_uint32_t data_bits :4; rt_uint32_t stop_bits :2; rt_uint32_t parity :2; @@ -543,12 +543,12 @@ rt_err_t rt_device_close(rt_device_t dev); rt_uint32_t bufsz :16; rt_uint32_t reserved :6; }; - + // 新版本 struct serial_configure { rt_uint32_t baud_rate; - + rt_uint32_t data_bits :4; rt_uint32_t stop_bits :2; rt_uint32_t parity :2; diff --git a/rt-thread-version/rt-thread-standard/programming-manual/dlmodule/dlmodule.md b/rt-thread-version/rt-thread-standard/programming-manual/dlmodule/dlmodule.md index 9d1bdcb500bfed2d65e3b1f7e5268fe661a2fe40..58e8a61009a39a93c37a9244b2f45372a2942e19 100644 --- a/rt-thread-version/rt-thread-standard/programming-manual/dlmodule/dlmodule.md +++ b/rt-thread-version/rt-thread-standard/programming-manual/dlmodule/dlmodule.md @@ -26,7 +26,7 @@ ```c RT-Thread Components ---> POSIX layer and C standard library ---> - [*] Enable dynamic module with dlopen/dlsym/dlclose feature + [*] Enable dynamic module with dlopen/dlsym/dlclose feature ``` 也要打开文件系统的配置选项: @@ -34,7 +34,7 @@ ```c RT-Thread Components ---> Device virtual file system ---> - [*] Using device virtual file system + [*] Using device virtual file system ``` bsp 对应的 rtconfig.py 中设置动态模块编译时需要用到的配置参数: @@ -300,7 +300,7 @@ int dlclose (void *handle); ### Q: 使用 scons 命令编译工程,提示 undefined reference to __rtmsymtab_start。 -**A:** 请参考 qemu-vexpress-a9 BSP 的 GCC 链接脚本文件 link.lds,在工程的 GCC 链接脚本的 TEXT 段增加以下内容。 +**A:** 请参考 qemu-vexpress-a9 BSP 的 GCC 链接脚本文件 link.lds,在工程的 GCC 链接脚本的 TEXT 段增加以下内容。 ``` /* section information for modules */ diff --git a/rt-thread-version/rt-thread-standard/programming-manual/filesystem/filesystem.md b/rt-thread-version/rt-thread-standard/programming-manual/filesystem/filesystem.md index 2c993266357c3fda6ba1c2830550b4a1ecd64bc6..26c5bc07e57fb3c86371ebd07beb706728a96165 100644 --- a/rt-thread-version/rt-thread-standard/programming-manual/filesystem/filesystem.md +++ b/rt-thread-version/rt-thread-standard/programming-manual/filesystem/filesystem.md @@ -998,7 +998,7 @@ hello_5 ### Q: 文件系统挂载失败怎么办? - **A:** + **A:** * 检查指定的挂载路径是否存在。文件系统可以直接挂载到根目录(“/”),但是如果想要挂载到其他路径上,如 (“/sdcard”)。需要确保(“/sdcard”)路径是存在的,否则需要先在根目录创建 `sdcard` 文件夹才能挂载成功。 @@ -1010,9 +1010,9 @@ hello_5 * 检查硬件引脚设置是否错误。 -* SPI 设备是否已经注册。 +* SPI 设备是否已经注册。 -* SPI 设备是否已经挂载到总线。 +* SPI 设备是否已经挂载到总线。 * 检查在 `RT-Thread Components → Device Drivers -> Using SPI Bus/Device device drivers -> Using Serial Flash Universal Driver` 菜单下的 `Using auto probe flash JEDEC SFDP parameter` 和 `Using defined supported flash chip information table` 配置项是否选中,如果没有选中那么需要开启这两个选项。 @@ -1038,12 +1038,12 @@ hello_5 **A:** -* 可以采用从底层到上层的方法来逐步排查问题。 +* 可以采用从底层到上层的方法来逐步排查问题。 -* 首先检查存储设备是否注册成功,功能是否正常。 +* 首先检查存储设备是否注册成功,功能是否正常。 -* 检查存储设备中是否创建了文件系统。 +* 检查存储设备中是否创建了文件系统。 -* 检查指定文件系统类型是否注册到 DFS 框架,经常要检查允许的文件系统类型和数量是否足够。 +* 检查指定文件系统类型是否注册到 DFS 框架,经常要检查允许的文件系统类型和数量是否足够。 -* 检查 DFS 是否初始化成功,这一步的初始化操作是纯软件的,因此出错的可能性不高。需要注意的是如果开启了组件自动初始化,就无需再次手动初始化。 \ No newline at end of file +* 检查 DFS 是否初始化成功,这一步的初始化操作是纯软件的,因此出错的可能性不高。需要注意的是如果开启了组件自动初始化,就无需再次手动初始化。 diff --git a/rt-thread-version/rt-thread-standard/programming-manual/finsh/finsh.md b/rt-thread-version/rt-thread-standard/programming-manual/finsh/finsh.md index b70b6d2b5abb04703296172e6829eab3cd47c85d..4a2d95ce889f4bbaed2eab9f0cd3469805c362ca 100644 --- a/rt-thread-version/rt-thread-standard/programming-manual/finsh/finsh.md +++ b/rt-thread-version/rt-thread-standard/programming-manual/finsh/finsh.md @@ -549,4 +549,4 @@ FinSH 的输出依赖于系统的输出,在 RT-Thread 中依赖 `rt_kprintf()` * FinSH 的输入: -FinSH 线程在获得了 rx_sem 信号量后,调用 `rt_device_read()` 函数从设备 (选用串口设备) 中获得一个字符然后处理。所以 FinSH 的移植需要 `rt_device_read()` 函数的实现。而 rx_sem 信号量的释放通过调用 `rx_indicate()` 函数以完成对 FinSH 线程的输入通知。通常的过程是,当串口接收中断发生时(即串口有输入),接受中断服务例程调用 `rx_indicate()` 函数通知 FinSH 线程有输入,而后 FinSH 线程获取串口输入最后做相应的命令处理。 \ No newline at end of file +FinSH 线程在获得了 rx_sem 信号量后,调用 `rt_device_read()` 函数从设备 (选用串口设备) 中获得一个字符然后处理。所以 FinSH 的移植需要 `rt_device_read()` 函数的实现。而 rx_sem 信号量的释放通过调用 `rx_indicate()` 函数以完成对 FinSH 线程的输入通知。通常的过程是,当串口接收中断发生时(即串口有输入),接受中断服务例程调用 `rx_indicate()` 函数通知 FinSH 线程有输入,而后 FinSH 线程获取串口输入最后做相应的命令处理。 diff --git a/rt-thread-version/rt-thread-standard/programming-manual/lwip/lwip.md b/rt-thread-version/rt-thread-standard/programming-manual/lwip/lwip.md index 3f3c759bf3f66ec1d395aa2fdeec8c0d1f67531c..66d62524be6e5592a32c9da11d4ce5ef0045b302 100644 --- a/rt-thread-version/rt-thread-standard/programming-manual/lwip/lwip.md +++ b/rt-thread-version/rt-thread-standard/programming-manual/lwip/lwip.md @@ -103,7 +103,7 @@ typedef enum { PBUF_LINK, PBUF_RAW_TX, PBUF_RAW -} pbuf_layer; +} pbuf_layer; /* determine header offset */ switch (layer) { diff --git a/rt-thread-version/rt-thread-standard/programming-manual/memory/memory.md b/rt-thread-version/rt-thread-standard/programming-manual/memory/memory.md index 8cbba3a3cecca15c8652e95ef3fd9bdd7ca0c6f4..c7d190c37ebfec17ed91ce96fe316cda72dc15c5 100644 --- a/rt-thread-version/rt-thread-standard/programming-manual/memory/memory.md +++ b/rt-thread-version/rt-thread-standard/programming-manual/memory/memory.md @@ -118,9 +118,9 @@ void rt_system_heap_init(void* begin_addr, void* end_addr); ```c rt_err_t rt_memheap_init(struct rt_memheap *memheap, - const char *name, - void *start_addr, - rt_uint32_t size) + const char *name, + void *start_addr, + rt_uint32_t size) ``` 如果有多个不连续的 memheap 可以多次调用该函数将其初始化并加入 memheap_item 链表。下表描述了该函数的输入参数与返回值: diff --git a/rt-thread-version/rt-thread-standard/programming-manual/net/net_introduce.md b/rt-thread-version/rt-thread-standard/programming-manual/net/net_introduce.md index 9ead42fbdfc194aa9b902f983835f2c00331b269..79ad0ff48db330f70f9afd40b989690d634d8a79 100644 --- a/rt-thread-version/rt-thread-standard/programming-manual/net/net_introduce.md +++ b/rt-thread-version/rt-thread-standard/programming-manual/net/net_introduce.md @@ -60,7 +60,7 @@ static const struct sal_socket_ops at_socket_ops = #endif /* SAL_USING_POSIX */ }; -static const struct sal_netdb_ops at_netdb_ops = +static const struct sal_netdb_ops at_netdb_ops = { at_gethostbyname, NULL, @@ -197,7 +197,7 @@ static const struct sal_netdb_ops wiz_netdb_ops = - + diff --git a/rt-thread-version/rt-thread-standard/programming-manual/netdev/netdev.md b/rt-thread-version/rt-thread-standard/programming-manual/netdev/netdev.md index 2cd28faa7dd3677e831cc96acd9564c55cdb57b5..a746c80d1f5ca19be3c8b2eeb993707f9e510877 100644 --- a/rt-thread-version/rt-thread-standard/programming-manual/netdev/netdev.md +++ b/rt-thread-version/rt-thread-standard/programming-manual/netdev/netdev.md @@ -1,4 +1,4 @@ -# netdev 网卡 +# netdev 网卡 ## 介绍 @@ -29,7 +29,7 @@ netdev 组件主要作用是**解决设备多网卡连接时网络连接问题 struct netdev { rt_slist_t list; /* 网卡列表 */ - + char name[RT_NAME_MAX]; /* 网卡名称 */ ip_addr_t ip_addr; /* IP 地址 */ ip_addr_t netmask; /* 子网掩码地址 */ @@ -37,11 +37,11 @@ struct netdev ip_addr_t dns_servers[NETDEV_DNS_SERVERS_NUM]; /* DNS 服务器地址 */ uint8_t hwaddr_len; /* 硬件地址长度 */ uint8_t hwaddr[NETDEV_HWADDR_MAX_LEN]; /* 硬件地址 */ - + uint16_t flags; /* 网卡状态位 */ uint16_t mtu; /* 网卡最大传输单元 */ const struct netdev_ops *ops; /* 网卡操作回调函数 */ - + netdev_callback_fn status_callback; /* 网卡状态改变回调 */ netdev_callback_fn addr_callback; /* 网卡地址改变回调 */ @@ -281,17 +281,17 @@ int netdev_dhcp_enabled(struct netdev *netdev, rt_bool_t is_enabled); ```c /* 设置网卡 IP 地址 */ -int netdev_set_ipaddr(struct netdev *netdev, const ip_addr_t *ipaddr); +int netdev_set_ipaddr(struct netdev *netdev, const ip_addr_t *ipaddr); ``` ```c /* 设置网卡网关地址 */ -int netdev_set_gw(struct netdev *netdev, const ip_addr_t *gw); +int netdev_set_gw(struct netdev *netdev, const ip_addr_t *gw); ``` ```c /* 设置网卡子网掩码地址 */ -int netdev_set_netmask(struct netdev *netdev, const ip_addr_t *netmask); +int netdev_set_netmask(struct netdev *netdev, const ip_addr_t *netmask); ``` | **参数** | **描述** | @@ -414,7 +414,7 @@ msh />ping rt-thread.org msh />ifconfig /* 显示全部网卡信息 */ network interface device: w0 (Default) MTU: 1500 -MAC: 98 3b 16 55 9a 87 +MAC: 98 3b 16 55 9a 87 FLAGS: UP LINK_UP INTERNET_UP DHCP_DISABLE ETHARP BROADCAST IGMP ip address: 192.168.12.92 gw address: 192.168.10.1 @@ -436,7 +436,7 @@ netmask: 255.255.0.0 使用 `dns` 命令查询和设置网卡 DNS 服务器地址,运行结果如下所示: ```c -msh />dns /* 显示全部网卡 DNS 服务器地址 */ +msh />dns /* 显示全部网卡 DNS 服务器地址 */ network interface device: w0 (Default) dns server #0: 192.168.10.1 dns server #1: 223.5.5.5 @@ -453,7 +453,7 @@ set network interface device(w0) dns server #0: 192.168.12.1 ```c msh />netstat Active PCB states: -#0 192.168.12.93:49153 <==> 183.230.40.39:6002 +#0 192.168.12.93:49153 <==> 183.230.40.39:6002 Listen PCB states: TIME-WAIT PCB states: Active UDP PCB states: @@ -492,7 +492,7 @@ static int netdev_set_default_test(int argc, char **argv) /* 设置默认网卡对象 */ netdev_set_default(netdev); - + rt_kprintf("set default network interface device(%s) success.\n", argv[1]); return 0; } @@ -540,7 +540,7 @@ int netdev_set_status_test(int argc, char **argv) netdev_set_down(netdev); rt_kprintf("set network interface device(%s) down status.\n", argv[1]); } - else + else { rt_kprintf("netdev_set_status [netdev_name] [up/down].\n"); return -1; @@ -584,7 +584,7 @@ int netdev_set_ipaddr_test(int argc, char **argv) /* 设置网卡 IP 地址*/ inet_aton(argv[2], &addr); - netdev_set_ipaddr(netdev, &addr); + netdev_set_ipaddr(netdev, &addr); return 0; } diff --git a/rt-thread-version/rt-thread-standard/programming-manual/network/network.md b/rt-thread-version/rt-thread-standard/programming-manual/network/network.md index 0092084a3ad9def5d2042fb82b3a8e8f5ce0f2d6..05b05aea6c5e58e78e0142a1c93cfb65998c0255 100644 --- a/rt-thread-version/rt-thread-standard/programming-manual/network/network.md +++ b/rt-thread-version/rt-thread-standard/programming-manual/network/network.md @@ -353,7 +353,7 @@ int recv(int s, void *mem, size_t len, int flags); ```c int sendto(int s, const void *dataptr, size_t size, int flags, - const struct sockaddr *to, socklen_t tolen); + const struct sockaddr *to, socklen_t tolen); ``` |**参数**|**描述** | @@ -374,7 +374,7 @@ int sendto(int s, const void *dataptr, size_t size, int flags, ```c int recvfrom(int s, void *mem, size_t len, int flags, - struct sockaddr *from, socklen_t *fromlen); + struct sockaddr *from, socklen_t *fromlen); ``` |**参数**|**描述** | @@ -665,7 +665,7 @@ Server, 填入本机 IP 地址和端口 5000,如下图所示。 然后就在 FinSH 控制台输入以下命令启动 TCP 客户端来连接 TCP 服务器: ```c -msh />tcpclient 192.168.12.45 5000 // 按照实际情况输入 +msh />tcpclient 192.168.12.45 5000 // 按照实际情况输入 Connect successful ``` @@ -718,7 +718,7 @@ void udpclient(int argc, char**argv) struct sockaddr_in server_addr; const char *url; - /* 接收到的参数小于 3 个 */ + /* 接收到的参数小于 3 个 */ if (argc < 3) { rt_kprintf("Usage: udpclient URL PORT [COUNT = 10]\n"); @@ -775,7 +775,7 @@ void udpclient(int argc, char**argv) 然后就可以在 FinSH 控制台输入以下命令来给 UDP 服务器发送数据, -`msh />udpclient 192.168.12.45 1001 // 需按照真实情况输入 ` +`msh />udpclient 192.168.12.45 1001 // 需按照真实情况输入 ` 服务器会收到 10 条 This is UDP Client from RT-Thread. 的消息,如下图所示: diff --git a/rt-thread-version/rt-thread-standard/programming-manual/pm/pm.md b/rt-thread-version/rt-thread-standard/programming-manual/pm/pm.md index ba64c5a12f2c9f8dad7687ff4edfddad8a8d979a..df512a12cfd15da0ab9603f44ad02103ffb7e251 100644 --- a/rt-thread-version/rt-thread-standard/programming-manual/pm/pm.md +++ b/rt-thread-version/rt-thread-standard/programming-manual/pm/pm.md @@ -2,13 +2,13 @@ 嵌入式系统低功耗管理的目的在于满足用户对性能需求的前提下,尽可能降低系统能耗以延长设备待机时间。高性能与有限的电池能量在嵌入式系统中矛盾最为突出,硬件低功耗设计与软件低功耗管理的联合应用成为解决矛盾的有效手段。现在的各种 MCU 都或多或少的在低功耗方面提供了管理接口。比如对主控时钟频率的调整、工作电压的改变、总线频率的调整甚至关闭、外围设备工作时钟的关闭等。有了硬件上的支持,合理的软件设计就成为节能的关键,一般可以把低功耗管理分为三个类别: -- 处理器电源管理 +- 处理器电源管理 主要实现方式:对 CPU 频率的动态管理,以及系统空闲时对工作模式的调整。 -- 设备电源管理 +- 设备电源管理 主要实现方式:关闭个别闲置设备 -- 系统平台电源管理 +- 系统平台电源管理 主要实现方式:针对特定系统平台的非常见设备具体定制。 随着物联网 (IoT) 的兴起,产品对功耗的需求越来越强烈。作为数据采集的传感器节点通常需要在电池供电时长期工作,而作为联网的 SOC 也需要有快速的响应功能和较低的功耗。 @@ -255,8 +255,8 @@ rt_tick_t (*timer_get_tick)(struct rt_pm *pm); 在某些休眠模式下(Light Sleep 或 Deep Sleep),内核心跳定时器可能会被停止,此时需要对启动一个定时器对休眠的时间进行计量,唤醒后对心跳补偿。时间补偿的定时器必须在该模式下仍能够正常工作,并唤醒系统,否则没有意义! -`timer_start` :启动低功耗定时器,入参为最近的下次任务就绪时间; -`timer_get_tick` :获取系统被唤醒的睡眠时间; +`timer_start` :启动低功耗定时器,入参为最近的下次任务就绪时间; +`timer_get_tick` :获取系统被唤醒的睡眠时间; `timer_stop` :用于系统唤醒后停止低功耗定时器。 **注意**:休眠模式的时间补偿需要在初始化阶段通过设置 timer_mask 的对应模式的 bit 控制开启。例如需要开启 Deep Sleep 模式下的时间补偿,在实现 timer 相关的 ops 接口后,初始化时设置相应的bit: diff --git a/rt-thread-version/rt-thread-standard/programming-manual/posix/posix.md b/rt-thread-version/rt-thread-standard/programming-manual/posix/posix.md index 47fedb3a7552dc0c3eab9c0b93eeda7346e79d07..768767e789f35e3c65131edd9d08986011e50a30 100644 --- a/rt-thread-version/rt-thread-standard/programming-manual/posix/posix.md +++ b/rt-thread-version/rt-thread-standard/programming-manual/posix/posix.md @@ -85,7 +85,7 @@ int pthread_create (pthread_t *tid, | start | 线程入口函数地址 | | arg | 传递给线程入口函数的参数 | |**返回**| —— | -| 0 | 成功 | +| 0 | 成功 | | EINVAL | 参数无效 | | ENOMEM | 动态分配内存失败 | @@ -164,7 +164,7 @@ int pthread_detach (pthread_t thread); |------|----------------------| | thread | 线程句柄(线程标识符) | |**返回**| —— | -| 0 | 成功 | +| 0 | 成功 | 调用此函数,如果 pthread 线程没有结束,则将 thread 线程属性的分离状态设置为 detached;当 thread 线程已经结束时,系统将回收 pthread 线程占用的资源。 @@ -263,7 +263,7 @@ int pthread_join (pthread_t thread, void**value_ptr); | thread | 线程句柄(线程标识符) | | value_ptr | 用户定义的指针,用来存储被等待线程的返回值地址,可由函数 pthread_join() 获取 | |**返回**| —— | -| 0 | 成功 | +| 0 | 成功 | | EDEADLK | 线程 join 自己 | | EINVAL | join 一个分离状态为 detached 的线程 | | ESRCH | 找不到 thread 线程 | @@ -490,7 +490,7 @@ int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr); | mutex | 互斥锁句柄,不能为 NULL | | attr | 指向互斥锁属性的指针,若该指针 NULL,则使用默认的属性。 | |**返回**| —— | -| 0 | 成功 | +| 0 | 成功 | | EINVAL | 参数无效 | 此函数会初始化 mutex 互斥锁,并根据 attr 指向的互斥锁属性对象设置 mutex 属性,成功初始化后互斥锁处于未上锁状态,线程可以获取,此函数是对 rt_mutex_init() 函数的封装。 @@ -509,7 +509,7 @@ int pthread_mutex_destroy(pthread_mutex_t *mutex); |----------|----------------------| | mutex | 互斥锁句柄,不能为 NULL | |**返回**| —— | -| 0 | 成功 | +| 0 | 成功 | | EINVAL | mutex 为空或者 mutex 已经被销毁过 | | EBUSY | 互斥锁正在被使用 | @@ -527,7 +527,7 @@ int pthread_mutex_lock(pthread_mutex_t *mutex); |----------|----------------------| | mutex | 互斥锁句柄,不能为 NULL | |**返回**| —— | -| 0 | 成功 | +| 0 | 成功 | | EINVAL | 参数无效 | | EDEADLK | 互斥锁 mutex 不为嵌套锁的情况下线程重复调用此函数 | @@ -543,7 +543,7 @@ int pthread_mutex_trylock(pthread_mutex_t *mutex); |----------|----------------------| | mutex | 互斥锁句柄,不能为 NULL | |**返回**| —— | -| 0 | 成功 | +| 0 | 成功 | | EINVAL | 参数无效 | | EDEADLK | 互斥锁 mutex 不为嵌套锁的情况下线程重复调用此函数 | | EBUSY | 互斥锁 mutex 已经被其他线程上锁 | @@ -560,7 +560,7 @@ int pthread_mutex_unlock(pthread_mutex_t *mutex); |----------|----------------------| | mutex | 互斥锁句柄,不能为 NULL | |**返回**| —— | -| 0 | 成功 | +| 0 | 成功 | | EINVAL | 参数无效 | | EPERM | 互斥锁 mutex 不为嵌套锁的情况下线程重复调用此函数 | | EBUSY | 解锁其他线程持有的类型为检错锁的互斥锁 | @@ -694,7 +694,7 @@ int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr); | cond | 条件变量句柄,不能为 NULL | | attr | 指向条件变量属性的指针,若为 NULL 则使用默认属性值 | |**返回**| —— | -| 0 | 成功 | +| 0 | 成功 | | EINVAL | 参数无效 | 此函数会初始化 cond 条件变量,并根据 attr 指向的条件变量属性设置其属性,此函数是对 rt_sem_init() 函数的一个封装,基于信号量实现。初始化成功后条件变量处于不可用状态。 @@ -715,7 +715,7 @@ int pthread_cond_destroy(pthread_cond_t *cond); |----|------------------------| | cond | 条件变量句柄,不能为 NULL | |**返回**| —— | -| 0 | 成功 | +| 0 | 成功 | | EINVAL | 参数无效 | | EPERM | 互斥锁 mutex 不为嵌套锁的情况下线程重复调用此函数 | | EBUSY | 条件变量正在被使用 | @@ -735,7 +735,7 @@ int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex); | cond | 条件变量句柄,不能为 NULL | | mutex | 指向互斥锁控制块的指针,不能为 NULL | |**返回**| —— | -| 0 | 成功 | +| 0 | 成功 | | EINVAL | 参数无效 | 此函数会以阻塞方式获取 cond 条件变量。线程等待条件变量前需要先将 mutex 互斥锁锁住,此函数首先判断条件变量是否可用,如果不可用则初始化一个条件变量,之后解锁 mutex 互斥锁,然后尝试获取一个信号量,当信号量值大于零时,表明信号量可用,线程将获得信号量,也就获得该条件变量,相应的信号量值会减 1。如果信号量的值等于零,表明信号量不可用,线程将阻塞直到信号量可用,之后将对 mutex 互斥锁再次上锁。 @@ -754,7 +754,7 @@ int pthread_cond_timedwait(pthread_cond_t *cond, | mutex | 指向互斥锁控制块的指针,不能为 NULL | | abstime | 指定的等待时间,单位是操作系统时钟节拍(OS Tick) | |**返回**| —— | -| 0 | 成功 | +| 0 | 成功 | | EINVAL | 参数无效 | | EPERM | 互斥锁 mutex 不为嵌套锁的情况下线程重复调用此函数 | | ETIMEDOUT | 超时 | @@ -771,7 +771,7 @@ int pthread_cond_signal(pthread_cond_t *cond); |----|------------------------| | cond | 条件变量句柄,不能为 NULL | |**返回**| —— | -| 0 | 成功 | +| 0 | 成功 | 此函数会发送一个信号且只唤醒一个等待 cond 条件变量的线程,是对 rt_sem_release() 函数的封装,也就是发送一个信号量。当信号量的值等于零,并且有线程等待这个信号量时,将唤醒等待在该信号量线程队列中的第一个线程,由它获取信号量。否则将把信号量的值加 1。 @@ -785,7 +785,7 @@ int pthread_cond_broadcast(pthread_cond_t *cond); |----|------------------------| | cond | 条件变量句柄,不能为 NULL | |**返回**| —— | -| 0 | 成功 | +| 0 | 成功 | | EINVAL | 参数无效 | 调用此函数将唤醒所有等待 cond 条件变量的线程。 @@ -948,7 +948,7 @@ int pthread_rwlock_init (pthread_rwlock_t *rwlock, | rwlock | 读写锁句柄,不能为 NULL | | attr | 指向读写锁属性的指针,RT-Thread 不使用此变量 | |**返回**| —— | -| 0 | 成功 | +| 0 | 成功 | | EINVAL | 参数无效 | 此函数会初始化一个 rwlock 读写锁。此函数使用默认值初始化读写锁控制块的信号量和条件变量,相关计数参数初始为 0 值。初始化后的读写锁处于未上锁状态。 @@ -968,7 +968,7 @@ int pthread_rwlock_destroy (pthread_rwlock_t *rwlock); |------|----------------------| | rwlock | 读写锁句柄,不能为 NULL | |**返回**| —— | -| 0 | 成功 | +| 0 | 成功 | | EINVAL | 参数无效 | | EBUSY | 读写锁目前正在被使用或者有线程等待该读写锁 | | EDEADLK | 死锁 | @@ -987,7 +987,7 @@ int pthread_rwlock_rdlock (pthread_rwlock_t *rwlock); |------|----------------------| | rwlock | 读写锁句柄,不能为 NULL | |**返回**| —— | -| 0 | 成功 | +| 0 | 成功 | | EINVAL | 参数无效 | | EDEADLK | 死锁 | @@ -1003,7 +1003,7 @@ int pthread_rwlock_tryrdlock (pthread_rwlock_t *rwlock); |------|----------------------| | rwlock | 读写锁句柄,不能为 NULL | |**返回**| —— | -| 0 | 成功 | +| 0 | 成功 | | EINVAL | 参数无效 | | EBUSY | 读写锁目前正在被使用或者有线程等待该读写锁 | | EDEADLK | 死锁 | @@ -1022,7 +1022,7 @@ int pthread_rwlock_timedrdlock (pthread_rwlock_t *rwlock, | rwlock | 读写锁句柄,不能为 NULL | | abstime | 指定的等待时间,单位是操作系统时钟节拍(OS Tick) | |**返回**| —— | -| 0 | 成功 | +| 0 | 成功 | | EINVAL | 参数无效 | | ETIMEDOUT | 超时 | | EDEADLK | 死锁 | @@ -1041,7 +1041,7 @@ int pthread_rwlock_wrlock (pthread_rwlock_t *rwlock); |------|----------------------| | rwlock | 读写锁句柄,不能为 NULL | |**返回**| —— | -| 0 | 成功 | +| 0 | 成功 | | EINVAL | 参数无效 | | EDEADLK | 死锁 | @@ -1057,7 +1057,7 @@ int pthread_rwlock_trywrlock (pthread_rwlock_t *rwlock); |------|----------------------| | rwlock | 读写锁句柄,不能为 NULL | |**返回**| —— | -| 0 | 成功 | +| 0 | 成功 | | EINVAL | 参数无效 | | EBUSY | 读写锁目前被写锁定或者有写着线程阻塞在该读写锁上 | | EDEADLK | 死锁 | @@ -1075,7 +1075,7 @@ int pthread_rwlock_timedwrlock (pthread_rwlock_t *rwlock, |--------------|---------------------| | rwlock abstime | 读写锁句柄,不能为 NULL 指定的等待时间,单位是操作系统时钟节拍(OS Tick) | |**返回**| —— | -| 0 | 成功 | +| 0 | 成功 | | EINVAL | 参数无效 | | ETIMEDOUT | 超时 | | EDEADLK | 死锁 | @@ -1092,7 +1092,7 @@ int pthread_rwlock_unlock (pthread_rwlock_t *rwlock); |------|----------------------| | rwlock | 读写锁句柄,不能为 NULL | |**返回**| —— | -| 0 | 成功 | +| 0 | 成功 | | EINVAL | 参数无效 | | EDEADLK | 死锁 | @@ -1224,7 +1224,7 @@ int pthread_barrier_init(pthread_barrier_t *barrier, | barrier | 屏障句柄 | | count | 指定的等待线程个数 | |**返回**| —— | -| 0 | 成功 | +| 0 | 成功 | | EINVAL | 参数无效 | 此函数会创建一个 barrier 屏障,并根据默认的参数对屏障控制块的条件变量和互斥锁初始化,初始化后指定的等待线程个数为 count 个,必须对应 count 个线程调用 pthread_barrier_wait()。 @@ -1241,7 +1241,7 @@ int pthread_barrier_destroy(pthread_barrier_t *barrier); |-------|--------| | barrier | 屏障句柄 | |**返回**| —— | -| 0 | 成功 | +| 0 | 成功 | | EINVAL | 参数无效 | 此函数会销毁一个 barrier 屏障。销毁之后屏障的属性及控制块参数将不在有效,但可以调用 pthread_barrier_init() 重新初始化。 @@ -1256,7 +1256,7 @@ int pthread_barrier_wait(pthread_barrier_t *barrier); |-------|--------| | barrier | 屏障句柄 | |**返回**| —— | -| 0 | 成功 | +| 0 | 成功 | | EINVAL | 参数无效 | 此函数同步等待在 barrier 前的线程,由每个线程主动调用,若屏障等待线程个数 count 不为 0,count 将减 1,若减 1 后 count 为 0,表明所有线程都已经到达栏杆前,所有到达的线程将被唤醒重新进入就绪状态,参与系统调度。若减一后 count 不为 0,表明还有线程没有到达屏障,调用的线程将阻塞直到所有线程到达屏障。 @@ -1421,7 +1421,7 @@ int sem_init(sem_t *sem, int pshared, unsigned int value); | value | 信号量初始值,表示信号量资源的可用数量 | | pshared | RT-Thread 未实现参数 | |**返回**| —— | -| 0 | 成功 | +| 0 | 成功 | | -1 | 失败 | 此函数初始化一个无名信号量 sem,根据给定的或默认的参数对信号量相关数据结构进行初始化,并把信号量放入信号量链表里。初始化后信号量值为给定的初始值 value。此函数是对 rt_sem_create() 函数的封装。 @@ -1436,8 +1436,8 @@ int sem_destroy(sem_t *sem); |----|----------| | sem | 信号量句柄 | |**返回**| —— | -| 0 | 成功 | -| -1 | 失败 | +| 0 | 成功 | +| -1 | 失败 | 此函数会销毁一个无名信号量 sem,并释放信号量占用的资源。 @@ -1456,8 +1456,8 @@ sem_t *sem_open(const char *name, int oflag, ...); | name | 信号量名称 | | oflag | 信号量的打开方式 | |**返回**| —— | -| 信号量句柄 | 成功 | -| NULL | 失败 | +| 信号量句柄 | 成功 | +| NULL | 失败 | 此函数会根据信号量名字 name 创建一个新的信号量或者打开一个已经存在的信号量。Oflag 的可选值有 0、O_CREAT 或 O_CREAT\|O_EXCL。如果 Oflag 设置为 O_CREAT 则会创建一个新的信号量。如果 Oflag 设置 O_CREAT\|O_EXCL,如果信号量已经存在则会返回 NULL,如果不存在则会创建一个新的信号量。如果 Oflag 设置为 0,信号量不存在则会返回 NULL。 @@ -1471,8 +1471,8 @@ int sem_unlink(const char *name); |----|----------| | name | 信号量名称 | |**返回**| —— | -| 0 | 成功 | -| -1 | 失败,信号量不存在 | +| 0 | 成功 | +| -1 | 失败,信号量不存在 | 此函数会根据信号量名称 name 查找该信号量,若信号量存在,则将该信号量标记为分离状态。之后检查引用计数,若值为 0,则立即删除信号量,若值不为 0,则等到所有持有该信号量的线程关闭信号量之后才会删除。 @@ -1486,8 +1486,8 @@ int sem_close(sem_t *sem); |----|----------| | sem | 信号量句柄 | |**返回**| —— | -| 0 | 成功 | -| -1 | 失败 | +| 0 | 成功 | +| -1 | 失败 | 当一个线程终止时,会对其占用的信号量执行此关闭操作。不论线程是自愿终止还是非自愿终止都会执行这个关闭操作,相当于是信号量的持有计数减 1。若减 1 后持有计数为 0 且信号量已经处于分离状态,则会删除 sem 信号量并释放其占有的资源。 @@ -1502,8 +1502,8 @@ int sem_getvalue(sem_t *sem, int *sval); | sem | 信号量句柄,不能为 NULL | | sval | 保存获取的信号量值地址, 不能为 NULL | |**返回**| —— | -| 0 | 成功 | -| -1 | 失败 | +| 0 | 成功 | +| -1 | 失败 | 此函数可以获取 sem 信号量的值,并保存在 sval 指向的内存里,可以知道信号量的资源数量。 @@ -1517,8 +1517,8 @@ int sem_wait(sem_t *sem); |----|----------------------| | sem | 信号量句柄,不能为 NULL | |**返回**| —— | -| 0 | 成功 | -| -1 | 失败 | +| 0 | 成功 | +| -1 | 失败 | 线程调用此函数获取信号量,是 rt_sem_take(sem,RT_WAITING_FOREVER) 函数的封装。若信号量值大于零,表明信号量可用,线程获得信号量,信号量值减 1。若信号量值等于 0,表明信号量不可用,线程阻塞进入挂起状态,并按照先进先出的方式排队等待,直到信号量可用。 @@ -1532,8 +1532,8 @@ int sem_trywait(sem_t *sem); |----|----------------------| | sem | 信号量句柄,不能为 NULL | |**返回**| —— | -| 0 | 成功 | -| -1 | 失败 | +| 0 | 成功 | +| -1 | 失败 | 此函数是 sem_wait() 函数的非阻塞版,是 rt_sem_take(sem,0) 函数的封装。当信号量不可用时,线程不会阻塞,而是直接返回。 @@ -1548,8 +1548,8 @@ int sem_timedwait(sem_t *sem, const struct timespec *abs_timeout); | sem | 信号量句柄,不能为 NULL | | abs_timeout | 指定的等待时间,单位是操作系统时钟节拍(OS Tick) | |**返回**| —— | -| 0 | 成功 | -| -1 | 失败 | +| 0 | 成功 | +| -1 | 失败 | 此函数和 sem_wait() 函数的区别在于,若信号量不可用,线程将阻塞 abs_timeout 时长,超时后函数返回 - 1,线程将被唤醒由阻塞态进入就绪态。 @@ -1563,8 +1563,8 @@ int sem_post(sem_t *sem); |----|----------------------| | sem | 信号量句柄,不能为 NULL | |**返回**| —— | -| 0 | 成功 | -| -1 | 失败 | +| 0 | 成功 | +| -1 | 失败 | 此函数将释放一个 sem 信号量,是 rt_sem_release() 函数的封装。若等待该信号量的线程队列不为空,表明有线程在等待该信号量,第一个等待该信号量的线程将由挂起状态切换到就绪状态,等待系统调度。若没有线程等待该信号量,该信号量值将加 1。 @@ -1721,8 +1721,8 @@ mqd_t mq_open(const char *name, int oflag, ...); | name | 消息队列名称 | | oflag | 消息队列打开方式 | |**返回**| —— | -| 消息队列句柄 | 成功 | -| NULL | 失败 | +| 消息队列句柄 | 成功 | +| NULL | 失败 | 此函数会根据消息队列的名字 name 创建一个新的消息队列或者打开一个已经存在的消息队列。Oflag 的可选值有 0、O_CREAT 或 O_CREAT\|O_EXCL。如果 Oflag 设置为 O_CREAT 则会创建一个新的消息队列。如果 Oflag 设置 O_CREAT\|O_EXCL,如果消息队列已经存在则会返回 NULL,如果不存在则会创建一个新的消息队列。如果 Oflag 设置为 0,消息队列不存在则会返回 NULL。 @@ -1736,8 +1736,8 @@ int mq_unlink(const char *name); |----|------------| | name | 消息队列名称 | |**返回**| —— | -| 0 | 成功 | -| -1 | 失败 | +| 0 | 成功 | +| -1 | 失败 | 此函数会根据消息队列名称 name 查找消息队列,若找到,则将消息队列置为分离状态,之后若持有计数为 0,则删除消息队列,并释放消息队列占有的资源。 @@ -1751,8 +1751,8 @@ int mq_close(mqd_t mqdes); |----------|------------| | mqdes | 消息队列句柄 | |**返回**| —— | -| 0 | 成功 | -| -1 | 失败 | +| 0 | 成功 | +| -1 | 失败 | 当一个线程终止时,会对其占用的消息队列执行此关闭操作。不论线程是自愿终止还是非自愿终止都会执行这个关闭操作,相当于是消息队列的持有计数减 1,若减 1 后持有计数为 0,且消息队列处于分离状态,则会删除 mqdes 消息队列并释放其占有的资源。 @@ -1772,8 +1772,8 @@ int mq_send(mqd_t mqdes, | msg_len | 发送的消息的长度 | | msg_prio | RT-Thread 未实现参数 | |**返回**| —— | -| 0 | 成功 | -| -1 | 失败 | +| 0 | 成功 | +| -1 | 失败 | 此函数用来向 mqdes 消息队列发送一条消息,是 rt_mq_send() 函数的封装。此函数把 msg_ptr 指向的消息添加到 mqdes 消息队列中,发送的消息长度 msg_len 必须小于或者等于创建消息队列时设置的最大消息长度。 @@ -1797,8 +1797,8 @@ int mq_timedsend(mqd_t mqdes, | msg_prio | RT-Thread 未实现参数 | | abs_timeout | 指定的等待时间,单位是操作系统时钟节拍(OS Tick) | |**返回**| —— | -| 0 | 成功 | -| -1 | 失败 | +| 0 | 成功 | +| -1 | 失败 | 目前 RT-Thread 不支持指定阻塞时间发送消息,但是函数接口已经实现,相当于调用 mq_send()。 @@ -1818,8 +1818,8 @@ ssize_t mq_receive(mqd_t mqdes, | msg_len | 发送的消息的长度 | | msg_prio | RT-Thread 未实现参数 | |**返回**| —— | -| 消息长度 | 成功 | -| -1 | 失败 | +| 消息长度 | 成功 | +| -1 | 失败 | 此函数会把 mqdes 消息队列里面最老的消息移除消息队列,并把消息放到 msg_ptr 指向的内存里。如果消息队列为空,调用 mq_receive() 函数的线程将会阻塞,直到消息队列中消息可用。 @@ -1841,8 +1841,8 @@ ssize_t mq_timedreceive(mqd_t mqdes, | msg_prio | RT-Thread 未实现参数 | | abs_timeout | 指定的等待时间,单位是操作系统时钟节拍(OS Tick) | |**返回**| —— | -| 消息长度 | 成功 | -| -1 | 失败 | +| 消息长度 | 成功 | +| -1 | 失败 | 此函数和 mq_receive() 函数的区别在于,若消息队列为空,线程将阻塞 abs_timeout 时长,超时后函数直接返回 - 1,线程将被唤醒由阻塞态进入就绪态。 @@ -2014,7 +2014,7 @@ int pthread_attr_destroy(pthread_attr_t *attr); |----|------------------| | attr | 指向线程属性的指针 | |**返回**| —— | -| 0 | 成功 | +| 0 | 成功 | 使用 pthread_attr_init() 函数会使用默认值初始化线程属性结构体 attr,等同于调用线程初始化函数时将此参数设置为 NULL,使用前需要定义一个 pthread_attr_t 属性对象,此函数必须在 pthread_create() 函数之前调用。 @@ -2034,9 +2034,9 @@ int pthread_attr_getdetachstate(pthread_attr_t const *attr, int *state); | attr | 指向线程属性的指针 | | state | 线程分离状态 | |**返回**| —— | -| 0 | 成功 | +| 0 | 成功 | -线程分离状态属性值 state 可以是 PTHREAD_CREATE_JOINABL(非分离)和 +线程分离状态属性值 state 可以是 PTHREAD_CREATE_JOINABL(非分离)和 PTHREAD_CREATE_DETACHED(分离)。 线程的分离状态决定一个线程以什么样的方式来回收自己运行结束后占用的资源。线程的分离状态有 2 种:joinable 或者 detached。当线程创建后,应该调用 pthread_join() 或者 pthread_detach() 回收线程结束运行后占用的资源。如果线程的分离状态为 joinable 其他线程可以调用 pthread_join() 函数等待该线程结束并获取线程返回值,然后回收线程占用的资源。分离状态为 detached 的线程不能被其他的线程所 join,自己运行结束后,马上释放系统资源。 @@ -2068,7 +2068,7 @@ int pthread_attr_getschedparam(pthread_attr_t const *attr, | attr | 指向线程属性的指针 | | param | 指向调度参数的指针 | |**返回**| —— | -| 0 | 成功 | +| 0 | 成功 | pthread_attr_setschedparam() 函数设置线程的优先级。使用 param 对线程属性优先级赋值。 @@ -2097,7 +2097,7 @@ int pthread_attr_getstacksize(pthread_attr_t const *attr, size_t *stack_size); | attr | 指向线程属性的指针 | | stack_size | 线程堆栈大小 | |**返回**| —— | -| 0 | 成功 | +| 0 | 成功 | pthread_attr_setstacksize() 函数可以设置堆栈大小,单位是字节。在大多数系统中需要做栈空间地址对齐(例如 ARM 体系结构中需要向 4 字节地址对齐)。 @@ -2120,7 +2120,7 @@ int pthread_attr_getstack(pthread_attr_t const *attr, | stack_size | 线程堆栈大小 | | stack_base | 线程堆栈地址 | |**返回**| —— | -| 0 | 成功 | +| 0 | 成功 | #### 线程属性相关函数 @@ -2136,9 +2136,9 @@ int pthread_attr_getscope(pthread_attr_t const *attr); | attr | 指向线程属性的指针 | | scope | 线程作用域 | |**返回**| —— | -| 0 | scope 为 PTHREAD_SCOPE_SYSTEM | -| EOPNOTSUPP | scope 为 PTHREAD_SCOPE_PROCESS | -| EINVAL | scope 为 PTHREAD_SCOPE_SYSTEM | +| 0 | scope 为 PTHREAD_SCOPE_SYSTEM | +| EOPNOTSUPP | scope 为 PTHREAD_SCOPE_PROCESS | +| EINVAL | scope 为 PTHREAD_SCOPE_SYSTEM | #### 线程属性示例代码 @@ -2220,7 +2220,7 @@ int pthread_cancel(pthread_t thread); |------|--------| | thread | 线程句柄 | |**返回**| —— | -| 0 | 成功 | +| 0 | 成功 | 此函数发送取消请求给 thread 线程。Thread 线程是否会对取消请求做出回应以及什么时候做出回应依赖于线程取消的状态及类型。 @@ -2237,8 +2237,8 @@ int pthread_setcancelstate(int state, int *oldstate); | state | 有两种值:PTHREAD_CANCEL_ENABLE:取消使能 PTHREAD_CANCEL_DISABLE:取消不使能(线程创建时的默认值) | | oldstate | 保存原来的取消状态 | |**返回**| —— | -| 0 | 成功 | -| EINVAL | state 非 PTHREAD_CANCEL_ENABLE 或者 PTHREAD_CANCEL_DISABLE | +| 0 | 成功 | +| EINVAL | state 非 PTHREAD_CANCEL_ENABLE 或者 PTHREAD_CANCEL_DISABLE | 此函数设置取消状态,由线程自己调用。取消使能的线程将会对取消请求做出反应,而取消没有使能的线程不会对取消请求做出反应。 @@ -2255,7 +2255,7 @@ int pthread_setcanceltype(int type, int *oldtype); | type | 有 2 种值:PTHREAD_CANCEL_DEFFERED:线程收到取消请求后继续运行至下一个取消点再结束。(线程创建时的默认值)PTHREAD_CANCEL_ASYNCHRONOUS:线程立即结束。 | | oldtype | 保存原来的取消类型 | |**返回**| —— | -| 0 | 成功 | +| 0 | 成功 | | EINVAL | state 非 PTHREAD_CANCEL_DEFFERED 或者 PTHREAD_CANCEL_ASYNCHRONOUS | #### 设置取消点 @@ -2397,7 +2397,7 @@ int pthread_once(pthread_once_t * once_control, void (*init_routine) (void)); | once_control | 控制变量 | | init_routine | 执行函数 | |**返回**| —— | -| 0 | 成功 | +| 0 | 成功 | 有时候我们需要对一些变量只进行一次初始化。如果我们进行多次初始化程序就会出现错误。在传统的顺序编程中,一次性初始化经常通过使用布尔变量来管理。控制变量被静态初始化为 0,而任何依赖于初始化的代码都能测试该变量。如果变量值仍然为 0,则它能实行初始化,然后将变量置为 1。以后检查的代码将跳过初始化。 @@ -2430,8 +2430,8 @@ int pthread_equal (pthread_t t1, pthread_t t2); |----------|--------| | pthread_t | 线程句柄 | |**返回**| —— | -| 0 | 不相等 | -| 1 | 相等 | +| 0 | 不相等 | +| 1 | 相等 | #### 获取线程句柄 @@ -2468,8 +2468,8 @@ int pthread_mutexattr_destroy(pthread_mutexattr_t *attr); |----|------------------------| | attr | 指向互斥锁属性对象的指针 | |**返回**| —— | -| 0 | 成功 | -| EINVAL | 参数无效 | +| 0 | 成功 | +| EINVAL | 参数无效 | pthread_mutexattr_init() 函数将使用默认值初始化 attr 指向的属性对象,等同于调用 pthread_mutex_init() 函数时将属性参数设置为 NULL。 @@ -2487,8 +2487,8 @@ int pthread_mutexattr_getpshared(pthread_mutexattr_t *attr, int *pshared); | type | 互斥锁类型 | | pshared | 有 2 个可选值: PTHREAD_PROCESS_PRIVATE:默认值,用于仅同步该进程中的线程。PTHREAD_PROCESS_SHARED:用于同步该进程和其他进程中的线程。 | |**返回**| —— | -| 0 | 成功 | -| EINVAL | 参数无效 | +| 0 | 成功 | +| EINVAL | 参数无效 | #### 互斥锁类型 @@ -2502,8 +2502,8 @@ int pthread_mutexattr_gettype(const pthread_mutexattr_t *attr, int *type); | type | 互斥锁类型 | | attr | 指向互斥锁属性对象的指针 | |**返回**| —— | -| 0 | 成功 | -| EINVAL | 参数无效 | +| 0 | 成功 | +| EINVAL | 参数无效 | 互斥锁的类型决定了一个线程在获取一个互斥锁时的表现方式,RT-Thread 实现了 3 种互斥锁类型: @@ -2525,8 +2525,8 @@ int pthread_condattr_init(pthread_condattr_t *attr); |----|--------------------------| | attr | 指向条件变量属性对象的指针 | |**返回**| —— | -| 0 | 成功 | -| EINVAL | 参数无效 | +| 0 | 成功 | +| EINVAL | 参数无效 | #### 获取条件变量作用域 @@ -2538,8 +2538,8 @@ int pthread_mutexattr_getpshared(pthread_mutexattr_t *attr, int *pshared); |----|--------------------------| | attr | 指向条件变量属性对象的指针 | |**返回**| —— | -| 0 | 成功 | -| EINVAL | 参数无效 | +| 0 | 成功 | +| EINVAL | 参数无效 | ### 读写锁属性 @@ -2553,8 +2553,8 @@ int pthread_rwlockattr_init (pthread_rwlockattr_t *attr); |----|--------------------| | attr | 指向读写锁属性的指针 | |**返回**| —— | -| 0 | 成功 | -|-1 | 参数无效 | +| 0 | 成功 | +|-1 | 参数无效 | 该函数会使用默认值 PTHREAD_PROCESS_PRIVATE 初始化读写锁属性 attr。 @@ -2569,8 +2569,8 @@ int pthread_rwlockattr_getpshared (const pthread_rwlockattr_t *attr, int *pshare | attr | 指向读写锁属性的指针 | | pshared | 指向保存读写锁作用域的指针 | |**返回**| —— | -| 0 | 成功 | -|-1 | 参数无效 | +| 0 | 成功 | +|-1 | 参数无效 | pshared 指向的内存保存的值为 PTHREAD_PROCESS_PRIVATE。 @@ -2586,8 +2586,8 @@ int pthread_barrierattr_init(pthread_barrierattr_t *attr); |----|------------------| | attr | 指向屏障属性的指针 | |**返回**| —— | -| 0 | 成功 | -|-1 | 参数无效 | +| 0 | 成功 | +|-1 | 参数无效 | 改函数会使用默认值 PTHREAD_PROCESS_PRIVATE 初始化屏障属性 attr。 @@ -2602,8 +2602,8 @@ int pthread_barrierattr_getpshared(const pthread_barrierattr_t *attr, int *pshar | attr | 指向屏障属性的指针 | | pshared | 指向保存屏障作用域数据的指针 | |**返回**| —— | -| 0 | 成功 | -|-1 | 参数无效 | +| 0 | 成功 | +|-1 | 参数无效 | ### 消息队列属性 @@ -2628,5 +2628,5 @@ int mq_getattr(mqd_t mqdes, struct mq_attr *mqstat); | mqdes | 指向消息队列控制块的指针 | | mqstat | 指向保存获取数据的指针 | |**返回**| —— | -| 0 | 成功 | -|-1 | 参数无效 | +| 0 | 成功 | +|-1 | 参数无效 | diff --git a/rt-thread-version/rt-thread-standard/programming-manual/rtlink/rtlink.md b/rt-thread-version/rt-thread-standard/programming-manual/rtlink/rtlink.md index 77dd55397d34dfebf942b5329847f40c0af8c229..93d779f676249a09baadeb3ad8408a993c793377 100644 --- a/rt-thread-version/rt-thread-standard/programming-manual/rtlink/rtlink.md +++ b/rt-thread-version/rt-thread-standard/programming-manual/rtlink/rtlink.md @@ -30,10 +30,10 @@ rtthread ![rtlink整体框架](./figures/rtlink应用框架.jpg) -- 最上层为 APP 应用服务层,提供发送和注册接收回调两个操作接口,使用非常便捷; -- 第二层为 RT-Link 传输层,是 RT-Link 核心功能的实现,用来保证数据传输功能的可靠稳定。 -- 第三层为 hardware 链路层,是用来对接具体的硬件端口,例如 UART、SPI、USB 等; -- 最下层为设备的 BSP 驱动层。 +- 最上层为 APP 应用服务层,提供发送和注册接收回调两个操作接口,使用非常便捷; +- 第二层为 RT-Link 传输层,是 RT-Link 核心功能的实现,用来保证数据传输功能的可靠稳定。 +- 第三层为 hardware 链路层,是用来对接具体的硬件端口,例如 UART、SPI、USB 等; +- 最下层为设备的 BSP 驱动层。 # 使用指南 @@ -73,7 +73,7 @@ rt_err_t rt_link_service_detach(rt_link_service_t service); ```c int rt_link_init(void); ``` -默认为自动初始化,可根据具体应用决定是否开启自动初始化,如需关闭自动初始化可在 `rtlink.h` 中注释掉宏定义 `RT_LINK_AUTO_INIT` +默认为自动初始化,可根据具体应用决定是否开启自动初始化,如需关闭自动初始化可在 `rtlink.h` 中注释掉宏定义 `RT_LINK_AUTO_INIT` | 返回值 | 描述 | | ------ | ---------- | @@ -229,8 +229,8 @@ rt_size_t rt_link_hw_write_cb(void *data, rt_size_t length); rt_err_t rt_link_receive_example_callback(void *data, rt_size_t length) { LOG_I("recv data %d",length); - LOG_HEX("example",8,data,length); /* 使用此接口打印 16 进制数据需要开启 ulog 组件*/ - rt_free(data); /* data 指向的空间由 rtlink 动态申请,应用层使用完毕后自行释放 */ + LOG_HEX("example",8,data,length); /* 使用此接口打印 16 进制数据需要开启 ulog 组件*/ + rt_free(data); /* data 指向的空间由 rtlink 动态申请,应用层使用完毕后自行释放 */ return RT_EOK; } diff --git a/rt-thread-version/rt-thread-standard/programming-manual/sal/sal.md b/rt-thread-version/rt-thread-standard/programming-manual/sal/sal.md index 64282c95a10aa9ac63c619649f887084932f248b..518981d4f9afe8db3f6c3a674e12e3338729cb80 100644 --- a/rt-thread-version/rt-thread-standard/programming-manual/sal/sal.md +++ b/rt-thread-version/rt-thread-standard/programming-manual/sal/sal.md @@ -133,7 +133,7 @@ TLS(Transport Layer Security,传输层安全协议) 是建立在传输层 TC #include #include -#include +#include #include /* RT-Thread 官网,支持 TLS 功能 */ @@ -169,7 +169,7 @@ void sal_tls_test(void) rt_kprintf("Socket error\n"); goto __exit; } - + /* 初始化预连接的服务端地址 */ server_addr.sin_family = AF_INET; server_addr.sin_port = htons(SAL_TLS_PORT); @@ -189,7 +189,7 @@ void sal_tls_test(void) rt_kprintf("send error,close the socket.\n"); goto __exit; } - + /* 接收并打印响应的数据,使用加密数据传输 */ bytes_received = recv(sock, recv_data, SAL_TLS_BUFSZ - 1, 0); if (bytes_received <= 0) @@ -197,7 +197,7 @@ void sal_tls_test(void) rt_kprintf("received error,close the socket.\n"); goto __exit; } - + rt_kprintf("recv data:\n"); for (i = 0; i < bytes_received; i++) { @@ -240,7 +240,7 @@ RT-Thread Components ---> Socket abstraction layer ---> [*] Enable socket abstraction layer protocol stack implement ---> - [ ] Support lwIP stack + [ ] Support lwIP stack [ ] Support AT Commands stack [ ] Support MbedTLS protocol [*] Enable BSD socket operated by file system API @@ -322,7 +322,7 @@ static int bing_test(int argc, char **argv) { struct sockaddr_in client_addr; struct sockaddr_in server_addr; - struct netdev *netdev = RT_NULL; + struct netdev *netdev = RT_NULL; int sockfd = -1; if (argc != 2) @@ -377,7 +377,7 @@ static int bing_test(int argc, char **argv) { rt_kprintf("socket connect success!\n"); } - + /* 关闭连接 */ closesocket(sockfd); return RT_EOK; @@ -719,7 +719,7 @@ struct sal_proto_family #include #include /* SAL 组件结构体存放头文件 */ #include /* AT Socket 相关头文件 */ -#include +#include #include /* 网卡功能相关头文件 */ @@ -794,7 +794,7 @@ static const struct proto_ops at_inet_stream_ops = #endif /* SAL_USING_POSIX */ }; -static const struct sal_netdb_ops at_netdb_ops = +static const struct sal_netdb_ops at_netdb_ops = { at_gethostbyname, NULL, diff --git a/rt-thread-version/rt-thread-standard/programming-manual/smp/smp.md b/rt-thread-version/rt-thread-standard/programming-manual/smp/smp.md index 2ee45507c233731358348cd4acee9bd931ed9aa3..504041809285ae1bb2c84828eabd90173804159a 100644 --- a/rt-thread-version/rt-thread-standard/programming-manual/smp/smp.md +++ b/rt-thread-version/rt-thread-standard/programming-manual/smp/smp.md @@ -239,4 +239,4 @@ RT-Thead 采用直接映射的方式,内核和所有任务共享同一个地 ![image-20210508144258754](figures/image-20210508144258754.png) -该值在每次 tick 中断被触发时重新设置,中断处理代码见上面 OS tick 的说明。如果目标平台的工作频率与上述值不一致,修改函数 `gt_set_interval()` 的参数进行设置。 \ No newline at end of file +该值在每次 tick 中断被触发时重新设置,中断处理代码见上面 OS tick 的说明。如果目标平台的工作频率与上述值不一致,修改函数 `gt_set_interval()` 的参数进行设置。 diff --git a/rt-thread-version/rt-thread-standard/programming-manual/ulog/ulog.md b/rt-thread-version/rt-thread-standard/programming-manual/ulog/ulog.md index 7b302457940813d1b83ac8ead0eddbfa566a9dac..272481301d78d1c855ae5d57aa373a8811518e27 100644 --- a/rt-thread-version/rt-thread-standard/programming-manual/ulog/ulog.md +++ b/rt-thread-version/rt-thread-standard/programming-manual/ulog/ulog.md @@ -49,27 +49,27 @@ ENV 工具中使用 menuconfig 配置 ulog 的路径如下所示: ulog 配置选项说明如下所示,一般情况下使用默认配置即可: ```c -[*] Enable ulog /* 使能 ulog */ +[*] Enable ulog /* 使能 ulog */ The static output log level./* 选择静态的日志输出级别。选择完成后,比设定级别低的日志(这里特指使用 LOG_X API 的日志)将不会被编译到 ROM 中 */ -[ ] Enable ISR log. /* 使能中断 ISR 日志,即在 ISR 中也可以使用日志输出 API */ -[*] Enable assert check. /* 使能断言检查。关闭后,断言的日志将不会被编译到 ROM 中 */ -(128) The log's max width. /* 日志的最大长度。由于 ulog 的日志 API 按行作为单位,所以这个长度也代表一行日志的最大长度 */ +[ ] Enable ISR log. /* 使能中断 ISR 日志,即在 ISR 中也可以使用日志输出 API */ +[*] Enable assert check. /* 使能断言检查。关闭后,断言的日志将不会被编译到 ROM 中 */ +(128) The log's max width. /* 日志的最大长度。由于 ulog 的日志 API 按行作为单位,所以这个长度也代表一行日志的最大长度 */ [ ] Enable async output mode. /* 使能异步日志输出模式。开启这个模式后,日志不会立刻输出到后端,而是先缓存起来,然后交给日志输出线程(例如:idle 线程)去输出 */ - log format ---> /* 配置日志的格式,例如:时间信息,颜色信息,线程信息,是否支持浮点等等 */ -[*] Enable console backend. /* 使能控制台作为后端。使能后日志可以输出到控制台串口上。建议保持开启。 */ + log format ---> /* 配置日志的格式,例如:时间信息,颜色信息,线程信息,是否支持浮点等等 */ +[*] Enable console backend. /* 使能控制台作为后端。使能后日志可以输出到控制台串口上。建议保持开启。 */ [ ] Enable runtime log filter. /* 使能运行时的日志过滤器,即动态过滤。使能后,日志将支持按标签、关键词等方式,在系统运行时进行动态过滤。 */ ``` **配置日志的格式(log format)选项描述如下所示:** ```c -[ ] Enable float number support. It will using more thread stack. /* 浮点型数字的支持(传统的 rtdbg/rt_kprintf 均不支持浮点数日志) */ - [*] Enable color log. /* 带颜色的日志 */ - [*] Enable time information. /* 时间信息 */ +[ ] Enable float number support. It will using more thread stack. /* 浮点型数字的支持(传统的 rtdbg/rt_kprintf 均不支持浮点数日志) */ + [*] Enable color log. /* 带颜色的日志 */ + [*] Enable time information. /* 时间信息 */ [ ] Enable timestamp format for time. /* 包括时间戳 */ - [*] Enable level information. /* 级别信息 */ - [*] Enable tag information. /* 标签信息 */ - [ ] Enable thread information. /* 线程信息 */ + [*] Enable level information. /* 级别信息 */ + [*] Enable tag information. /* 标签信息 */ + [ ] Enable thread information. /* 线程信息 */ ``` ### 日志级别 @@ -355,7 +355,7 @@ static struct ulog_backend console; /* 控制台后端输出函数 */ void ulog_console_backend_output(struct ulog_backend *backend, rt_uint32_t level, const char *tag, rt_bool_t is_raw, const char *log, size_t len) { - ... + ... /* 输出日志到控制台 */ ... } @@ -430,10 +430,10 @@ struct ulog_backend 异步模式相关配置选项描述如下所示: ```c -[*] Enable async output mode. /* 使能异步模式 */ -(2048) The async output buffer size. /* 异步缓冲区大小,默认为 2048*/ -[*] Enable async output by thread. /* 是否启用 ulog 里异步日志输出线程,该线程运行时将会等待日志通知,然后输出日志到所有的后端。该选项默认开启,如果想要修改为其他线程,例如:idle 线程,可关闭此选项。 */ -(1024) The async output thread stack size. /* 异步输出线程的堆栈大小,默认为 1024 */ +[*] Enable async output mode. /* 使能异步模式 */ +(2048) The async output buffer size. /* 异步缓冲区大小,默认为 2048*/ +[*] Enable async output by thread. /* 是否启用 ulog 里异步日志输出线程,该线程运行时将会等待日志通知,然后输出日志到所有的后端。该选项默认开启,如果想要修改为其他线程,例如:idle 线程,可关闭此选项。 */ +(1024) The async output thread stack size. /* 异步输出线程的堆栈大小,默认为 1024 */ (30) The async output thread stack priority./* 异步输出线程的优先级,默认为 30*/ ``` diff --git a/rt-thread-version/rt-thread-standard/programming-manual/utest/utest.md b/rt-thread-version/rt-thread-standard/programming-manual/utest/utest.md index 92924905b2465ec23ef45b032d38e6287a7ba592..2bb872cc4d07fdd2252a494f39deac852fde1b6b 100644 --- a/rt-thread-version/rt-thread-standard/programming-manual/utest/utest.md +++ b/rt-thread-version/rt-thread-standard/programming-manual/utest/utest.md @@ -229,12 +229,12 @@ utest_run [-thread or -help] [testcase name] [loop num] ```c msh />utest_list -[14875] I/utest: Commands list : +[14875] I/utest: Commands list : [14879] I/utest: [testcase name]:components.filesystem.dfs.dfs_api_tc; [run timeout]:30 [14889] I/utest: [testcase name]:components.filesystem.posix.posix_api_tc; [run timeout]:30 [14899] I/utest: [testcase name]:packages.iot.netutils.iperf.iperf_tc; [run timeout]:30 msh /> -msh />utest_run components.filesystem.dfs.dfs_api_tc +msh />utest_run components.filesystem.dfs.dfs_api_tc [83706] I/utest: [==========] [ utest ] started [83712] I/utest: [----------] [ testcase ] (components.filesystem.dfs.dfs_api_tc) started [83721] I/testcase: in testcase func... diff --git a/rt-thread-version/rt-thread-standard/tutorial/beep-player/button.md b/rt-thread-version/rt-thread-standard/tutorial/beep-player/button.md index 30e2bc42a96380bba222a6aee4d3fe27f9809561..23031227ce9d9220df7342f8a6103b133b76674e 100644 --- a/rt-thread-version/rt-thread-standard/tutorial/beep-player/button.md +++ b/rt-thread-version/rt-thread-standard/tutorial/beep-player/button.md @@ -85,7 +85,7 @@ int my_button_register(struct my_button *button) /* 添加按键到管理列表 */ button_manage.button_list[button_manage.num++] = button; - + return 0; } ``` @@ -153,7 +153,7 @@ static void my_button_scan(void *param) else if (cnt_old >= MY_BUTTON_HOLD_MS / MY_BUTTON_SCAN_SPACE_MS) /* BUTTON_HOLD_UP */ { LOG_D("BUTTON_HOLD_UP"); - button_manage.button_list[i]->event = BUTTON_EVENT_HOLD_UP; + button_manage.button_list[i]->event = BUTTON_EVENT_HOLD_UP; MY_BUTTON_CALL(button_manage.button_list[i]->cb, (button_manage.button_list[i])); } } @@ -247,4 +247,4 @@ int main(void) [button.c/.h](https://github.com/Guozhanxin/RTT-BeepPlayer-pkg/tree/master/code/button) -[示例程序](https://github.com/Guozhanxin/RTT-BeepPlayer-pkg/blob/master/samples/main_2.c) \ No newline at end of file +[示例程序](https://github.com/Guozhanxin/RTT-BeepPlayer-pkg/blob/master/samples/main_2.c) diff --git a/rt-thread-version/rt-thread-standard/tutorial/beep-player/decode.md b/rt-thread-version/rt-thread-standard/tutorial/beep-player/decode.md index 807a4111d046d7907711ca6d7f3c449b92e7ff9d..e9682de9593d3f3691561fbe9627fc0595974081 100644 --- a/rt-thread-version/rt-thread-standard/tutorial/beep-player/decode.md +++ b/rt-thread-version/rt-thread-standard/tutorial/beep-player/decode.md @@ -26,16 +26,16 @@ ```c 音高由三位数字组成: - 个位是表示 1~7 这七个音符 - 十位是表示音符所在的音区:1-低音,2-中音,3-高音; - 百位表示这个音符是否要升半音: 0-不升,1-升半音。 - - 音长最多由三位数字组成: - 个位表示音符的时值,其对应关系是: - |数值(n): |0 |1 |2 |3 | 4 | 5 | 6 - |几分音符: |1 |2 |4 |8 |16 |32 |64 音符=2^n - 十位表示音符的演奏效果(0-2): 0-普通,1-连音,2-顿音 - 百位是符点位: 0-无符点,1-有符点 + 个位是表示 1~7 这七个音符 + 十位是表示音符所在的音区:1-低音,2-中音,3-高音; + 百位表示这个音符是否要升半音: 0-不升,1-升半音。 + + 音长最多由三位数字组成: + 个位表示音符的时值,其对应关系是: + |数值(n): |0 |1 |2 |3 | 4 | 5 | 6 + |几分音符: |1 |2 |4 |8 |16 |32 |64 音符=2^n + 十位表示音符的演奏效果(0-2): 0-普通,1-连音,2-顿音 + 百位是符点位: 0-无符点,1-有符点 ``` 将上面两只老虎的简谱编码成16进制的数据如下: @@ -205,7 +205,7 @@ int beep_song_decode(rt_uint16_t tone, rt_uint16_t length, rt_uint16_t *freq, rt range = tone / 10 % 10; //计算出高低音 sharp = tone / 100; //计算出是否升半 current_freq = freq_tab_new[sign_tab[note - 1] + sharp]; //查出对应音符的频率 - + if (note != 0) { if (range == 1) current_freq >>= 1; //低音 降八度 @@ -358,4 +358,4 @@ int main(void) [decode.c/.h](https://github.com/Guozhanxin/RTT-BeepPlayer-pkg/tree/master/code/decode) -[示例程序](https://github.com/Guozhanxin/RTT-BeepPlayer-pkg/blob/master/samples/main_4.c) \ No newline at end of file +[示例程序](https://github.com/Guozhanxin/RTT-BeepPlayer-pkg/blob/master/samples/main_4.c) diff --git a/rt-thread-version/rt-thread-standard/tutorial/beep-player/key.md b/rt-thread-version/rt-thread-standard/tutorial/beep-player/key.md index 14f6295e28556714d219f58243443e71e0b1b596..96790294b9fc6ed9991f1dcc623e197ed8a79a27 100644 --- a/rt-thread-version/rt-thread-standard/tutorial/beep-player/key.md +++ b/rt-thread-version/rt-thread-standard/tutorial/beep-player/key.md @@ -155,9 +155,9 @@ int key_init(void) btn_last.press_logic_level = KEY_PRESS_LEVEL; btn_last.hold_cyc_period = 100; btn_last.cb = (my_button_callback)btn_cb; - + btn_next = btn_play = btn_last; - + btn_last.pin = KEY_PLAY_PIN; btn_play.pin = KEY_LAST_PIN; btn_next.pin = KEY_NEXT_PIN; @@ -287,4 +287,4 @@ int main(void) [key.c/.h](https://github.com/Guozhanxin/RTT-BeepPlayer-pkg/tree/master/code/key) -[示例程序](https://github.com/Guozhanxin/RTT-BeepPlayer-pkg/blob/master/samples/main_6.c) \ No newline at end of file +[示例程序](https://github.com/Guozhanxin/RTT-BeepPlayer-pkg/blob/master/samples/main_6.c) diff --git a/rt-thread-version/rt-thread-standard/tutorial/beep-player/pin.md b/rt-thread-version/rt-thread-standard/tutorial/beep-player/pin.md index 880c65288b4e90f2666fb894c57ee96bf06636b7..4cd07891dde10368c0928c2d04c42a0c77874a8c 100644 --- a/rt-thread-version/rt-thread-standard/tutorial/beep-player/pin.md +++ b/rt-thread-version/rt-thread-standard/tutorial/beep-player/pin.md @@ -158,7 +158,7 @@ int main(void) led_toggle(); rt_thread_mdelay(500); } - + return 0; } ``` @@ -173,4 +173,4 @@ int main(void) [led.c/.h](https://github.com/Guozhanxin/RTT-BeepPlayer-pkg/tree/master/code/led) -[示例程序](https://github.com/Guozhanxin/RTT-BeepPlayer-pkg/blob/master/samples/main_1.c) \ No newline at end of file +[示例程序](https://github.com/Guozhanxin/RTT-BeepPlayer-pkg/blob/master/samples/main_1.c) diff --git a/rt-thread-version/rt-thread-standard/tutorial/beep-player/player.md b/rt-thread-version/rt-thread-standard/tutorial/beep-player/player.md index 3b6caa0aa62320e144ac3aa13ae051dc3b6a791c..b62a98805cc18e74f1ef6873cd9eb60713fc760a 100644 --- a/rt-thread-version/rt-thread-standard/tutorial/beep-player/player.md +++ b/rt-thread-version/rt-thread-standard/tutorial/beep-player/player.md @@ -79,10 +79,10 @@ struct player uint16_t song_time_pass; //已经播放的时间 uint16_t song_time_all; //总播放时间 void *song_sheet[PLAYER_SONG_NUM_MAX]; //歌曲列表 - + rt_sem_t sem_play; //用于播放状态控制的信号量 rt_thread_t play_thread; //播放的线程 - + struct audio_ops *audio; struct decode_ops *decode; }; @@ -129,10 +129,10 @@ static void player_entry(void *parameter) { /* 暂停播放时关闭音频设备*/ player->audio->close(); - + /* 等待播放的信号量 */ rt_sem_take(player->sem_play, RT_WAITING_FOREVER); - + /* 开始播放时打开音频设备*/ player->audio->open(); } @@ -164,17 +164,17 @@ int player_play(player_t player) { /* 关闭全局中断 */ level = rt_hw_interrupt_disable(); - + /* 设定播放状态为播放状态 */ player->status = PLAYER_RUNNING; - + /* 打开全局中断 */ rt_hw_interrupt_enable(level); - + /*释放信号量通知播放线程开始播放*/ rt_sem_release(player->sem_play); } - + return 0; } @@ -193,14 +193,14 @@ int player_stop(player_t player) { /* 关闭全局中断 */ level = rt_hw_interrupt_disable(); - + /* 设定播放状态为播放状态 */ player->status = PLAYER_STOP; - + /* 打开全局中断 */ rt_hw_interrupt_enable(level); } - + return 0; } ``` @@ -217,7 +217,7 @@ int player_last(player_t player) /* 关闭全局中断 */ level = rt_hw_interrupt_disable(); - + /* 将当前播放歌曲的序号 减一 */ if (player->song_current > 1) { @@ -227,28 +227,28 @@ int player_last(player_t player) { player->song_current = player->song_num; } - + /* 更新播放器的当前歌曲的播放时间以及总时间 */ player->song_time_pass = 0; - + /* 打开全局中断 */ rt_hw_interrupt_enable(level); - + player->decode->control(player->song_sheet[player->song_current - 1], DECODE_OPS_CMD_GET_LEN, &len); - + /* 关闭全局中断 */ level = rt_hw_interrupt_disable(); - + player->song_time_all = len; - + /* 打开全局中断 */ rt_hw_interrupt_enable(level); - + if (player->status != PLAYER_RUNNING) { player_play(player); } - + return 0; } ``` @@ -265,7 +265,7 @@ int player_next(player_t player) /* 关闭全局中断 */ level = rt_hw_interrupt_disable(); - + /* 将当前播放歌曲的序号 加一 */ if (player->song_current < player->song_num) { @@ -275,28 +275,28 @@ int player_next(player_t player) { player->song_current = 1; } - + /* 更新播放器的当前歌曲的播放时间以及总时间 */ player->song_time_pass = 0; - + /* 打开全局中断 */ rt_hw_interrupt_enable(level); - + player->decode->control(player->song_sheet[player->song_current - 1], DECODE_OPS_CMD_GET_LEN, &len); - + /* 关闭全局中断 */ level = rt_hw_interrupt_disable(); - + player->song_time_all = len; - + /* 打开全局中断 */ rt_hw_interrupt_enable(level); - + if (player->status != PLAYER_RUNNING) { player_play(player); } - + return 0; } ``` @@ -376,14 +376,14 @@ int player_show(player_t player) uint16_t percent; rt_kprintf("*********** Beep Player ***********\n"); - + /* 打印歌单 */ for (i = 0; i < player->song_num; i++) { player->decode->control(player->song_sheet[i], DECODE_OPS_CMD_GET_NAME, name); rt_kprintf("%02d. %s\n", i + 1, name); } - + /* 打印当前播放状态 */ if (PLAYER_RUNNING == player->status) { @@ -393,18 +393,18 @@ int player_show(player_t player) { rt_kprintf("<--- 暂停播放:"); } - + /* 打印当前歌曲 */ player->decode->control(player->song_sheet[player->song_current - 1], DECODE_OPS_CMD_GET_NAME, name); rt_kprintf("%s", name); rt_kprintf("--->\n"); - + /* 打印播放进度 */ percent = player->song_time_pass * 100 / player->song_time_all; rt_kprintf("播放进度:%02d%% 音量大小:%02d%%\n", percent, player->volume); - + rt_kprintf("***********************************\n"); - + return 0; } ``` @@ -424,13 +424,13 @@ int player_add_song(player_t player, void *song) } /* 关闭全局中断 */ level = rt_hw_interrupt_disable(); - + player->song_sheet[player->song_num] = song; player->song_num++; - + /* 打开全局中断 */ rt_hw_interrupt_enable(level); - + return 0; } ``` @@ -450,32 +450,32 @@ int player_start(player_t player) { return -RT_ERROR; } - + if (player->song_num == 0) { return -1; } /* 调用接口初始化解码器 */ player->decode->init(); - + player->status = PLAYER_STOP; player->volume = PLAYER_SOUND_SIZE_DEFAULT; player->song_current = 1; player->song_time_pass = 0; player->decode->control(player->song_sheet[player->song_current - 1], DECODE_OPS_CMD_GET_LEN, &len); player->song_time_all = len; - + /* 调用接口初始化音频设备 */ player->audio->init(); player->audio->control(AUDIO_OPS_CMD_SET_VOL, &player->volume); - + /* 初始化动态信号量 */ player->sem_play = rt_sem_create("sem_play", 0, RT_IPC_FLAG_FIFO); if (player->sem_play == RT_NULL) { return -RT_ERROR; } - + /* 创建动态线程 */ player->play_thread = rt_thread_create("player", player_entry, player, @@ -490,7 +490,7 @@ int player_start(player_t player) return -RT_ERROR; } inited = 1; - + return 0; } ``` @@ -673,7 +673,7 @@ int audio_write(void *buffer, int size) rt_thread_mdelay(data->sound_len); beep_off(); rt_thread_mdelay(data->nosound_len); - + return size; } int decode_control(void *song, int cmd, void *arg) @@ -702,19 +702,19 @@ int player_init(void) audio.close = beep_off; audio.control = audio_control; audio.write = audio_write; - + player.decode = &decode; player.audio = &audio; - + player_add_song(&player, (void *)&song1); player_add_song(&player, (void *)&song2); player_add_song(&player, (void *)&song3); player_add_song(&player, (void *)&song4); player_start(&player); - + player_control(&player, PLAYER_CMD_PLAY, RT_NULL); player_show(&player); - + return 0; } diff --git a/rt-thread-version/rt-thread-standard/tutorial/beep-player/pwm.md b/rt-thread-version/rt-thread-standard/tutorial/beep-player/pwm.md index cc655bf4af7053b6247a866da6f0f9a8a203c7c9..ddabf7a7c5fc662616d02d3ab32cff60cc86e19d 100644 --- a/rt-thread-version/rt-thread-standard/tutorial/beep-player/pwm.md +++ b/rt-thread-version/rt-thread-standard/tutorial/beep-player/pwm.md @@ -208,4 +208,4 @@ int main(void) [beep.c/.h](https://github.com/Guozhanxin/RTT-BeepPlayer-pkg/tree/master/code/beep) -[示例程序](https://github.com/Guozhanxin/RTT-BeepPlayer-pkg/blob/master/samples/main_3.c) \ No newline at end of file +[示例程序](https://github.com/Guozhanxin/RTT-BeepPlayer-pkg/blob/master/samples/main_3.c) diff --git a/rt-thread-version/rt-thread-standard/tutorial/experimental-manual/preparations.md b/rt-thread-version/rt-thread-standard/tutorial/experimental-manual/preparations.md index 94d0500671cb8c7d017db14f87dc6425ca71f6ed..65a4593d4d341d17cdb25657500730d252b482bf 100644 --- a/rt-thread-version/rt-thread-standard/tutorial/experimental-manual/preparations.md +++ b/rt-thread-version/rt-thread-standard/tutorial/experimental-manual/preparations.md @@ -77,37 +77,37 @@ RT-Thread 提供 FinSH 功能,用于调试或查看系统信息,msh 表示 F ```c msh >help RT-Thread shell commands: -thread_sample - thread sample -timer_sample - timer sample -semaphore_sample - semaphore sample -mutex_sample - mutex sample -event_sample - event sample -mailbox_sample - mailbox sample -msgq_sample - msgq sample -signal_sample - signal sample -mempool_sample - mempool sample -dynmem_sample - dynmem sample -interrupt_sample - interrupt sample -idle_hook_sample - idle hook sample -producer_consumer - producer_consumer sample -timeslice_sample - timeslice sample -scheduler_hook - scheduler_hook sample -pri_inversion - prio_inversion sample -version - show RT-Thread version information -list_thread - list thread -list_sem - list semaphore in system -list_event - list event in system -list_mutex - list mutex in system -list_mailbox - list mail box in system -list_msgqueue - list message queue in system -list_memheap - list memory heap in system -list_mempool - list memory pool in system -list_timer - list timer in system -list_device - list device in system -help - RT-Thread shell help. -ps - List threads in the system. -time - Execute command with time. -free - Show the memory usage in the system. +thread_sample - thread sample +timer_sample - timer sample +semaphore_sample - semaphore sample +mutex_sample - mutex sample +event_sample - event sample +mailbox_sample - mailbox sample +msgq_sample - msgq sample +signal_sample - signal sample +mempool_sample - mempool sample +dynmem_sample - dynmem sample +interrupt_sample - interrupt sample +idle_hook_sample - idle hook sample +producer_consumer - producer_consumer sample +timeslice_sample - timeslice sample +scheduler_hook - scheduler_hook sample +pri_inversion - prio_inversion sample +version - show RT-Thread version information +list_thread - list thread +list_sem - list semaphore in system +list_event - list event in system +list_mutex - list mutex in system +list_mailbox - list mail box in system +list_msgqueue - list message queue in system +list_memheap - list memory heap in system +list_mempool - list memory pool in system +list_timer - list timer in system +list_device - list device in system +help - RT-Thread shell help. +ps - List threads in the system. +time - Execute command with time. +free - Show the memory usage in the system. msh > ``` diff --git a/rt-thread-version/rt-thread-standard/tutorial/experimental-manual/timeslice_sample/timeslice_sample.md b/rt-thread-version/rt-thread-standard/tutorial/experimental-manual/timeslice_sample/timeslice_sample.md index faba44884300ea25cb0b885c23c6fb0eb07f7912..e1e25ec17b60a5a6e8808c38f7cd9cc83f34af07 100644 --- a/rt-thread-version/rt-thread-standard/tutorial/experimental-manual/timeslice_sample/timeslice_sample.md +++ b/rt-thread-version/rt-thread-standard/tutorial/experimental-manual/timeslice_sample/timeslice_sample.md @@ -52,8 +52,8 @@ RT-Thread 示例代码都通过 MSH_CMD_EXPORT 将示例初始函数导出到 ms ```c #include -#define THREAD_STACK_SIZE 1024 -#define THREAD_PRIORITY 20 +#define THREAD_STACK_SIZE 1024 +#define THREAD_PRIORITY 20 #define THREAD_TIMESLICE 10 ``` diff --git a/rt-thread-version/rt-thread-standard/tutorial/kernel/kernel-video.md b/rt-thread-version/rt-thread-standard/tutorial/kernel/kernel-video.md index cec1f24d4b51dd370538dfda1945c87eeda1ec21..62f9a78ac2cf4656bc24c3607cba1b5fd6533a60 100644 --- a/rt-thread-version/rt-thread-standard/tutorial/kernel/kernel-video.md +++ b/rt-thread-version/rt-thread-standard/tutorial/kernel/kernel-video.md @@ -137,4 +137,4 @@ ## 继续学习 -内核部分学习完成,本应学习外设和组件,但是这些功能需要 Env 工具进行打开或关闭(比如要使用SPI,就需要使用 Env 打开 SPI),所以在学习外设与组件之前,先[学习使用 Env 工具](../env-video.md)。 \ No newline at end of file +内核部分学习完成,本应学习外设和组件,但是这些功能需要 Env 工具进行打开或关闭(比如要使用SPI,就需要使用 Env 打开 SPI),所以在学习外设与组件之前,先[学习使用 Env 工具](../env-video.md)。 diff --git a/rt-thread-version/rt-thread-standard/tutorial/project/project.md b/rt-thread-version/rt-thread-standard/tutorial/project/project.md index 11a641d542738ee6ab265de773c25c18d4d534f3..14bc5b83e13de1620ff114881096f9435495a646 100644 --- a/rt-thread-version/rt-thread-standard/tutorial/project/project.md +++ b/rt-thread-version/rt-thread-standard/tutorial/project/project.md @@ -49,7 +49,7 @@ RT-Thread 是完全开源、开放的物联网操作系统,可以从官网下 ![根目录](./figures/copy1.png) - - drivers:从下载的 RT-Thread 源码的目录里 rt-thread\bsp\stm32f10x-HAL\drivers 里复制文件: + - drivers:从下载的 RT-Thread 源码的目录里 rt-thread\bsp\stm32f10x-HAL\drivers 里复制文件: 1) `drv_usart.c`,`drv_usart.h`:串口的底层实现,因为我们需要通过串口输入 finsh/msh 命令和打印系统信息; 2) `board.h`,`board.c`:开发板的初始化配置文件; 3) `stm32f1xx_it.h`, `stm32f1xx_it.c`: 中断配置文件; @@ -134,7 +134,7 @@ RT-Thread 是完全开源、开放的物联网操作系统,可以从官网下 这个错误是由 `rtconfig.h` 里设置的芯片和刚开始我们建立工程时所选器件型号不一致,导致的存储器地址访问超范围。将定义改为: ```c - #define STM32F103C8 + #define STM32F103C8 ``` 再次编译运行无错误: diff --git a/rt-thread-version/rt-thread-standard/tutorial/qemu-network/README.md b/rt-thread-version/rt-thread-standard/tutorial/qemu-network/README.md index b8cf73972f65afb7d272816e44170d00e811dbc0..295aee9643529a293e12e3baa8ab014ef32379f0 100644 --- a/rt-thread-version/rt-thread-standard/tutorial/qemu-network/README.md +++ b/rt-thread-version/rt-thread-standard/tutorial/qemu-network/README.md @@ -8,6 +8,6 @@ QEMU 是一个支持跨平台的虚拟机,它可以虚拟很多开发板。RT- 为了让大家进一步提高利用 RT-Thread 进行实际开发的能力,我们推出了这篇包括文件系统和网络编程的进阶教程。 -本教程配套视频: +本教程配套视频: 交流 QQ 群:807319828 diff --git a/rt-thread-version/rt-thread-standard/tutorial/qemu-network/arp_principle/arp_principle.md b/rt-thread-version/rt-thread-standard/tutorial/qemu-network/arp_principle/arp_principle.md index 8e3330d131138408e107b156b2ebe0a7e3623c79..e8d6d90a71c6ee96c1b17aecf2aac20cccf57fcc 100644 --- a/rt-thread-version/rt-thread-standard/tutorial/qemu-network/arp_principle/arp_principle.md +++ b/rt-thread-version/rt-thread-standard/tutorial/qemu-network/arp_principle/arp_principle.md @@ -1,6 +1,6 @@ # ARP : 网络世界到物理世界的桥梁 -## ARP 协议 +## ARP 协议 ARP(Address Resolution Protocol)地址解析协议,是根据 IP 地址获取物理 MAC 地址的一个 TCP/IP 协议。 @@ -40,10 +40,10 @@ ARP 的分组格式如下图所示: 当局域网的主机 A 接收到发给 IP:192.168.0.4 的数据,他就需要转发数据给主机 B,首先主机 A先查询自己的 ARP 缓存看是否有主机 B 对应的 MAC 地址,如果没有的话,主机 A 就会运行 ARP。 -1. 主机 A 在本局域网广播一个 ARP 请求分组 。ARP请求分组的主要内容是表明:我的 IP 地址是 192.168.0.2,我的 MAC 地址是 00-00-C0-15-AD-18 .我想知道 IP 地址为 192.168.0.4 的主机的 MAC 地址。 -2. 在本局域网上的所有主机都收到此 ARP 请求分组。 -3. 主机 B 在 ARP 请求分组中见到自己的 IP 地址,就向主机 A 发送 ARP 响应分组,并写入自己的 MAC 地址。其余的所有主机都不理睬这个 ARP 请求分组。ARP 响应分组的主要内容是表明:“我的 IP 地址是192.168.0.4,我的硬件地址是 08-00-2B-00-EE-AA ”,请注意:虽然 ARP 请求分组是广播发送的,但 ARP 响应分组是普通的单播,即从一个源地址发送到一个目的地址。 -4. 主机 A 收到主机 B 的 ARP 响应分组后,就在其 ARP 高速缓冲表中写入主机 B 的 IP 地址到 MAC 地址的映射。 +1. 主机 A 在本局域网广播一个 ARP 请求分组 。ARP请求分组的主要内容是表明:我的 IP 地址是 192.168.0.2,我的 MAC 地址是 00-00-C0-15-AD-18 .我想知道 IP 地址为 192.168.0.4 的主机的 MAC 地址。 +2. 在本局域网上的所有主机都收到此 ARP 请求分组。 +3. 主机 B 在 ARP 请求分组中见到自己的 IP 地址,就向主机 A 发送 ARP 响应分组,并写入自己的 MAC 地址。其余的所有主机都不理睬这个 ARP 请求分组。ARP 响应分组的主要内容是表明:“我的 IP 地址是192.168.0.4,我的硬件地址是 08-00-2B-00-EE-AA ”,请注意:虽然 ARP 请求分组是广播发送的,但 ARP 响应分组是普通的单播,即从一个源地址发送到一个目的地址。 +4. 主机 A 收到主机 B 的 ARP 响应分组后,就在其 ARP 高速缓冲表中写入主机 B 的 IP 地址到 MAC 地址的映射。 然后,现在主机 A 就可以给主机 B 发送数据了。 diff --git a/rt-thread-version/rt-thread-standard/tutorial/qemu-network/dhcp_principle/dhcp_principle.md b/rt-thread-version/rt-thread-standard/tutorial/qemu-network/dhcp_principle/dhcp_principle.md index be9359a9a94c3c7729345953a4db4ea7e10bc097..2369ec2009f192edb2c16f3f96f54e66c2846221 100644 --- a/rt-thread-version/rt-thread-standard/tutorial/qemu-network/dhcp_principle/dhcp_principle.md +++ b/rt-thread-version/rt-thread-standard/tutorial/qemu-network/dhcp_principle/dhcp_principle.md @@ -1,10 +1,10 @@ # DHCP : 网络世界身份的获取 -## DHCP 协议 +## DHCP 协议 DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)前身是 BOOTP 协议,是一个局域网的网络协议。它是一种 **服务器- 客户端** 的工作模式,使用 UDP 协议工作,常用的 2 个端口:67(DHCP server), 68(DHCP client)。 -DHCP 通常被用于局域网环境,主要作用是集中的管理、分配 IP 地址,使 client 动态的获得 IP 地址、Gateway 地址、DNS 服务器地址等信息,并能够提升地址的使用率。 +DHCP 通常被用于局域网环境,主要作用是集中的管理、分配 IP 地址,使 client 动态的获得 IP 地址、Gateway 地址、DNS 服务器地址等信息,并能够提升地址的使用率。 ## DHCP 报文种类 @@ -36,18 +36,18 @@ DHCP 服务的 8 种报文的格式是相同的,不同类型的报文只是报 - **OP** : 报文的操作类型。若是 client 送给 server 的封包,设为 1 ,反向为 2。 - **htype** : 客户端的MAC地址类型 ,Ethernet 为 1。 - **hlen** : 客户端的 MAC 地址长度 , Ethernet 为 6。 -- **hops** : DHCP 报文经过的 DHCP 中继的数目,默认为 0。DHCP 请求报文每经过一个 DHCP 中继,该字段就会增加 1。没有经过 DHCP 中继时值为 0。 -- **xid **: 随机生成的一段字符串,两个数据包拥有相同的 xid 说明他们属于同一次会话 +- **hops** : DHCP 报文经过的 DHCP 中继的数目,默认为 0。DHCP 请求报文每经过一个 DHCP 中继,该字段就会增加 1。没有经过 DHCP 中继时值为 0。 +- **xid **: 随机生成的一段字符串,两个数据包拥有相同的 xid 说明他们属于同一次会话 - **secs** : DHCP 客户端从获取到 IP 地址或者续约过程开始到现在所消耗的时间,以秒为单位。 - **flags** : 标志位,只使用第 0 比特位,是广播应答标识位,用来标识 DHCP 服务器应答报文是采用单播还是广播发送,0 表示采用单播发送方式,1 表示采用广播发送方式。其余位尚未使用。 -- **ciaddr **: 客户端的 IP 地址。仅在 DHCP 服务器发送的ACK报文中显示,在其他报文中均显示0 -- **yiaddr **: DHCP 服务器分配给客户端的 IP 地址。仅在 DHCP 服务器发送的 Offer 和 ACK 报文中显示,其他报文中显示为 0。 +- **ciaddr **: 客户端的 IP 地址。仅在 DHCP 服务器发送的ACK报文中显示,在其他报文中均显示0 +- **yiaddr **: DHCP 服务器分配给客户端的 IP 地址。仅在 DHCP 服务器发送的 Offer 和 ACK 报文中显示,其他报文中显示为 0。 - **siaddr** : 若 client 需要透过网络开机,从 server 送出之 DHCP OFFER、DHCPACK、DHCPNACK封包中,此栏填写开机程序代码所在 server 之地址。 - **giaddr **: 若需跨网域进行 DHCP 发放,此栏为 relay agent 的地址,否则为 0。 -- **chaddr** : DHCP 客户端的 MAC 地址 -- **sname** : DHCP 服务器的名称(DNS域名格式)。在 Offer 和 ACK 报文中显示发送报文的 DHCP 服务器名称,其他报文显示为0。 +- **chaddr** : DHCP 客户端的 MAC 地址 +- **sname** : DHCP 服务器的名称(DNS域名格式)。在 Offer 和 ACK 报文中显示发送报文的 DHCP 服务器名称,其他报文显示为0。 - **file** : 若 client 需要透过网络开机,此栏将指出开机程序名称,稍后以 TFTP 传送。 -- **options** : 允许厂商定义选项(Vendor-Specific Area),以提供更多的设定信息(如:Netmask、Gateway、DNS、等等)。长度可变,格式为"代码+长度+数据"。 +- **options** : 允许厂商定义选项(Vendor-Specific Area),以提供更多的设定信息(如:Netmask、Gateway、DNS、等等)。长度可变,格式为"代码+长度+数据"。 列出 options 部分可选的选项: @@ -77,7 +77,7 @@ QEMU 在刚开始运行的时候就会自动运行 DHCP,只要在开始运行 我们也可以点开封包详细信息然后和上面的 DHCP 的报文格式做对比 -点开 DHCP Discover 数据包, 从下图可以看出,DHCP 属于应用层协议,它在传输层使用 UDP 协议,目的端口是 67。 +点开 DHCP Discover 数据包, 从下图可以看出,DHCP 属于应用层协议,它在传输层使用 UDP 协议,目的端口是 67。 ![DHCP Discover 数据包](figures/DHCP4.png) diff --git a/rt-thread-version/rt-thread-standard/tutorial/qemu-network/faq/faq.md b/rt-thread-version/rt-thread-standard/tutorial/qemu-network/faq/faq.md index 97b8644244bb89447d04c81cb33fbd015dfd792a..b0720226a000e005e65c8c8a5574184d746a02e6 100644 --- a/rt-thread-version/rt-thread-standard/tutorial/qemu-network/faq/faq.md +++ b/rt-thread-version/rt-thread-standard/tutorial/qemu-network/faq/faq.md @@ -195,4 +195,4 @@ ## socket 编程 -注意:socket 不支持多线程操作 \ No newline at end of file +注意:socket 不支持多线程操作 diff --git a/rt-thread-version/rt-thread-standard/tutorial/qemu-network/filesystems/filesystems.md b/rt-thread-version/rt-thread-standard/tutorial/qemu-network/filesystems/filesystems.md index 6d32b293d1ef0d5f0174aac0136d0c7ea23b9652..d71923f02d16b005b2e330ee6e537295499734ca 100644 --- a/rt-thread-version/rt-thread-standard/tutorial/qemu-network/filesystems/filesystems.md +++ b/rt-thread-version/rt-thread-standard/tutorial/qemu-network/filesystems/filesystems.md @@ -36,7 +36,7 @@ INIT_ENV_EXPORT(mnt_init); ### ls: 查看当前目录信息 ```shell -msh />ls # 使用 ls 命令查看文件系统目录信息 +msh />ls # 使用 ls 命令查看文件系统目录信息 Directory /: # 可以看到已经存在根目录 / ``` @@ -57,8 +57,8 @@ hello rt-thread!!! msh />echo "hello rt-thread!!!" hello.txt # 将字符串输出到 hello.txt 文件 msh />ls Directory /: -rt-thread -hello.txt 18 +rt-thread +hello.txt 18 msh /> ``` @@ -74,12 +74,12 @@ hello rt-thread!!! ```shell msh />ls # 查看当前目录信息 Directory /: -rt-thread -hello.txt 18 +rt-thread +hello.txt 18 msh />rm rt-thread # 删除 rt-thread 文件夹 msh />ls Directory /: -hello.txt 18 +hello.txt 18 msh />rm hello.txt # 删除 hello.txt 文件 msh />ls Directory /: @@ -209,7 +209,7 @@ RomFS 是在嵌入式设备上常用的一种文件系统,具备体积小, 回到上一级目录 `rt-thread\tools`,在该目录下打开 Env 工具,并运行命令: ``` -python mkromfs.py romfs romfs.c +python mkromfs.py romfs romfs.c ``` 可以看到目录下成功生成 romfs.c 文件: @@ -220,7 +220,7 @@ python mkromfs.py romfs romfs.c ### 挂载 RomFS -在系统任务调度开始之后,通过 dfs_mount() 函数挂载 RomFS ,在添加挂载函数的文件中需添加头文件 `#include "dfs_romfs.h"` +在系统任务调度开始之后,通过 dfs_mount() 函数挂载 RomFS ,在添加挂载函数的文件中需添加头文件 `#include "dfs_romfs.h"` 我们将 `qemu-vexpress-a9\applications\mnt.c` 文件中的内容替换成下面的代码,即可将 RomFS 挂载到根目录。 @@ -237,10 +237,10 @@ int mnt_init(void) { rt_kprintf("ROM file system initializated!\n"); } - else - { - rt_kprintf("ROM file system initializate failed!\n"); - } + else + { + rt_kprintf("ROM file system initializate failed!\n"); + } return 0; } @@ -250,7 +250,7 @@ INIT_ENV_EXPORT(mnt_init); ### 预期结果 -编译并运行工程之后,可以看到 RomFS 文件系统挂载成功,使用 ls 命令可以看到 RomFS 文件系统里面的文件夹和文件: +编译并运行工程之后,可以看到 RomFS 文件系统挂载成功,使用 ls 命令可以看到 RomFS 文件系统里面的文件夹和文件: ![预期结果](figures/romfs6.png) @@ -298,10 +298,10 @@ int mnt_init(void) { rt_kprintf("RAM file system initializated!\n"); } - else - { - rt_kprintf("RAM file system initializate failed!\n"); - } + else + { + rt_kprintf("RAM file system initializate failed!\n"); + } return 0; } diff --git a/rt-thread-version/rt-thread-standard/tutorial/qemu-network/httpclient/httpclient.md b/rt-thread-version/rt-thread-standard/tutorial/qemu-network/httpclient/httpclient.md index 3a068f910db730d8763418a2364f7771639b09f8..d520c65f12872cfe6755c74a3d709eeaa4e02114 100644 --- a/rt-thread-version/rt-thread-standard/tutorial/qemu-network/httpclient/httpclient.md +++ b/rt-thread-version/rt-thread-standard/tutorial/qemu-network/httpclient/httpclient.md @@ -184,7 +184,7 @@ void weather(int argc, char **argv) { do { - bytes_read = webclient_read(session, buffer, + bytes_read = webclient_read(session, buffer, content_length - content_pos > GET_RESP_BUFSZ ? GET_RESP_BUFSZ : content_length - content_pos); if (bytes_read <= 0) @@ -218,10 +218,10 @@ MSH_CMD_EXPORT(weather, Get weather by webclient); ## 在 msh shell 中运行示例代码 -示例代码中已经将 weather 命令导出到了 msh 命令列表中,因此系统运行起来后,在 msh 命令行下输入 weather 命令即可让示例代码运行。 +示例代码中已经将 weather 命令导出到了 msh 命令列表中,因此系统运行起来后,在 msh 命令行下输入 weather 命令即可让示例代码运行。 ``` -msh> weather +msh> weather ``` ## 预期结果 ## @@ -229,13 +229,13 @@ msh> weather 终端会打印出一些天气信息 ``` -cityName:浦东 -temp :25℃ -wd :东风 -ws :2级 -sd :49% +cityName:浦东 +temp :25℃ +wd :东风 +ws :2级 +sd :49% date :20131012 -time :15:00 +time :15:00 ``` > [!NOTE] diff --git a/rt-thread-version/rt-thread-standard/tutorial/qemu-network/mqtt/mqtt.md b/rt-thread-version/rt-thread-standard/tutorial/qemu-network/mqtt/mqtt.md index 7b842f5b7a6e37268f1420041868d76a3e2ccc17..1075d7cebd7fe19c2b9d5f0fe88edc4bf983a5f5 100644 --- a/rt-thread-version/rt-thread-standard/tutorial/qemu-network/mqtt/mqtt.md +++ b/rt-thread-version/rt-thread-standard/tutorial/qemu-network/mqtt/mqtt.md @@ -32,21 +32,21 @@ RT-Thread online packages - Enable MQTT example:开启 MQTT 示例 -- Enable MQTT test:开启测试例程 +- Enable MQTT test:开启测试例程 -- Enable support tls protocol:开启 TLS 安全传输选项 +- Enable support tls protocol:开启 TLS 安全传输选项 - Set MQTT thread stack size:配置 MQTT 线程堆栈大小 -- Max pahomqtt subscribe topic handlers:配置 MQTT 能订阅的最大 topic 主题数量 +- Max pahomqtt subscribe topic handlers:配置 MQTT 能订阅的最大 topic 主题数量 - Enable debug log output:开启调试日志 -- latest_version:配置包版本选为最新版 +- latest_version:配置包版本选为最新版 ### 示例代码文件 -测试服务器使用 Eclipse 的测试服务器,地址 `iot.eclipse.org` ,端口 `1883`,MQTT 功能示例代码如下: +测试服务器使用 Eclipse 的测试服务器,地址 `iot.eclipse.org` ,端口 `1883`,MQTT 功能示例代码如下: ```c #include @@ -246,14 +246,14 @@ MSH_CMD_EXPORT(mq_pub, publish mqtt msg); 系统运行起来后,在 msh 命令行下输入 mq_start 命令即可让示例代码运行。 ``` -msh> mq_start +msh> mq_start ``` ## 预期结果 ![mq_start 运行结果](figures/mqtt2.png) -发布消息用命令 `mq_pub` ,用于向固定的 MQTT Topic 发送数据,同时 MQTT 服务器会立刻向该 Topic 发送同样数据,MQTT 示例测试完成,如下图所示: +发布消息用命令 `mq_pub` ,用于向固定的 MQTT Topic 发送数据,同时 MQTT 服务器会立刻向该 Topic 发送同样数据,MQTT 示例测试完成,如下图所示: ![mq_pub 运行结果](figures/mqtt3.png) diff --git a/rt-thread-version/rt-thread-standard/tutorial/qemu-network/ntp/ntp.md b/rt-thread-version/rt-thread-standard/tutorial/qemu-network/ntp/ntp.md index 3e05f8024f7b5676eb61a69e4e4f98be0bf4bcf2..84827da78fbe0a1a61c3519ef9241fe0acba45c4 100644 --- a/rt-thread-version/rt-thread-standard/tutorial/qemu-network/ntp/ntp.md +++ b/rt-thread-version/rt-thread-standard/tutorial/qemu-network/ntp/ntp.md @@ -23,10 +23,10 @@ ## 在 msh shell 中运行代码 -系统运行起来后,在 msh 命令行下输入 ntp_sync 命令即可通过 NTP 协议获取当前的 UTC 时间,并更新至 RTC(实时时钟)中。 +系统运行起来后,在 msh 命令行下输入 ntp_sync 命令即可通过 NTP 协议获取当前的 UTC 时间,并更新至 RTC(实时时钟)中。 ``` -msh> ntp_sync +msh> ntp_sync ``` ## 预期结果 ## diff --git a/rt-thread-version/rt-thread-standard/tutorial/qemu-network/onenet/onenet.md b/rt-thread-version/rt-thread-standard/tutorial/qemu-network/onenet/onenet.md index aac8364409a62c4a3c3c9a64a6a6aa7e988b5a0c..0d9bc12ea13b79c48f6ae42b9734fba9a2b0ce0d 100644 --- a/rt-thread-version/rt-thread-standard/tutorial/qemu-network/onenet/onenet.md +++ b/rt-thread-version/rt-thread-standard/tutorial/qemu-network/onenet/onenet.md @@ -48,7 +48,7 @@ 此设备的相关信息就都显示出来了,比如:设备 ID、鉴权信息、设备 APIkey,这些信息需要记下,在ENV配置时会用到。 -点击按钮`添加APIkey`,APIKey 的名称一般和设备相关联,我们这里填入`test_APIKey`,关联设备写入我们刚刚创建的设备`test1`。 +点击按钮`添加APIkey`,APIKey 的名称一般和设备相关联,我们这里填入`test_APIKey`,关联设备写入我们刚刚创建的设备`test1`。 ![添加 APIKey](figures/onenet7.png) diff --git a/rt-thread-version/rt-thread-standard/tutorial/qemu-network/ping_principle/ping_principle.md b/rt-thread-version/rt-thread-standard/tutorial/qemu-network/ping_principle/ping_principle.md index c4f33cc56369cd33acca5d90e2d7f3723a648323..cfab7064b8fd514779a2202a00d614f6faf96f4e 100644 --- a/rt-thread-version/rt-thread-standard/tutorial/qemu-network/ping_principle/ping_principle.md +++ b/rt-thread-version/rt-thread-standard/tutorial/qemu-network/ping_principle/ping_principle.md @@ -8,7 +8,7 @@ 当我们要检查网络状况的时候,就总喜欢 Ping 一下百度,检测网络到底通不通。但是这一个看似简单的命令 Ping,到底涉及了什么协议,数据又经历了什么样的路程,我们今天就来看一看。一次完整的 Ping 过程其实涉及很多协议,如 DNS,UDP,ARP,ICMP 以及路由协议等。 -Ping 使用的是 ICMP 协议,它发送 ICMP 回送请求消息给目的主机。ICMP 协议规定:目的主机必须返回 ICMP 回送应答消息给源主机。如果源主机在一定时间内收到应答,则认为主机可达。 +Ping 使用的是 ICMP 协议,它发送 ICMP 回送请求消息给目的主机。ICMP 协议规定:目的主机必须返回 ICMP 回送应答消息给源主机。如果源主机在一定时间内收到应答,则认为主机可达。 ## DNS 协议 @@ -34,7 +34,7 @@ ARP 的分组格式如下图所示: ## ICMP 协议 -ICMP 是 “Internet Control Message Protocol”(网络控制报文协议)的缩写。 +ICMP 是 “Internet Control Message Protocol”(网络控制报文协议)的缩写。 它是 [TCP/IP协议](https://baike.baidu.com/item/TCP%2FIP%E5%8D%8F%E8%AE%AE) 族的一个子协议,用于在 IP 主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。 @@ -76,4 +76,4 @@ ICMP 层区分不是很明显,一般划分在 IP 层中 通过 IP 包来封 ![封包详细信息](figures/ICMP4.png) -这样就知道了 Ping 的时候开发板和电脑到底都干了什么。 \ No newline at end of file +这样就知道了 Ping 的时候开发板和电脑到底都干了什么。 diff --git a/rt-thread-version/rt-thread-standard/tutorial/qemu-network/qemu_setup/qemu_setup.md b/rt-thread-version/rt-thread-standard/tutorial/qemu-network/qemu_setup/qemu_setup.md index 3004385757ef0f88e999a6a9fa2830e960495d04..be97f684041cee2b397616569366f8c8ab33e22c 100644 --- a/rt-thread-version/rt-thread-standard/tutorial/qemu-network/qemu_setup/qemu_setup.md +++ b/rt-thread-version/rt-thread-standard/tutorial/qemu-network/qemu_setup/qemu_setup.md @@ -22,12 +22,12 @@ qemu-vexpress-a9 BSP 主要文件及目录描述如下所示: | 文件 / 目录 | 描述 | | ------------- | --------------- | -| .vscode | vscode 配置文件 | -| applications | 用户应用代码目录 | -| cpu | 芯片相关 | -| drivers | RT-Thread 提供的底层驱动 | -| qemu.bat | Windows 平台运行脚本文件 | -| qemu.sh | Linux 平台运行脚本文件 | +| .vscode | vscode 配置文件 | +| applications | 用户应用代码目录 | +| cpu | 芯片相关 | +| drivers | RT-Thread 提供的底层驱动 | +| qemu.bat | Windows 平台运行脚本文件 | +| qemu.sh | Linux 平台运行脚本文件 | | qemu-dbg.bat | Windows 平台调试脚本文件 | | qemu-dbg.sh | Linux 平台调试脚本文件 | | README.md | BSP 说明文件 | diff --git a/rt-thread-version/rt-thread-standard/tutorial/qemu-network/qemu_vscode/qemu_vscode.md b/rt-thread-version/rt-thread-standard/tutorial/qemu-network/qemu_vscode/qemu_vscode.md index 2dbe2e895cce5636c0f9d535abaa3ffd9e159767..014ccaaf7f2c0004b469c4e06c2f1388b35bcc5b 100644 --- a/rt-thread-version/rt-thread-standard/tutorial/qemu-network/qemu_vscode/qemu_vscode.md +++ b/rt-thread-version/rt-thread-standard/tutorial/qemu-network/qemu_vscode/qemu_vscode.md @@ -91,14 +91,14 @@ QEMU 也运行了起来,如下图所示。 | 参数 | 描述 | | ------------- | --------------- | -| x | 按十六进制格式显示变量 | -| d | 按十进制格式显示变量 | -| u | 按十六进制格式显示无符号整型 | -| o | 按八进制格式显示变量 | -| t | 按二进制格式显示变量 | -| a | 按十六进制格式显示变量 | -| c | 按字符格式显示变量 | -| f | 按浮点数格式显示变量 | +| x | 按十六进制格式显示变量 | +| d | 按十进制格式显示变量 | +| u | 按十六进制格式显示无符号整型 | +| o | 按八进制格式显示变量 | +| t | 按二进制格式显示变量 | +| a | 按十六进制格式显示变量 | +| c | 按字符格式显示变量 | +| f | 按浮点数格式显示变量 | * u 表示从当前地址往后请求的字节数,如果不指定的话,GDB 默认是 4 个 bytes。u 参数可以用下面的字符来代替,b 表示单字节,h 表示双字节,w 表示四字 节,g 表示八字节。当我们指定了字节长度后,GDB 会从指内存定的内存地址开始,读写指定字节,并把其当作一个值取出来。 * addr 表示一个内存地址。 diff --git a/rt-thread-version/rt-thread-standard/tutorial/qemu-network/socket/socket.md b/rt-thread-version/rt-thread-standard/tutorial/qemu-network/socket/socket.md index 7b3a884d1f495bf54cbbd5603a04defd0e5b8616..2981821500a5667ecd7830f90258ca3748854262 100644 --- a/rt-thread-version/rt-thread-standard/tutorial/qemu-network/socket/socket.md +++ b/rt-thread-version/rt-thread-standard/tutorial/qemu-network/socket/socket.md @@ -79,8 +79,8 @@ int socket(int domain, int type, int protocol) domain 参数支持下列参数: ```c -AF_INET Ipv4 -AF_INET6 Ipv6 +AF_INET Ipv4 +AF_INET6 Ipv6 AF_UNIX UNIX 域 AF_UNSPEC 未指定 ``` @@ -101,7 +101,7 @@ protocol 参数: **函数返回** -返回一个 socket 描述符,它唯一标识一个 socket。这个 socket 描述符 跟文件描述符 一样,后续的操作都有用到它,比如,把它作为参数,通过它来进行一些读写操作等。 +返回一个 socket 描述符,它唯一标识一个 socket。这个 socket 描述符 跟文件描述符 一样,后续的操作都有用到它,比如,把它作为参数,通过它来进行一些读写操作等。 ### bind ### @@ -347,8 +347,8 @@ int shutdown(int sockfd, int how) how 参数支持下列参数: ```c -SHUT_RD 关闭接收信道 -SHUT_WR 关闭发送信道 +SHUT_RD 关闭接收信道 +SHUT_WR 关闭发送信道 SHUT_RDWR 将发送和接收信道全部关闭 ``` diff --git a/rt-thread-version/rt-thread-standard/tutorial/qemu-network/tcp_ip/tcp_ip.md b/rt-thread-version/rt-thread-standard/tutorial/qemu-network/tcp_ip/tcp_ip.md index 766fb5f907807a30f473cfe4f63f19f493ef1819..15fa4c5aeb72e34195eb5807155cf6f7f4b8ae3e 100644 --- a/rt-thread-version/rt-thread-standard/tutorial/qemu-network/tcp_ip/tcp_ip.md +++ b/rt-thread-version/rt-thread-standard/tutorial/qemu-network/tcp_ip/tcp_ip.md @@ -18,7 +18,7 @@ TCP/IP 协议族按照层次由上到下,层层包装。 第四层是网络接口层,对实际的网络媒体的管理,定义如何使用实际网络(如Ethernet、Serial Line等)来传送数据。 -发送协议的主机从上自下将数据按照协议封装,而接收数据的主机则按照协议将得到的数据包解开,最后拿到需要的数据。这种结构非常有栈的味道,所以 tcp/ip 协议族也被称为 tcp/ip 协议栈。 +发送协议的主机从上自下将数据按照协议封装,而接收数据的主机则按照协议将得到的数据包解开,最后拿到需要的数据。这种结构非常有栈的味道,所以 tcp/ip 协议族也被称为 tcp/ip 协议栈。 ## 基本概念 @@ -40,11 +40,11 @@ MAC(Media Access Control)地址,或称为物理地址、硬件地址,用 不同类型的网络应用有不同的通信规则,因此应用层的协议是多种多样的,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)、域名解析服务(DNS)、超文本传输协议(HTTP)等。动态主机配置协议 (DHCP)也工作在应用层。 -## 传输层 +## 传输层 -在此层中,它提供了节点间的数据传送服务,如传输控制协议(TCP)、用户数据报协议(UDP)等,TCP 和 UDP 给数据包加入传输数据并把它传输到下一层中,这一层实现端到端的数据传输。 TCP 协议是面向连接的,这就意味着传输层能保持对分段的跟踪,并且重传那些失败的分段。 +在此层中,它提供了节点间的数据传送服务,如传输控制协议(TCP)、用户数据报协议(UDP)等,TCP 和 UDP 给数据包加入传输数据并把它传输到下一层中,这一层实现端到端的数据传输。 TCP 协议是面向连接的,这就意味着传输层能保持对分段的跟踪,并且重传那些失败的分段。 -## 网络层 +## 网络层 用来处理网络上流动的数据包(网络传输中最小的数据单元),规定了怎样的路径把数据包传输到目标计算机,并把数据包传送给对方。相关的有 IP 协议、ARP 协议、RARP 协议、ICMP 协议等 @@ -56,9 +56,9 @@ MAC(Media Access Control)地址,或称为物理地址、硬件地址,用 **ICMP 协议**:用于在 IP 主机、路由器之间传递控制消息——指网络通不通、主机是否可达、路由是否可用等网络本身的消息。 -## 网络接口层 +## 网络接口层 -用来处理连接网络的硬件部分,包括控制操作系统、硬件的设备驱动和网络适配器,及光纤等物理可见的部分。硬件上的范畴均属于网络接口层的作用范围之内。 +用来处理连接网络的硬件部分,包括控制操作系统、硬件的设备驱动和网络适配器,及光纤等物理可见的部分。硬件上的范畴均属于网络接口层的作用范围之内。 ## 参考资料 diff --git a/rt-thread-version/rt-thread-standard/tutorial/qemu-network/tcp_udp_principle/tcp_udp_principle.md b/rt-thread-version/rt-thread-standard/tutorial/qemu-network/tcp_udp_principle/tcp_udp_principle.md index d2a7c3ab2f76dd5ae28e8deee785770ceec11e10..277dafa9e0024e623b6547cea4804ac13544eca5 100644 --- a/rt-thread-version/rt-thread-standard/tutorial/qemu-network/tcp_udp_principle/tcp_udp_principle.md +++ b/rt-thread-version/rt-thread-standard/tutorial/qemu-network/tcp_udp_principle/tcp_udp_principle.md @@ -6,7 +6,7 @@ ## TCP 通信原理 -TCP 把连接作为最基本的对象,每一条 TCP 连接都有两个端点,这种端点我们叫作套接字(socket),它的定义为端口号拼接到 IP 地址即构成了套接字,例如,若 IP 地址为 192.3.4.16 而端口号为 80,那么得到的套接字为`192.3.4.16:80`。IP 协议虽然能把数据报文送到目的主机,但是并没有交付给主机的具体应用进程。而端到端的通信才是应用进程之间的通信。 +TCP 把连接作为最基本的对象,每一条 TCP 连接都有两个端点,这种端点我们叫作套接字(socket),它的定义为端口号拼接到 IP 地址即构成了套接字,例如,若 IP 地址为 192.3.4.16 而端口号为 80,那么得到的套接字为`192.3.4.16:80`。IP 协议虽然能把数据报文送到目的主机,但是并没有交付给主机的具体应用进程。而端到端的通信才是应用进程之间的通信。 TCP 报文是 TCP 层传输的数据单元,也叫报文段。 TCP 报文的格式如下图所示 @@ -78,11 +78,11 @@ TCP 的四次挥手,意思就是释放连接的时候客户端与服务器之 数据传输的过程需要在以后用到 http client 传输较大数据的时候才能更好的看出来。 -## UDP 通信原理 +## UDP 通信原理 -UDP 是 User Datagram Protocol 的简称, 中文名用户数据报协议,是[OSI](https://baike.baidu.com/item/OSI)(Open System Interconnection,开放式系统互联)参考模型中一种无连接的[传输层](https://baike.baidu.com/item/%E4%BC%A0%E8%BE%93%E5%B1%82)协议,提供面向事务的简单不可靠信息传送服务,UDP 在 IP 报文的协议号是 17。 +UDP 是 User Datagram Protocol 的简称, 中文名用户数据报协议,是[OSI](https://baike.baidu.com/item/OSI)(Open System Interconnection,开放式系统互联)参考模型中一种无连接的[传输层](https://baike.baidu.com/item/%E4%BC%A0%E8%BE%93%E5%B1%82)协议,提供面向事务的简单不可靠信息传送服务,UDP 在 IP 报文的协议号是 17。 -与 TCP(传输控制协议)协议一样,UDP 协议直接位于 IP(网际协议)协议的顶层。根据 TCP/IP 参考模型,UDP 和TCP 都属于传输层协议。UDP 协议的主要作用是将数据压缩成数据包的形式。一个典型的数据包就是一个二进制数据的传输单位。每一个数据包的前 8 个字节用来包含报头信息,剩余字节则用来包含具体的传输数据。 +与 TCP(传输控制协议)协议一样,UDP 协议直接位于 IP(网际协议)协议的顶层。根据 TCP/IP 参考模型,UDP 和TCP 都属于传输层协议。UDP 协议的主要作用是将数据压缩成数据包的形式。一个典型的数据包就是一个二进制数据的传输单位。每一个数据包的前 8 个字节用来包含报头信息,剩余字节则用来包含具体的传输数据。 UDP 报文的具体格式如下: @@ -94,7 +94,7 @@ UDP 报文的具体格式如下: ### UDP 通信过程 -UDP 协议的通信较 TCP 简单了很多,减少了 TCP 的握手、确认、窗口、重传、拥塞控制等机制,UDP 是一个无状态的传输协议。 +UDP 协议的通信较 TCP 简单了很多,减少了 TCP 的握手、确认、窗口、重传、拥塞控制等机制,UDP 是一个无状态的传输协议。 UDP 客户端在发送数据时并不判断主机是否可达,服务器是否开启等问题,同样它不能确定数据是否成功送达服务器。它只是将数据简单的封了一个包,之后就丢出去了。 @@ -103,10 +103,10 @@ UDP 客户端在发送数据时并不判断主机是否可达,服务器是否 ### 抓包分析 1. 打开 wireshark 软件 开启抓包,设定过滤条件为 udp,只显示和 udp 协议相关的包。 -2. 开发板连接上网络后,在终端上输入 `udpclient 192.168.12.44 5000 5` +2. 开发板连接上网络后,在终端上输入 `udpclient 192.168.12.44 5000 5` 查看 wireshark ,发现已经抓到了 udpclient 发来的五个包了。 我们点开封包详细信息然后和上面的 UDP 协议的报文格式对照一下,就弄清楚 UDP 协议的工作机制了。 -![UDP 协议抓包结果](figures/UDP2.png) \ No newline at end of file +![UDP 协议抓包结果](figures/UDP2.png) diff --git a/rt-thread-version/rt-thread-standard/tutorial/qemu-network/tcpclient/tcpclient.md b/rt-thread-version/rt-thread-standard/tutorial/qemu-network/tcpclient/tcpclient.md index cb4c6faf2e4dfc250be85576a28160f56809c5ca..b8608f59417b64096e90433e88e917ef23d192b0 100644 --- a/rt-thread-version/rt-thread-standard/tutorial/qemu-network/tcpclient/tcpclient.md +++ b/rt-thread-version/rt-thread-standard/tutorial/qemu-network/tcpclient/tcpclient.md @@ -191,7 +191,7 @@ MSH_CMD_EXPORT(tcpclient, a tcp client sample); ![查看本机 IP 地址](figures/ip.png) -然后,在系统运行起来后,在 msh 命令行下输入下面的命令即可让示例代码运行。 +然后,在系统运行起来后,在 msh 命令行下输入下面的命令即可让示例代码运行。 ```c msh> tcpclient 192.168.12.44 5000 diff --git a/rt-thread-version/rt-thread-standard/tutorial/qemu-network/tcpclient_select/tcpclient_select.md b/rt-thread-version/rt-thread-standard/tutorial/qemu-network/tcpclient_select/tcpclient_select.md index 25d00f14c07b267bbe25810a0353af79d3fb45ed..179af482df715fae04af4345d2c2d1206ab42997 100644 --- a/rt-thread-version/rt-thread-standard/tutorial/qemu-network/tcpclient_select/tcpclient_select.md +++ b/rt-thread-version/rt-thread-standard/tutorial/qemu-network/tcpclient_select/tcpclient_select.md @@ -33,14 +33,14 @@ RT-Thread samples 软件包中已有一份该示例代码 [tcpclient_select_samp ### 示例代码文件 ```c -/* - * Copyright (c) 2006-2018, RT-Thread Development Team - * - * SPDX-License-Identifier: Apache-2.0 - * - * Change Logs: +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: * Date Author Notes - * + * */ /* 程序清单:利用 select 实现的 tcp 客户端 * @@ -222,7 +222,7 @@ MSH_CMD_EXPORT(tcpclient_select, a tcp client sample by select api); ![查看 IP 地址](figures/ip.png) -然后,在系统运行起来后,在 msh 命令行下输入下面的命令即可让示例代码运行。 +然后,在系统运行起来后,在 msh 命令行下输入下面的命令即可让示例代码运行。 ```c msh> tcpclient_select 192.168.12.44 5000 diff --git a/rt-thread-version/rt-thread-standard/tutorial/qemu-network/tcpserver/tcpserver.md b/rt-thread-version/rt-thread-standard/tutorial/qemu-network/tcpserver/tcpserver.md index 5ce225b62670f60b0b7db37a2f3f2eb6e60edac6..3e6ecd2b1ecd929a11ac1b950cda48d128e117e2 100644 --- a/rt-thread-version/rt-thread-standard/tutorial/qemu-network/tcpserver/tcpserver.md +++ b/rt-thread-version/rt-thread-standard/tutorial/qemu-network/tcpserver/tcpserver.md @@ -197,7 +197,7 @@ MSH_CMD_EXPORT(tcpserv, a tcp server sample); ## 在 msh shell 中运行示例代码 -在系统运行起来后,在 msh 命令行下输入命令 `tcpserv` 即可让示例代码运行。 +在系统运行起来后,在 msh 命令行下输入命令 `tcpserv` 即可让示例代码运行。 ```c msh /> tcpserv diff --git a/rt-thread-version/rt-thread-standard/tutorial/qemu-network/tftp/tftp.md b/rt-thread-version/rt-thread-standard/tutorial/qemu-network/tftp/tftp.md index a3a37279caffaeb432d79dffffb08a4b17c91f38..738e818416bcf7bb226e03e7bca8f6dd75389ee9 100644 --- a/rt-thread-version/rt-thread-standard/tutorial/qemu-network/tftp/tftp.md +++ b/rt-thread-version/rt-thread-standard/tutorial/qemu-network/tftp/tftp.md @@ -14,11 +14,11 @@ RT-Thread 目前支持的是 TFTP 服务器。 ### 安装 TFTP 客户端 ### -下载安装 [Tftpd64-4.60-setup.exe](https://github.com/RT-Thread-packages/netutils/blob/master/tools/Tftpd64-4.60-setup.exe),使用 TFTP 前,请先安装该软件。 +下载安装 [Tftpd64-4.60-setup.exe](https://github.com/RT-Thread-packages/netutils/blob/master/tools/Tftpd64-4.60-setup.exe),使用 TFTP 前,请先安装该软件。 ### 开启 TFTP server ### -打开 Env 工具输入 menuconfig 按照下面的路径打开 tftp server +打开 Env 工具输入 menuconfig 按照下面的路径打开 tftp server ``` RT-Thread online packages ---> @@ -61,7 +61,7 @@ dns server #1: 0.0.0.0 ## 在 msh shell 中运行 TFTP 服务器 -在 msh 命令行下输入下面的命令即可运行 tftp 服务器,运行结果如下,等待客户端连接。 +在 msh 命令行下输入下面的命令即可运行 tftp 服务器,运行结果如下,等待客户端连接。 ```c msh> tftp_server diff --git a/rt-thread-version/rt-thread-standard/tutorial/qemu-network/udpclient/udpclient.md b/rt-thread-version/rt-thread-standard/tutorial/qemu-network/udpclient/udpclient.md index 46ccd415b8a015095eb325b307ce41aa00acd669..dc1165ed76ef6e5fdab2c4d13f4f1861af89d966 100644 --- a/rt-thread-version/rt-thread-standard/tutorial/qemu-network/udpclient/udpclient.md +++ b/rt-thread-version/rt-thread-standard/tutorial/qemu-network/udpclient/udpclient.md @@ -44,7 +44,7 @@ RT-Thread samples 软件包中中已有一份该示例代码 [udpclient.c](https * 这是一个 udp 客户端的例程 * 导出 udpclient 命令到控制终端 * 命令调用格式:udpclient URL PORT [COUNT = 10] - * URL:服务器地址 PORT:端口号 COUNT:可选参数 默认为 10 + * URL:服务器地址 PORT:端口号 COUNT:可选参数 默认为 10 * 程序功能:发送 COUNT 条数据到服务远端 */ #include diff --git a/rt-thread-version/rt-thread-standard/tutorial/qemu-network/udpserver/udpserver.md b/rt-thread-version/rt-thread-standard/tutorial/qemu-network/udpserver/udpserver.md index b9b71787a510e4c9431d7bc0e252d52a6f9aeb0e..ea6b721cd1be9339704d5edc06baa6f1cf550821 100644 --- a/rt-thread-version/rt-thread-standard/tutorial/qemu-network/udpserver/udpserver.md +++ b/rt-thread-version/rt-thread-standard/tutorial/qemu-network/udpserver/udpserver.md @@ -132,7 +132,7 @@ MSH_CMD_EXPORT(udpserv, a udp server sample); ## 在 msh shell 中运行示例代码 -在系统运行起来后,在 msh 命令行下输入命令 `udpserv` 即可让示例代码运行。 +在系统运行起来后,在 msh 命令行下输入命令 `udpserv` 即可让示例代码运行。 ```c msh />udpserv diff --git a/rt-thread-version/rt-thread-standard/tutorial/qemu-network/wireshark/wireshark.md b/rt-thread-version/rt-thread-standard/tutorial/qemu-network/wireshark/wireshark.md index 1b7cc740065e626e19cb689016c6ec43ee3b2fa0..e49c5d6f504dc9b4f3a4a43bf1357ef621e974ac 100644 --- a/rt-thread-version/rt-thread-standard/tutorial/qemu-network/wireshark/wireshark.md +++ b/rt-thread-version/rt-thread-standard/tutorial/qemu-network/wireshark/wireshark.md @@ -33,7 +33,7 @@ wireshark 的主界面和一般的 Windows 软件很像,也有菜单栏,工 过滤之后剩下的都是和我们限定的 IP 相关的包。 当然也有一些其他的过滤条件,比如: -- 按 mac 地址过滤 `eth.addr == 52:54:00:11:22:33` +- 按 mac 地址过滤 `eth.addr == 52:54:00:11:22:33` - 只显示 TCP 协议的数据包 `tcp` - 只显示 UDP 协议的数据包 `udp` diff --git a/rt-thread-version/rt-thread-standard/tutorial/quick-start/imxrt1052-atk-commander/quick-start.md b/rt-thread-version/rt-thread-standard/tutorial/quick-start/imxrt1052-atk-commander/quick-start.md index 719c6c73def36c9b50a6cc83e3ea6bd122fabd0a..2c2f33b8f2f62cf1357e95b9718c66b9c37c086e 100644 --- a/rt-thread-version/rt-thread-standard/tutorial/quick-start/imxrt1052-atk-commander/quick-start.md +++ b/rt-thread-version/rt-thread-standard/tutorial/quick-start/imxrt1052-atk-commander/quick-start.md @@ -78,4 +78,4 @@ msh > ## 继续学习 -已完成 RT-Thread 快速上手!点击这里进行 [内核学习](../../kernel/kernel-video.md) 。 \ No newline at end of file +已完成 RT-Thread 快速上手!点击这里进行 [内核学习](../../kernel/kernel-video.md) 。 diff --git a/rt-thread-version/rt-thread-standard/tutorial/quick-start/imxrt1052-fire-mini/quick-start.md b/rt-thread-version/rt-thread-standard/tutorial/quick-start/imxrt1052-fire-mini/quick-start.md index f43140dd6c0e428603ec44d3c94f1f904d8432ea..8be5bafbe512d5652047352bbb863e12377ba217 100644 --- a/rt-thread-version/rt-thread-standard/tutorial/quick-start/imxrt1052-fire-mini/quick-start.md +++ b/rt-thread-version/rt-thread-standard/tutorial/quick-start/imxrt1052-fire-mini/quick-start.md @@ -77,4 +77,4 @@ msh > ## 继续学习 -已完成 RT-Thread 快速上手!点击这里进行 [内核学习](../../kernel/kernel-video.md) 。 \ No newline at end of file +已完成 RT-Thread 快速上手!点击这里进行 [内核学习](../../kernel/kernel-video.md) 。 diff --git a/rt-thread-version/rt-thread-standard/tutorial/quick-start/iot_board/quick-start.md b/rt-thread-version/rt-thread-standard/tutorial/quick-start/iot_board/quick-start.md index 44e69927d25c1a8d9eab2a1d60c632e6cf35bc8c..3cc3f03a3dcf62b3d2b2fe6f079d8530abfb75e2 100644 --- a/rt-thread-version/rt-thread-standard/tutorial/quick-start/iot_board/quick-start.md +++ b/rt-thread-version/rt-thread-standard/tutorial/quick-start/iot_board/quick-start.md @@ -17,7 +17,7 @@ IoT Board 是正点原子、 RT-Thread 联合推出的一款基于 ARM Cortex-M4 - 常用外设 * RGBLED:1个,(R接PE7 , G接PE8 , B接PE9) * 按键:4个,WK_UP(兼具唤醒功能,PC13),KEY0(PD8),KEY1(PD9),KEY2(PD10) -- 常用接口:WIRELESS 模块接口 、TF 卡接口 、USB 串口 、USB OTG 接口 、耳机接口 +- 常用接口:WIRELESS 模块接口 、TF 卡接口 、USB 串口 、USB OTG 接口 、耳机接口 - 调试接口,板载的 ST-LINK 下载 开发板更多详细信息请参考 [正点原子官方品牌店宝贝介绍](https://eboard.taobao.com/index.htm)。 @@ -35,7 +35,7 @@ IoT Board SDK 获取方式:[从 Github 获取](https://github.com/RT-Thread/Io | rt-thread | rt-thread 源代码 | | tools | 工具目录 | -为开发板提供的示例程序存放在 examples 文件夹中,后面将以第一个示例程序为例,介绍如何将 SDK 提供的示例程序运行起来。 +为开发板提供的示例程序存放在 examples 文件夹中,后面将以第一个示例程序为例,介绍如何将 SDK 提供的示例程序运行起来。 ## 准备工作 @@ -55,7 +55,7 @@ IoT Board SDK 中的示例程序均提供 MDK 和 IAR 工程,并且支持 GCC ![编译第一个示例程序](figures/compile_first_example.png) -按下复位按键重启开发板,观察开发板上 RBG-LED 的实际效果。正常运行后,红色 LED 会周期性闪烁,如下图所示: +按下复位按键重启开发板,观察开发板上 RBG-LED 的实际效果。正常运行后,红色 LED 会周期性闪烁,如下图所示: ![RGB 红灯周期性闪烁](figures/red.jpg) @@ -65,4 +65,4 @@ IoT Board SDK 中其余例程的使用方法也是相同的,了解了运行例 已完成 RT-Thread 快速上手!点击这里进行 [内核学习](../../kernel/kernel-video.md) 。 -内核学习完成后,继续学习 IoT Board SDK 中的例程,教程参考 [《IoT Board 开发手册》](../../iot_board_tutorial.pdf) 。 \ No newline at end of file +内核学习完成后,继续学习 IoT Board SDK 中的例程,教程参考 [《IoT Board 开发手册》](../../iot_board_tutorial.pdf) 。 diff --git a/rt-thread-version/rt-thread-standard/tutorial/quick-start/nk-980iot/quick-start.md b/rt-thread-version/rt-thread-standard/tutorial/quick-start/nk-980iot/quick-start.md index 2affdc80744c426a74fafe57eaa696d888c2136c..d1719596b37dcbfb758f6a63d9504d0e1e5699f9 100644 --- a/rt-thread-version/rt-thread-standard/tutorial/quick-start/nk-980iot/quick-start.md +++ b/rt-thread-version/rt-thread-standard/tutorial/quick-start/nk-980iot/quick-start.md @@ -1,4 +1,4 @@ -# NK-980IOT 上手指南 +# NK-980IOT 上手指南 ## 简介 @@ -219,3 +219,4 @@ NK-980IoT 板级支持包提供 MDK5 及 GCC 开发环境,介绍如何将示 ## 继续学习 已完成 RT-Thread 快速上手!点击这里进行 [内核学习](../../kernel/kernel-video.md) 。 + diff --git a/rt-thread-version/rt-thread-standard/tutorial/quick-start/nk-n9h30/quick-start.md b/rt-thread-version/rt-thread-standard/tutorial/quick-start/nk-n9h30/quick-start.md index c208692c80037f6aa58d6098035fc9109304fdad..a5dacb9d28bf8417da1db9fd78e519c539df292e 100644 --- a/rt-thread-version/rt-thread-standard/tutorial/quick-start/nk-n9h30/quick-start.md +++ b/rt-thread-version/rt-thread-standard/tutorial/quick-start/nk-n9h30/quick-start.md @@ -1,4 +1,4 @@ -# NK-N9H30 上手指南 +# NK-N9H30 上手指南 ## 简介 @@ -215,3 +215,4 @@ msh /> ## 继续学习 已完成 RT-Thread 快速上手!点击这里进行 [内核学习](../../kernel/kernel-video.md) 。 + diff --git a/rt-thread-version/rt-thread-standard/tutorial/quick-start/nk-rtu980/quick-start.md b/rt-thread-version/rt-thread-standard/tutorial/quick-start/nk-rtu980/quick-start.md index 487df3955ff4f9f3b1ea04103c9ea723df34d83c..8144207b79906f11405662eeb95830fc230ca50e 100644 --- a/rt-thread-version/rt-thread-standard/tutorial/quick-start/nk-rtu980/quick-start.md +++ b/rt-thread-version/rt-thread-standard/tutorial/quick-start/nk-rtu980/quick-start.md @@ -1,4 +1,4 @@ -# NK-RTU980 上手指南 +# NK-RTU980 上手指南 ## 简介 @@ -167,3 +167,4 @@ NK-RTU980 板级支持包提供 MDK5 及 GCC 开发环境,介绍如何将示 ## 继续学习 已完成 RT-Thread 快速上手!点击这里进行 [内核学习](../../kernel/kernel-video.md) 。 + diff --git a/rt-thread-version/rt-thread-standard/tutorial/quick-start/numaker-iot-m487/quick-start.md b/rt-thread-version/rt-thread-standard/tutorial/quick-start/numaker-iot-m487/quick-start.md index 57cacfffeeb702697614514f71fb7b235f67e061..507cefe284c6b1ea448a963cb90f3367ee3d3e62 100644 --- a/rt-thread-version/rt-thread-standard/tutorial/quick-start/numaker-iot-m487/quick-start.md +++ b/rt-thread-version/rt-thread-standard/tutorial/quick-start/numaker-iot-m487/quick-start.md @@ -1,4 +1,4 @@ -# NuMaker-IoT-M487 上手指南 +# NuMaker-IoT-M487 上手指南 ## 简介 @@ -155,3 +155,4 @@ NuMaker-IoT-M487 板级支持包提供 MDK5 和 IAR 工程,并且支持 GCC ## 继续学习 已完成 RT-Thread 快速上手!点击这里进行 [内核学习](../../kernel/kernel-video.md) 。 + diff --git a/rt-thread-version/rt-thread-standard/tutorial/quick-start/numaker-m032ki/quick-start.md b/rt-thread-version/rt-thread-standard/tutorial/quick-start/numaker-m032ki/quick-start.md index 372f8900286fd3a76a45b04e3dbee3b73a9c5092..eace3939a496ffc520d2ea40baad7f2cbfa08ca2 100644 --- a/rt-thread-version/rt-thread-standard/tutorial/quick-start/numaker-m032ki/quick-start.md +++ b/rt-thread-version/rt-thread-standard/tutorial/quick-start/numaker-m032ki/quick-start.md @@ -1,4 +1,4 @@ -# NuMaker-M032KI 上手指南 +# NuMaker-M032KI 上手指南 ## 简介 @@ -144,3 +144,4 @@ NuMaker-M032KI 板级支持包提供 MDK5 和 IAR 工程,并且支持 GCC 开 ## 继续学习 已完成 RT-Thread 快速上手!点击这里进行 [内核学习](../../kernel/kernel-video.md) 。 + diff --git a/rt-thread-version/rt-thread-standard/tutorial/quick-start/numaker-m2354/quick-start.md b/rt-thread-version/rt-thread-standard/tutorial/quick-start/numaker-m2354/quick-start.md index 54211a2a0c628391f2dd9a86968913ad0fe96970..95c7aed742920a868f586404eb32a1796ba4c894 100644 --- a/rt-thread-version/rt-thread-standard/tutorial/quick-start/numaker-m2354/quick-start.md +++ b/rt-thread-version/rt-thread-standard/tutorial/quick-start/numaker-m2354/quick-start.md @@ -1,4 +1,4 @@ -# NuMaker-M2354 上手指南 +# NuMaker-M2354 上手指南 ## 简介 @@ -155,3 +155,4 @@ NuMaker-M2354 板级支持包提供 MDK5 和 IAR 工程,并且支持 GCC 开 ## 继续学习 已完成 RT-Thread 快速上手!点击这里进行 [内核学习](../../kernel/kernel-video.md) 。 + diff --git a/rt-thread-version/rt-thread-standard/tutorial/quick-start/numaker-pfm-m487/quick-start.md b/rt-thread-version/rt-thread-standard/tutorial/quick-start/numaker-pfm-m487/quick-start.md index 02f3bfa04f9167d9d80f3f6f130b7c1d683d4e61..6e5060eec1d079ec758183f6e419513a4e293349 100644 --- a/rt-thread-version/rt-thread-standard/tutorial/quick-start/numaker-pfm-m487/quick-start.md +++ b/rt-thread-version/rt-thread-standard/tutorial/quick-start/numaker-pfm-m487/quick-start.md @@ -1,4 +1,4 @@ -# NuMaker-PFM-M487 上手指南 +# NuMaker-PFM-M487 上手指南 ## 简介 @@ -158,3 +158,4 @@ NuMaker-PFM-M487 板级支持包提供 MDK5 和 IAR 工程,并且支持 GCC ## 继续学习 已完成 RT-Thread 快速上手!点击这里进行 [内核学习](../../kernel/kernel-video.md) 。 + diff --git a/rt-thread-version/rt-thread-standard/tutorial/quick-start/stm32f103-atk-nano/quick-start.md b/rt-thread-version/rt-thread-standard/tutorial/quick-start/stm32f103-atk-nano/quick-start.md index 916ae1cd3fb29ce7b047604a5e79b76d7ebd9f77..78cdd941f1f0f0d539da5caa99a995a6fd516bdb 100644 --- a/rt-thread-version/rt-thread-standard/tutorial/quick-start/stm32f103-atk-nano/quick-start.md +++ b/rt-thread-version/rt-thread-standard/tutorial/quick-start/stm32f103-atk-nano/quick-start.md @@ -68,4 +68,4 @@ msh > ## 继续学习 -已完成 RT-Thread 快速上手!点击这里进行 [内核学习](../../kernel/kernel-video.md) 。 \ No newline at end of file +已完成 RT-Thread 快速上手!点击这里进行 [内核学习](../../kernel/kernel-video.md) 。 diff --git a/rt-thread-version/rt-thread-standard/tutorial/quick-start/stm32f103-fire-arbitrary/quick-start.md b/rt-thread-version/rt-thread-standard/tutorial/quick-start/stm32f103-fire-arbitrary/quick-start.md index dc14cf818cf6efe6bfa099e23044fad12f0dbea4..8349ad784bd6c470b4504a91c8b7b0d51c1bb8ab 100644 --- a/rt-thread-version/rt-thread-standard/tutorial/quick-start/stm32f103-fire-arbitrary/quick-start.md +++ b/rt-thread-version/rt-thread-standard/tutorial/quick-start/stm32f103-fire-arbitrary/quick-start.md @@ -75,4 +75,4 @@ msh > ## 继续学习 -已完成 RT-Thread 快速上手!点击这里进行 [内核学习](../../kernel/kernel-video.md) 。 \ No newline at end of file +已完成 RT-Thread 快速上手!点击这里进行 [内核学习](../../kernel/kernel-video.md) 。 diff --git a/rt-thread-version/rt-thread-standard/tutorial/quick-start/stm32f103-simulator/stm32f103-simulator.md b/rt-thread-version/rt-thread-standard/tutorial/quick-start/stm32f103-simulator/stm32f103-simulator.md index 9c87e7611b0a234014e2b0547e79b101001d62ef..ae3c929cc3ee011e76cb497ece8f302d9f70c006 100644 --- a/rt-thread-version/rt-thread-standard/tutorial/quick-start/stm32f103-simulator/stm32f103-simulator.md +++ b/rt-thread-version/rt-thread-standard/tutorial/quick-start/stm32f103-simulator/stm32f103-simulator.md @@ -181,14 +181,14 @@ int led(void) { rt_uint8_t count; - rt_pin_mode(LED_PIN, PIN_MODE_OUTPUT); - + rt_pin_mode(LED_PIN, PIN_MODE_OUTPUT); + for(count = 0 ; count < 10 ;count++) - { + { rt_pin_write(LED_PIN, PIN_HIGH); rt_kprintf("led on, count : %d\r\n", count); rt_thread_mdelay(500); - + rt_pin_write(LED_PIN, PIN_LOW); rt_kprintf("led off\r\n"); rt_thread_mdelay(500); @@ -208,9 +208,9 @@ MSH_CMD_EXPORT(led, RT-Thread first led sample); * 出现如下编译错误 -``` -rt-thread\src\kservice.c(823): error: #929: incorrect use of vaarg fieldwidth = aarg(args, int); -rt-thread\src\kservice.c(842): error: #929: incorrect use of vaarg precision = aarg(args, int); +``` +rt-thread\src\kservice.c(823): error: #929: incorrect use of vaarg fieldwidth = aarg(args, int); +rt-thread\src\kservice.c(842): error: #929: incorrect use of vaarg precision = aarg(args, int); ……… ``` @@ -228,4 +228,4 @@ rt-thread\src\kservice.c(842): error: #929: incorrect use of vaarg precision = a - [uCOS-II操作系统兼容层](https://github.com/mysterywolf/RT-Thread-wrapper-of-uCOS-II) - [uCOS-III操作系统兼容层](https://github.com/mysterywolf/RT-Thread-wrapper-of-uCOS-III) -以上第三方 RTOS 兼容层均提供本章所述的STM32F103 Keil 软件模拟工程,以供入门者可以不依托开发板评估兼容层。 \ No newline at end of file +以上第三方 RTOS 兼容层均提供本章所述的STM32F103 Keil 软件模拟工程,以供入门者可以不依托开发板评估兼容层。 diff --git a/rt-thread-version/rt-thread-standard/tutorial/quick-start/stm32f407-atk-explorer/quick-start.md b/rt-thread-version/rt-thread-standard/tutorial/quick-start/stm32f407-atk-explorer/quick-start.md index 1b5c38770b71443742f7cf23590eb4b0db9d20c3..7d7c6b8cfdbbb61e6fc3930ed94bfd48d21ed290 100644 --- a/rt-thread-version/rt-thread-standard/tutorial/quick-start/stm32f407-atk-explorer/quick-start.md +++ b/rt-thread-version/rt-thread-standard/tutorial/quick-start/stm32f407-atk-explorer/quick-start.md @@ -31,7 +31,7 @@ 2. 源码获取 - + [源码目录说明](../src_code_introduction/rtthread_dir.md) @@ -73,4 +73,4 @@ msh > ## 继续学习 -已完成 RT-Thread 快速上手!点击这里进行 [内核学习](../../kernel/kernel-video.md) 。 \ No newline at end of file +已完成 RT-Thread 快速上手!点击这里进行 [内核学习](../../kernel/kernel-video.md) 。 diff --git a/rt-thread-version/rt-thread-standard/tutorial/quick-start/stm32f429-atk-apolo/quick-start.md b/rt-thread-version/rt-thread-standard/tutorial/quick-start/stm32f429-atk-apolo/quick-start.md index 5f54f55c1f4aac1bcc6b0fca6dc518a987b65c5f..41febd5b43bab0347c0443530464ffcc6b07d536 100644 --- a/rt-thread-version/rt-thread-standard/tutorial/quick-start/stm32f429-atk-apolo/quick-start.md +++ b/rt-thread-version/rt-thread-standard/tutorial/quick-start/stm32f429-atk-apolo/quick-start.md @@ -75,4 +75,4 @@ msh > ## 继续学习 -已完成 RT-Thread 快速上手!点击这里进行 [内核学习](../../kernel/kernel-video.md) 。 \ No newline at end of file +已完成 RT-Thread 快速上手!点击这里进行 [内核学习](../../kernel/kernel-video.md) 。 diff --git a/rt-thread-version/rt-thread-standard/tutorial/quick-start/stm32f429-fire-challenger/quick-start.md b/rt-thread-version/rt-thread-standard/tutorial/quick-start/stm32f429-fire-challenger/quick-start.md index bfc2e520a60ff8e20eaa50cdb4daec716b36b101..34ce240206ee6f2ab30672cfbfbb53b762e85324 100644 --- a/rt-thread-version/rt-thread-standard/tutorial/quick-start/stm32f429-fire-challenger/quick-start.md +++ b/rt-thread-version/rt-thread-standard/tutorial/quick-start/stm32f429-fire-challenger/quick-start.md @@ -73,4 +73,4 @@ msh > ## 继续学习 -已完成 RT-Thread 快速上手!点击这里进行 [内核学习](../../kernel/kernel-video.md) 。 \ No newline at end of file +已完成 RT-Thread 快速上手!点击这里进行 [内核学习](../../kernel/kernel-video.md) 。 diff --git a/rt-thread-version/rt-thread-standard/tutorial/smart-car/README.md b/rt-thread-version/rt-thread-standard/tutorial/smart-car/README.md index d1696bf3543bbeb74bfc50741328c0f33b903ea9..f51fe922ee40026906a640419d1d39ca7bbfd43a 100644 --- a/rt-thread-version/rt-thread-standard/tutorial/smart-car/README.md +++ b/rt-thread-version/rt-thread-standard/tutorial/smart-car/README.md @@ -12,13 +12,13 @@ ## 教程目录 -1、[RT-Thread 卷积神经网络(CNN) 手写体识别 (MNIST)](cnn-mnist/cnn-mnist.md) +1、[RT-Thread 卷积神经网络(CNN) 手写体识别 (MNIST)](cnn-mnist/cnn-mnist.md) -​ 神经网络理论:神经网络图像相关理论 +​ 神经网络理论:神经网络图像相关理论 -​ 训练卷积神经网络模型:用 Keras 训练手写体识别模型 +​ 训练卷积神经网络模型:用 Keras 训练手写体识别模型 -​ 运行卷积神经网络模型:RT-Thread 解析并加载 onnx 模型(protobuf格式) +​ 运行卷积神经网络模型:RT-Thread 解析并加载 onnx 模型(protobuf格式) 2、 [Darknet 训练目标检测模型](darknet-yolov2/darknet-yolov2.md) :Darknet 训练一个小黄人检测模型 @@ -34,4 +34,4 @@ 下面这张图有两个视频流,左边的是没有处理的实时图像,右边是运行了目标检测的结果: -![img](object-detection/figures/06-03.png) \ No newline at end of file +![img](object-detection/figures/06-03.png) diff --git a/rt-thread-version/rt-thread-standard/tutorial/smart-car/cnn-mnist/cnn-mnist.md b/rt-thread-version/rt-thread-standard/tutorial/smart-car/cnn-mnist/cnn-mnist.md index 2986ab5ed9d0abb70ceeced76af3d7449878c294..047f033e170c73fbc04076b6ec2dee66f1b6b276 100644 --- a/rt-thread-version/rt-thread-standard/tutorial/smart-car/cnn-mnist/cnn-mnist.md +++ b/rt-thread-version/rt-thread-standard/tutorial/smart-car/cnn-mnist/cnn-mnist.md @@ -12,7 +12,7 @@ - 如果对机器学习理论比较清楚,可以直接看第二部分 Keras 训练模型 - 如果对 Keras 机器学习框架也比较熟悉了,可以直接跳转到第三部分 RT-Thread 加载 onnx 模型 -- 如果对 RT-Thread 和 onnx 模型都很熟悉了,那我们可以一起交流下如何在嵌入式设备上高效实现机器学习算法 +- 如果对 RT-Thread 和 onnx 模型都很熟悉了,那我们可以一起交流下如何在嵌入式设备上高效实现机器学习算法 这篇文章假定大家都已经会用 RT-Thread 的 env 工具下载软件包,并且生成项目上传固件到 stm32 上,毕竟这篇文章重点在于加载 onnx 通用机器学习模型,关于 RT-Thread 的教程大家可以在官网上找一找。 @@ -377,8 +377,8 @@ conda create -n tensorflow-gpu tensorflow-gpu # 如果你是用的 CPU conda activate tensorflow-cpu -# 如果你是用的 GPU -conda activate tensorflow-gpu +# 如果你是用的 GPU +conda activate tensorflow-gpu ``` 这里 **激活** 开发环境是指,在 Anaconda 下我们可以有多个开发环境,比如如果你想对比一下 CPU 和 GPU 计算速度的差距,可以同时安装 2 个开发环境,然后根据需要切换到 CPU 开发环境,或者 GPU 开发环境,非常方便。如果不用 Anaconda 而是一个 Python 裸奔的话,要么使用 **VirtualEnv**,要么就只能反复安装卸载不同的开发环境了。 @@ -497,7 +497,7 @@ def build_classifier(): # 第一层 Conv2D,激活函数 Relu classifier.add(Conv2D(filters = 2, kernel_size = 3, strides = 1, padding = "SAME", activation = "relu", input_shape = (28, 28, 1))) - + # 第二层 Maxpooling, 使用保持图像大小的 padding classifier.add(MaxPooling2D(pool_size=(2, 2), padding='SAME')) @@ -521,7 +521,7 @@ def build_classifier(): # 第九层 softmax 输出 classifier.add(Dense(kernel_initializer="uniform", units = 10, activation="softmax")) - + # 使用 adam 训练 classifier.compile(optimizer = 'adam', loss = 'categorical_crossentropy', metrics=['accuracy']) @@ -543,25 +543,25 @@ classifier.summary() ``` _________________________________________________________________ -Layer (type) Output Shape Param # +Layer (type) Output Shape Param # ================================================================= -conv2d_1 (Conv2D) (None, 28, 28, 2) 20 +conv2d_1 (Conv2D) (None, 28, 28, 2) 20 _________________________________________________________________ -max_pooling2d_1 (MaxPooling2 (None, 14, 14, 2) 0 +max_pooling2d_1 (MaxPooling2 (None, 14, 14, 2) 0 _________________________________________________________________ -dropout_1 (Dropout) (None, 14, 14, 2) 0 +dropout_1 (Dropout) (None, 14, 14, 2) 0 _________________________________________________________________ -conv2d_2 (Conv2D) (None, 14, 14, 2) 38 +conv2d_2 (Conv2D) (None, 14, 14, 2) 38 _________________________________________________________________ -max_pooling2d_2 (MaxPooling2 (None, 7, 7, 2) 0 +max_pooling2d_2 (MaxPooling2 (None, 7, 7, 2) 0 _________________________________________________________________ -dropout_2 (Dropout) (None, 7, 7, 2) 0 +dropout_2 (Dropout) (None, 7, 7, 2) 0 _________________________________________________________________ -flatten_1 (Flatten) (None, 98) 0 +flatten_1 (Flatten) (None, 98) 0 _________________________________________________________________ -dense_1 (Dense) (None, 4) 396 +dense_1 (Dense) (None, 4) 396 _________________________________________________________________ -dense_2 (Dense) (None, 10) 50 +dense_2 (Dense) (None, 10) 50 ================================================================= Total params: 504 Trainable params: 504 @@ -711,7 +711,7 @@ print(res[0][0]) syntax = "proto3"; message AMessage { - int32 a=1; + int32 a=1; int32 b=2; } ``` @@ -821,8 +821,8 @@ static const float B[] = {0.041442648, 1.461427, 0.07154641, -1.2774754, 0.80927 接下来就是利用这些权值进行计算了,也就是把这些权值带入到理论部分介绍的各个运算里面,其中各个算子都可以在源代码的目录下看到,一个算子对应一个 c 文件: ``` -conv2d.c maxpool.c softmax.c transpose.c -matmul.c add.c dense.c relu.c +conv2d.c maxpool.c softmax.c transpose.c +matmul.c add.c dense.c relu.c ``` 这些算子的代码如果对应理论部分的公式,就很好理解了,这里就不再重复介绍每个算子对应的含义了,在 mnist.c 里也可以看到,其实就只是输入图像,经过各个算子的运算,加上一些内存的释放操作,最后就得到了 softmax 的输出,**如果我把内存部分的操作隐藏掉**: diff --git a/rt-thread-version/rt-thread-standard/tutorial/smart-car/darknet-yolov2/darknet-yolov2.md b/rt-thread-version/rt-thread-standard/tutorial/smart-car/darknet-yolov2/darknet-yolov2.md index 98c7e306ade9db532c5696c4e3068002890d52ea..6737e0412f50bb1b4fef67efb493ce0f209b00b0 100644 --- a/rt-thread-version/rt-thread-standard/tutorial/smart-car/darknet-yolov2/darknet-yolov2.md +++ b/rt-thread-version/rt-thread-standard/tutorial/smart-car/darknet-yolov2/darknet-yolov2.md @@ -388,7 +388,7 @@ random=1 终于可以开始训练了: ``` -./darknet detector train cfg/obj.data cfg/minionsv2.cfg darknet19_448.conv.23 +./darknet detector train cfg/obj.data cfg/minionsv2.cfg darknet19_448.conv.23 ``` 记得把上面的配置文件改成自己的配置文件,上面命令里提前训练好的模型可以从这里下载 [darknet19_448.conv.23 (78MB)](https://wuhanshare-1252843818.cos.ap-guangzhou.myqcloud.com/darknet19_448.conv.23),可以加快训练速度。 @@ -442,4 +442,4 @@ DEBUG=0 4. 编译 darknet,配置好 CUDA,cuDNN 5. 添加配置文件 cfg/obj.names 和 cfg/obj.data 6. 修改 yolov2 模型为单类别 cfg/yolov2.cfg,并下载 darknet19_448.conv.23 -7. 用 GPU 开始训练,模型会自动保存 \ No newline at end of file +7. 用 GPU 开始训练,模型会自动保存 diff --git a/rt-thread-version/rt-thread-standard/tutorial/smart-car/object-detection/object-detection.md b/rt-thread-version/rt-thread-standard/tutorial/smart-car/object-detection/object-detection.md index 95c758cd2d0b7ecd0426288b3e66d0f18dc5de3c..8780357d613c9413653e81155122ff93bc232313 100644 --- a/rt-thread-version/rt-thread-standard/tutorial/smart-car/object-detection/object-detection.md +++ b/rt-thread-version/rt-thread-standard/tutorial/smart-car/object-detection/object-detection.md @@ -109,4 +109,4 @@ RT-Thread 作为实时操作系统负责控制,Linux 则负责提供丰富的 ## 3.参考文献 -Darknet ROS:https://github.com/leggedrobotics/darknet_ros \ No newline at end of file +Darknet ROS:https://github.com/leggedrobotics/darknet_ros diff --git a/rt-thread-version/rt-thread-standard/tutorial/smart-car/ros-camera-car/ros-camera-car.md b/rt-thread-version/rt-thread-standard/tutorial/smart-car/ros-camera-car/ros-camera-car.md index 4ec305ea93ce45f7906eca86d0235e757c0542c7..fa5cc63560feae6e6400072114b0dfcf73c43cdb 100644 --- a/rt-thread-version/rt-thread-standard/tutorial/smart-car/ros-camera-car/ros-camera-car.md +++ b/rt-thread-version/rt-thread-standard/tutorial/smart-car/ros-camera-car/ros-camera-car.md @@ -60,12 +60,12 @@ if __name__ == '__main__': key_pub = rospy.Publisher('keys', String, queue_size=1) rospy.init_node("keyboard_driver") rate = rospy.Rate(100) - + # 设置终端输入模式 old_attr = termios.tcgetattr(sys.stdin) tty.setcbreak(sys.stdin.fileno()) print("Publishing keystrokes. Press Ctrl-C to exit ...") - + # 循环监听键盘事件 while not rospy.is_shutdown(): if select.select([sys.stdin], [], [], 0)[0] == [sys.stdin]: @@ -115,14 +115,14 @@ from std_msgs.msg import String from geometry_msgs.msg import Twist # 键盘和速度映设 w a s d -key_mapping = { 'w': [ 0, 1], 'x': [ 0, -1], - 'a': [ -1, 0], 'd': [1, 0], +key_mapping = { 'w': [ 0, 1], 'x': [ 0, -1], + 'a': [ -1, 0], 'd': [1, 0], 's': [ 0, 0] } g_twist_pub = None -g_target_twist = None +g_target_twist = None g_last_twist = None g_last_send_time = None -g_vel_scales = [0.1, 0.1] # default to very slow +g_vel_scales = [0.1, 0.1] # default to very slow g_vel_ramps = [1, 1] # units: meters per second^2 # 防止速度突变 @@ -352,4 +352,4 @@ $ rosrun image_view image_view image:=/camera/image ## 参考文献 - [ROS 机器人编程实践](https://github.com/osrf/rosbook) -- [rosserial 软件包](https://github.com/wuhanstudio/rt-rosserial) \ No newline at end of file +- [rosserial 软件包](https://github.com/wuhanstudio/rt-rosserial) diff --git a/rt-thread-version/rt-thread-standard/tutorial/smart-car/ros-connect/ros-connect.md b/rt-thread-version/rt-thread-standard/tutorial/smart-car/ros-connect/ros-connect.md index 23ac5abbe843f02b2d5f7af2483aae1eee11a2a4..a023c393d02b01a5716d2b6ac8ec3244f95b928b 100644 --- a/rt-thread-version/rt-thread-standard/tutorial/smart-car/ros-connect/ros-connect.md +++ b/rt-thread-version/rt-thread-standard/tutorial/smart-car/ros-connect/ros-connect.md @@ -189,7 +189,7 @@ float velX = 0, turnBias = 0; char stat_log[200]; // 接收到命令时的回调函数 -void velCB( const geometry_msgs::Twist& twist_msg) +void velCB( const geometry_msgs::Twist& twist_msg) { velX = twist_msg.linear.x; turnBias = twist_msg.angular.z; @@ -212,13 +212,13 @@ static void rosserial_thread_entry(void *parameter) //Init node> nh.initNode(); - + // 订阅了一个话题 /cmd_vel 接收控制指令 nh.subscribe(sub); - + // 发布了一个话题 /vel_x 告诉 ROS 小车速度 nh.advertise(xv); - + // 发布了一个话题 /turn_bias 告诉 ROS 小车的旋转角速度 nh.advertise(xt); @@ -227,7 +227,7 @@ static void rosserial_thread_entry(void *parameter) while (1) { // 如果接收到了控制指令 - if (msgRecieved) + if (msgRecieved) { velX *= mtr.maxSpd; mtr.moveBot(velX, turnBias); @@ -236,7 +236,7 @@ static void rosserial_thread_entry(void *parameter) velX_tmp.data = velX; turnBias_tmp.data = turnBias/mtr.turnFactor; - + // 更新话题内容 xv.publish( &velX_tmp ); xt.publish( &turnBias_tmp ); @@ -283,7 +283,7 @@ class MotorControl { void moveBot(float spd, float bias); void stopMotors(); private: - struct rt_device_pwm *pwm_dev; + struct rt_device_pwm *pwm_dev; //The pins int fl_for; int fl_back; @@ -306,7 +306,7 @@ motors.c #define PWM_DEV_NAME "pwm3" MotorControl::MotorControl(int fl_for, int fl_back, - int fr_for, int fr_back) + int fr_for, int fr_back) { this->maxSpd = 500000; this->moveFactor = 1.0; @@ -370,12 +370,12 @@ void MotorControl::moveBot(float spd, float bias) { sR = moveFactor * maxSpd; } - if (sL < 0) + if (sL < 0) { sL *= -1; } - if (sR < 0) + if (sR < 0) { sR *= -1; } @@ -405,7 +405,7 @@ void MotorControl::moveBot(float spd, float bias) { // 小车旋转 void MotorControl::rotateBot(int dir, float spd) { float s = spd * maxSpd; - if (dir < 0) + if (dir < 0) { s *= -1; } @@ -429,12 +429,12 @@ void MotorControl::rotateBot(int dir, float spd) { } //Turn off both motors -void MotorControl::stopMotors() +void MotorControl::stopMotors() { - rt_pwm_set(pwm_dev, fl_for, maxSpd, 0); - rt_pwm_set(pwm_dev, fl_back, maxSpd, 0); - rt_pwm_set(pwm_dev, fr_for, maxSpd, 0); - rt_pwm_set(pwm_dev, fr_back, maxSpd, 0); + rt_pwm_set(pwm_dev, fl_for, maxSpd, 0); + rt_pwm_set(pwm_dev, fl_back, maxSpd, 0); + rt_pwm_set(pwm_dev, fr_for, maxSpd, 0); + rt_pwm_set(pwm_dev, fr_back, maxSpd, 0); } ``` @@ -497,7 +497,7 @@ vel = Twist() vel.linear.x = 0 def on_press(key): - + try: if(key.char == 'w'): print("Forward") @@ -546,7 +546,7 @@ while not rospy.is_shutdown(): vel.linear.x = 0 vel.angular.z = 0 rate.sleep() - + if not listener.running: listener = Listener(on_release=on_release, on_press = on_press) listener.start() diff --git a/rt-thread-version/rt-thread-standard/tutorial/smart-car/rplidar-connect/rplidar-connect.md b/rt-thread-version/rt-thread-standard/tutorial/smart-car/rplidar-connect/rplidar-connect.md index 1d9d74cb213631de5649d156dd27e6bc41c4b3b4..59e1703ddef33f9fa61fa415b3e6c9329c73320a 100644 --- a/rt-thread-version/rt-thread-standard/tutorial/smart-car/rplidar-connect/rplidar-connect.md +++ b/rt-thread-version/rt-thread-standard/tutorial/smart-car/rplidar-connect/rplidar-connect.md @@ -66,7 +66,7 @@ menuconfig BSP_USING_UART if BSP_USING_UART config BSP_USING_UART2 bool "Enable UART2" - default n + default n config BSP_UART2_RX_USING_DMA bool "Enable UART2 RX DMA" @@ -139,7 +139,7 @@ static int rplidar_stop_example(int argc, char *argv[]) ret = rp_lidar_init(lidar); if(ret != RT_EOK) { - rt_kprintf("Failed to init lidar device\n"); + rt_kprintf("Failed to init lidar device\n"); return -1; } @@ -204,4 +204,4 @@ u_result rp_lidar_recev_data(rt_device_t lidar, _u8* buffer, size_t len, _u32 ti ## 4. 参考资料 - [思岚科技官方资料](http://www.slamtec.com/cn/Support#rplidar-a-series) -- [RPlidar 软件包](https://github.com/wuhanstudio/rplidar) \ No newline at end of file +- [RPlidar 软件包](https://github.com/wuhanstudio/rplidar) diff --git a/rt-thread-version/rt-thread-standard/tutorial/temperature-system/dfs.md b/rt-thread-version/rt-thread-standard/tutorial/temperature-system/dfs.md index 4e4d77dcc6962f1a35abf58e80deac9d1ffc6fdb..ea844bc186ee1da4b22f7b59fefa855d7b9d3b91 100644 --- a/rt-thread-version/rt-thread-standard/tutorial/temperature-system/dfs.md +++ b/rt-thread-version/rt-thread-standard/tutorial/temperature-system/dfs.md @@ -308,19 +308,19 @@ while (1) ## 注意事项 - 源码中,只上传了两个 demo 工程,均是本次 DIY 中接收节点的代码。RECEIVE(stm32l475-atk-pandora)(SD_Card) 是在 SD Card 上使用文件系统的 demo,RECEIVE(stm32l475-atk-pandora)(SPI_Flash) 是在 SPI Flash 上使用文件系统的 demo。 - + - 发送节点的代码,在上一次任务的 demo 工程中有,这里不再重复上传相同 demo 工程 - SPI Flash 的 sector 大小为 4096 字节,需要在 menuconfig 中修改: ![board](figures/spiflashblocksize.png) - + - SD Card 的 sector 大小为 512 字节,需要在 menuconfig 中修改: ![board](figures/sdcardblocksize.png) - + - 本次任务基于 `...rt-thread/bsp/stm32/stm32l475-atk-pandora` 这个 bsp 完成的。 ## 维护人 -- [WillianChan](https://github.com/willianchanlovegithub)。 \ No newline at end of file +- [WillianChan](https://github.com/willianchanlovegithub)。 diff --git a/rt-thread-version/rt-thread-standard/tutorial/temperature-system/ipc.md b/rt-thread-version/rt-thread-standard/tutorial/temperature-system/ipc.md index 64573236e0c074629ecf044011733c71d5de746b..2c363123b64b9ca3b2bfed6650d17c20b90be3cc 100644 --- a/rt-thread-version/rt-thread-standard/tutorial/temperature-system/ipc.md +++ b/rt-thread-version/rt-thread-standard/tutorial/temperature-system/ipc.md @@ -50,21 +50,21 @@ RT-Thread online packages ---> int main(void) { rt_thread_t ds18b20_thread, nrf24l01_thread; - + ds18b20_thread = rt_thread_create("18b20tem", read_temp_entry, "temp_ds18b20", 640, RT_THREAD_PRIORITY_MAX / 2, 20); if (ds18b20_thread != RT_NULL) { rt_thread_startup(ds18b20_thread); } - + nrf24l01_thread = rt_thread_create("nrfsend", nrf24l01_send_entry, RT_NULL, 1024, RT_THREAD_PRIORITY_MAX / 2, 20); if (nrf24l01_thread != RT_NULL) { rt_thread_startup(nrf24l01_thread); } - + return RT_EOK; } ``` @@ -224,7 +224,7 @@ static void nrf24l01_send_entry(void *parameter) while (1) { rt_thread_mdelay(100); - + if (rt_mb_recv(tmp_msg_mb, (rt_ubase_t*)&msg, RT_WAITING_FOREVER) == RT_EOK) { if (msg->int_value >= 0) diff --git a/rt-thread-version/rt-thread-standard/tutorial/temperature-system/onenet.md b/rt-thread-version/rt-thread-standard/tutorial/temperature-system/onenet.md index 7a70dcca07453f0726efe4bfb833f010b9c26456..c6d90c2f79f72c716b1a7749bf2d9797873bed56 100644 --- a/rt-thread-version/rt-thread-standard/tutorial/temperature-system/onenet.md +++ b/rt-thread-version/rt-thread-standard/tutorial/temperature-system/onenet.md @@ -85,7 +85,7 @@ Hardware Drivers Config ---> OneNet 软件包数据的上传和命令的接收是基于 MQTT 实现的,OneNet 的初始化其实就是 MQTT 客户端的初始化,初始化完成后,MQTT 客户端会自动连接 OneNet 平台。数据的上传其实就是往特定的 topic 发布消息。当服务器有命令或者响应需要下发时,会将消息推送给设备。 -获取数据流、数据点,发布命令则是基于 HTTP Client 实现的,通过 POST 或 GET 将相应的请求发送给 OneNet 平台,OneNet 将对应的数据返回,这样,我们 就能在网页上或者手机 APP 上看到设备上传的数据了。 +获取数据流、数据点,发布命令则是基于 HTTP Client 实现的,通过 POST 或 GET 将相应的请求发送给 OneNet 平台,OneNet 将对应的数据返回,这样,我们 就能在网页上或者手机 APP 上看到设备上传的数据了。 下图是应用显示设备上传数据的流程图: @@ -113,7 +113,7 @@ mqttinit_sem = rt_sem_create("mqtt_sem", RT_NULL, RT_IPC_FLAG_FIFO); static void onenet_mqtt_init_entry(void *parameter) { uint8_t onenet_mqtt_init_failed_times; - + /* mqtt初始化 */ while (1) { @@ -138,7 +138,7 @@ static void onenet_upload_data_entry(void *parameter) rt_sem_take(mqttinit_sem, RT_WAITING_FOREVER); /* 后面用不到这个信号量了,把它删除了,回收资源 */ rt_sem_delete(mqttinit_sem); - + while (1) { /* 这里是上传数据到OneNet的代码*/ @@ -183,12 +183,12 @@ rt_err_t onenet_mqtt_upload_digit(const char *ds_name, const double digit); static void onenet_upload_data_entry(void *parameter) { struct recvdata *buf_mp; - + /* 永久等待方式接收信号量,若收不到,该线程会一直挂起 */ rt_sem_take(mqttinit_sem, RT_WAITING_FOREVER); /* 后面用不到这个信号量了,把它删除了,回收资源 */ rt_sem_delete(mqttinit_sem); - + while (1) { if (rt_mb_recv(tmp_msg_mb, (rt_ubase_t*)&buf_mp, RT_WAITING_FOREVER) == RT_EOK) @@ -200,7 +200,7 @@ static void onenet_upload_data_entry(void *parameter) rt_kprintf("upload temperature_p0 has an error, try again\n"); else printf("onenet upload OK >>> temp_p0:%f\n", buf_mp->temperature_p0); - + rt_mp_free(buf_mp); /* 释放内存块 */ buf_mp = RT_NULL; /* 请务必要做 */ } @@ -237,7 +237,7 @@ onenet_mqtt_upload_digit("temperature_p1", buf_mp->temperature_p1); ## 本次任务结果 -- 在网页上查看 OneNet 云端数据,能正常收到来自每个发送节点数据流了: +- 在网页上查看 OneNet 云端数据,能正常收到来自每个发送节点数据流了: ![board](figures/onenetdata.png) @@ -271,4 +271,4 @@ onenet_mqtt_upload_digit("temperature_p1", buf_mp->temperature_p1); ## 维护人 -- [WillianChan](https://github.com/willianchanlovegithub)。 \ No newline at end of file +- [WillianChan](https://github.com/willianchanlovegithub)。 diff --git a/rt-thread-version/rt-thread-standard/tutorial/temperature-system/sensor.md b/rt-thread-version/rt-thread-standard/tutorial/temperature-system/sensor.md index ca7ec0efa270117dfb950060941ae03e87f5dce1..36d7c92b7e0e8db7d2cf5e16c31d01ac7c924b42 100644 --- a/rt-thread-version/rt-thread-standard/tutorial/temperature-system/sensor.md +++ b/rt-thread-version/rt-thread-standard/tutorial/temperature-system/sensor.md @@ -77,7 +77,7 @@ static rt_size_t _ds18b20_polling_get_data(rt_sensor_t sensor, struct rt_sensor_ temperature_x10 = ds18b20_get_temperature((rt_base_t)sensor->config.intf.user_data); data->data.temp = temperature_x10; data->timestamp = rt_sensor_get_ts(); - } + } return 1; } ``` @@ -121,8 +121,8 @@ static struct rt_sensor_ops sensor_ops = int rt_hw_ds18b20_init(const char *name, struct rt_sensor_config *cfg) { rt_int8_t result; - rt_sensor_t sensor_temp = RT_NULL; - + rt_sensor_t sensor_temp = RT_NULL; + if (!ds18b20_init((rt_base_t)cfg->intf.user_data)) { /* temperature sensor register */ @@ -155,11 +155,11 @@ int rt_hw_ds18b20_init(const char *name, struct rt_sensor_config *cfg) } return RT_EOK; - + __exit: if (sensor_temp) rt_free(sensor_temp); - return -RT_ERROR; + return -RT_ERROR; } ``` @@ -225,7 +225,7 @@ rt_hw_sensor_register(sensor_temp, name, RT_DEVICE_FLAG_RDONLY, RT_NULL); ```c rt_thread_t ds18b20_thread, led_thread; - + ds18b20_thread = rt_thread_create("18b20tem", read_temp_entry, "temp_ds18b20", @@ -320,4 +320,4 @@ RT-Thread Components ---> ## 维护人 -- [WillianChan](https://github.com/willianchanlovegithub)。 \ No newline at end of file +- [WillianChan](https://github.com/willianchanlovegithub)。