2024年Go最全STM32单片机跑RTOS会比裸机有优势吗?_stm32跑系统有什么好处(1),2024年最新Golang校招面试经验汇总

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

回到我们今天的主题,系统真的比裸奔更有优势吗?

答案肯定不是的,我从以下几点来分析下个人看法:
1.带系统的优势
2.带系统的缺点
3.自己写轻量级操作系统

一、带系统的优势
带系统一般比较适合大的项目,大到什么程度?我个人认为是你个人无法掌控整个程序架构的时候,那可以用系统。

举个例子,我在12年的时候第一次接触了ucos系统,当时只负责产品维护不是独立开发,就是改改代码升级下产品功能。

这个产品的功能还是比较简单,就是一个接受主板过来的串口数据,然后处理显示在LED屏里。

我现在想想这个产品根本没必要用ucos系统啊,多此一举,搞不好还把自己坑了。

至于为什么我也搞不清楚,或许是当时开发这个产品的工程师觉得自己hold不住这个产品的程序架构,所以加个系统把程序”地基”打好。

也或许是他单纯想学习ucos,正好有这个机会就拿那个产品来当小白鼠。

系统相当于给你一个成熟的程序架构,能够很大程度保证你在开发过程中不会因为自己程序架构的问题导致崩盘。

比如说产品90%的功能基本都实现了,最后就是10%跟其他功能有冲突,导致90%的功能又得重写。

二、带系统的缺点

虽然用系统看起来很爽,但也是有缺点的,比如说:

1.新手慎用
不然产品出了BUG你从哪里找都不知道。
带系统的不像while(1)这样从上往下执行,而是通过任务优先级灵活调度,所以会加大BUG排查难度。

2.带系统的占用内存大
有些光是系统就占了几十上百k资源,单片机本身资源就非常有限,比如说原本不带系统用STM32F103C8就能搞定,如果加系统你的上STM32F103CB甚至更高,无形中增加了硬件成本。

三、自己写轻量级操作系统

在这里插入图片描述

用别人成熟的东西算啥本事,自己写一个轻量级操作系统才牛逼,才能真正学到东西。

比如说自己写过内存管理,你才能体会到内存动态分配的真正意义。
在这里插入图片描述

再比如说自己用队列算法实现各层之间数据传递,你才能深刻体会系统里邮箱的实现原理。
在这里插入图片描述

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RTOS系统中,对串口的使用需要在任务中进行实现。一般来说,串口的使用可以分为以下几个步骤: 1. 在任务中创建串口的句柄(handle)。句柄是用来标识串口的,可以用来配置和控制串口的参数。 2. 配置串口的参数,包括波特率、数据位、停止位、校验位等。 3. 打开串口,使能串口的发送和接收功能。 4. 在任务中循环读取串口接收缓冲区中的数据,并进行处理。可以使用中断方式或者轮询方式实现。 5. 在任务中发送数据到串口。可以使用DMA方式或者阻塞方式实现。 下面是一个使用FreeRTOS的示例代码: ```c #include "FreeRTOS.h" #include "task.h" #include "stm32f4xx.h" #include "stm32f4xx_hal.h" /* 定义串口句柄 */ UART_HandleTypeDef huart3; /* 定义接收缓冲区和发送缓冲区 */ uint8_t rx_buffer[32]; uint8_t tx_buffer[32]; /* 串口中断回调函数 */ void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { /* 在这里处理接收到的数据 */ /* 下面是一个简单的示例,将接收到的数据原样发送回去 */ HAL_UART_Transmit(huart, rx_buffer, sizeof(rx_buffer), 1000); HAL_UART_Receive_IT(huart, rx_buffer, sizeof(rx_buffer)); } /* 串口任务 */ void uart_task(void *pvParameters) { /* 配置串口参数 */ huart3.Instance = USART3; huart3.Init.BaudRate = 115200; huart3.Init.WordLength = UART_WORDLENGTH_8B; huart3.Init.StopBits = UART_STOPBITS_1; huart3.Init.Parity = UART_PARITY_NONE; huart3.Init.Mode = UART_MODE_TX_RX; huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE; huart3.Init.OverSampling = UART_OVERSAMPLING_16; HAL_UART_Init(&huart3); /* 使能串口接收中断 */ HAL_UART_Receive_IT(&huart3, rx_buffer, sizeof(rx_buffer)); while (1) { /* 在这里处理发送缓冲区中的数据 */ /* 下面是一个简单的示例,将字符串发送到串口 */ sprintf(tx_buffer, "Hello, world!\r\n"); HAL_UART_Transmit(&huart3, tx_buffer, sizeof(tx_buffer), 1000); /* 等待一段时间 */ vTaskDelay(pdMS_TO_TICKS(1000)); } } int main(void) { /* 初始化FreeRTOS */ xTaskCreate(uart_task, "UART", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL); vTaskStartScheduler(); /* 程序永远不执行到这里 */ return 0; } ``` 在上面的示例代码中,我们首先定义了一个叫做`huart3`的串口句柄,然后在串口任务中配置了串口参数并打开了串口。在串口中断回调函数中,我们处理了接收到的数据并将其原样发送回去。在任务中,我们每隔一段时间就向串口发送一个字符串。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值