• 正文
  • 相关推荐
申请入驻 产业图谱

利用Deepseek学习嵌入式技术,合适吗?

02/05 16:00
1595
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

春节前后,DeepSeek着实火了一把,朋友圈也是刷爆了(不知道你朋友圈有没有关于Deepseek的消息?)。

以前,我习惯性用百度/谷歌搜索问题,但是,自ChatGPT出来,我就不再依赖百度/谷歌了(当然,很多时候也会用)。

国内外这种 AI 工具有很多,特别是国内涌现出了一大批类似 AI 工具,像:文心一言、Kimi、豆包、通义千问、讯飞星火等。可能有些人没有梯子,国外ChatGPT这类工具没办法使用,国内这些工具就是首选。

国内的 AI 工具确实很多,但在 DeepSeek 问世之前,国内的这些工具,说实话,和 ChatGPT 还是有一定差距,用来问些嵌入式技术相关的问题,出来的答案,总有一股“AI味”

在春节假期,我也试着在 DeepSeek 上问了一些嵌入式相关的问题,给出的答案,会明显的比国内其他工具要好的多。那么,利用Deepseek学习嵌入式技术,合适吗?

我的答案是:合适。

比如问:学习嵌入式的路线

像这类指导性的问题,它给的答案虽然和文心一言、Kimi回答有点类似,但它还给出了“拓展的内容”。当然,这类问题,DeepSeek优势不明显。

再来一个问题:基于单片机以及RTOS写一段串口收发的代码,其中包含通信协议,这个问题,DeepSeek给出的答案就相对更有优势:

代码实现:

#include "stm32f4xx.h"#include "FreeRTOS.h"#include "task.h"#include "queue.h"#include "usart.h"
#define START_BYTE 0xAA#define UART_RX_QUEUE_SIZE 128#define UART_TX_QUEUE_SIZE 128
QueueHandle_t uart_rx_queue;QueueHandle_t uart_tx_queue;
typedef struct {    uint8_t length;    uint8_t data[256];    uint8_t checksum;} uart_frame_t;
void uart_rx_task(void *pvParameters) {    uint8_t rx_byte;    uart_frame_t rx_frame;    uint8_t state = 0;    uint8_t index = 0;    uint8_t checksum = 0;
    while (1) {        if (xQueueReceive(uart_rx_queue, &rx_byte, portMAX_DELAY) == pdPASS) {            switch (state) {                case 0: // 等待起始字节                    if (rx_byte == START_BYTE) {                        state = 1;                    }                    break;
                case 1: // 读取长度                    rx_frame.length = rx_byte;                    checksum = rx_byte;                    state = 2;                    index = 0;                    break;
                case 2: // 读取数据                    rx_frame.data[index++] = rx_byte;                    checksum += rx_byte;                    if (index >= rx_frame.length) {                        state = 3;                    }                    break;
                case 3: // 读取校验和                    rx_frame.checksum = rx_byte;                    if (checksum == rx_frame.checksum) {                        // 校验成功,处理数据                        process_rx_frame(&rx_frame);                    }                    state = 0;                    break;
                default:                    state = 0;                    break;            }        }    }}
void uart_tx_task(void *pvParameters) {    uart_frame_t tx_frame;
    while (1) {        if (xQueueReceive(uart_tx_queue, &tx_frame, portMAX_DELAY) == pdPASS) {            // 发送起始字节            USART_SendData(USART1, START_BYTE);            while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
            // 发送长度            USART_SendData(USART1, tx_frame.length);            while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
            // 发送数据            for (uint8_t i = 0; i < tx_frame.length; i++) {                USART_SendData(USART1, tx_frame.data[i]);                while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);            }
            // 计算并发送校验和            uint8_t checksum = tx_frame.length;            for (uint8_t i = 0; i < tx_frame.length; i++) {                checksum += tx_frame.data[i];            }            USART_SendData(USART1, checksum);            while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);        }    }}
void process_rx_frame(uart_frame_t *frame) {    // 在这里处理接收到的数据帧    // 例如:打印数据、响应命令等}
void USART1_IRQHandler(void) {    if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) {        uint8_t rx_byte = USART_ReceiveData(USART1);        xQueueSendFromISR(uart_rx_queue, &rx_byte, NULL);    }}
int main(void) {    // 初始化硬件和外设    USART_Init();    NVIC_Init();
    // 创建队列    uart_rx_queue = xQueueCreate(UART_RX_QUEUE_SIZE, sizeof(uint8_t));    uart_tx_queue = xQueueCreate(UART_TX_QUEUE_SIZE, sizeof(uart_frame_t));
    // 创建任务    xTaskCreate(uart_rx_task, "UART_RX", configMINIMAL_STACK_SIZE, NULL, 1, NULL);    xTaskCreate(uart_tx_task, "UART_TX", configMINIMAL_STACK_SIZE, NULL, 1, NULL);
    // 启动调度器    vTaskStartScheduler();
    while (1);}

 

同样的问题,DeepSeek和国内其他AI工具给出的答案可能近似,但DeepSeek会列举得更详细,而且更具有可读性。

就好比一段代码,实现的功能相同,但你的代码像一坨屎,而DeepSeek的代码规范完整,而且可读性、可移植性更好。

当然,以上只列举了其中一两点,我也尝试问了很多类似的问题,并进行对比,如果说满分100分,国内其他AI工具(文心一言、Kimi)有80分,那么,DeepSeek我给90分。

DeepSeek让特朗普都站出来说了话,让央视新闻等国内几家头部媒体都进行了报道,说明DeepSeek确实有两把刷子。当然,从使用者的角度,DeepSeek也确实很不错。

最后,你们用上了 DeepSeek 吗?

点赞
收藏
评论
分享
加入交流群
举报

相关推荐

登录即可解锁
  • 海量技术文章
  • 设计资源下载
  • 产业链客户资源
  • 写文章/发需求
立即登录

作者黄工,从事嵌入式软件开发工作8年有余,高级嵌入式软件工程师,业余维护公众号『strongerHuang』,分享嵌入式软硬件、单片机、物联网等内容。