隨著chatGPT的火爆,在網(wǎng)上紛紛討論最先被chatGPT淘汰的會(huì)是什么行業(yè),其中類似小編的“程序員”赫然在列,并且排名前三。
起初,小編不信邪,我們是編寫出AI程序的人員,怎么可能會(huì)被AI淘汰。最近,當(dāng)我嘗試讓chatGPT編寫一段協(xié)議解析的代碼時(shí),徹底被震驚到!
一:第一次命令輸入
當(dāng)我向chatGPT輸入我的協(xié)議格式時(shí),chatGPT直接根據(jù)我的要求輸出了完成的源代碼。
下面將源碼貼上
#include "stm32f4xx_hal.h" #define PACKET_START_BYTE 0x7E #define PACKET_END_BYTE 0x7E #define MAX_PACKET_SIZE 20 // 最大數(shù)據(jù)包大小,根據(jù)實(shí)際情況調(diào)整 typedef struct { uint8_t device_address; uint8_t command; uint8_t data_length; uint8_t data[MAX_PACKET_SIZE]; uint8_t checksum; uint8_t is_valid; } SerialPacket; SerialPacket received_packet; void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { static uint8_t buffer[MAX_PACKET_SIZE]; static uint8_t buffer_index = 0; static uint8_t is_inside_packet = 0; if (huart == &huart2) { if (!is_inside_packet) { if (buffer_index == 0 && received_byte == PACKET_START_BYTE) { is_inside_packet = 1; buffer[buffer_index++] = received_byte; } } else { buffer[buffer_index++] = received_byte; if (buffer_index >= 4) { uint8_t data_length = buffer[3] - 2; // 計(jì)算數(shù)據(jù)區(qū)長度(不包括校驗(yàn)和和包尾) if (buffer_index == (data_length + 6)) { // 收到完整的數(shù)據(jù)包 received_packet.device_address = buffer[1]; received_packet.command = buffer[2]; received_packet.data_length = data_length; for (int i = 0; i < data_length; i++) { received_packet.data[i] = buffer[4 + i]; } received_packet.checksum = buffer[data_length + 4]; received_packet.is_valid = 1; // 處理接收到的數(shù)據(jù)包,例如執(zhí)行相應(yīng)的命令 // ... // 復(fù)位接收緩沖區(qū)和狀態(tài) buffer_index = 0; is_inside_packet = 0; } } } HAL_UART_Receive_IT(&huart2, &received_byte, 1); // 啟動(dòng)下一次接收中斷 } } int main(void) { // 初始化HAL庫和串口2 HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_USART2_UART_Init(); // 啟動(dòng)接收中斷 HAL_UART_Receive_IT(&huart2, &received_byte, 1); while (1) { // 在這里可以執(zhí)行其他任務(wù) // ... } }通過上面的代碼分析可以發(fā)現(xiàn),當(dāng)我僅僅經(jīng)過一次“命令輸入”,chatGPT竟然產(chǎn)生了如此準(zhǔn)確的協(xié)議解析的代碼。震驚小編的位置主要是:
1、竟然將協(xié)議頭、數(shù)據(jù)長度等內(nèi)容使用宏定義的形式體現(xiàn):一般的初級程序員沒有如此良好的編程習(xí)慣,將常量定義為易讀和已改的宏定義。
#define PACKET_START_BYTE 0x7E #define PACKET_END_BYTE 0x7E #define MAX_PACKET_SIZE 20 // 最大數(shù)據(jù)包大小,根據(jù)實(shí)際情況調(diào)整2、整個(gè)編碼解析的過程,符合我的要求。并且函數(shù)中使用了結(jié)構(gòu)體、指針等初級程序員不喜歡使用的元素。
二:第二次命令輸入
當(dāng)小編對chatGPT進(jìn)行再次重新輸入命令后的調(diào)整;chatGPT輸出了我們
#include "stm32f4xx_hal.h" #define PACKET_START_BYTE 0x7E #define PACKET_END_BYTE 0x7E #define MAX_PACKET_SIZE 20 // 最大數(shù)據(jù)包大小,根據(jù)實(shí)際情況調(diào)整 UART_HandleTypeDef huart2; typedef struct { uint8_t device_address; uint8_t command; uint8_t data_length; uint8_t data[MAX_PACKET_SIZE]; uint8_t checksum; uint8_t is_valid; } SerialPacket; SerialPacket received_packet; // 接收緩沖區(qū) uint8_t rx_buffer[MAX_PACKET_SIZE]; uint8_t rx_buffer_index = 0; uint8_t is_inside_packet = 0; void process_received_data() { // 在這里可以解析和處理接收到的數(shù)據(jù)包 // 訪問 received_packet 中的數(shù)據(jù)進(jìn)行解析 // 例如,你可以根據(jù) received_packet.command 執(zhí)行相應(yīng)的操作 // ... // 清除接收緩沖區(qū),準(zhǔn)備接收下一個(gè)數(shù)據(jù)包 memset(rx_buffer, 0, sizeof(rx_buffer)); rx_buffer_index = 0; is_inside_packet = 0; } void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { if (huart == &huart2) { if (!is_inside_packet) { if (rx_buffer_index == 0 && rx_buffer[0] == PACKET_START_BYTE) { is_inside_packet = 1; } } else { rx_buffer[rx_buffer_index++] = received_byte; if (rx_buffer_index >= 4) { uint8_t data_length = rx_buffer[3] - 2; // 計(jì)算數(shù)據(jù)區(qū)長度(不包括校驗(yàn)和和包尾) if (rx_buffer_index == (data_length + 6)) { // 收到完整的數(shù)據(jù)包 received_packet.device_address = rx_buffer[1]; received_packet.command = rx_buffer[2]; received_packet.data_length = data_length; for (int i = 0; i < data_length; i++) { received_packet.data[i] = rx_buffer[4 + i]; } received_packet.checksum = rx_buffer[data_length + 4]; received_packet.is_valid = 1; process_received_data(); // 處理接收到的數(shù)據(jù)包 // 啟動(dòng)下一次接收中斷 HAL_UART_Receive_IT(&huart2, rx_buffer, 1); } } } } } int main(void) { // 初始化HAL庫和串口2 HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_USART2_UART_Init(); // 啟動(dòng)接收中斷 HAL_UART_Receive_IT(&huart2, rx_buffer, 1); while (1) { // 在這里可以執(zhí)行其他任務(wù) // ... } }經(jīng)過第二次的調(diào)整,已經(jīng)產(chǎn)生了滿足我的要求的源代碼文件。
三:總結(jié)及應(yīng)對挑戰(zhàn)
經(jīng)過兩次短暫的輸入,chatGPT即產(chǎn)生了“初級程序員”所具備的能力編寫的代碼。當(dāng)隨著我們命令的更深層次的輸入,chatGPT肯定會(huì)產(chǎn)生更符合我們要求的內(nèi)容/代碼。 作為嵌入式工程師,ChatGPT的強(qiáng)大功能可能對我們構(gòu)成潛在競爭和挑戰(zhàn)。 為應(yīng)對這種競爭和挑戰(zhàn),我們需要采取各類措施來應(yīng)對挑戰(zhàn):如下的內(nèi)容也是chatGPT告訴我們的:
其中一條:持續(xù)學(xué)習(xí)和更新技能,在任何時(shí)代、任何領(lǐng)域都是保持自身競爭力的手段之一。
審核編輯:湯梓紅
-
STM32
+關(guān)注
關(guān)注
2272文章
10923瀏覽量
357413 -
AI
+關(guān)注
關(guān)注
87文章
31493瀏覽量
270191 -
程序
+關(guān)注
關(guān)注
117文章
3795瀏覽量
81369 -
源碼
+關(guān)注
關(guān)注
8文章
652瀏覽量
29431 -
ChatGPT
+關(guān)注
關(guān)注
29文章
1566瀏覽量
8024
原文標(biāo)題:我用chatGPT產(chǎn)生了一個(gè)STM32協(xié)議解析的程序,實(shí)錘了chatGPT最先淘汰的行業(yè)是程序員!
文章出處:【微信號:玩轉(zhuǎn)單片機(jī)與嵌入式,微信公眾號:玩轉(zhuǎn)單片機(jī)與嵌入式】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論