Ubuntu下串口调试工具

本文介绍了三种用于Ubuntu系统的串口调试工具:cutecom、minicom和kermit。cutecom是一款带有图形界面的串口助手,便于新手使用。minicom则侧重于通过命令行方式调试串口,提供了丰富的快捷键功能。kermit不仅支持多种配置选项,还能轻松记录调试日志,适用于复杂调试任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

摘要:这里介绍Ubuntu下使用的三个串口调试工具,cutecom、minicom和kermit。

一、cuntcom
cutcom是个拥有可视化界面的串口调试助手。

1.安装cutecom

$sudo apt-get install cutecom

2.运行cutecom

$ sudo cutecom

这里写图片描述

插入串口后,使用以下命令查看串口驱动是否已经安装:

$ dmesg | grep usb

这是Device的下拉菜单是没有ttyUSB0的,此时需要手动输入即可。最后点击Open device即可查看串口数据。

二、minicom

1 . 查看Ubuntu系统能不能识别USB转串口。

ubuntu高版本的都自带驱动的,不过还是需要查看串口的信息。进入/dev目录,插拔一下usb转串口,找找ttyUSB*,其中 *是一个数字,记录此数字,串口配置过程需要。

2 . 下载minicom

$ sudo apt-get install minicom

3 . 配置minicom

  • 进入Minicom,sudo minicon -s.一定要sudo,否则可能没权限,最后不能保存。
  • 在菜单中选择Serial port setup,设置Serial Device为/dev/ttyUSB0(前面记录的串口号),Bps/Par/Bits为115200 8N1,Hardware Flow Control为No。之后选择Save setup as df1保存为默认设置,然后选择Exit退出设置,minicom将根据以上设置进行初始化,给开发板加电,应该就可以看到启动信息了。

4 . minicom的部分快捷键操作

在控制台下通过组合键Ctrl+A Z 可以进入minicom 菜单。
组合键的用法是:先按Ctrl+A组合键,然后松开这两个键,再按Z键。另外还有一些常用的组合键。

  • S键:发送文件到目标系统中;
  • W键:自动卷屏。当显示的内容超过一行之后,自动将后面的内容换行。这个功能在查看内核的启动信息时很有用。
  • C键:清除屏幕的显示内容;
  • B键:浏览minicom的历史显示;
  • X键:退出mInicom,会提示确认退出。

三、kermit

1.安装kermit

$ sudo apt-get install ckermit

2 . 配置

用户自己的kermit配置文档在 /home/user_name/.mykermrc 文档中,如果这个文档不存在,则kermit会使用/etc/kermit/kermrc进行初始化。编辑 /home/user_name/.mykermrc,使用命令:

$ sudo gedit ~/.mykermrc

输入下面的内容:

    set line            /dev/ttyS0
    set speed           115200
    set carrier-watch   off
    set handshake       none
    set flow-control    none
    robust
    set file type       bin
    set file name       lit
    set rec pack        1000
    set send pack       1000
    set window          5
    c

3 . 启动kermit

在终端中输入以下指令即可启动并连接到串口

$ sudo kermit

虚线之后出现的就是debugging信息。这里能自动连接到串口是因
为最后一行的“c”,如果没有最后一行,则kermit启动后不会自动
连接到串口,需要手动在kermit的提示符下输入命令“c”或者
“connect”(不包括双引号),这样才能连接到串口。
在串口连接的状态下,按下“Ctrl+\”再输入“c”即可返回到
kermit;
如果要再次连接至串口,输入“c”或者”connect”(不包括双引号)即可;

4 . logfile

实际使用中经常要记录log file,以方便进行debugging。
windows下使用“超级终端”或者“SecurCRT”通过简单的设置就能够记录log file。其实在kermit中,通过执行简单的命令,也可
以记录log file.

  • 保存log file:
    在kermit正常运行时,按下“Ctrl+\”并输入”c”,返回到
    kermit的命令提示符,此时输入“log session”即可在当前目
    录下生成一个session.log的文档,kermit接收到的信息会保
    存在此文档中,并且会随着串口信息的更新而更新,如果要再次
    连接至串口,键入”c”即可。查看log file:
  • 推荐使用gedit查看,这样当session.log更新后,gedit会
    提示更新文档,比较方便。
<think>我们正在处理一个TCL脚本错误:`can't read 'mom_cutcom_type': no such variable`。这个错误表明脚本尝试读取一个未定义的变量`mom_cutcom_type`。 解决思路: 1. 确认变量是否定义:在访问变量之前,确保它已经被定义。在TCL中,可以使用`info exists`命令检查变量是否存在。 2. 避免在未定义时读取:在读取变量之前,先检查其是否存在,如果不存在,可以赋予一个默认值或者抛出有意义的错误信息。 3. 检查变量作用域:确保变量在当前的执行上下文中是可见的(比如,全局变量需要用`global`声明)。 根据引用[1]中的代码示例,我们看到在AIME语言中处理异常的方式。虽然TCL没有内置的异常处理机制,但我们可以通过条件判断来避免错误。 具体步骤: 方案一:在使用变量前检查是否存在 在读取`mom_cutcom_type`之前,使用`info exists`判断,如果不存在则设置一个默认值。 例如: ```tcl if { ![info exists mom_cutcom_type] } { set mom_cutcom_type "NONE" } ``` 方案二:在可能未定义的地方初始化变量 如果这个变量应该由上游代码设置,但可能在某些情况下没有被设置,可以在脚本的适当位置(比如开头)初始化它。 方案三:检查变量作用域 如果变量是全局的,在过程内部使用前需要声明: ```tcl global mom_cutcom_type ``` 但是,如果变量确实没有被定义,那么声明为全局变量也不会创建它。因此,通常结合方案一和方案三。 实际修复代码示例: 假设错误发生在某个过程内部,而`mom_cutcom_type`应该是一个全局变量,我们可以这样写: ```tcl proc my_proc {} { global mom_cutcom_type # 检查变量是否存在,如果不存在则初始化 if { ![info exists mom_cutcom_type] } { set mom_cutcom_type "NONE" } # 然后使用这个变量 if { $mom_cutcom_type == "LEFT" } { # ... 处理左刀补 } } ``` 注意:如果这个变量是在其他过程中设置的,请确保在设置后再调用使用它的过程。 另外,根据引用[2]中的内容,在编译和安装过程中,我们可能会执行一些命令并清理。这提醒我们在修改脚本后,可能需要重新加载或重启相关环境以使更改生效。 因此,修复步骤: 1. 定位到访问`mom_cutcom_type`变量的代码位置。 2. 在访问之前,使用上述方法确保变量存在。 3. 如果变量应该由其他模块设置,检查调用顺序,确保在访问之前已经设置。 如果问题仍然存在,需要检查整个脚本中关于`mom_cutcom_type`的定义和赋值,确保在访问之前已经赋值。 相关问题: 1. 如何在TCL中检查变量是否存在? 2. TCL中全局变量和局部变量的作用域是怎样的? 3. 如何避免TCL脚本中的变量未定义错误? 4. TCL中是否有类似其他语言的异常处理机制?</think>### 解决 TCL 错误:`can't read 'mom_cutcom_type': no such variable` #### 错误原因分析 此错误表明 TCL 脚本尝试读取未定义的变量 `mom_cutcom_type`。常见原因包括: 1. **变量未初始化**:变量未在任何地方声明或赋值 2. **作用域问题**:在局部作用域中访问全局变量时未声明 `global` 3. **拼写错误**:变量名拼写不一致(如 `mom_cutcom_type` vs `mom_cutcom_Type`) 4. **依赖环境缺失**:该变量应由外部系统(如 CAM 软件)注入但未成功传递 --- #### 解决方案 ##### 方法 1:添加变量初始化(推荐) 在脚本开头初始化变量并设置默认值: ```tcl # 初始化变量(如果不存在) if {![info exists mom_cutcom_type]} { set mom_cutcom_type "NONE" ;# 默认值 } # 后续使用变量 if {$mom_cutcom_type == "LEFT"} { puts "启用左刀补" } ``` - **作用**:通过 `info exists` 检查变量存在性,避免未定义错误 - **默认值建议**:根据业务逻辑选择 `OFF`/`NONE`/`0` 等安全值 ##### 方法 2:声明全局作用域 若变量在其他模块中定义: ```tcl proc your_procedure {} { # 声明全局变量 global mom_cutcom_type if {$mom_cutcom_type == "RIGHT"} { puts "启用右刀补" } } ``` ##### 方法 3:调试变量来源 1. 在脚本开头添加跟踪: ```tcl trace add variable mom_cutcom_type write {puts "变量被赋值: $mom_cutcom_type"} ``` 2. 检查变量是否由 CAM 系统(如 UG NX、MasterCAM)传递: - 确认后处理配置中已启用刀补输出 - 验证 CAM 软件与 TCL 脚本的版本兼容性 --- #### 预防措施 1. **防御性编程**: ```tcl # 封装安全读取函数 proc safe_get {var_name default} { upvar $var_name var return [expr {[info exists var] ? $var : $default}] } # 调用示例 set cutcom [safe_get mom_cutcom_type "OFF"] ``` 2. **统一命名规范**: ```tcl # 使用常量管理变量名 set ::CUTCOM_VAR "mom_cutcom_type" if {[info exists $::CUTCOM_VAR]} {...} ``` --- #### 验证流程 1. 在报错代码前添加调试语句: ```tcl puts "变量存在: [info exists mom_cutcom_type]" puts "当前作用域变量: [info vars]" ``` 2. 检查输出日志确认变量状态 3. 逐步回退脚本修改定位触发位置 > **提示**:此变量通常与数控加工中的**刀具补偿**相关,需确保 CAM 后处理器配置正确[^1]。若问题持续,检查 CAM 系统是否遗漏刀补参数传递。 --- ### 相关问题 1. 如何在 TCL 中动态检测未定义变量? 2. TCL 的全局变量和局部变量作用域有哪些注意事项? 3. 数控加工后处理中常见的 TCL 变量错误有哪些? 4. 如何为 TCL 脚本添加健壮的异常处理机制? 5. 不同 CAM 系统(UG NX, MasterCAM)向 TCL 脚本传递参数的机制有何差异?
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值