欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

利用chatGPT編寫一段STM32協(xié)議解析的程序

玩轉(zhuǎn)單片機(jī)與嵌入式 ? 來源:玩轉(zhuǎn)單片機(jī)與嵌入式 ? 2023-09-05 10:44 ? 次閱讀

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

3112af3c-4b90-11ee-a25d-92fbcf53809c.png

起初,小編不信邪,我們是編寫出AI程序的人員,怎么可能會(huì)被AI淘汰。最近,當(dāng)我嘗試讓chatGPT編寫一段協(xié)議解析的代碼時(shí),徹底被震驚到!

一:第一次命令輸入

當(dāng)我向chatGPT輸入我的協(xié)議格式時(shí),chatGPT直接根據(jù)我的要求輸出了完成的源代碼。

31591b84-4b90-11ee-a25d-92fbcf53809c.png

31684dfc-4b90-11ee-a25d-92fbcf53809c.png

316fcc26-4b90-11ee-a25d-92fbcf53809c.png

下面將源碼貼上

#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輸出了我們

31a9b260-4b90-11ee-a25d-92fbcf53809c.png

#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告訴我們的:

31cf038a-4b90-11ee-a25d-92fbcf53809c.png

其中一條:持續(xù)學(xué)習(xí)和更新技能,在任何時(shí)代、任何領(lǐng)域都是保持自身競爭力的手段之一。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • STM32
    +關(guān)注

    關(guān)注

    2272

    文章

    10923

    瀏覽量

    357413
  • AI
    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)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    LABVIEW注釋一段程序

    LABVIEW中如何注釋一段程序,運(yùn)行時(shí)確保注釋的這段程序不被使用,就如C/C++等……
    發(fā)表于 12-29 14:24

    一段程序將ARM內(nèi)部FLASH中的一段數(shù)據(jù)通過UART0發(fā)送到電腦

    本帖最后由 檸檬お香 于 2013-5-20 10:43 編輯 寫一段程序將ARM內(nèi)部FLASH中的一段數(shù)據(jù)通過UART0發(fā)送到電腦,要求設(shè)計(jì)通信協(xié)議
    發(fā)表于 05-20 09:57

    一段C語言程序

    一段用51單片機(jī)+1602液晶+ds18b20+ds1302+1838紅外遙控的C語言程序.......沒別的意思,也不會(huì)抄襲的,就是想能參考下,{:12:}
    發(fā)表于 08-03 19:49

    一段STM32控制舵機(jī)的程序,謝謝!

    一段STM32控制舵機(jī)的程序,謝謝!
    發(fā)表于 09-23 11:43

    急求msp430f149利用AD測量一段脈沖信號的頻率或者周期的c語言程序。

    急求msp430f149利用AD測量一段脈沖信號的頻率或者周期的c語言程序。
    發(fā)表于 03-30 09:12

    請問如何編寫程序控制flash,來定義一段的指定空間作為自由存儲(chǔ)區(qū)?

    要在flash中開辟一段存儲(chǔ)空間,能夠自由地進(jìn)行讀寫,請問應(yīng)該如何編寫程序
    發(fā)表于 06-12 19:42

    一段程序

    想在該程序上加一段關(guān)于運(yùn)行中啟停鍵按下,暫停運(yùn)行,再次按下恢復(fù)運(yùn)行的程序,希望越簡單越好,關(guān)于這方面學(xué)的不好,麻煩幫幫忙,謝謝大佬
    發(fā)表于 12-23 15:28

    怎樣去編寫一段ARM匯編程序

    編寫一段 ARM 匯編程序:循環(huán)累加隊(duì)列 rjarray 中的所有元素,直到碰上零值元素,結(jié)果放在 r4 中 AREAtotal,CODE,READONLY ENTRYStartMOVr4,#0
    發(fā)表于 12-14 07:46

    檢測一段文本是否為全中文

    易語言是門以中文作為程序代碼編程語言學(xué)習(xí)例程:易語言-檢測一段文本是否為全中文
    發(fā)表于 06-06 17:01 ?4次下載

    自制CPU(四)程序編寫

    在我們設(shè)計(jì)出來前邊三種CPU之后,我們來進(jìn)行程序編寫。 所謂程序編寫,就是;利用我們寫好的CPU,根據(jù)我們可執(zhí)行的指令集,來
    的頭像 發(fā)表于 07-16 09:20 ?7342次閱讀

    使用單片機(jī)播放一段音樂的程序和仿真資料免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用單片機(jī)播放一段音樂的程序和仿真資料免費(fèi)下載
    發(fā)表于 06-02 17:04 ?8次下載
    使用單片機(jī)播放<b class='flag-5'>一段</b>音樂的<b class='flag-5'>程序</b>和仿真資料免費(fèi)下載

    使用單片機(jī)演奏一段音階的程序和工程文件免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用單片機(jī)演奏一段音階的程序和工程文件免費(fèi)下載。
    發(fā)表于 12-21 08:00 ?0次下載

    ChatGPT編寫各種腳本

    最牛逼的還是屬于程序編寫方面,ChatGPT在各個(gè)編程語言上面都挺在行的(嘗試了下Python, Perl, Tcl都挺不錯(cuò)的),可以說是個(gè)各個(gè)語言都很了解的
    的頭像 發(fā)表于 01-13 10:11 ?7434次閱讀

    文了解多個(gè)的相關(guān)程序

    上回我們簡單認(rèn)識(shí)了下什么是,前綴和一段安全的空間是哪里,但是程序中不會(huì)僅有
    的頭像 發(fā)表于 03-08 14:28 ?642次閱讀

    STM32加密問題:怎樣預(yù)置一段Flash讀保護(hù)和清除讀保護(hù)的程序

    STM32加密問題:怎樣預(yù)置一段Flash讀保護(hù)和清除讀保護(hù)的程序STM32加密方案中,為了對芯片進(jìn)行加密,我們需要加入讀保護(hù)功能。讀保護(hù)功能即使未經(jīng)授權(quán)的人無法讀取芯片的Flas
    的頭像 發(fā)表于 10-29 17:24 ?2736次閱讀