Jelajahi Sumber

修改注释

WKJay 7 tahun lalu
induk
melakukan
4b0524d140
3 mengubah file dengan 115 tambahan dan 53 penghapusan
  1. 57 30
      README.md
  2. 46 15
      signal_led.c
  3. 12 8
      signal_led.h

+ 57 - 30
README.md

@@ -16,55 +16,63 @@ RT-Thread online packages
 
 # 3、使用方式
 
-1. 首先申请一个信号灯结构
+1. 首先定义信号灯引脚
+
+```C
+#define LED0_PIN GET_PIN(E, 7)
+```
+
+2. 声明一个信号灯对象
 
 ```C
 led led_0;
 ```
 
-2. 定义信号灯的开关函数
+3. 定义信号灯的开关函数
 
 ```C
-void rSwitch_on(void)
+//定义开灯函数
+void led0_switch_on(void)
 {
-    rt_pin_write(LEDR_PIN, PIN_LOW);
+    rt_pin_write(LED0_PIN, PIN_LOW);
 }
-
-void rSwitch_off(void)
+//定义关灯函数
+void led0_switch_off(void)
 {
-    rt_pin_write(LEDR_PIN, PIN_HIGH);
+    rt_pin_write(LED0_PIN, PIN_HIGH);
 }
 ```
 
-3. 设置闪烁模式(字符串形式,以亮、灭、亮、灭……的顺序,依次写入持续时间,单位:ms)
+4. 设置闪烁模式(字符串形式,以亮、灭、亮、灭……的顺序,依次写入持续时间,单位:ms)
 
 ```C
-char* rLedMode="300,300,300,300,300,2000,";//必须以英文逗号结尾
+char *led0BlinkMode = "200,200,200,200,200,1000,";
 ```
 
 注意:时间参数必须以英文逗号间隔开,并且整个字符串必须以英文逗号结尾!
  
-4. 初始化信号灯并绑定信号灯开关函数
+5. 初始化信号灯并绑定信号灯开关函数
 
 ```C
-led_init(&led_0,LEDR_PIN,rSwitch_on,rSwitch_off);
+led_init(&led0, LED0_PIN, led0_switch_on, led0_switch_off);
 ```
 
-5. 设置信号灯工作模式(循环多少次、闪烁方式
+6. 设置信号灯工作模式(循环10次,闪烁方式为 `led0BlinkMode` 中的设定
 
 ```C
-led_set_mode(&led_0,5,rLedMode);
+led_set_mode(&led0, 10, led0BlinkMode);
 ```
 
-6. 开启信号灯
+7. 开启信号灯
 
 ```C
-led_start(&led_0);
+led_start(&led0);
 ```
 
-7. 创建一个信号灯线程循环调用信号灯心跳函数
+8. 创建一个信号灯线程循环调用信号灯心跳函数
 
 ```C
+//每隔 LED_TICK_TIME(50) 毫秒循环调用心跳函数
 while (1)
 {
     led_ticks();
@@ -76,37 +84,56 @@ while (1)
 # 4、使用案例
 
 ```C
+#include <rtthread.h>
+#include <rtdevice.h>
+#include <board.h>
 #include "drv_gpio.h"
 #include "signal_led.h"
 
-#define LEDR_PIN    GET_PIN(E, 7)
-led led_0;
+//定义信号灯引脚
+#define LED0_PIN GET_PIN(E, 7)
+
+//定义信号灯对象
+led led0;
 
-void rSwitch_on(void)
+/*  设置信号灯一个周期内的闪烁模式
+ *  格式为 “亮、灭、亮、灭、亮、灭 …………” 长度不限
+ *  注意:  该配置单位为毫秒,且必须大于 “LED_TICK_TIME” 宏,且为整数倍(不为整数倍则向下取整处理)
+ *          必须以英文逗号为间隔,且以英文逗号结尾,字符串内只允许有数字及逗号,不得有其他字符出现
+ */
+char *led0BlinkMode = "200,200,200,200,200,1000,";
+
+//定义开灯函数
+void led0_switch_on(void)
 {
-    rt_pin_write(LEDR_PIN, PIN_LOW);
+    rt_pin_write(LED0_PIN, PIN_LOW);
 }
-
-void rSwitch_off(void)
+//定义关灯函数
+void led0_switch_off(void)
 {
-    rt_pin_write(LEDR_PIN, PIN_HIGH);
+    rt_pin_write(LED0_PIN, PIN_HIGH);
 }
 
-char* rLedMode="300,300,300,300,300,2000,";//必须以英文逗号结尾
-
 int main(void)
-{
-    led_init(&led_0,LEDR_PIN,rSwitch_on,rSwitch_off);
-    led_set_mode(&led_0,5,rLedMode);
-    led_start(&led_0);
-
+{   
+    //初始化信号灯对象
+    led_init(&led0, LED0_PIN, led0_switch_on, led0_switch_off);
+    //设置信号灯工作模式,循环十次
+    led_set_mode(&led0, 10, led0BlinkMode);
+    //开启信号灯
+    led_start(&led0);
+    
+    //每隔 LED_TICK_TIME(50) 毫秒循环调用心跳函数
     while (1)
     {
         led_ticks();
         rt_thread_mdelay(LED_TICK_TIME);
     }
+
+    return RT_EOK;
 }
 
+
 ```
 
 # 5、联系方式&感谢

+ 46 - 15
signal_led.c

@@ -1,16 +1,25 @@
+/*
+ * @File:   signal_led.c
+ * @Author: WKJay
+ * @Data:   2019/03/14 20:54
+ * 
+ * @e-mail: 1931048074@qq.com
+ * 
+ */
+
 #include "signal_led.h"
-#include "stdlib.h"
-#include "math.h"
-#include "drv_gpio.h"
+
 
 static led *first_handle = NULL;
 static void led_get_blinkArr(led *handle);
 
-//初始化信号灯对象
-//handle:信号灯句柄
-//pin_index:信号灯引脚号
-//switch_on():开灯函数
-//switch_off():关灯函数
+
+/*@brief   初始化信号灯对象
+ *@param   handle:     信号灯句柄
+ *@param   pin_index:  信号灯引脚号
+ *@param   switch_on:  开灯函数(用户自定义)
+ *@param   switch_off: 关灯函数(用户自定义)
+ */
 void led_init(led *handle, rt_base_t pin_index, void (*switch_on)(void), void (*switch_off)(void))
 {
     rt_pin_mode(pin_index, PIN_MODE_OUTPUT);
@@ -20,9 +29,11 @@ void led_init(led *handle, rt_base_t pin_index, void (*switch_on)(void), void (*
     handle->switch_off = switch_off;
 }
 
-//设置信号灯的工作模式
-//loop:         循环次数 (0xff 永久循环)
-//blinkMode:    闪烁方式
+/*@brief    设置信号灯的工作模式
+ *@param    loop:         循环次数 (0xff 永久循环)
+ *@param    blinkMode:    一个周期的闪烁方式(字符串形式,如:"200,200,200,2000,"表示亮200ms,灭200ms,亮200ms,灭2000ms)
+ *@note     blinkMode字符串必须以英文逗号分隔,且最后以英文逗号结尾
+ */
 void led_set_mode(led *handle, uint8_t loop, char *blinkMode)
 {
     handle->loop = loop;
@@ -30,7 +41,10 @@ void led_set_mode(led *handle, uint8_t loop, char *blinkMode)
     led_get_blinkArr(handle);
 }
 
-//获得信号灯一个周期内的闪烁时间数组
+
+/*@brief    获得信号灯一个周期内闪烁时间的数组(仅内部调用,用户无需关注)
+ *@param    handle:    信号灯句柄
+ * */
 static void led_get_blinkArr(led *handle)
 {
     char *blinkModeTemp = NULL;
@@ -75,7 +89,9 @@ static void led_get_blinkArr(led *handle)
     }
 }
 
-//信号灯状态翻转
+/*@brief    信号灯状态翻转
+ *@param    handle:    信号灯句柄
+ * */
 void led_switch(led *led_handle)
 {
     if (led_handle->state)
@@ -90,7 +106,9 @@ void led_switch(led *led_handle)
     }
 }
 
-//信号灯工作函数
+/*@brief    信号灯运作函数
+ *@param    crt_handle:    当前信号灯句柄
+ * */
 void led_handle(led *crt_handle)
 {
     if (crt_handle->loopTemp)
@@ -116,6 +134,11 @@ void led_handle(led *crt_handle)
     }
 }
 
+/*@brief    信号灯开启(若没有调用次函数开启信号灯则信号灯不会工作)
+ *@param    led_handle:     要开启的信号灯句柄
+ *@return   0:             正常
+ *          HANDLE_EXIST:  句柄冲突
+ * */
 uint8_t led_start(led *led_handle)
 {
     led_handle->loopTemp = led_handle->loop; //启动时将其重置
@@ -134,6 +157,9 @@ uint8_t led_start(led *led_handle)
     return 0;
 }
 
+/*@brief    信号灯关闭(关闭信号灯后仍可调用开启函数开启)
+ *@param    led_handle:    要关闭的信号灯句柄
+ * */
 void led_stop(struct led *led_handle)
 {
     struct led **handle_pointer;
@@ -155,7 +181,12 @@ void led_stop(struct led *led_handle)
     }
 }
 
-//信号灯定时器,LED_TICK_TIME ms 调用一次
+/*@brief    信号灯心跳函数
+ *@note     必须循环调用该函数,否则信号灯将不会工作。
+ *          可以将其放入线程或定时器中,保证每隔LED_TICK_TIME毫秒调用即可
+ *          LED_TICK_TIME是在"signal_led.h"中定义的宏,信号灯的工作基于该宏
+ *          保证该宏所定义的时间为信号灯心跳函数调用的周期!
+ * */
 void led_ticks(void)
 {
     led *current_handle;

+ 12 - 8
signal_led.h

@@ -1,20 +1,21 @@
 #ifndef __LED_H_
 #define __LED_H_
 
-#include "stdint.h"
 #include "string.h"
-#include "rtthread.h"
+#include "stdlib.h"
+#include "math.h"
+#include "drv_gpio.h"
 
-#define LED_TICK_TIME 50        //led_handle调用的时间间隔(单位:ms)
-#define LOOP_PERMANENT 0XFF
+#define LED_TICK_TIME 50        //心跳函数调用的时间间隔(单位:ms)
+#define LOOP_PERMANENT 0XFF     //永久循环
 
 #define HANDLE_EXIST 1
 
-#define LED_OFF     0
-#define LED_ON      1
+#define LED_OFF     0           //灯灭状态
+#define LED_ON      1           //灯亮状态
 
 
-typedef struct led {
+typedef struct led{
     uint16_t    tickCnt;
     uint16_t    blinkPoint;     //闪烁节点
     uint8_t     activeState;    //信号灯亮时的引脚状态 (PIN_HIGH/PIN_LOW)
@@ -31,9 +32,12 @@ typedef struct led {
     struct led* next;
 }led;
 
+
+void led_ticks (void);
 void led_init(led *handle, rt_base_t pin_index, void (*switch_on)(void), void (*switch_off)(void));
 void led_set_mode(led* handle,uint8_t loop,char* blinkMode);
-void led_ticks (void);
 uint8_t led_start(led* led_handle);
 void led_stop(struct led *led_handle);
+
+
 #endif