diff --git "a/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\344\275\234\344\270\232/\347\254\2541\345\244\251\344\275\234\344\270\232.md" "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\344\275\234\344\270\232/\347\254\2541\345\244\251\344\275\234\344\270\232.md" new file mode 100644 index 0000000000000000000000000000000000000000..02e899523c9c73971a20217e7013c26d35ab4fee --- /dev/null +++ "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\344\275\234\344\270\232/\347\254\2541\345\244\251\344\275\234\344\270\232.md" @@ -0,0 +1,2 @@ +笔记已提交 +PR链接已填写 diff --git "a/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\344\275\234\344\270\232/\347\254\2542\345\244\251\344\275\234\344\270\232.c" "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\344\275\234\344\270\232/\347\254\2542\345\244\251\344\275\234\344\270\232.c" new file mode 100644 index 0000000000000000000000000000000000000000..1f4cf0f0ef3099ff2c2965898e7d63f28976f612 --- /dev/null +++ "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\344\275\234\344\270\232/\347\254\2542\345\244\251\344\275\234\344\270\232.c" @@ -0,0 +1,58 @@ + +#include +#include +#include +// main线程与thread3线程实现优先级抢占 +// thread1线程与thread2线程实现时间片轮转 +// thread1线程与thread2线程优先级相同,时间片相同 +// thread3线程优先级高于thread1和thread2,时间片相同 +// thread3线程每500ms打印一次,thread1和thread2线程每次打印一次 +// main线程每500ms打印一次 +#define thread_size 512 +#define thread_pri 15 +#define thread_tick 5 +void thread1_entry() +{ + while (1) + { + rt_kprintf("this is thread1\n"); + } +} + +void thread2_entry() +{ + while (1) + { + rt_kprintf("this is thread2\n"); + } +} + +void thread3_entry() +{ + while (1) + { + rt_kprintf("this is thread3\n"); + rt_thread_mdelay(500); + } +} +int main(void) +{ + rt_thread_t thread1 = RT_NULL; + rt_thread_t thread2 = RT_NULL; + rt_thread_t thread3 = RT_NULL; + thread1 = rt_thread_create("thread1", thread1_entry, RT_NULL, thread_size, thread_pri, thread_tick); + thread2 = rt_thread_create("thread2", thread2_entry, RT_NULL, thread_size, thread_pri, thread_tick); + thread3 = rt_thread_create("thread3", thread3_entry, RT_NULL, thread_size, thread_pri - 1, thread_tick); + if (thread1 != RT_NULL) + rt_thread_startup(thread1); + if (thread2 != RT_NULL) + rt_thread_startup(thread2); + if (thread3 != RT_NULL) + rt_thread_startup(thread3); + while (1) + { + rt_kprintf("main thread\n"); + rt_thread_mdelay(500); + } + return RT_EOK; +} diff --git "a/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\344\275\234\344\270\232/\347\254\254\344\270\211\345\244\251\344\275\234\344\270\232/event.c" "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\344\275\234\344\270\232/\347\254\254\344\270\211\345\244\251\344\275\234\344\270\232/event.c" new file mode 100644 index 0000000000000000000000000000000000000000..29b98631b409573f612799fe5b1b1833084061e2 --- /dev/null +++ "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\344\275\234\344\270\232/\347\254\254\344\270\211\345\244\251\344\275\234\344\270\232/event.c" @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2006-2022, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018-08-24 yangjie the first version + */ + + +#include + +#define THREAD_PRIORITY 9 +#define THREAD_TIMESLICE 5 + +#define EVENT_FLAG3 (1 << 3) +#define EVENT_FLAG5 (1 << 5) + +/* 事件控制块 */ +static struct rt_event event; + +static void event_recv_thread(void *param) +{ + rt_uint32_t recved; + + while(1) { + // 等待任一事件发生(逻辑或) + rt_event_recv(event, + (EVENT_FLAG1 | EVENT_FLAG2), // 等待的事件集合 + RT_EVENT_FLAG_OR | RT_EVENT_FLAG_CLEAR, // 逻辑或+清除事件 + RT_WAITING_FOREVER, + &recved); + + rt_kprintf("收到事件: %s\n", + recved & EVENT_FLAG1 ? "EVENT1" : + recved & EVENT_FLAG2 ? "EVENT2" : "UNKNOWN"); + } +} + +/* 事件发送线程 */ +static void event_send_thread(void *param) +{ + rt_uint8_t flag = 0; + + while(1) { + flag = !flag; + if (flag) { + rt_event_send(event, EVENT_FLAG1); + rt_kprintf("发送事件1\n"); + } else { + rt_event_send(event, EVENT_FLAG2); + rt_kprintf("发送事件2\n"); + } + rt_thread_mdelay(1000); + } +} + +int event_demo(void) +{ + // 创建事件集 + event = rt_event_create("evt", RT_IPC_FLAG_FIFO); + + rt_thread_t recv = rt_thread_create("recv", event_recv_thread, RT_NULL, + 512, 25, 10); + rt_thread_t send = rt_thread_create("send", event_send_thread, RT_NULL, + 512, 26, 10); + + rt_thread_startup(recv); + rt_thread_startup(send); + + return 0; +} + + +/* 导出到 msh 命令列表中 */ +MSH_CMD_EXPORT(event_demo, event sample); diff --git "a/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\344\275\234\344\270\232/\347\254\254\344\270\211\345\244\251\344\275\234\344\270\232/mailbox.c" "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\344\275\234\344\270\232/\347\254\254\344\270\211\345\244\251\344\275\234\344\270\232/mailbox.c" new file mode 100644 index 0000000000000000000000000000000000000000..9eab1f7a1388633e2b8128f47a77d0f9eaf80c4f --- /dev/null +++ "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\344\275\234\344\270\232/\347\254\254\344\270\211\345\244\251\344\275\234\344\270\232/mailbox.c" @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2006-2022, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018-08-24 yangjie the first version + */ + + +#include + +/* 自定义消息结构 */ +struct msg { + rt_uint8_t id; + rt_uint32_t value; + char text[16]; +}; + +static rt_mailbox_t mb; // 邮箱指针 + +/* 邮件发送线程 */ +static void send_thread_entry(void *parameter) +{ + struct msg *mail; + static rt_uint8_t count = 0; + + while (1) { + // 动态分配邮件内存 + mail = (struct msg *)rt_malloc(sizeof(struct msg)); + mail->id = count; + mail->value = count * 10; + rt_snprintf(mail->text, sizeof(mail->text), "Mail-%d", count); + + // 发送邮件(传递指针) + rt_mb_send(mb, (rt_ubase_t)mail); + rt_kprintf("发送邮件: id=%d, value=%d, text=%s\n", + mail->id, mail->value, mail->text); + + count++; + rt_thread_mdelay(800); + } +} + +/* 邮件接收线程 */ +static void recv_thread_entry(void *parameter) +{ + struct msg *mail; + + while (1) { + // 接收邮件(阻塞等待) + rt_mb_recv(mb, (rt_ubase_t *)&mail, RT_WAITING_FOREVER); + + rt_kprintf("接收邮件: id=%d, value=%d, text=%s\n", + mail->id, mail->value, mail->text); + + rt_free(mail); // 释放邮件内存 + } +} + +int mailbox_demo(void) +{ + // 创建邮箱(容量为4条消息) + mb = rt_mb_create("mbt", 4, RT_IPC_FLAG_FIFO); + + rt_thread_t send_thread = rt_thread_create("send", send_thread_entry, RT_NULL, + 512, 25, 10); + rt_thread_t recv_thread = rt_thread_create("recv", recv_thread_entry, RT_NULL, + 512, 26, 10); + + rt_thread_startup(send_thread); + rt_thread_startup(recv_thread); + + return 0; +} + +/* 导出到 msh 命令列表中 */ +MSH_CMD_EXPORT(mailbox_demo, mailbox sample); diff --git "a/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\344\275\234\344\270\232/\347\254\254\344\270\211\345\244\251\344\275\234\344\270\232/message_queue.c" "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\344\275\234\344\270\232/\347\254\254\344\270\211\345\244\251\344\275\234\344\270\232/message_queue.c" new file mode 100644 index 0000000000000000000000000000000000000000..f566eefc8824134712d35c646be599c6f5063f3f --- /dev/null +++ "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\344\275\234\344\270\232/\347\254\254\344\270\211\345\244\251\344\275\234\344\270\232/message_queue.c" @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2006-2022, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018-08-24 yangjie the first version + */ + + +#include + +#define THREAD_PRIORITY 25 +#define THREAD_TIMESLICE 5 + +#define RT_VERSION_CHECK(major, minor, revise) ((major * 10000) + (minor * 100) + revise) + +/* 消息队列控制块 */ +static rt_mq_t mq; + +/* 消息发送线程 */ +static void mq_send_thread(void *param) +{ + char buf[MQ_MSG_SIZE]; + rt_uint8_t count = 0; + + while(1) { + // 格式化消息内容 + rt_snprintf(buf, sizeof(buf), "Message-%d", count++); + + // 发送消息(非阻塞方式) + if (rt_mq_send(mq, buf, sizeof(buf)) == RT_EOK) { + rt_kprintf("发送消息: %s\n", buf); + } else { + rt_kprintf("消息队列已满!\n"); + } + + rt_thread_mdelay(500); + } +} + +/* 消息接收线程 */ +static void mq_recv_thread(void *param) +{ + char rbuf[MQ_MSG_SIZE]; + + while(1) { + // 接收消息(阻塞等待) + if (rt_mq_recv(mq, rbuf, sizeof(rbuf), RT_WAITING_FOREVER) > 0) { + rt_kprintf("接收消息: %s\n", rbuf); + } + } +} + +int message_queue_demo(void) +{ + // 创建消息队列 + mq = rt_mq_create("mq", MQ_MSG_SIZE, MQ_MAX_MSGS, RT_IPC_FLAG_FIFO); + + rt_thread_t send = rt_thread_create("send", mq_send_thread, RT_NULL, + 512, 25, 10); + rt_thread_t recv = rt_thread_create("recv", mq_recv_thread, RT_NULL, + 512, 26, 10); + + rt_thread_startup(send); + rt_thread_startup(recv); + + return 0; +} + + +/* 导出到 msh 命令列表中 */ +MSH_CMD_EXPORT(message_queue_demo, msgq sample); diff --git "a/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\344\275\234\344\270\232/\347\254\254\344\270\211\345\244\251\344\275\234\344\270\232/mutex.c" "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\344\275\234\344\270\232/\347\254\254\344\270\211\345\244\251\344\275\234\344\270\232/mutex.c" new file mode 100644 index 0000000000000000000000000000000000000000..19ca4e8335b117ce443c38db1985c95216d9570e --- /dev/null +++ "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\344\275\234\344\270\232/\347\254\254\344\270\211\345\244\251\344\275\234\344\270\232/mutex.c" @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2006-2022, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018-08-24 yangjie the first version + */ + + +#include + +#define THREAD_PRIORITY 8 +#define THREAD_TIMESLICE 5 + +/* 指向互斥量的指针 */ +static rt_mutex_t mutex; +static rt_uint8_t number = 0; // 共享资源 + +/* 低优先级线程 */ +static void low_priority_thread(void *param) +{ + while(1) { + rt_mutex_take(mutex, RT_WAITING_FOREVER); // 获取互斥锁 + number++; + rt_kprintf("低优先级线程: number=%d\n", number); + rt_thread_mdelay(500); // 模拟长时间操作 + rt_mutex_release(mutex); // 释放互斥锁 + rt_thread_mdelay(10); + } +} + +/* 高优先级线程 */ +static void high_priority_thread(void *param) +{ + while(1) { + rt_mutex_take(mutex, RT_WAITING_FOREVER); + number++; + rt_kprintf("高优先级线程: number=%d\n", number); + rt_mutex_release(mutex); + rt_thread_mdelay(300); + } +} + +int mutex_demo(void) +{ + // 创建互斥量 + mutex = rt_mutex_create("mtx", RT_IPC_FLAG_FIFO); + + // 创建线程(注意优先级设置) + rt_thread_t low = rt_thread_create("low", low_priority_thread, RT_NULL, + 1024, 20, 10); + rt_thread_t high = rt_thread_create("high", high_priority_thread, RT_NULL, + 1024, 19, 10); + + rt_thread_startup(low); + rt_thread_startup(high); + + return 0; +} +/* 导出到 msh 命令列表中 */ +MSH_CMD_EXPORT(mutex_demo, mutex sample); diff --git "a/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\344\275\234\344\270\232/\347\254\254\344\270\211\345\244\251\344\275\234\344\270\232/sem.c" "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\344\275\234\344\270\232/\347\254\254\344\270\211\345\244\251\344\275\234\344\270\232/sem.c" new file mode 100644 index 0000000000000000000000000000000000000000..3c9837a1bf3395fa6cfad18d09d2a8afe2cb6dbe --- /dev/null +++ "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\344\275\234\344\270\232/\347\254\254\344\270\211\345\244\251\344\275\234\344\270\232/sem.c" @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2006-2022, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018-08-24 yangjie the first version + */ + + +#include + +#define THREAD_PRIORITY 25 +#define THREAD_TIMESLICE 5 + +/* 指向信号量的指针 */ +static rt_sem_t dynamic_sem = RT_NULL; + + + + +static void producer_thread_entry(void *parameter) +{ + static rt_uint8_t count = 0; + + while (1) + { + rt_kprintf("count=%d\n", count++); + rt_sem_release(dynamic_sem); + rt_thread_mdelay(100); + } +} + + +static void consumer_thread_entry(void *parameter) +{ + while (1) + { + rt_sem_take(dynamic_sem, RT_WAITING_FOREVER); + rt_kprintf("+1\n"); + } +} + +/* 信号量示例的初始化 */ +int semaphore_demo(void) +{ + // 创建动态信号量,初始值为0(没有可用资源) + dynamic_sem = rt_sem_create("dsem", 0, RT_IPC_FLAG_FIFO); + + // 创建生产者线程(优先级较低) + rt_thread_t producer = rt_thread_create("producer", + producer_thread_entry, RT_NULL, + 512, THREAD_PRIORITY+1, THREAD_TIMESLICE); + + // 创建消费者线程(优先级较高) + rt_thread_t consumer = rt_thread_create("consumer", + consumer_thread_entry, RT_NULL, + 512, THREAD_PRIORITY, THREAD_TIMESLICE); + + // 启动线程 + rt_thread_startup(producer); + rt_thread_startup(consumer); + + return 0; +} + +/* 导出到 msh 命令列表中 */ +MSH_CMD_EXPORT(semaphore_demo, semaphore sample); + diff --git "a/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\344\275\234\344\270\232/\347\254\254\344\270\211\345\244\251\344\275\234\344\270\232/signal.c" "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\344\275\234\344\270\232/\347\254\254\344\270\211\345\244\251\344\275\234\344\270\232/signal.c" new file mode 100644 index 0000000000000000000000000000000000000000..5b266304caca0aa66d574d67e1d20c1aa2806dbc --- /dev/null +++ "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\344\275\234\344\270\232/\347\254\254\344\270\211\345\244\251\344\275\234\344\270\232/signal.c" @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2006-2022, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018-08-24 yangjie the first version + */ + + +#include + +static rt_thread_t tid = RT_NULL; + +/* 信号处理函数 */ +void signal_handler(int sig) +{ + rt_kprintf("!!! 信号处理函数执行: 收到信号 %d\n", sig); +} + +/* 信号接收线程 */ +static void signal_recv_thread(void *param) +{ + // 安装信号处理函数 + rt_signal_install(SIGUSR1, signal_handler); + rt_signal_install(SIGUSR2, signal_handler); + + rt_kprintf("信号接收线程启动\n"); + + while(1) { + rt_kprintf("接收线程正常运行...\n"); + rt_thread_mdelay(2000); + } +} + +/* 信号发送线程 */ +static void signal_send_thread(void *param) +{ + rt_thread_mdelay(3000); // 等待接收线程启动 + + while(1) { + rt_kprintf("\n发送信号 SIGUSR1\n"); + rt_signal_kill(tid, SIGUSR1); + + rt_thread_mdelay(4000); + + rt_kprintf("\n发送信号 SIGUSR2\n"); + rt_signal_kill(tid, SIGUSR2); + + rt_thread_mdelay(4000); + } +} + +int signal_demo(void) +{ + // 创建接收线程 + tid = rt_thread_create("recv", signal_recv_thread, RT_NULL, + 512, 25, 10); + + // 创建发送线程 + rt_thread_t send = rt_thread_create("send", signal_send_thread, RT_NULL, + 512, 26, 10); + + rt_thread_startup(tid); + rt_thread_startup(send); + + return 0; +} + +/* 导出到 msh 命令列表中 */ +MSH_CMD_EXPORT(signal_demo, signal sample); diff --git "a/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\344\275\234\344\270\232/\347\254\254\344\270\211\345\244\251\344\275\234\344\270\232/\347\224\250\344\272\206\344\270\200\347\202\271\347\202\271ai\350\276\205\345\212\251.txt" "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\344\275\234\344\270\232/\347\254\254\344\270\211\345\244\251\344\275\234\344\270\232/\347\224\250\344\272\206\344\270\200\347\202\271\347\202\271ai\350\276\205\345\212\251.txt" new file mode 100644 index 0000000000000000000000000000000000000000..ad9cb8bace82ee040ce31580ed9c27615832f886 --- /dev/null +++ "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\344\275\234\344\270\232/\347\254\254\344\270\211\345\244\251\344\275\234\344\270\232/\347\224\250\344\272\206\344\270\200\347\202\271\347\202\271ai\350\276\205\345\212\251.txt" @@ -0,0 +1 @@ +QAQ \ No newline at end of file diff --git "a/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\344\275\234\344\270\232/\347\254\254\345\233\233\346\254\241\344\275\234\344\270\232/main.c" "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\344\275\234\344\270\232/\347\254\254\345\233\233\346\254\241\344\275\234\344\270\232/main.c" new file mode 100644 index 0000000000000000000000000000000000000000..901fe896ce8a422ce7ed5b251629832eb8c2a5c8 --- /dev/null +++ "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\344\275\234\344\270\232/\347\254\254\345\233\233\346\254\241\344\275\234\344\270\232/main.c" @@ -0,0 +1,128 @@ +/* 虚拟串口设备结构体 */ +struct virtual_uart { + struct rt_device parent; + rt_uint8_t rx_buffer[128]; // 接收缓冲区 + rt_uint16_t rx_index; // 缓冲索引 + rt_sem_t rx_sem; // 接收信号量 + rt_mutex_t lock; // 互斥锁 +}; + +/* 实现设备操作函数 */ +static rt_err_t vcom_open(rt_device_t dev, rt_uint16_t oflag) { + struct virtual_uart *vcom = (struct virtual_uart *)dev; + vcom->rx_index = 0; + return RT_EOK; +} + +static rt_size_t vcom_read(rt_device_t dev, rt_off_t pos, void *buf, rt_size_t size) { + struct virtual_uart *vcom = (struct virtual_uart *)dev; + rt_size_t len = 0; + + rt_mutex_take(&vcom->lock, RT_WAITING_FOREVER); + len = (size < vcom->rx_index) ? size : vcom->rx_index; + memcpy(buf, vcom->rx_buffer, len); + vcom->rx_index -= len; + rt_mutex_release(&vcom->lock); + + return len; +} + +static rt_size_t vcom_write(rt_device_t dev, rt_off_t pos, const void *buf, rt_size_t size) { + + rt_kprintf("[VCOM] OUTPUT: "); + for (int i = 0; i < size; i++) { + rt_kprintf("%c", ((char*)buf)[i]); + } + rt_kprintf("\n"); + return size; +} + +static rt_err_t vcom_control(rt_device_t dev, int cmd, void *args) { + + switch(cmd) { + case RT_DEVICE_CTRL_CONFIG: + rt_kprintf("VCOM config updated\n"); + break; + default: + return -RT_ENOSYS; + } + return RT_EOK; +} + +/* 虚拟设备注册函数 */ +int rt_hw_vcom_init(void) { + struct virtual_uart *vcom = rt_malloc(sizeof(struct virtual_uart)); + + + vcom->rx_index = 0; + rt_sem_init(&vcom->rx_sem, "vcom_rx", 0, RT_IPC_FLAG_FIFO); + rt_mutex_init(&vcom->lock, "vcom_lock", RT_IPC_FLAG_PRIO); + + + vcom->parent.type = RT_Device_Class_Char; + vcom->parent.ops = &(struct rt_device_ops){ + RT_NULL, + vcom_open, + RT_NULL, + vcom_read, + vcom_write, + vcom_control + }; + + rt_device_register(&vcom->parent, "vcom", RT_DEVICE_FLAG_RDWR); + return RT_EOK; +} +INIT_DEVICE_EXPORT(rt_hw_vcom_init); + + +static int uart_sample(int argc, char *argv[]) { + // 将查找的设备名改为虚拟设备名 + rt_strncpy(uart_name, "vcom", RT_NAME_MAX); + char str[] = "hello RT-Thread!\r\n"; + + if (argc == 2) + { + rt_strncpy(uart_name, argv[1], RT_NAME_MAX); + } + else + { + rt_strncpy(uart_name, SAMPLE_UART_NAME, RT_NAME_MAX); + } + + /* 查找系统中的串口设备 */ + serial = rt_device_find(uart_name); + if (!serial) + { + rt_kprintf("find %s failed!\n", uart_name); + return RT_ERROR; + } + + rt_kprintf("find %s !\n", uart_name); + + /* 初始化信号量 */ + rt_sem_init(&rx_sem, "rx_sem", 0, RT_IPC_FLAG_FIFO); + /* 以中断接收及轮询发送模式打开串口设备 */ + rt_device_open(serial, RT_DEVICE_FLAG_INT_RX); + /* 设置接收回调函数 */ + rt_device_set_rx_indicate(serial, uart_input); + /* 发送字符串 */ + rt_device_write(serial, 0, str, (sizeof(str) - 1)); + rt_kprintf("write to %s done!\n", uart_name); + + /* 创建 serial 线程 */ + rt_thread_t thread = rt_thread_create("serial", serial_thread_entry, RT_NULL, 1024, 25, 10); + /* 创建成功则启动线程 */ + if (thread != RT_NULL) + { + rt_kprintf("thread startup!\n"); + rt_thread_startup(thread); + } + else + { + ret = RT_ERROR; + } + + return ret; +} + +INIT_APP_EXPORT(uart_sample); \ No newline at end of file diff --git "a/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\344\270\200\346\254\241.md" "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\344\270\200\346\254\241.md" new file mode 100644 index 0000000000000000000000000000000000000000..3ce9dff494b1b9a943fadea7eb5a0cc78efd6584 --- /dev/null +++ "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\344\270\200\346\254\241.md" @@ -0,0 +1,89 @@ +#标题 +第一篇笔记 + +## 1.下载GIT + +- 下载地址:https://git-scm.com/downloads +- 选择适合自己操作系统的版本进行下载安装。 + +## 2.配置SSH +``` +ssh-keygen -t rsa -C "your_email@example.com" +``` +- 输入命令后,会出现一系列提示,按回车键即可。 +- 之后会在用户目录下生成.ssh文件夹,里面有两个文件:id_rsa和id_rsa.pub。 +- 将id_rsa.pub的内容复制到GitHub的SSH Key中。 + +## 3.创建仓库 +- 登录GitHub,点击右上角的“+”,选择“New repository”创建仓库。 +- 输入仓库名称,描述,选择公开或私有,点击“Create repository”创建。 +- 复制仓库的HTTPS地址,在本地命令行下执行: +``` +git clone https://github.com/your_username/your_repository.git +``` +- 克隆到本地后,在仓库目录下执行: +``` +git status +``` +- 显示当前仓库的状态。 +- 在仓库目录下执行: +``` +git add . +``` +- 添加所有文件到暂存区。 +- 在仓库目录下执行: +``` +git commit -m "first commit" +``` +- 提交暂存区到仓库。 +- 在仓库目录下执行: +``` +git push -u origin master +``` +- 推送本地仓库到远程仓库。 + +## 4.创建README.md +- 在仓库目录下创建一个README.md文件,内容随便写。 +- 在仓库目录下执行: +``` +git add . +``` +- 添加README.md文件到暂存区。 +- 在仓库目录下执行: +``` +git commit -m "add README.md" +``` +- 提交README.md文件到仓库。 +- 在仓库目录下执行: +``` +git push -u origin master +``` +- 推送README.md文件到远程仓库。 + +## 5.创建分支 +- 在仓库目录下执行: +``` +git branch new_branch +``` +- 创建一个名为new_branch的分支。 +- 在仓库目录下执行: +``` +git checkout new_branch +``` +- 切换到new_branch分支。 +- 在new_branch分支下修改文件,并提交到仓库。 +- 在仓库目录下执行: +``` +git checkout master +``` +- 切换回master分支。 +- 在master分支下执行: +``` +git merge new_branch +``` +- 将new_branch分支合并到master分支。 +- 在仓库目录下执行: +``` +git push origin master +``` +- 推送master分支到远程仓库。 diff --git "a/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\344\270\211\345\244\251\347\254\224\350\256\260/1ac677698b148c859a22a14daeb618d.jpg" "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\344\270\211\345\244\251\347\254\224\350\256\260/1ac677698b148c859a22a14daeb618d.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..eb7436a8ae32912c2089f8b86018db5e9dbbf0f1 Binary files /dev/null and "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\344\270\211\345\244\251\347\254\224\350\256\260/1ac677698b148c859a22a14daeb618d.jpg" differ diff --git "a/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\344\270\211\345\244\251\347\254\224\350\256\260/22bd16cdef716095a6e92186e2ec40f.jpg" "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\344\270\211\345\244\251\347\254\224\350\256\260/22bd16cdef716095a6e92186e2ec40f.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..e06813588a43e7642387411e8360e28c70f84237 Binary files /dev/null and "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\344\270\211\345\244\251\347\254\224\350\256\260/22bd16cdef716095a6e92186e2ec40f.jpg" differ diff --git "a/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\344\270\211\345\244\251\347\254\224\350\256\260/28b2d4fd7a1ca7d4e08e87943efe896.jpg" "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\344\270\211\345\244\251\347\254\224\350\256\260/28b2d4fd7a1ca7d4e08e87943efe896.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..fd7fc8a5c6f1dba5723b3c59bf0d5cb46d2d3db0 Binary files /dev/null and "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\344\270\211\345\244\251\347\254\224\350\256\260/28b2d4fd7a1ca7d4e08e87943efe896.jpg" differ diff --git "a/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\344\270\211\345\244\251\347\254\224\350\256\260/355b72983b377c454f8b8e0fe58e5cf.jpg" "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\344\270\211\345\244\251\347\254\224\350\256\260/355b72983b377c454f8b8e0fe58e5cf.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..a0baf253a2a8327efd23f7dc867b972bcbb5ad08 Binary files /dev/null and "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\344\270\211\345\244\251\347\254\224\350\256\260/355b72983b377c454f8b8e0fe58e5cf.jpg" differ diff --git "a/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\344\270\211\345\244\251\347\254\224\350\256\260/45bb5e2ceb786ce88e8c339da818692.jpg" "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\344\270\211\345\244\251\347\254\224\350\256\260/45bb5e2ceb786ce88e8c339da818692.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..0c1884af80fc76aaf37a008ef2d2a5219d04d8c3 Binary files /dev/null and "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\344\270\211\345\244\251\347\254\224\350\256\260/45bb5e2ceb786ce88e8c339da818692.jpg" differ diff --git "a/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\344\270\211\345\244\251\347\254\224\350\256\260/5a2000ec7dd577283c2bb822af4fe87.jpg" "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\344\270\211\345\244\251\347\254\224\350\256\260/5a2000ec7dd577283c2bb822af4fe87.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..baba80c41d009c1c784b6a3168356c693cc29f3c Binary files /dev/null and "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\344\270\211\345\244\251\347\254\224\350\256\260/5a2000ec7dd577283c2bb822af4fe87.jpg" differ diff --git "a/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\344\270\211\345\244\251\347\254\224\350\256\260/ac17c9b26d2e06da401d67bbfa82ad6.jpg" "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\344\270\211\345\244\251\347\254\224\350\256\260/ac17c9b26d2e06da401d67bbfa82ad6.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..9d1d441d67f01243a75615e56090601918373ffa Binary files /dev/null and "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\344\270\211\345\244\251\347\254\224\350\256\260/ac17c9b26d2e06da401d67bbfa82ad6.jpg" differ diff --git "a/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\344\270\211\345\244\251\347\254\224\350\256\260/ae875a1294e6c20fa6232e0867d7248.jpg" "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\344\270\211\345\244\251\347\254\224\350\256\260/ae875a1294e6c20fa6232e0867d7248.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..e0e300c3244ea1fb2313666f6e0343ef225d9af2 Binary files /dev/null and "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\344\270\211\345\244\251\347\254\224\350\256\260/ae875a1294e6c20fa6232e0867d7248.jpg" differ diff --git "a/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\344\270\211\345\244\251\347\254\224\350\256\260/c61d676ccf4bf3ed0bfe985672cd109.jpg" "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\344\270\211\345\244\251\347\254\224\350\256\260/c61d676ccf4bf3ed0bfe985672cd109.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..1e42614a9b7cf24e68f0dbb1cf3e79227779e4b9 Binary files /dev/null and "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\344\270\211\345\244\251\347\254\224\350\256\260/c61d676ccf4bf3ed0bfe985672cd109.jpg" differ diff --git "a/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\344\270\211\345\244\251\347\254\224\350\256\260/image.png" "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\344\270\211\345\244\251\347\254\224\350\256\260/image.png" new file mode 100644 index 0000000000000000000000000000000000000000..ab885702286d216ea48ca0873b8233e0cd0ecc50 Binary files /dev/null and "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\344\270\211\345\244\251\347\254\224\350\256\260/image.png" differ diff --git "a/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\344\270\211\345\244\251\347\254\224\350\256\260/image2.png" "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\344\270\211\345\244\251\347\254\224\350\256\260/image2.png" new file mode 100644 index 0000000000000000000000000000000000000000..1850fd7e4632aa038b59a046be4aad46d9cbe83f Binary files /dev/null and "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\344\270\211\345\244\251\347\254\224\350\256\260/image2.png" differ diff --git "a/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\344\270\211\345\244\251\347\254\224\350\256\260/image3.png" "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\344\270\211\345\244\251\347\254\224\350\256\260/image3.png" new file mode 100644 index 0000000000000000000000000000000000000000..ee7b121ff61f140c0e38d736c32767da0ed602fe Binary files /dev/null and "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\344\270\211\345\244\251\347\254\224\350\256\260/image3.png" differ diff --git "a/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\344\270\211\345\244\251\347\254\224\350\256\260/\347\254\254\344\270\211\345\244\251\347\254\224\350\256\260.md" "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\344\270\211\345\244\251\347\254\224\350\256\260/\347\254\254\344\270\211\345\244\251\347\254\224\350\256\260.md" new file mode 100644 index 0000000000000000000000000000000000000000..3fcfc77a290fe66a6a47e8651b652144a491dc6c --- /dev/null +++ "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\344\270\211\345\244\251\347\254\224\350\256\260/\347\254\254\344\270\211\345\244\251\347\254\224\350\256\260.md" @@ -0,0 +1,335 @@ +# 笔记 + +## 信息量 + +![输入图片说明](1ac677698b148c859a22a14daeb618d.jpg) + +![输入图片说明](../e6cc63163ecb62e0f1fe6ac4b45dc54.jpg) + +### 创建和删除信号量 + + +``` + rt_sem_t rt_sem_create(const char *name, + rt_uint32_t value, + rt_uint8_t flag); + +``` + +``` +rt_err_t rt_sem_delete(rt_sem_t sem); + +``` + +### 初始化和脱离信号量 + + +``` +rt_err_t rt_sem_init(rt_sem_t sem, + const char *name, + rt_uint32_t value, + rt_uint8_t flag) + +``` + + +``` +rt_err_t rt_sem_detach(rt_sem_t sem); + +``` + +### 获取信号量 + + +``` +rt_err_t rt_sem_take (rt_sem_t sem, rt_int32_t time); + +``` + +### 无等待获取信号量 + + +``` +rt_err_t rt_sem_trytake(rt_sem_t sem); + +``` + +### 释放信号量 + +``` +rt_err_t rt_sem_release(rt_sem_t sem); + +``` + +## 互斥量 + +![输入图片说明](28b2d4fd7a1ca7d4e08e87943efe896.jpg) + +![输入图片说明](22bd16cdef716095a6e92186e2ec40f.jpg) + +![输入图片说明](45bb5e2ceb786ce88e8c339da818692.jpg) + +![输入图片说明](355b72983b377c454f8b8e0fe58e5cf.jpg) + +![输入图片说明](c61d676ccf4bf3ed0bfe985672cd109.jpg) + +### 创建和删除互斥量 + + +``` +rt_mutex_t rt_mutex_create (const char* name, rt_uint8_t flag); + +``` + +### 初始化和脱离互斥量 + + +``` +rt_err_t rt_mutex_init (rt_mutex_t mutex, const char* name, rt_uint8_t flag); + +``` + +### 获取互斥量 + + +``` +rt_err_t rt_mutex_take (rt_mutex_t mutex, rt_int32_t time); + +``` + +### 释放互斥量 + + +``` +rt_err_t rt_mutex_release(rt_mutex_t mutex); + +``` + +## 事件集 + +![输入图片说明](ae875a1294e6c20fa6232e0867d7248.jpg) + +## 消息邮箱 + +![输入图片说明](ac17c9b26d2e06da401d67bbfa82ad6.jpg) + +![输入图片说明](5a2000ec7dd577283c2bb822af4fe87.jpg) + +### 创建和删除邮箱 + + +``` +rt_mailbox_t rt_mb_create (const char* name, rt_size_t size, rt_uint8_t flag); + +``` + +``` +rt_err_t rt_mb_delete (rt_mailbox_t mb); + +``` + +### 初始化和脱离邮箱 + + + +``` + rt_err_t rt_mb_init(rt_mailbox_t mb, + const char* name, + void* msgpool, + rt_size_t size, + rt_uint8_t flag) + +``` + + +``` +rt_err_t rt_mb_detach(rt_mailbox_t mb); + +``` + + +### 发送邮件 + + + + +``` +rt_err_t rt_mb_send (rt_mailbox_t mb, rt_uint32_t value); + +``` +### 等待方式发送邮件 + + +``` +rt_err_t rt_mb_send_wait (rt_mailbox_t mb, + rt_uint32_t value, + rt_int32_t timeout); + +``` + +### 发送紧急邮件 + + +``` +rt_err_t rt_mb_urgent (rt_mailbox_t mb, rt_ubase_t value); + +``` + +### 接收邮件 + + +``` +rt_err_t rt_mb_recv (rt_mailbox_t mb, rt_uint32_t* value, rt_int32_t timeout); + +``` + +## 消息队列 + +### 消息队列的工作机制 + +![输入图片说明](image.png) + +### 消息队列控制块 + + +``` +struct rt_messagequeue +{ + struct rt_ipc_object parent; + + void* msg_pool; /* 指向存放消息的缓冲区的指针 */ + + rt_uint16_t msg_size; /* 每个消息的长度 */ + rt_uint16_t max_msgs; /* 最大能够容纳的消息数 */ + + rt_uint16_t entry; /* 队列中已有的消息数 */ + + void* msg_queue_head; /* 消息链表头 */ + void* msg_queue_tail; /* 消息链表尾 */ + void* msg_queue_free; /* 空闲消息链表 */ + + rt_list_t suspend_sender_thread; /* 发送线程的挂起等待队列 */ +}; +typedef struct rt_messagequeue* rt_mq_t; + +``` + +### 创建和删除消息队列 + +``` +rt_mq_t rt_mq_create(const char* name, rt_size_t msg_size, + rt_size_t max_msgs, rt_uint8_t flag); + +``` + +### 初始化和脱离消息队列 + + +``` +rt_err_t rt_mq_init(rt_mq_t mq, const char* name, + void *msgpool, rt_size_t msg_size, + rt_size_t pool_size, rt_uint8_t flag); + +``` + + +``` +rt_err_t rt_mq_detach(rt_mq_t mq); + +``` + +### 发送消息 + + +``` +rt_err_t rt_mq_send (rt_mq_t mq, void* buffer, rt_size_t size); + +``` + +### 等待方式发送消息 + + +``` +rt_err_t rt_mq_send_wait(rt_mq_t mq, + const void *buffer, + rt_size_t size, + rt_int32_t timeout); + +``` + +### 发送紧急消息 + + +``` +rt_err_t rt_mq_urgent(rt_mq_t mq, void* buffer, rt_size_t size); + +``` + +### 接收消息 + + +``` +rt_ssize_t rt_mq_recv (rt_mq_t mq, void* buffer, + rt_size_t size, rt_int32_t timeout); + +``` + +## 信号 + +### 信号的工作机制 + + +![输入图片说明](image2.png) + +### 信号的管理方式 + +![输入图片说明](image3.png) + +### 安装信号 + + +``` +rt_sighandler_t rt_signal_install(int signo, rt_sighandler_t[] handler); + +``` + +### 阻塞信号 + + +``` +void rt_signal_mask(int signo); + +``` + +### 解除信号阻塞 + + + +``` +void rt_signal_unmask(int signo); + +``` + +### 发送信号 + + + +``` +int rt_thread_kill(rt_thread_t tid, int sig); + +``` + +### 等待信号 + + + +``` +int rt_signal_wait(const rt_sigset_t *set, + rt_siginfo_t[] *si, rt_int32_t timeout); + +``` + + + +### + diff --git "a/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\345\233\233\346\254\241\347\254\224\350\256\260/0e44e278948d0bd10c0e383594d9f42.jpg" "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\345\233\233\346\254\241\347\254\224\350\256\260/0e44e278948d0bd10c0e383594d9f42.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..114a1fc2b38cb14c0cf615703a2579865899d815 Binary files /dev/null and "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\345\233\233\346\254\241\347\254\224\350\256\260/0e44e278948d0bd10c0e383594d9f42.jpg" differ diff --git "a/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\345\233\233\346\254\241\347\254\224\350\256\260/14361cb69ac11d3dcea67ffe2871b90.jpg" "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\345\233\233\346\254\241\347\254\224\350\256\260/14361cb69ac11d3dcea67ffe2871b90.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..c3b8bca5ff1159a615873030a4ba5bab37cf5b0e Binary files /dev/null and "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\345\233\233\346\254\241\347\254\224\350\256\260/14361cb69ac11d3dcea67ffe2871b90.jpg" differ diff --git "a/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\345\233\233\346\254\241\347\254\224\350\256\260/20870ebe23a8b7d7f60f1312a2541f8.jpg" "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\345\233\233\346\254\241\347\254\224\350\256\260/20870ebe23a8b7d7f60f1312a2541f8.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..35a00898eaf8e829efdc3ed488b6d474bdca6984 Binary files /dev/null and "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\345\233\233\346\254\241\347\254\224\350\256\260/20870ebe23a8b7d7f60f1312a2541f8.jpg" differ diff --git "a/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\345\233\233\346\254\241\347\254\224\350\256\260/20c7bf4b6e97159d3aaaf30555b34fb.jpg" "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\345\233\233\346\254\241\347\254\224\350\256\260/20c7bf4b6e97159d3aaaf30555b34fb.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..9bf0046e48a67c2e4fa651409aa8360f09cd70d3 Binary files /dev/null and "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\345\233\233\346\254\241\347\254\224\350\256\260/20c7bf4b6e97159d3aaaf30555b34fb.jpg" differ diff --git "a/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\345\233\233\346\254\241\347\254\224\350\256\260/2abb5f3d5e7fbe449ffe6e6135f9fdc.jpg" "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\345\233\233\346\254\241\347\254\224\350\256\260/2abb5f3d5e7fbe449ffe6e6135f9fdc.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..3b857cfc25cbfdd45a261941a9dca22cea38c1c9 Binary files /dev/null and "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\345\233\233\346\254\241\347\254\224\350\256\260/2abb5f3d5e7fbe449ffe6e6135f9fdc.jpg" differ diff --git "a/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\345\233\233\346\254\241\347\254\224\350\256\260/2cfa1e9f9ba85731d913537e82197ee.jpg" "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\345\233\233\346\254\241\347\254\224\350\256\260/2cfa1e9f9ba85731d913537e82197ee.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..57052060769500729ad5816789a38de67c5fe7c5 Binary files /dev/null and "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\345\233\233\346\254\241\347\254\224\350\256\260/2cfa1e9f9ba85731d913537e82197ee.jpg" differ diff --git "a/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\345\233\233\346\254\241\347\254\224\350\256\260/43d6c1d1876c1bc3e49ace864473fec.jpg" "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\345\233\233\346\254\241\347\254\224\350\256\260/43d6c1d1876c1bc3e49ace864473fec.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..295a82f961e4181fba5405f3993aae8f5c4a93e2 Binary files /dev/null and "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\345\233\233\346\254\241\347\254\224\350\256\260/43d6c1d1876c1bc3e49ace864473fec.jpg" differ diff --git "a/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\345\233\233\346\254\241\347\254\224\350\256\260/6522a07e4d9eb026642eafc8d52a2d4.jpg" "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\345\233\233\346\254\241\347\254\224\350\256\260/6522a07e4d9eb026642eafc8d52a2d4.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..a756ba4214d574e74faf4ef19667c9c0ff08ca7e Binary files /dev/null and "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\345\233\233\346\254\241\347\254\224\350\256\260/6522a07e4d9eb026642eafc8d52a2d4.jpg" differ diff --git "a/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\345\233\233\346\254\241\347\254\224\350\256\260/6c4f78fb3e09019df46539cc41465c1.jpg" "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\345\233\233\346\254\241\347\254\224\350\256\260/6c4f78fb3e09019df46539cc41465c1.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..7d704b489cea98a614c302e9d48a1b4d174ff6e8 Binary files /dev/null and "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\345\233\233\346\254\241\347\254\224\350\256\260/6c4f78fb3e09019df46539cc41465c1.jpg" differ diff --git "a/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\345\233\233\346\254\241\347\254\224\350\256\260/c35335ae797a9c85cf92f807958a33a.jpg" "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\345\233\233\346\254\241\347\254\224\350\256\260/c35335ae797a9c85cf92f807958a33a.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..3e7f7c424179b11b4dba47f9fdd02bf6ce9a6c7d Binary files /dev/null and "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\345\233\233\346\254\241\347\254\224\350\256\260/c35335ae797a9c85cf92f807958a33a.jpg" differ diff --git "a/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\345\233\233\346\254\241\347\254\224\350\256\260/c9405e1bd91ac89e7c63834974f0426.jpg" "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\345\233\233\346\254\241\347\254\224\350\256\260/c9405e1bd91ac89e7c63834974f0426.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..987f1d66022a9166e26fccfbc779a54c73b897ff Binary files /dev/null and "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\345\233\233\346\254\241\347\254\224\350\256\260/c9405e1bd91ac89e7c63834974f0426.jpg" differ diff --git "a/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\345\233\233\346\254\241\347\254\224\350\256\260/d7e5945ceae7821fd723bfc98262a11.jpg" "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\345\233\233\346\254\241\347\254\224\350\256\260/d7e5945ceae7821fd723bfc98262a11.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..70d0b68bc5eab3c1cf5813273940f000523dfe50 Binary files /dev/null and "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\345\233\233\346\254\241\347\254\224\350\256\260/d7e5945ceae7821fd723bfc98262a11.jpg" differ diff --git "a/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\345\233\233\346\254\241\347\254\224\350\256\260/e8a65006e3b26e028adaf7ca2e5b919.jpg" "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\345\233\233\346\254\241\347\254\224\350\256\260/e8a65006e3b26e028adaf7ca2e5b919.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..27d33eda421267cb71876fc3b8c621f591b6e597 Binary files /dev/null and "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\345\233\233\346\254\241\347\254\224\350\256\260/e8a65006e3b26e028adaf7ca2e5b919.jpg" differ diff --git "a/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\345\233\233\346\254\241\347\254\224\350\256\260/f7741df3329a930156c904821efd280.jpg" "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\345\233\233\346\254\241\347\254\224\350\256\260/f7741df3329a930156c904821efd280.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..75c6520e0a04c0c366cb256d6eb9af5fab1726ac Binary files /dev/null and "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\345\233\233\346\254\241\347\254\224\350\256\260/f7741df3329a930156c904821efd280.jpg" differ diff --git "a/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\345\233\233\346\254\241\347\254\224\350\256\260/\347\254\254\345\233\233\345\244\251\347\254\224\350\256\260.md" "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\345\233\233\346\254\241\347\254\224\350\256\260/\347\254\254\345\233\233\345\244\251\347\254\224\350\256\260.md" new file mode 100644 index 0000000000000000000000000000000000000000..649a7044297391926a5ae277986f1b6f407c8d4b --- /dev/null +++ "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\345\274\240\347\247\221\345\274\272/\347\254\224\350\256\260/\347\254\254\345\233\233\346\254\241\347\254\224\350\256\260/\347\254\254\345\233\233\345\244\251\347\254\224\350\256\260.md" @@ -0,0 +1,32 @@ +# 笔记 + +![输入图片说明](6522a07e4d9eb026642eafc8d52a2d4.jpg) + +![输入图片说明](43d6c1d1876c1bc3e49ace864473fec.jpg) + +![输入图片说明](2cfa1e9f9ba85731d913537e82197ee.jpg) + +![输入图片说明](c35335ae797a9c85cf92f807958a33a.jpg) + +![输入图片说明](f7741df3329a930156c904821efd280.jpg) + +![输入图片说明](2abb5f3d5e7fbe449ffe6e6135f9fdc.jpg) + + +![输入图片说明](e8a65006e3b26e028adaf7ca2e5b919.jpg) + +![输入图片说明](14361cb69ac11d3dcea67ffe2871b90.jpg) + +![输入图片说明](c9405e1bd91ac89e7c63834974f0426.jpg) + + +![输入图片说明](6c4f78fb3e09019df46539cc41465c1.jpg) + +![输入图片说明](0e44e278948d0bd10c0e383594d9f42.jpg) + +![输入图片说明](d7e5945ceae7821fd723bfc98262a11.jpg) + +![输入图片说明](20870ebe23a8b7d7f60f1312a2541f8.jpg) + +![输入图片说明](20c7bf4b6e97159d3aaaf30555b34fb.jpg) + diff --git "a/2025/\347\254\2545\347\273\204(CanMV-K230)/\351\251\254\351\224\241\345\260\247/\347\254\224\350\256\260/\343\200\220RSOC25\343\200\221Day1 \350\257\276\347\250\213\347\254\224\350\256\260\357\274\232\345\274\200\345\217\221\347\216\257\345\242\203\346\220\255\345\273\272\344\270\216GIT\344\275\277\347\224\250.md" "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\351\251\254\351\224\241\345\260\247/\347\254\224\350\256\260/\343\200\220RSOC25\343\200\221Day1 \350\257\276\347\250\213\347\254\224\350\256\260\357\274\232\345\274\200\345\217\221\347\216\257\345\242\203\346\220\255\345\273\272\344\270\216GIT\344\275\277\347\224\250.md" index 98d2f4b938a983097dbd238e83d04643d2dc25ea..ee978dbf60732d2055e2d86623207c3b8c17369c 100644 --- "a/2025/\347\254\2545\347\273\204(CanMV-K230)/\351\251\254\351\224\241\345\260\247/\347\254\224\350\256\260/\343\200\220RSOC25\343\200\221Day1 \350\257\276\347\250\213\347\254\224\350\256\260\357\274\232\345\274\200\345\217\221\347\216\257\345\242\203\346\220\255\345\273\272\344\270\216GIT\344\275\277\347\224\250.md" +++ "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\351\251\254\351\224\241\345\260\247/\347\254\224\350\256\260/\343\200\220RSOC25\343\200\221Day1 \350\257\276\347\250\213\347\254\224\350\256\260\357\274\232\345\274\200\345\217\221\347\216\257\345\242\203\346\220\255\345\273\272\344\270\216GIT\344\275\277\347\224\250.md" @@ -60,7 +60,7 @@ git clone --recursive --depth 1 https://gitee.com/mirrors_RT-Thread/env-windows. 这里一定要耐心等待,拉取万源码之后还会自动下载一些必要的依赖和工具,不要着急关闭。 -若在线拉取失败可前往[RT-Thread论坛](https://club.rt-thread.org/ask/article/af8952fcf0ca464b.html)查看离线下载方法 +若在线拉取失败可前往[RT-Thread论坛](https://club.rt-thread.org/askarticle/af8952fcf0ca464b.html)查看离线下载方法 2.2 ENV工具配置和使用