亚洲美女香蕉,亚洲一区日韩精品中文字幕涩爱,亚洲欧美精品专区极品,久久亚洲精品国产

發(fā)布信息

我用chatGPT產(chǎn)生了一個(gè)STM32協(xié)議解析的程序,實(shí)錘了chatGPT最先淘汰的行業(yè)是程序員!

作者:本站編輯      2023-09-05 09:14:19     21

點(diǎn)擊下方名片亚侠,關(guān)注公眾號性置,獲取更多精彩內(nèi)容

歡迎關(guān)注【玩轉(zhuǎn)單片機(jī)與嵌入式】公眾號扎狱,回復(fù)關(guān)鍵字獲取更多免費(fèi)視頻和資料

回復(fù)【加群】侧到,單片機(jī)】、【STM32】淤击、【硬件知識】匠抗、【硬件設(shè)計(jì)】、【經(jīng)典電路】污抬、【論文】汞贸、【畢業(yè)設(shè)計(jì)】、【3D封裝庫】印机、PCB】矢腻、電容】、TVS】射赛、阻抗匹配】多柑、【資料】、【終端電阻】楣责、【Keil】平俘、【485】、【CAN】玻温、【振蕩器】猴豁、[USBCAN]、【PCB】级闭、【智能手環(huán)】悲碰、【智能家居】、【智能小車】茄妇、【555】昌嘶、【I2C】、【華為】晨丸、【中興】诱榴,等……

隨著chatGPT的火爆,在網(wǎng)上紛紛討論最先被chatGPT淘汰的會是什么行業(yè)云卤,其中類似小編的“程序員”赫然在列备则,并且排名前三。

起初城也,小編不信邪隐锭,我們是編寫出AI程序的人員,怎么可能會被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); // 啟動下一次接收中斷 }}
int main(void) { // 初始化HAL庫和串口2 HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_USART2_UART_Init();
// 啟動接收中斷 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ù)包
// 啟動下一次接收中斷 HAL_UART_Receive_IT(&huart2, rx_buffer, 1); } } } }}
int main(void) { // 初始化HAL庫和串口2 HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_USART2_UART_Init();
// 啟動接收中斷 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肯定會產(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)域都是保持自身競爭力的手段之一。比如關(guān)注小編的公眾號叉橱,一起學(xué)習(xí)挫以、一起成長。比如加入小編的微信及技術(shù)交流群窃祝,與高手一起學(xué)習(xí)掐松。

END

掃描上方二維碼加群殴蹄,回復(fù)【加群】或掃碼加我好友,限時(shí)免費(fèi)進(jìn)入技術(shù)交流群侄侨。


推薦閱讀


【專輯】器件選型


【專輯】單片機(jī)


【專輯】經(jīng)驗(yàn)分享


【專輯】STM32


【專輯】硬件設(shè)計(jì)


【專輯】軟件設(shè)計(jì)


【專輯】開源項(xiàng)目


【專輯】職業(yè)發(fā)展

感謝大家閱讀兄哮,如果喜歡

請點(diǎn)贊和“在看”吧,或者分享到朋友圈气凫。

點(diǎn)擊跳轉(zhuǎn)到原文参匀,限時(shí)優(yōu)惠加入我們的知識星球(加好友獲取免費(fèi)券)

相關(guān)內(nèi)容 查看全部