Virtual-Cam 硬件抽象层#

virtual-cam hal 是 lpc2106-cmucam3 hal 的一个替代硬件抽象层,它允许在 PC 上对 cc3 软件进行原型设计。这与 CMUcam3 模拟器非常相似。virtual-cam hal 将以与 CMUcam3 通常从相机加载帧相同的方式加载存储在目录中的帧。然后在虚拟 fifo 上执行所有正常的 cc3 函数。运行时将显示使用 lpc2106-cmucam3 hal 时通常不会出现的额外调试文本。这会通知用户 LED 状态以及被调用的低级 cc3 命令。串行输入和输出被应用程序的标准输入和输出所取代。

编译

要为 virtual-cam 编译代码,只需在运行 make 时键入 hal=virtual-cam。例如:

projects/hello_world :> make hal=virtual-cam

这将生成一个 hello_world_virtual-cam 可执行文件。

要执行 make clean,您仍然需要指定 hal。例如,要清理 hello_world:

projects/hello_world :> make hal=virtual-cam clean

运行 virtual-cam 项目

virtual-cam 将从 CC3_VCAM_PATH 环境变量指定的目录读取图像。该路径应相对于调用 virtual-cam 可执行文件的目录。例如,在 bash 终端中,您可能会像这样运行一个 virtual-cam 文件:

projects/hello_world :> ls
hello_world_virtual-cam.exe  Makefile main.c my_img_dir

projects/hello_world :> export CC3_VCAM_PATH=my_img_dir

projects/hello_world :> ./hello_world_virtual-cam.exe

virtual-cam 目录包含将被馈入虚拟相机帧缓冲区的示例图像。图像必须为 PPM 格式,并编号为"IMGxxxxx.PPM",其中 x 表示帧编号。每次调用 cc3_load_frame() 时,virtual-cam hal 将按从"IMG00000.PPM"开始的递增顺序读取图像。一旦没有更多可用图像,virtual-hal 将崩溃并停止。这些图像可以使用 ppm-grab 项目创建。默认情况下,ppm-grab 项目 以正确的格式存储原始、高分辨率、未压缩的图像,供 virtual-cam hal 使用。

仿真问题

一个主要的仿真问题是,目前不支持时序以及来自 GPIO 或按钮的外部输入。在许多情况下,virtual-cam hal 只会始终返回 true 或 false,以允许您的应用程序继续运行。使用 virtual-cam hal 编译时,将定义 VIRTUAL_CAM,以便您的应用程序可以根据当前的 hal 切换某些执行区域。例如,要在使用 virtual-cam 时禁用按钮等待,您可以使用:

#ifndef VIRTUAL_CAM
   while(!cc3_read_button());
#endif

或者,如果您想启用更多调试,可以编写类似这样的代码:

#ifdef VIRTUAL_CAM
   write_debugging_data_to_file();
#endif