瑞萨CTSU程序在向嵌入式OS操作系统移植时的注意事项

ctsu触摸按键程序
运行要求
在裸机系统中,以一定的时间间隔循环调用ctsu apis
在qe for cap touch工具生成的cap touch sample code中
• 使用while(true)实现循环调用ctsu apis
• 使用r_bsp_softwaredelay()实现适当的定时间隔
在嵌入式多任务系统中,也需要以一定的时间间隔循环运行ctsu apis
• ctsu运行涉及的相关isr以及api可直接移植到多任务系统中
• 需要对qe for cap touch工具生成的captouch sample codee进行改写
嵌入式操作系统移植时
需要考虑的基本内容
ctsu底层驱动程序和应用程序在向rtos系统中移植时,一般需要考虑的基本内容
• rtos中systick的设定
• rtos延时函数的使用
• mcu中断优先级与rtos任务优先级的设置
• qe for cap touch工具生成的ctsu captouch sample code的改写
systick的设定
以freertos为例,使用e2 studio新建的freertos工程中, systick的默认设定为1ms
rtos延时函数的使用
以freertos为例,freertos延时函数vtaskdelay()和vtaskdelayuntil()
• freertos提供了两个系统延时函数:相对延时函数vtaskdelay()和绝对延时vtaskdelayuntil()。
• 这两个延时函数和自己实现的延时函数不同,这两个延时函数一旦被调用,当前任务会立刻进入阻塞状态,而自己写的延时函数(以for循环等形式实现的软件延时)会被当做有效任务而一直执行。
• 相对延时是指每次延时都是从任务执行函数vtaskdelay()开始,延时指定的时间结束;
vtaskdelay()函数的参数xtickstodelay表示延时多少个系统节拍时钟周期(systick)。
void vtaskdelay( const ticktype_t xtickstodelay ) 
• 绝对延时是指每隔指定的时间,执行一次调用vtaskdelayuntil()函数的任务。换句话说:任务以固定的频率执行
mcu中断优先级与rtos任务优先级的设置
以freertos任务优先级为例说明
freertos中任务的最高优先级是通过freertosconfig.h文件中的configmax_priorities进行配置的,用户实际可以使用的优先级范围是0到configmax_priorities – 1,建议用户配置宏定义configmax_priorities的最大值不要超过32。根据实际应用配置,配置越大,需要的内存空间越大
使用e2 studio新建的freertos工程中, configmax_priorities默认为5
mcu中断优先级和freertos任务优先级区别
简单地说,这两者之间没有任何关系,不管中断的优先级是多少, mcu中断的优先级永远高于任何freertos任务的优先级,即在执行的过程中, mcu中断来了就开始执行中断服务程序。
mcu中断优先级数值越小,优先级就越高;而freertos的任务优先级是,任务优先级数值越小,任务优先级越低。
mcu中断优先级与rtos任务优先级
通常的优先级分配方案:
• irq任务:irq任务是指通过中断服务程序进行触发的任务,所有任务中优先级最高
• 高优先级后台任务:比如按键检测、触摸检测、usb消息处理
• 低优先级时间调度任务:比如lcd界面显示、led数码管显示
irq任务和高优先级任务必须设置为阻塞式(调用消息等待或者延迟等函数),只有这样高优先级任务才会 释放cpu的使用权,从而低优先级任务才会有机会得到执行。
ctsu captouch触摸按键任务建议配置成高优先级任务,并且设置成阻塞式。
ctsu captouch sample code的改写
默认的ctsu captouch sample code
• qe for cap touch工具可生成默认的captouch sample code
• sample code中使用while(1)死循环等待测量完成,以及使用r_bsp_softwaredelay()实现ctsu apis的20ms左右定时间隔的循环调用
• captouch触摸按键对于实时性的要求并不高,但是涉及ctsu运行的很多参数都与循环调用的定时间隔有关,因此较大程度决定了触摸按键的灵敏度
例如drift correction interval
下图中的设定值为255,实际值为255 x api定时调用间隔,按键按下的positive noise filter和按键释放的negative noise filter也是如此。
因此,用户需要根据系统对cap touch触摸按键的实时性和灵敏度的要求,合理的改写默认的ctsu captouch sample code
对默认的ctsu captouch sample code进行改写
以freertos为例
• 合理设定cap touch thread的优先级,例如设定为最高优先级
• api调用报错时的改写
while(ture){} 改为 return
• 延时r_bsp_softwaredelay() 的改写
可改为vtaskdelay()
• qe_touch_main()以及ctsu_fn_isr测量完成中断callback函数的改写
增加os timer和semaphore,定时启动ctsu的测量,释放while(1)等待测量完成中断时的cpu时间,此时可取消while(0 == g_qe_touch_flag)和r_bsp_softwaredelay() / vtaskdelay()
使用rtos分析工具分析
captouch线程的运行时序
目的:分析整个系统中captouch线程与用户线程的运行关系
根据触摸按键的数量:
• 确保captouch线程以合适的时间间隔循环运行
• 确保captouch线程的按键处理阶段,不被其他用户线程抢占
• 确保captouch线程的触摸按键测量阶段,其他用户线程可以运行
一些rtos支持的分析工具
freertos:segger systemviewer
azure threadx:tracex
rt-thread:segger systemviewer
借助segger systemview分析captouch触摸按键的基本运行过程
segger systemviewer应用示例
captouch触摸按键的基本运行过程

西人马发布8款压阻式压力芯片及6大系列压阻式压力传感器
安防行业逐渐回暖 AI安防运营领域或将成为新战场
压敏电阻的作用与优势对比
汽车零部件行业数智化供应链系统整合供应链资源,助力企业提升市场价值
嫦娥五号探测器顺利完成月球表面自动采样
瑞萨CTSU程序在向嵌入式OS操作系统移植时的注意事项
SPI接口控制的模拟开关解决方案详解
48V直流电烙铁可以串联二极管吗
血压计语音芯片NV020D-S8,丰富的IO口资源实现个性化定制功能
中银国际助力优必选成功在港交所上市
!!供应/罗SHP54601A模拟示波器HP 54601A小
英特尔推出体积极小并可支持虚拟实境的NUC
罗德与施瓦茨发布新一代微波测量接收机FSMR3000
H桥电路的原理和应用
无刷电机小车开发记录—移植SimpleFOC流程
半导体划片刀原理、特点以及刀片磨损原因等知识分享!
RNN在FPGA的应用及测试分析
协作机器人为个人防护设备生产提速、创造新的就业机会
检测PCB的9个常识及方法
华米手表遇上小米手表,本是同根生,相煎何太急?