trap信号捕捉详解

转载地址:http://www.bubuko.com/infodetail-1623557.html

标签:trap捕捉信号

<--目录-->

1)trap介绍

2)trap信号列表

3)trap使用例子

4)测试INT(2)信号

5)同时测试多个信号

6)shell跳板机案例


【trap介绍】

通过trap命令用于指定在接收到信号后要采取的行动;trap命令的一种常见用途是在脚本程序被中断时完成清理工作,历吏上,shell总是用数字来代表信号


【trap信号列表】

下面列出一些比较重要的信号(括号里面的数字是传统的信号编号)

信号          说明 

HUP(1)      挂起,通常因终端掉线或用户退出而引发 

INT(2)      中断,通常因按下Crtl+C组合健而引发                 

QUIT(3)     退出,通常因某些严重的执行错误而引发         

ABRT(6)     中止,通常因某些严重的执行错误而引发         

ALRM(14)    报警,通常用来处理超时 |

TERM(15)    终止,通常在系统关机时发送 

TSTP(20)    停止进程的运行,但该信号可以被处理和忽略,用户健入SUSP字符时(通常是Ctrl-Z)发出这个信号



【trap使用例子】

通常我们需要忽略的信号有HUP INT QUIT TSTP TERM,也就是信号1,2,3,20,15使用下面的语句可以使这些中断信号被忽略

trap命令的参数分为两部分,前一部分是接收到指定信号时将要采取的行动,后一部分是要处理的信号名,如下例子:

########################

# trap command signal  #

########################

signal是指收到的信号,command是指接收该信号采取的行动,如下为两种简单的信号

######################################################################################################

# trap "command(要执行的动作命令)" 1 2 3 20 15 或 trap "command(要执行的动作命令)" HUP INT QUIT TSTP #

######################################################################################################



【测试INT(2)信号】

[root@localhost ~]# trap "" 2     <== 屏蔽Ctrl+C信号,""引号里面为空,就是说你按了Crtl+C后,不做任何动作,相当于屏蔽了Ctrl+C

[root@localhost ~]# 此时无法执行Ctrl+C

[root@localhost ~]# trap ":" 2    <== 恢复ctrl+c信号

[root@localhost ~]# ^C            <== 此时可以执行Crtl+C了

[root@localhost ~]# trap "echo -n ‘you are typing ctrl+c‘" 2  <== 按了Ctrl+C后接受到2的信号就会输出双引号里面的内容

[root@localhost ~]# ^Cyou are typing ctrl+c

[root@localhost ~]# ^Cyou are typing ctrl+c

[root@localhost ~]# ^Cyou are typing ctrl+c

[root@localhost ~]# trap ":" 2    <== 再还原本样Ctrl+C信号

[root@localhost ~]# ^C            <== 此时再按Crtl+C变成原始的输出



【同时测试多个信号】

[root@localhost ~]# trap "" HUP INT QUIT TSTP TERM

[root@localhost ~]# trap ":" HUP INT QUIT TSTP TERM

[root@localhost ~]# trap "" 1 2 3 20 15

[root@localhost ~]# trap ":" 1 2 3 20 15



【shell跳板机案例】(触发信号后屏蔽信号)

 方法:

 1)首先做好ssh+key认证

 2)实现传统的远程连接菜单选择脚本

 3)利用Linux信号防止用户在跳板机上操作

 4)用户登陆后即调用脚本

 [root@localhost ~]# cat /etc/profile.d/tiaoban.sh 

 [ $UID -ne 0 ] && . /server/scripts/tiaoban.sh

 [root@localhost ~]#  cat /server/scripts/tiaoban.sh

 function trapper () {

 trap ‘:‘ INT EXIT TSTP TEMP HUP

 }


 while :

 do 

         trapper       #我在这里调用函数trapper,然则调用了上面五个信号,其有中Ctrl+c信号

         clear         #清屏

         cat <<menu    #终端打印出下面三排菜单供普通用户选择

             1)web a

             2)web b

             3)exit

 menu


         read -p "please select:" num    #让用户选择一个数字

         case "$num" in

         1)

         echo 1

         ssh 192.168.1.107

         ;;

         2)

         echo 2

         ssh 192.168.1.108

         ;;

         3|*)

         exit

         esac

 done


 普通用户测试登陆:

 技术分享

 输入普通用户名和密码

 技术分享

 在这里按Ctrl+c没效果,你必须选择敲一个数字连接,或者选择敲3退出

 技术分享

 


本文出自 “wsyht的博客” 博客,请务必保留此出处http://wsyht2015.blog.51cto.com/9014030/1790623

<think>嗯,用户这次直接询问TC366CCU6模块的详细解析。从上下文看,用户应该是在研究英飞凌Aurix2G系列的嵌入式芯片,之前提供的引用资料涉及MCMCAN和GTM模块,但这次聚焦在特定模块上。 用户可能遇到了实际开发需求,比如电路设计或驱动编程,需要深入理解这个模块的硬件特性和配置方法。考虑到TC3xx系列文档通常以英语为主,用户特意用中文提问,说明需要本地化的技术解析。 关于TC366CCU6这个型号,需要特别注意:后缀"CCU6"明确指向计数器捕获单元模块,这是英飞凌芯片的关键定时器外设。结合引用[2]提到的GTM模块中的TOM/ATOM/TIM子模块,CCU6其实是更基础的传统定时器单元,通常独立于GTM存在。 需要向用户强调几个关键点:硬件特性要说明时钟源和通道能力,寄存器操作需提醒地址映射差异,应用场景需列举PWM生成和输入捕捉等经典案例。特别要注意纠正一个常见误区——许多开发者会混淆CCU6和GTM的定时器功能层级。 用户没有追问代码实现,但主动提供MCAL配置信息会更实用。考虑到嵌入式开发的痛点,配置步骤要具体到寄存器字段级别,比如CCU6的T12周期寄存器设置。最后用电机控制案例收尾能帮助用户建立认知锚点。 </think>以下是基于英飞凌Aurix2G TC3XX系列芯片的**TC366CCU6模块**的详细解析(注:TC366CCU6中的"CCU6"特指计数器捕获单元模块): --- ### **1. CCU6模块简介** CCU6(Capture/Compare Unit 6)是Aurix2G TC3XX系列中用于**精密定时控制**的关键外设,专为电机控制、电源转换等实时应用设计。它提供: - **多通道捕获/比较**:支持3对互补PWM输出(带死区控制) - **高精度计时**:16位定时器分辨率,最高计数频率 $\frac{f_{CCU6}}{2}$($f_{CCU6}$ 为模块输入时钟) - **触发联动**:可连接ADC同步采样或触发其他定时器[^2]。 --- ### **2. 核心功能与架构** #### **2.1 硬件框架** ```plaintext +---------------+ 时钟源 --->| 预分频器 |---> 定时器T12/T13 | | 外部信号 ->| 捕获单元 |---> 中断/DMA请求 | | | 比较单元 |---> PWM输出 +---------------+ ↑ ↑ 寄存器配置 死区控制器 ``` #### **2.2 关键子模块** | **模块** | **功能** | |----------------|--------------------------------------------------------------------------| | **定时器T12** | 主定时器,驱动PWM生成,支持中心/边沿对齐模式 | | **定时器T13** | 辅助定时器,用于捕获事件计时或触发ADC | | **捕获单元** | 测量外部信号脉宽(如编码器反馈),支持噪声滤波 | | **比较单元** | 生成精确PWM波形,支持紧急停机(Trap)功能 | | **死区控制** | 防止互补PWM上下桥臂直通,可编程死区时间(典型值50ns~1µs) | --- ### **3. MCAL配置要点** #### **3.1 时钟配置** ```c // 设置CCU6时钟源(示例) Ccu6_ClockConfig.ClockSel = CCU6_CLOCK_PLL; // 选择PLL作为时钟源 Ccu6_ClockConfig.Prescaler = 4; // 分频系数(实际频率=80MHz/4=20MHz) ``` #### **3.2 PWM生成步骤** 1. **初始化T12定时器** ```c Ccu6_TimerConfig.TimerId = CCU6_TIMER_T12; Ccu6_TimerConfig.Period = 999; // PWM周期 = (999+1)/20MHz = 50µs (20kHz) ``` 2. **配置比较通道** ```c Ccu6_ChannelConfig.CompareValue = 300; // 占空比 = (300+1)/1000 = 30.1% ``` 3. **使能死区控制** ```c Ccu6_DeadTimeConfig.Enable = TRUE; Ccu6_DeadTimeConfig.RisingDelay = 20; // 上升沿延迟20个时钟周期(1µs) ``` --- ### **4. 典型应用场景** - **电机驱动**:三相BLDC/PMSM的FOC控制(6路互补PWM) - **数字电源**:LLC谐振转换器移相控制 - **信号采集**:旋转编码器周期测量(捕获模式) > 💡 **性能优势**:在80MHz时钟下,PWM分辨率可达12.5ns,满足伺服系统μs级时序精度需求[^1][^2]。 --- ### **5. 注意事项** 1. **中断冲突**:多个捕获事件共享中断向量时需设置优先级 2. **触发同步**:ADC采样窗口必须与CCU6触发信号对齐(使用GTM模块联动可优化时序) 3. **EMC设计**:高频PWM输出需配合硬件滤波电路降低辐射 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值