春节前后,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 128QueueHandle_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 吗?
1575