• 正文
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

利用Deepseek學(xué)習(xí)嵌入式技術(shù),合適嗎?

02/05 16:00
1756
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

春節(jié)前后,DeepSeek著實(shí)火了一把,朋友圈也是刷爆了(不知道你朋友圈有沒有關(guān)于Deepseek的消息?)。

以前,我習(xí)慣性用百度/谷歌搜索問題,但是,自ChatGPT出來,我就不再依賴百度/谷歌了(當(dāng)然,很多時(shí)候也會(huì)用)。

國(guó)內(nèi)外這種 AI 工具有很多,特別是國(guó)內(nèi)涌現(xiàn)出了一大批類似 AI 工具,像:文心一言、Kimi、豆包、通義千問、訊飛星火等??赡苡行┤藳]有梯子,國(guó)外ChatGPT這類工具沒辦法使用,國(guó)內(nèi)這些工具就是首選。

國(guó)內(nèi)的 AI 工具確實(shí)很多,但在 DeepSeek 問世之前,國(guó)內(nèi)的這些工具,說實(shí)話,和 ChatGPT 還是有一定差距,用來問些嵌入式技術(shù)相關(guān)的問題,出來的答案,總有一股“AI味”

在春節(jié)假期,我也試著在?DeepSeek 上問了一些嵌入式相關(guān)的問題,給出的答案,會(huì)明顯的比國(guó)內(nèi)其他工具要好的多。那么,利用Deepseek學(xué)習(xí)嵌入式技術(shù),合適嗎?

我的答案是:合適。

比如問:學(xué)習(xí)嵌入式的路線

像這類指導(dǎo)性的問題,它給的答案雖然和文心一言、Kimi回答有點(diǎn)類似,但它還給出了“拓展的內(nèi)容”。當(dāng)然,這類問題,DeepSeek優(yōu)勢(shì)不明顯。

再來一個(gè)問題:基于單片機(jī)以及RTOS寫一段串口收發(fā)的代碼,其中包含通信協(xié)議,這個(gè)問題,DeepSeek給出的答案就相對(duì)更有優(yōu)勢(shì):

代碼實(shí)現(xiàn):

#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: // 等待起始字節(jié)                    if (rx_byte == START_BYTE) {                        state = 1;                    }                    break;
                case 1: // 讀取長(zhǎng)度                    rx_frame.length = rx_byte;                    checksum = rx_byte;                    state = 2;                    index = 0;                    break;
                case 2: // 讀取數(shù)據(jù)                    rx_frame.data[index++] = rx_byte;                    checksum += rx_byte;                    if (index >= rx_frame.length) {                        state = 3;                    }                    break;
                case 3: // 讀取校驗(yàn)和                    rx_frame.checksum = rx_byte;                    if (checksum == rx_frame.checksum) {                        // 校驗(yàn)成功,處理數(shù)據(jù)                        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) {            // 發(fā)送起始字節(jié)            USART_SendData(USART1, START_BYTE);            while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
            // 發(fā)送長(zhǎng)度            USART_SendData(USART1, tx_frame.length);            while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
            // 發(fā)送數(shù)據(jù)            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);            }
            // 計(jì)算并發(fā)送校驗(yàn)和            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) {    // 在這里處理接收到的數(shù)據(jù)幀    // 例如:打印數(shù)據(jù)、響應(yīng)命令等}
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) {    // 初始化硬件和外設(shè)    USART_Init();    NVIC_Init();
    // 創(chuàng)建隊(duì)列    uart_rx_queue = xQueueCreate(UART_RX_QUEUE_SIZE, sizeof(uint8_t));    uart_tx_queue = xQueueCreate(UART_TX_QUEUE_SIZE, sizeof(uart_frame_t));
    // 創(chuàng)建任務(wù)    xTaskCreate(uart_rx_task, "UART_RX", configMINIMAL_STACK_SIZE, NULL, 1, NULL);    xTaskCreate(uart_tx_task, "UART_TX", configMINIMAL_STACK_SIZE, NULL, 1, NULL);
    // 啟動(dòng)調(diào)度器    vTaskStartScheduler();
    while (1);}

 

同樣的問題,DeepSeek和國(guó)內(nèi)其他AI工具給出的答案可能近似,但DeepSeek會(huì)列舉得更詳細(xì),而且更具有可讀性。

就好比一段代碼,實(shí)現(xiàn)的功能相同,但你的代碼像一坨屎,而DeepSeek的代碼規(guī)范完整,而且可讀性、可移植性更好。

當(dāng)然,以上只列舉了其中一兩點(diǎn),我也嘗試問了很多類似的問題,并進(jìn)行對(duì)比,如果說滿分100分,國(guó)內(nèi)其他AI工具(文心一言、Kimi)有80分,那么,DeepSeek我給90分。

DeepSeek讓特朗普都站出來說了話,讓央視新聞等國(guó)內(nèi)幾家頭部媒體都進(jìn)行了報(bào)道,說明DeepSeek確實(shí)有兩把刷子。當(dāng)然,從使用者的角度,DeepSeek也確實(shí)很不錯(cuò)。

最后,你們用上了 DeepSeek 嗎?

相關(guān)推薦

登錄即可解鎖
  • 海量技術(shù)文章
  • 設(shè)計(jì)資源下載
  • 產(chǎn)業(yè)鏈客戶資源
  • 寫文章/發(fā)需求
立即登錄

作者黃工,從事嵌入式軟件開發(fā)工作8年有余,高級(jí)嵌入式軟件工程師,業(yè)余維護(hù)公眾號(hào)『strongerHuang』,分享嵌入式軟硬件、單片機(jī)、物聯(lián)網(wǎng)等內(nèi)容。