首页 > 其他分享 >eCos Synthetic实践(二)——简单外设

eCos Synthetic实践(二)——简单外设

时间:2022-11-21 10:04:26浏览次数:72  
标签:Synthetic Flash ADC eCos Linux 外设 时钟


 

1. 简介

Synthetic Target同样包含多种硬件设备,当然它们都是虚拟的, 其中一部分设备通过Linux系统调用就可以实现,不需要I/O辅助进程的参与, 这类设备包括Disk、ADC、Flash、WallClock(实时时钟)、RTC(系统嘀嗒), 另一部分设备必须和I/O辅助进程相配合才能实现,这类设备包括Ethernet、Framebuffer、Watchdog。 此外,Synthetic下的诊断输出既可以通过Linux系统调用直接输出到终端, 也可以通过I/O辅助进程输出到I/O辅助进程的主窗口上。

本文是《eCos Synthetic实践》系列的第二篇,介绍不需要I/O辅助进程参与的简单设备。

Synthetic基本原理请阅读参考资料的《eCos的Linux Synthetic Target简介》。

 

2. Diag(诊断输出)

诊断输出是作为HAL的一部分提供的,并不是单独的模块。

调用diag_printf函数输出诊断信息,diag_printf函数原型和printf函数原型一致, 可以像使用printf函数一样使用diag_printf函数,只是diag_printf不支持浮点数。 要打印浮点数,只能使用printf函数,printf函数需要ISO C library standard input/output functions组件, 而且需要勾上Floating point support选项。尽量避免使用printf,因为printf的实现是基于I/O子系统的, 会绕很大一个弯才将字符输出,而diag_printf是直接引用HAL接口实现的。

在没有I/O辅助进程的情况下,诊断输出到终端,在有I/O辅助进程的情况下,诊断输出到I/O辅助进程主窗口。

 

3. RTC(系统嘀嗒)

再一次解释,在eCos中,RTC指的是Tick Timer,也就是嘀嗒定时器或者系统嘀嗒或者时钟嘀嗒, 是指为操作系统提供超时、时间片轮的定时器,不是指提供年月日时分秒的实时时钟, 虽然RTC的英文字面确实是实时时钟的意思,提供年月日时分秒的实时时钟在eCos中被称为WallClock, 字面意思为挂钟,为什么当年eCos的作者会选择这个名字呢? 一个可能的原因是早期计算机的系统嘀嗒和实时时钟是由同一块电路提供的, 即使是现在,很多实时时钟芯片仍然提供32.768KHz的周期信号, 完全可以使用该32.768KHz信号作为嘀嗒定时器的时钟源,这种实现方式还可以将系统嘀嗒和实时时钟同步起来。

跟诊断输出一样,RTC是作为HAL的一部分提供的,并不是单独的模块。

与RTC相关的选项

  1. Real-time clock period: 为系统嘀嗒的时间间隔,单位为微秒。
  2. Real-time clock denominator: Real-time clock numerator除以Real-time clock denominator所得值也是系统嘀嗒的时间间隔,单位为纳秒。
  3. Real-time clock numerator: Synthetic Target下的Real-time clock numerator参数是使用Real-time clock numerator和Real-time clock denominator计算出来的,不能直接修改。

图 1. RTC选项

eCos Synthetic实践(二)——简单外设_ecos

 

4. Wallclock(实时时钟)

Wallclock提供实时时钟功能,跟Linux一样,eCos的实时时钟提供的时间值是从1970-01-01 00:00:00开始到当前时刻的秒数, 通过C库函数可以将这个值转换成直观的日期和时间。

使用Wallclock需要添加Wallclock device framework(CYGPKG_IO_WALLCLOCK)组件,通过eCos Configuration Tool的菜单Build > Packages打开Packages对话框, 在左边的列表中选择Wallclock device framework点击Add>>按钮添加到右边列表。

图 2. 添加新组件

eCos Synthetic实践(二)——简单外设_linux系统_02

 

与Wallclock相关的选项

  1. Hardware wallclock: 选择使用硬件时钟,事实上在Synthetic不存在任何真实硬件,一切都是软件实现的,选择这个选项将使用Linux系统的时钟。
  2. Name of file wich holds system-eCos wallclock offset: 该配置项指定一个文件名,该文件保存eCos系统时钟与Linux系统时钟的偏差,在eCos系统内修改时钟不会影响Linux系统时钟, 而是记录两个时钟时间的偏差,eCos系统读取时钟时首先通过系统调用读取Linux系统时钟,然后在Linux系统时钟的基础上加上偏差。

图 3. Wallclock选项

eCos Synthetic实践(二)——简单外设_linux系统_03

 

5. ADC(模数转换器)

使用ADC需要添加Generic ADC Support(CYGPKG_IO_ADC)组件,通过eCos Configuration Tool的菜单Build > Packages打开Packages对话框, 在左边的列表中选择Generic ADC Support点击Add>>按钮添加到右边列表。

与ADC相关的选项

  1. Hardware ADC device drivers: 使能硬件驱动,只有在这个选项有效的情况下,驱动程序才有效。
  2. Sample size: 指定采样位数,默认为16位ADC。
  3. Default sample rate: 指定默认采样速率,即每秒钟采样的次数。
  4. Device name: 该通道ADC在eCos中的设备名。
  5. Size of data buffer: 数据缓存大小,ADC总是每次采样一个数据,而应用程序可以一次读取多个数据, ADC驱动首先把数据存储在缓存里,然后等着应用程序读取,缓存是个FIFO队列。
  6. Channel source: 数据源,可以配置成CONST、RANDOM、FILE这3种模式中的一种, CONST模式下,读取ADC将返回常量,常量由选项Constant sample value指定, RANDOM模式下,读取ADC将返回随机数, FILE模式下,读取ADC将返回文件中的值,如果到达文件尾部,那么重头开始,文件名由选项Sample data filename指定。
  7. Constant sample value: 如果Channel source选择CONST,那么该选项指定常量值。
  8. Sample data filename: 如果Channel source选择FILE,那么该选项指定提供数据源的文件名,为Linux系统下的文件。

图 4. ADC选项

eCos Synthetic实践(二)——简单外设_实时时钟_04

 

6. Disk(磁盘)

Synthetic下的Disk使用Linux系统下的文件作为存储媒介,eCos中对磁盘的读写最终都转换成Linux系统调用对文件进行读写, 如果Disk中的内容是有效的文件系统,那么可以在Linux系统下将存储在文件内的文件系统挂载到Linux(mount -o loop)。

使用Disk需要添加Disk deivce drivers(CYGPKG_IO_DISK)组件,通过eCos Configuration Tool的菜单Build > Packages打开Packages对话框, 在左边的列表中选择Disk deivce drivers点击Add>>按钮添加到右边列表。

与Disk相关的选项

  1. Provide disk 0 device: 使能Disk驱动,只有将这个选项勾上,驱动程序才有效。
  2. Device name for ecosynth disk 0 device: Disk在eCos中的设备名。
  3. Linux file name for ecosynth disk 0 device: 指定镜像文件名。
  4. Size in bytes for ecosynth disk 0: Disk大小(存储空间)。

图 5. Disk选项

eCos Synthetic实践(二)——简单外设_linux_05

 

7. Flash(闪存)

与Disk设备类似,Flash也是使用Linux系统下的文件作为存储媒介的,对Flash的读写擦除都是对Linux文件的读写, 一样可以将镜像文件进行挂载。

使用Flash需要添加Generic FLASH memory support(CYGPKG_IO_FLASH)组件,通过eCos Configuration Tool的菜单Build > Packages打开Packages对话框, 在左边的列表中选择Generic FLASH memory support点击Add>>按钮添加到右边列表。

与Flash相关的选项

  1. Provid /dev block devices: Flash设备可以通过I/O子系统函数,例如cyg_io_lookup,cyg_io_read等函数访问,也可以直接通过Flash API访问, 如果需要通过I/O子系统访问,那么需要将选项勾上。
  2. Base address of flash: Flash的起始地址。
  3. Size of one block of synth flash: Flash块大小,Flash是按块为单位进行擦除的。
  4. Number of blocks in the synth flash: Flash块数目。
  5. Number of boot blocks in the synth flash: 引导区的块数目。
  6. Size of the boot blocks in the synth flash: 引导区的块大小。
  7. Is the boot blocks at the bottom of the flash: 是否在Flash底部提供引导区,默认使能。
  8. Name of file emulating synth flash: 镜像文件名,在Synthetic中,Flash实际上是存储在Linux系统上的一个文件,这个选项指定文件名。

图 6. Flash选项

eCos Synthetic实践(二)——简单外设_实时时钟_06

 

8. 参考资料

在线资料

  1. ​《eCos Synthetic实践(一)——Hello World!》​
  2. ​《XXXVIII. eCos Synthetic Target》​​:官方参考手册。
  3. ​《eCos的Linux Synthetic Target简介》​​:官方参考手册的部分翻译。
  4. ​《eCos需要Synthetic虚拟目标板的理由》​​:谁需要Synthetic,什么情况下需要Synthetic?
  5. ​​《虚拟实验室eCos开发环境的配置 (Linux)》​​:使用基于QEMU的模拟器运行eCos。
  6. ​VirtualBox​​:虚拟机软件。
  7. ​Xubuntu​​:易于使用又节省资源的Linux发行版。

标签:Synthetic,Flash,ADC,eCos,Linux,外设,时钟
From: https://blog.51cto.com/zoomdy/5872663

相关文章

  • eCos Synthetic实践(一)——Hello World!
     1. 简介eCos提供了LinuxSyntheticTarget,通过SyntheticTarget可以将eCos应用作为一个普通进程在Linux系统内运行,这既提供了体验eCos的机会又不需要繁琐的硬件准备工作......
  • eCos需要Synthetic虚拟目标板的理由
     eCos提供了Synth虚拟目标板(SyntheticTarget),为什么要使用虚拟目标板呢? 1. 在没有硬件的条件下学习eCoseCos是非常优秀的嵌入式操作系统,如果希望学习eCos但是又没有开发......
  • eCos中的同步原语简要
    信号量信号量是最基本的通信原语,可用于线程同步、事件通知、共享数据保护,包括二值信号量和计数信号量,在非嵌入式系统中,信号量还被用于进程间通信。eCos的计数信号量包含了两......
  • eCos仿真目标机(2)――安装
    宿主机软件为了获得仿真目标机的完整功能,用户必须编译安装I/O辅助进程ecosynth以及其它支持文件。没有辅助进程的情况下开发仿真目标机应用也是可以的,但是仅有少量的I/O设备......
  • 为仿真器添加eCos多线程调试支持,GDBServer Extender 0.0.1 使用说明
    可以使用RedBoot或者仿真器调试eCos系统,RedBoot集成的GDBStubs已经支持eCos的多线程调试,使用GDB命令infothreads就可以读取当前的线程状态。但是使用仿真器时,由于仿真器不......
  • eCos系统CPU负载测量
    cpuload组件包提供了一种估算CPU负载的方式。它可以估算最近0.1秒、1秒和10秒内的CPU负载百分比。负载测量API首先,必须在被测目标机上对测量算法进行校准,一旦校准完成后就可......
  • 制作RedBoot启动光盘以及下载调试eCos应用
    不是我对软盘有什么意见,反正都是通过虚拟机启动,无论是软盘还是光盘都只是个镜像文件。问题是我使用的VirtualBox虚拟机不支持RedBoot生成的软盘镜像。用二进制工具查看RedBo......
  • 获取eCos堆栈使用情况
    在嵌入式系统中,堆栈是静态分配的,不会依据堆栈的使用情况自动增加堆栈深度,存在堆栈溢出的风险。一旦发生堆栈溢出,后果很严重,可能会立即导致死机,也可能埋了一颗定时炸弹,在随后......
  • 常用外设原理介绍
    LEDLED灯,又称LED发光二极管,原理图如下所示LED发光二极管有P、N两极,具有普通二极管的单向导电性,当P极电压高于N极电压,且达到一定阈值之后(一般为0.7V,与其材质有关),二极管开始导......
  • eCos疑问——两个cyg_user_start函数
    mingdu.zheng<at>gmail<dot>com 两个cyg_user_start函数在阅读eCos代码的过程中发现整个系统定义了两个cyg_user_start函数,一个位于packages/infra/<version>/src/......