硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1056|回复: 27
收起左侧

[其它] 让AI全自动编程,不要停下。

  [复制链接]

8

主题

439

回帖

463

积分

高级会员

积分
463
发表于 2026-4-18 21:25:24 | 显示全部楼层 |阅读模式
企业微信截图_20260418204521.png 企业微信截图_20260418210811.png 企业微信截图_20260418212129.png 企业微信截图_20260418212345.png
已成功调教让WorkBuddy自动编译CMAKE程序,自动调用jlink下载,自动读取RTT日志,从而形成闭环,然后解决问题
就是比较费WorkBuddy的积分,免费1000+积分,一会就很掉好多,但确实很省事,之前沟通十几次,现在它全自动了。
上次使用clion中的AI也还可以,但免费使用几天就不能用了。
https://forum.anfulai.cn/forum.p ... d=131339&extra=
这个W5500测试程序,让它自己Ping,ping不通就自己循环解决。
回复

使用道具 举报

8

主题

439

回帖

463

积分

高级会员

积分
463
 楼主| 发表于 2026-4-18 21:27:31 | 显示全部楼层
积分还在持续下降中,WorkBuddy每天签到领取100积分,这一会5天的积分就花光了,估计后续要使用付费的了。
回复

使用道具 举报

8

主题

439

回帖

463

积分

高级会员

积分
463
 楼主| 发表于 2026-4-18 21:29:40 | 显示全部楼层
企业微信截图_20260418212826.png
这句Ping消息,它自动执行了25次,终于自动调通了,否则我得和他对话25次。
回复

使用道具 举报

8

主题

439

回帖

463

积分

高级会员

积分
463
 楼主| 发表于 2026-4-18 21:30:51 | 显示全部楼层
目前这个项目全部AI生成,
另外还让他生成了一个上位机,用来显示曲线数据。后续跟贴报告进度。
回复

使用道具 举报

8

主题

439

回帖

463

积分

高级会员

积分
463
 楼主| 发表于 2026-4-18 21:37:11 | 显示全部楼层
企业微信截图_20260418213615.png
让AI每次重大修改完成后,主动提交推送GIT.
回复

使用道具 举报

8

主题

439

回帖

463

积分

高级会员

积分
463
 楼主| 发表于 2026-4-18 22:14:00 | 显示全部楼层
一个指令,让他持续执行了半小时,还没有结束,一切都在向好的方向发展。
企业微信截图_20260418221318.png
回复

使用道具 举报

8

主题

439

回帖

463

积分

高级会员

积分
463
 楼主| 发表于 2026-4-18 22:47:52 | 显示全部楼层
已经停不下来了,今天晚上让AI把这个测试小项目搞差不多
之前没找到诀窍,现在爽的停不下来。
喝杯茶,让AI飞一会,然后再观察一下,再喝杯茶,看看新闻,这才是想要的电工啥。
回复

使用道具 举报

4

主题

479

回帖

491

积分

高级会员

积分
491
发表于 2026-4-19 00:03:34 | 显示全部楼层
cursor付费用户路过,用起来真的爽
回复

使用道具 举报

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
122500
QQ
发表于 2026-4-19 08:08:25 | 显示全部楼层
workbuddy出错的时候防不胜防,比如这个完全一样的数据格式,上面是51bit,下面他就说是50bit


456.png
回复

使用道具 举报

8

主题

439

回帖

463

积分

高级会员

积分
463
 楼主| 发表于 2026-4-19 08:54:56 | 显示全部楼层
eric2013 发表于 2026-4-19 08:08
workbuddy出错的时候防不胜防,比如这个完全一样的数据格式,上面是51bit,下面他就说是50bit

出错不可怕,主要是让AI能够形成闭环测试,让他改->读日志->再改
回复

使用道具 举报

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
122500
QQ
发表于 2026-4-19 09:16:16 | 显示全部楼层
fxyc87 发表于 2026-4-19 08:54
出错不可怕,主要是让AI能够形成闭环测试,让他改->读日志->再改

复杂的他做不了,特别是算法类的,因为网上没有现成的实现,他之前的搜集的数据源都是错的。后来我是专门使用matlab生成的,而且如何生成他也不知道。纯靠网上搜的数据源。都是错误的实现。

我现在用AI都是块化,分多个模块,主框架我自己设计。部分模块让他们搞。
回复

使用道具 举报

13

主题

184

回帖

223

积分

高级会员

积分
223
发表于 2026-4-19 10:46:02 | 显示全部楼层
cctv180 发表于 2026-4-19 00:03
cursor付费用户路过,用起来真的爽

跟vscode比,有什么优势
回复

使用道具 举报

13

主题

184

回帖

223

积分

高级会员

积分
223
发表于 2026-4-19 12:28:40 | 显示全部楼层
fxyc87 发表于 2026-4-19 08:54
出错不可怕,主要是让AI能够形成闭环测试,让他改->读日志->再改

RTT日志也是workbuddy写的吧。另外反复改次数这么多,估计跟模型能力有关系吧,如果能选用claude、gpt这种模型估计效率更高
回复

使用道具 举报

4

主题

479

回帖

491

积分

高级会员

积分
491
发表于 2026-4-19 23:59:44 | 显示全部楼层
gnail092 发表于 2026-4-19 10:46
跟vscode比,有什么优势

你说的是Copilot么这个没法比我没开会员。如果说cursor当编辑器不好用的很多插件都没。我都是使用vscode来阅读代码。下次打算换CC(Claude Code)或者gemini因为vscode有他们的插件。
回复

使用道具 举报

2

主题

16

回帖

22

积分

新手上路

积分
22
发表于 2026-4-24 12:59:41 | 显示全部楼层
eric2013 发表于 2026-4-19 09:16
复杂的他做不了,特别是算法类的,因为网上没有现成的实现,他之前的搜集的数据源都是错的。后来我是专门 ...

我也是这么干,而且有的时候他自己调不通,我还得给他提供另一个思路或这是框架。他不会自己改方法来实现一个问题。
回复

使用道具 举报

135

主题

699

回帖

1119

积分

至尊会员

积分
1119
QQ
发表于 2026-4-24 14:35:25 | 显示全部楼层
烧token..

我昨天写了一个火焰效果,就是让AI帮我这样子写的。。
esp现在官方提供了烧录下载monitor的MCP服务器。。

我发现monitor的报文量特别大, 让它自己调,昨天干了30刀的token。
回复

使用道具 举报

4

主题

199

回帖

211

积分

高级会员

积分
211
发表于 2026-4-24 14:52:34 | 显示全部楼层
可以分享下自动调用吧jlink 下载并读取rtt日志,全流程的skills或者脚本吗。我现在也用codebuddy确实烧token,确实好用比Trae好用就是后面要充值
回复

使用道具 举报

8

主题

439

回帖

463

积分

高级会员

积分
463
 楼主| 发表于 2026-4-24 17:14:11 | 显示全部楼层
浴火重生 发表于 2026-4-24 14:52
可以分享下自动调用吧jlink 下载并读取rtt日志,全流程的skills或者脚本吗。我现在也用codebuddy确实烧toke ...

你就让他创建python脚本来调试,下载jlink就行了,他会想办法的
还有RTT日志,
不行就给他一此提示词,让他利用jlink gdb server,jlink cli等。
我现在一个完整的项目目前完成了90%,全AI,一句手写也没有。
一句代码让他完成修改,调试,让他自动读取日志进行错误分析,自动编译,自动GIT提交等。
几天几天会老报调用频繁,然后就充了个值,爽翻了。
最好的是让AI一开始就介入,中途让他介入的项目效果非常不好。
所以这个新项目我一开始就让他从零开始。效果比较好
试了几个旧项目,改的不成样子,还费Token。
回复

使用道具 举报

8

主题

439

回帖

463

积分

高级会员

积分
463
 楼主| 发表于 2026-4-24 17:15:46 | 显示全部楼层
浴火重生 发表于 2026-4-24 14:52
可以分享下自动调用吧jlink 下载并读取rtt日志,全流程的skills或者脚本吗。我现在也用codebuddy确实烧toke ...

这个是AI自动创建的一个脚本
auto_debug_and_test.py

[Python] 纯文本查看 复制代码
#!/usr/bin/env python3
"""Combined auto_debug + TCP test - run TCP test while GDB Server is still up"""
import subprocess
import time
import os
import sys
import re
import socket
from datetime import datetime

sys.stdout.reconfigure(encoding='utf-8', errors='replace')
sys.stderr.reconfigure(encoding='utf-8', errors='replace')

# ============ 配置 ============
PROJECT_DIR = r"D:\SuperMicroTong\AD16X6-ETH\CODE"
BUILD_DIR = os.path.join(PROJECT_DIR, "cmake-build-relwithdebinfo-mingw")
ELF_FILE = os.path.join(BUILD_DIR, "AD16X6-ETH.elf")
CMAKE = r"C:\Program Files\JetBrains\CLion 2026.1\bin\cmake\win\x64\bin\cmake.exe"
JLINK_GDB_SERVER = r"C:\Program Files\SEGGER\JLink_V796p\JLinkGDBServerCL.exe"
GDB = r"C:\Program Files (x86)\Arm\GNU Toolchain mingw-w64-i686-arm-none-eabi\bin\arm-none-eabi-gdb.exe"
PROCKILL = os.path.join(PROJECT_DIR, "tools", "prockill", "bin", "Release", "net10.0", "prockill.dll")
TCP_TEST = os.path.join(PROJECT_DIR, "test_tcp_server.py")

GDB_SERVER_PORT = 2331
RTT_TELNET_PORT = 19021


def run_cmd(cmd, timeout=60):
    try:
        result = subprocess.run(
            cmd, capture_output=True, text=True, timeout=timeout,
            encoding='utf-8', errors='replace', shell=True
        )
        return result.stdout + result.stderr, result.returncode
    except subprocess.TimeoutExpired:
        return "TIMEOUT", -1


def kill_processes(*names):
    if not os.path.exists(PROCKILL):
        return
    args = " ".join(names)
    run_cmd(f'dotnet "{PROCKILL}" {args}', timeout=10)


def main():
    print("=" * 50)
    print("Auto Debug + TCP Test")
    print(f"时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
    print("=" * 50)

    # Step 1: 编译
    print("\n[1/5] 编译项目")
    output, rc = run_cmd(f'cmd /C ""{CMAKE}" --build "{BUILD_DIR}" --target AD16X6-ETH -j 14"', timeout=120)
    if rc != 0 and "no work to do" not in output.lower():
        print("  X 编译失败!")
        return
    print("  OK 编译成功")

    # Step 2: 清理旧进程
    print("\n[2/5] 清理旧进程")
    kill_processes("JLinkGDBServerCL")
    time.sleep(1)

    # Step 3: 启动GDB Server
    print("\n[3/5] 启动 GDB Server + 下载程序")
    cmd = [
        JLINK_GDB_SERVER,
        "-select", "USB",
        "-device", "STM32H723VG",
        "-if", "SWD",
        "-speed", "4000",
        "-noir",
        "-localhostonly", "1",
        "-rtos", "auto",
        "-silent",
    ]
    gdb_proc = subprocess.Popen(
        cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE,
        creationflags=subprocess.CREATE_NO_WINDOW
    )
    time.sleep(3)

    # GDB下载程序
    gdb_cmds = os.path.join(BUILD_DIR, "gdb_auto.txt")
    elf_gdb_path = ELF_FILE.replace("\\", "/")
    with open(gdb_cmds, 'w') as f:
        f.write("set confirm off\n")
        f.write("set pagination off\n")
        f.write(f"target remote localhost:{GDB_SERVER_PORT}\n")
        f.write("monitor reset halt\n")
        f.write(f"load {elf_gdb_path}\n")
        f.write("monitor reset\n")
        f.write("monitor go\n")
        f.write("detach\n")
        f.write("quit\n")

    output, rc = run_cmd(f'"{GDB}" -batch -x "{gdb_cmds}" "{ELF_FILE}"', timeout=30)
    if "Loading section" in output or rc == 0:
        print("  OK 程序已下载并运行")
    else:
        print("  ! 下载可能失败")

    # Wait for board to fully initialize (W5500, TCP server, etc.)
    print("\n  等待板卡初始化 (5秒)...")
    time.sleep(5)

    # Step 4: 读取RTT看初始化日志
    print("\n[4/5] 读取 RTT 初始化日志")
    try:
        rtt_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        rtt_sock.settimeout(3)
        rtt_sock.connect(("127.0.0.1", RTT_TELNET_PORT))
        time.sleep(2)
        init_data = b""
        while True:
            try:
                d = rtt_sock.recv(4096)
                if d:
                    init_data += d
                else:
                    break
            except socket.timeout:
                break
        rtt_sock.close()
        text = init_data.decode('utf-8', errors='replace')
        for line in text.splitlines():
            if line.strip():
                print(f"  {line.strip()}")
    except Exception as e:
        print(f"  RTT连接失败: {e}")

    # Step 5: 运行TCP测试
    print("\n[5/5] 运行 TCP 测试")
    tcp_result = subprocess.run(
        [sys.executable, TCP_TEST],
        capture_output=True, text=True, timeout=30,
        encoding='utf-8', errors='replace'
    )
    print(tcp_result.stdout)
    if tcp_result.stderr:
        for line in tcp_result.stderr.splitlines():
            if line.strip():
                print(f"  ERR: {line.strip()}")

    # 读取测试后的RTT日志
    print("\n--- RTT 日志 (测试后) ---")
    try:
        rtt_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        rtt_sock.settimeout(3)
        rtt_sock.connect(("127.0.0.1", RTT_TELNET_PORT))
        time.sleep(1)
        post_data = b""
        while True:
            try:
                d = rtt_sock.recv(4096)
                if d:
                    post_data += d
                else:
                    break
            except socket.timeout:
                break
        rtt_sock.close()
        text = post_data.decode('utf-8', errors='replace')
        for line in text.splitlines():
            if line.strip():
                print(f"  {line.strip()}")
    except Exception as e:
        print(f"  RTT连接失败: {e}")

    # 清理
    print("\n  清理GDB Server...")
    try:
        gdb_proc.kill()
        gdb_proc.wait(timeout=5)
    except:
        pass
    kill_processes("JLinkGDBServerCL")

    print("\n" + "=" * 50)
    print("完成!")
    print("=" * 50)


if __name__ == "__main__":
    main()
回复

使用道具 举报

8

主题

439

回帖

463

积分

高级会员

积分
463
 楼主| 发表于 2026-4-24 17:18:11 | 显示全部楼层
现在使用【GLM-5v-Turbo】模型来编程,效果还行。
回复

使用道具 举报

4

主题

199

回帖

211

积分

高级会员

积分
211
发表于 2026-4-24 19:58:51 | 显示全部楼层
fxyc87 发表于 2026-4-24 17:18
现在使用【GLM-5v-Turbo】模型来编程,效果还行。

确实强,我现在现在基本上写的代码的部分基本都不动手了,为了让他自动跑编译,专门给他让他cmake和makefile来自基于PC仿真单元测试,如果能搞定自动下载运行跑结果那太爽了。可以加个v交流下吗【591791163】,我现在腾讯的免费套餐也不够使了
回复

使用道具 举报

4

主题

1495

回帖

1507

积分

至尊会员

积分
1507
发表于 2026-4-27 20:18:36 | 显示全部楼层
这个路子好啊,闭环最重要, 楼主怎么做的细节可以再分享一下吗?
回复

使用道具 举报

1

主题

11

回帖

14

积分

新手上路

积分
14
发表于 2026-4-28 10:35:07 | 显示全部楼层
请教楼主WorkBuddy怎样链接到JLINK进行调试的?
回复

使用道具 举报

1

主题

11

回帖

14

积分

新手上路

积分
14
发表于 2026-4-29 12:11:29 | 显示全部楼层
daicp 发表于 2026-4-28 10:35
请教楼主WorkBuddy怎样链接到JLINK进行调试的?

好牛,直接跟WorkBuddy说就可以了
回复

使用道具 举报

8

主题

439

回帖

463

积分

高级会员

积分
463
 楼主| 发表于 2026-4-29 16:37:44 | 显示全部楼层
daicp 发表于 2026-4-28 10:35
请教楼主WorkBuddy怎样链接到JLINK进行调试的?

见上个脚本,让他调用相应的CL程序就行了
JLinkGDBServerCL.exe
回复

使用道具 举报

8

主题

439

回帖

463

积分

高级会员

积分
463
 楼主| 发表于 2026-4-29 16:40:03 | 显示全部楼层
最近2天用上了最新的Deepseek v4 pro,效率爽飞了,以前好几轮才解决的问题这次一轮就基本解决。
爽。就是token废了点。一次沟通0.1-1元人民币。
沟通了几次,就花去了接近1千万token
企业微信截图_20260429150457.png
回复

使用道具 举报

4

主题

1495

回帖

1507

积分

至尊会员

积分
1507
发表于 2026-5-1 08:41:39 | 显示全部楼层
fxyc87 发表于 2026-4-29 16:40
最近2天用上了最新的Deepseek v4 pro,效率爽飞了,以前好几轮才解决的问题这次一轮就基本解决。
爽。就是 ...

DAP link  也能用吧?
回复

使用道具 举报

8

主题

439

回帖

463

积分

高级会员

积分
463
 楼主| 发表于 2026-5-1 18:50:28 | 显示全部楼层
morning_enr6U 发表于 2026-5-1 08:41
DAP link  也能用吧?

能的,让他调用OPEN OCD
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2026-5-13 00:50 , Processed in 0.390654 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表