16.5. ZEPHYR example介绍

https://docs.zephyrproject.org/latest/samples/sample_definition_and_criteria.html

sample_definition_and_criteria

sample 样例的标准和定义

class Sample

经典样例, 可以运行在任意平台

basic sample

基本sample

在 Zephyr 中,所有特定于硬件的配置都在设备树中描述。

因此,GPIO 引脚也在设备树中进行配置,并使用兼容分配给特定用途。

这与 Arduino 等其他嵌入式环境形成鲜明对比,其中 GPIO 引脚的方向(输入/输出)是在应用程序固件中配置的。

对于 LED 或按钮等典型用例,可以使用现有的gpio-leds或 兼容的。gpio-keys

此示例演示了如何通过自定义设备树绑定将 GPIO 引脚用于其他目的。

LED 开始时会增加其亮度,直到完全或接近完全亮起。然后亮度逐渐降低,直至 LED 关闭,完成淡入淡出循环。每个循环需要 2.5 秒,并且循环会永远重复。PWM 周期取自 Devicetree。它应该足够快以高于闪烁融合阈值。

系统哈希图

这是一个简单的例子,反复

  • 插入最多CONFIG_TEST_LIB_HASH_MAP_MAX_ENTRIES

  • 最多替换先前插入的相同数字

  • 删除所有先前插入的键

  • Minimal footprint

占地面积最小 概述 此示例提供了一个空的main()各种配置文件,可用于测量 Zephyr 在不同配置中的最小 ROM 占用空间。

  • PWM: RGB LED

    脉宽调制:RGB LED 概述 这是一个使用 PWM 驱动 RGB LED 的示例应用程序。

    RGB LED 中有 3 个单色 LED。每个 LED 组件均由 PWM 端口驱动,其中脉冲宽度从零更改为 Devicetree 中指示的周期。该周期应足够快,以高于闪烁融合阈值(LED 被感知为稳定的最小闪烁率)。该示例使每个 LED 组件从黑暗变为最大亮度。三个for循环(每个 LED 组件一个)从 RGB LED 生成一系列逐渐变化的颜色,并且示例将永远重复。

  • Servomotor

伺服电机 概述 这是一个使用 PWM 驱动伺服电机的示例应用程序。

该示例通过 PWM 控制信号使伺服电机在 180 度范围内来回旋转。

该应用程序针对伺服电机 ROB-09065。0 至 180 度范围内相应的 PWM 脉冲宽度分别为 700 至 2300 微秒。不同的伺服电机可能需要不同的 PWM 脉冲宽度,如果使用不同的伺服电机,您可能需要修改源代码。

系统堆 概述 一个简单的示例,可与任何支持的板一起使用,并将系统堆使用情况打印到控制台。

基本线程示例 概述 此示例演示了使用 生成多个线程 K_THREAD_DEFINE()。它产生三个线程。然后在编译时使用 K_THREAD_DEFINE 定义每个线程。

前两个分别控制一个 LED。这些 LEDled0和led1具有由单独功能控制的循环控制和定时逻辑。

blink0()控制led0并具有 100ms 的睡眠周期

blink1()控制led1并具有 1000ms 的睡眠周期

当这些线程中的任何一个线程切换其 LED 时,它还会将信息推送到 FIFO中,以识别线程/LED 以及已切换的次数。

第三个线程用于printk()将添加到 FIFO 的信息打印到设备控制台。

USER SPACE

你好世界 概述 一个简单的 Hello World 示例,可与任何支持的板一起使用并打印“Hello World from UserSpace!” 到控制台。如果不可用或未配置,则“特权模式下的 Hello World”。而是打印出来。

生产者/消费者 这是一个练习一些用户模式概念的示例应用程序。

概述 考虑一个“示例驱动程序”,它从某个未知源获取传入数据,并生成带有指向该数据的指针的中断。应用程序需要对此数据执行一些处理,然后将处理后的数据写回驱动程序。

这里的目标是证明:

多个逻辑应用程序,每个应用程序都有自己的内存域

创建 sys_heap 并分配给内存分区

使用k_queue_alloc_append()需要配置线程资源池的API

内核对象和驱动程序的权限管理

显示如何定义特定于应用程序的系统调用

显示 ISR 和应用程序之间的 IPC(使用k_msgq)以及应用程序到应用程序的 IPC(使用k_queue)

展示如何创建特定于应用程序的系统调用

用户空间保护内存 概述 此示例是运行分配有受保护分区的唯一内存域的多个线程的示例。该应用程序使用内存分区和模拟类似谜机的示例算法,但该机器的实现尚未经过验证,不应用于任何实际的安全目的。

要求 该示例依赖于子系统app_memory,并且它不会在不支持该子系统的主板上运行。该示例在以下板子 qemu_x86、frdm_k64、96b_carbon 上进行了测试。

系统调用性能 此示例应用程序的目标是测量与直接调用函数的主管线程相比,用户线程必须经过系统调用时的性能损失。

概述 该应用程序创建一个主管和一个用户线程。然后两个线程都调用 k_current_get() 返回当前线程的引用。用户线程必须经过系统调用。

两个线程都显示调用 k_current_get() 时的核心时钟周期数和执行的指令数。

subsys