文章目录

  • openpnp - Smoothieware build
  • 概述
  • 笔记
  • 用vs2022打开工程, 进行code review, 编译工程
  • 现在来看看X-PAXES的问题
  • 查一下我的配置文件中 mm_per_arc_segment 配置项, 在官方文档中没有说明的问题
  • 剩下事情, 就是看逻辑了.
  • END

openpnp - Smoothieware build

概述

在自己设备的配置中, 看到一个官方说明中不存在的配置项名称.
我知道自己用的固件是 Smoothieware_best-for-pnp , 那么就尝试编译一下工程, 然后再工程中找找这个配置项到底是啥名称, 看看是我设备配置文件的作者手误, 还是其他原因(e.g. 新版固件已经不用旧的配置项了?)
代码已经迁出到了本地, 看了文档, 编译过程官方有说明 http://smoothieware.org/compiling-smoothie
Smoothieware_best-for-pnp 是一个大神嫌弃官方没有修正他发现的bug, 而自己开的一个分支. 改的是实现, 但是其他(e.g. 编译, 使用)都和官方一致.

笔记

迁出后的工程目录为 D:\3rd_prj\Smoothieware_best-for-pnp

cd /d D:\3rd_prj\Smoothieware_best-for-pnpD:\3rd_prj\Smoothieware_best-for-pnp>dir *.cmd驱动器 D 中的卷没有标签。卷的序列号是 36AD-51CED:\3rd_prj\Smoothieware_best-for-pnp 的目录2023/02/25  20:29             4,740 win_install.cmd1 个文件          4,740 字节0 个目录 467,750,318,080 可用字节

安装工具链的脚本为win_install.cmd, 先运行她.

D:\3rd_prj\Smoothieware_best-for-pnp>win_install.cmd
Logging install results to D:\3rd_prj\Smoothieware_best-for-pnp\win_install.log
Downloading GNU Tools for ARM Embedded Processors...% Total    % Received % Xferd  Average Speed   Time    Time     Time  CurrentDload  Upload   Total   Spent    Left  Speed0     0    0     0    0     0      0      0 --:--:--  0:00:01 --:--:--     0
100  100M  100  100M    0     0  1918k      0  0:00:53  0:00:53 --:--:-- 1934k
Validating md5 signature of GNU Tools for ARM Embedded Processors...
Extracting GNU Tools for ARM Embedded Processors...
Creating helper scripts...
Performing a clean build of the gcc4mbed samples...
Cleaning up intermediate files...
**************************************************************************
To build gcc4mbed samples, you will first need to run the following batch
file so that your environment variables are set correctly:D:\3rd_prj\Smoothieware_best-for-pnp\BuildShell.cmd
You will want to run this each time you start a new Command Prompt.  You
can simply double-click on this batch file from Explorer to launch a
Command Prompt that has been properly initialized for building gcc4mbed
based code.
**************************************************************************
Finished successfully
请按任意键继续. . .

根据提示, 需要运行一个编译环境的脚本, 位置 : D:\3rd_prj\Smoothieware_best-for-pnp\BuildShell.cmd

D:\3rd_prj\Smoothieware_best-for-pnp>BuildShell.cmd
D:\3rd_prj\Smoothieware_best-for-pnp>

现在就有了编译环境的命令行, 以后每次开新命令行后, 如果想编译, 都要运行BuildShell.cmd 来得到编译环境.

重新干净的编译工程

make clean all

编译时, 看到好多警告, 不像是大神的作品.

Compiling modules/utils/panel/screens/3dprinter/WatchScreen.cpp
Compiling ../build/mbed_custom.cpp
Linking ../LPC1768/main.elf
Extracting ../LPC1768/main.hex
Extracting ../LPC1768/main.bin
Extracting disassembly to ../LPC1768/main.disasmtext    data     bss     dec     hex filename388104     400    9868  398372   61424 ../LPC1768/main.elf
-
make[2]: Leaving directory `D:/3rd_prj/Smoothieware_best-for-pnp/src'
make[1]: Leaving directory `D:/3rd_prj/Smoothieware_best-for-pnp/src'D:\3rd_prj\Smoothieware_best-for-pnp>

编译完后, 会得到一个main.bin

比较了我设备上原来的沙冰固件(从U盘中拷贝出来的 FIRMWARE.CUR), 发现和自己编译的main.bin size是一样的, 但是用bc4进行2进制比较, 差别极大.

现在先看看自己设备的当前固件版本:

使能串口助手的DTR, 可以看到沙冰主板回了ok.
输入M115可以看到冰沙版本.

现在关掉串口助手

将main.bin 拷贝改名为 firmware.bin, 将firmware.bin丢到冰沙主板的U盘中.

U盘只保留firmware.bin和config.txt, 其他都删掉.

在windows中弹出冰沙主板所在的U盘, 然后给主板重新上电(拔掉冰沙主板的USB通讯线, 看到主板灯都灭了, 然后再插上USB线), 等一会(上电后, 首先是4个LED在走马灯, 等4个灯只有一个在闪烁时, 应该固件就刷新好了. 第一次刷固件, 不太懂, 等2分钟吧), 就可以刷入新固件.

冰沙主板正常运行后, 会在电脑中产生一个U盘. 打开U盘.

如果看到固件名称已经由firmware.bin变为了FIRMWARE.CUR, 那么说明固件已经刷新成功.
现在用串口助手连上冰沙主板, 看看当前固件版本和我刷新前有啥区别?


可以看到固件版本是一样的, 都是best-for-pnp-23a1f0db
但是编译配置项不同:
旧固件 X-PAXES:5
新固件 X-PAXES:3
莫非 X-PAXES 指的是轴么? 旧固件是5轴的, 我自己编译出来的新固件是3轴的?
再研究吧, 先这样.
看看代码先.

用vs2022打开工程, 进行code review, 编译工程

如果想看看代码, 不在IDE中, 还真不好弄.
我再想作者怎么进行code review的.
看到工程下有一个归档的.vs目录, 里面有个.json


看一下这个.json大概长啥样子.

{"version": "0.2.1","outDir": "\"${workspaceRoot}\\LPC1768\"","tasks": [{"taskName": "makefile-build","appliesTo": "/makefile","type": "launch","contextType": "build","command": "BuildShell.cmd","args": ["make","all"],"envVars": {"VSCMD_START_DIR": "\"${workspaceRoot}\""}},{"taskName": "makefile-clean","appliesTo": "/makefile","type": "launch","contextType": "clean","command": "BuildShell.cmd","args": ["make","clean"],"envVars": {"VSCMD_START_DIR": "\"${workspaceRoot}\""}},{"taskName": "makefile-rebuild","appliesTo": "/makefile","type": "launch","contextType": "rebuild","command": "BuildShell.cmd","args": ["make","clean","all"],"envVars": {"VSCMD_START_DIR": "\"${workspaceRoot}\""}},{"taskLabel": "任务-Smoothieware_best-for-pnp","appliesTo": "/","type": "launch"}]
}

看着像Visual Studio打开makefile工程时, 需要的配置文件.
那用vs试试, 手头有vs2019和vs2022, 就用vs2022试试.

选择的目录为 D:\3rd_prj\Smoothieware_best-for-pnp

很惊喜, 打开后, 居然文件组织的很好, 看起来就是打开的是目录.

在工程根节点上选择配置任务, 看到的内容和.vs目录下的文件相同. 关掉任务的配置文件, 不保存, 只是看一下.


选择工程的main文件, 就可以开始code reivew了.
在函数上右击, 选择转到实现, 也能转过去, 这很方便啊.

在vs2022中编译工程

打开IDE中的终端窗口

此时的编译步骤和上面在命令行中相同.

PS D:\3rd_prj\Smoothieware_best-for-pnp> dir *.cmd目录: D:\3rd_prj\Smoothieware_best-for-pnpMode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----         2023/4/28     14:15             57 BuildShell.cmd
-a----         2023/2/25     20:29           4740 win_install.cmdPS D:\3rd_prj\Smoothieware_best-for-pnp>
 D:\3rd_prj\Smoothieware_best-for-pnp> .\BuildShell.cmd
D:\3rd_prj\Smoothieware_best-for-pnp>
D:\3rd_prj\Smoothieware_best-for-pnp>make clean all
...

开始编译了, 等待编译完成.

Linking ../LPC1768/main.elf
Extracting ../LPC1768/main.hex
Extracting ../LPC1768/main.bin
Extracting disassembly to ../LPC1768/main.disasmtext    data     bss     dec     hex filename388104     400    9868  398372   61424 ../LPC1768/main.elf
-
make[2]: Leaving directory `D:/3rd_prj/Smoothieware_best-for-pnp/src'
make[1]: Leaving directory `D:/3rd_prj/Smoothieware_best-for-pnp/src'

编译完成后, 可以看到, 和命令行环境编译, 效果是一样的.

现在来看看X-PAXES的问题




可以看到 找到了M115命令回包的处理, 里面有X-PAXES从哪里来的解释.

                            case 115: { // M115 Get firmware version and capabilitiesVersion vers;new_message.stream->printf("FIRMWARE_NAME:Smoothieware, FIRMWARE_URL:http%%3A//smoothieware.org, X-SOURCE_CODE_URL:https%%3A//github.com/markmaker/Smoothieware/tree/feature/best-for-pnp, FIRMWARE_VERSION:%s, X-FIRMWARE_BUILD_DATE:%s, X-SYSTEM_CLOCK:%ldMHz, X-AXES:%d, X-PAXES:%d, X-GRBL_MODE:%d", vers.get_build(), vers.get_build_date(), SystemCoreClock / 1000000, MAX_ROBOT_ACTUATORS, N_PRIMARY_AXIS, THEKERNEL->is_grbl_mode());#ifdef CNCnew_message.stream->printf(", X-CNC:1");#elsenew_message.stream->printf(", X-CNC:0");#endif#ifdef DISABLEMSDnew_message.stream->printf(", X-MSD:0");#elsenew_message.stream->printf(", X-MSD:1");#endifif(THEKERNEL->is_bad_mcu()) {new_message.stream->printf(", X-WARNING:deprecated_MCU");}new_message.stream->printf("\nok\n");return;}

可以看到格式化字符串时, X-PAXES是第5个参数. 对应的赋值为宏 N_PRIMARY_AXIS
转到宏的定义, 可以看到 N_PRIMARY_AXIS 默认为3

#ifndef N_PRIMARY_AXIS// This may chnage and include ABC#define N_PRIMARY_AXIS 3
#endif

那就是说, 作者编译时, 在编译时定义了 N_PRIMARY_AXIS 为5.
不过, 我可以硬改宏为5啊

#ifndef N_PRIMARY_AXIS// This may chnage and include ABC#define N_PRIMARY_AXIS 5
#endif

现在编译一下, 看看是否编译出的.bin和我设备上的原始.bin2进制相同.


可以看出, 差异比 N_PRIMARY_AXIS 3 时小多了.
丢到主板上升级看看M115报的版本差多少?
升级后, M115回包如下

前面有旧版的回包截图, 贴过来比较

除了固件编译时间, 其他一摸一样.
这说明硬改宏为5是可以的.

M503命令可以看配置信息

M503\n; No config override
;Steps per unit:
M92 X99.90000 Y99.95000 Z100.00000
;Acceleration mm/sec^2:
M204 S10000.00000
;X- Junction Deviation, Z- Z junction deviation, S - Minimum Planner speed mm/sec:
M205 X0.05000 Z-1.00000 S0.00000
;Max cartesian feedrates in mm/sec:
M203 X1000.00000 Y1000.00000 Z600.00000 S-1.00000
;Max actuator feedrates in mm/sec:
M203.1 X1000.00000 Y1000.00000 Z600.00000
;Digipot Motor currents:
M907 X0.40000 Y0.30000 Z1.00000 A0.40000 B0.40000
;E Steps per mm:
M92 E17.7777 P57988
;E Filament diameter:
M200 D0.0000 P57988
;E retract length, feedrate:
M207 S3.0000 F2700.0000 Z0.0000 Q6000.0000 P57988
;E retract recover length, feedrate:
M208 S0.0000 F480.0000 P57988
;E acceleration mm/sec虏:
M204 E5000.0000 P57988
;E max feed rate mm/sec:
M203 E6000.0000 P57988
;E Steps per mm:
M92 E17.7777 P39350
;E Filament diameter:
M200 D0.0000 P39350
;E retract length, feedrate:
M207 S3.0000 F2700.0000 Z0.0000 Q6000.0000 P39350
;E retract recover length, feedrate:
M208 S0.0000 F480.0000 P39350
;E a
cceleration mm/sec虏:
M204 E5000.0000 P39350
;E max feed rate mm/sec:
M203 E6000.0000 P39350
;Home offset (mm):
M206 X0.00 Y0.00 Z0.00 ok

查一下我的配置文件中 mm_per_arc_segment 配置项, 在官方文档中没有说明的问题

# !!!官网没有这个配置...
# Fixed length for line segments that divide arcs, 0 to disable
mm_per_arc_segment                           0.0

上面的 mm_per_arc_segment 官方是没有说明的.
在代码中找找.

代码中是有的, 还好我老实, 没动配置文件内容.

剩下事情, 就是看逻辑了.

如果想弄清程序的运行逻辑, 光看和实验是不行的, 还需要单步调试.
但是这种在线升级工程, 是无法单步调试的, 已经订了LPC1769的板子, 等到了之后, 就知道咋单步调试了.
然后将无法单步调试的实现和配置改掉, 就可以从头开始单步调试了.
等熟悉工程之后, 就不用单步调试了, 就可以用官方提供的这种方式, 改完了, 看效果(可以通过增加额外的命令来回包, 达到和单步调试差不多的效果).

END

openpnp - Smoothieware project build相关推荐

  1. 权威解释IDEA的“Include in project build”打钩或者不打勾有啥区别?

    打钩后→Ctrl+F9 或者 就会在项目对应的目录生成war包 反之,如果不打勾"Include in project build",那么生成项目(Ctrl+F9)的时候就不会生成 ...

  2. ${project.build.directory}

    1.Maven内置变量说明: ${basedir} 项目根目录 ${project.build.directory} 构建目录,缺省为target ${project.build.outputDire ...

  3. IntelliJ IDEA 的 Project Structure 窗口中的 Artifacts 勾选 Include in project build

    文章目录 在 war 工件勾选 Include in project build Build Project/Module Rebuild Project/Module 在 war exploded ...

  4. Project build error: Non-resolvable parent POM

    java面试题网站:www.javaoffers.com eclipse 用svn  刚把项目 下载下载,然后  将项目转为maven项目时 pom 文件报错:<parent> 标签出报错 ...

  5. Project build error: Non-resolvable parent POM for com.example:demo:0.0.1-SNAPSHOT: Could not transf

    使用eclipse插件sts搭建springboot项目遇到pom.xml文件中的<parent>标签报错提示: Project build error: Non-resolvable p ...

  6. 创建maven web项目出错Project build error: Non-parseable POM D:\Ieven\workspace\ws1802\jt-web\pom.xm

    问题描述:创建分布式项目的子项目jt_web前台,添加父类项目依赖jt-parent,之后在pom.xml文件中添加tomcat插件,出现了如图二所示的错误. Project build error: ...

  7. Project build error: Non-resolvable parent POM for model:maven01:0.0.1-SNAPSHOT

    子项目 父项目 问题:在这个分布式项目中,maven install 这个子项目zo-manager时会报错,Project build error: Non-resolvable parent PO ...

  8. openpnp - smoothieware config option

    文章目录 openpnp - smoothieware config option 概述 笔记 冰沙主板配置项 - 一般配置 冰沙主板配置项 - 步进电机的配置 冰沙主板配置项 - 通讯 冰沙主板配置 ...

  9. IntelliJ IDEA 的 Build Project/Build Module/构建项目/构建模块

    文章目录 Build Module Rebuild Module Build Module,构建模块.所谓"构建",就是"构建"包及字节码文件,其实就是编译源码 ...

最新文章

  1. 【Python】将字典(dict)转化为Dataframe
  2. 微信小程序---导航(navigator)
  3. 51单片机控制步进电机的c语言程序,用AT89C51单片机控制步进电机的汇编源程序...
  4. html 三级目录索引,墨涩网 - HTTP Web服务器索引目录列表程序Directory Lister——墨涩网...
  5. MySQL基础课堂笔记
  6. LeetCode-118杨辉三角C++详解
  7. matlab 实现行归一化和列归一化
  8. 色差类染疵原因的详细分析
  9. 博文视点 on Twitter
  10. 手把手教你Windows环境下配置Git环境
  11. shell应用之习题一
  12. linux rvm,RVM 实用指南
  13. MATLAB_R2020b安装
  14. QT designer安装及运用
  15. IOS下,利用捏合手势实现图像缩放和显示
  16. 中国科学院大学2019年高等代数考研试题
  17. java计算机毕业设计基于安卓Android微信小程序的共享单车租赁系统uniApp
  18. AD9361 介绍 (中)
  19. 里恩临床试验项目管理系统(RH-CTMS)介绍
  20. vue 框架总结 使用elementUI

热门文章

  1. 抖音短视频创业,抖音机房怎么样搭建?有哪些技巧
  2. 给衣服加图案photoshop教程
  3. 科研日志--python大文件打开内存溢出
  4. UTC与BJT时间换算C语言
  5. “禁止燃放烟花爆竹”社会治理创新活动
  6. 10分钟!Mac配置Win主机上的共享打印机
  7. android使用高德地图SDK获取定位信息
  8. 上线、发布、发版流程
  9. 简单排序算法时间空间复杂度分析及应用(7)-希尔排序
  10. 限期4个月:苹果严控版号,开发者将如何自救?