关于嵌入式:飞腾派OS用户使用开发指南

<article class=“article fmt article-content”><h2><strong>1 飞腾派OS简介</strong></h2><p>飞腾派开发板是一款面向宽广工程师和爱好者的开源硬件。主板处理器采纳飞腾四核处理器,兼容ARM V8 指令集,主频最高可达 1.8GHz。</p><p>飞腾派 OS(Phytium Pi OS)是运行在飞腾派开发板上的操作系统,基于Debian 并针对飞腾派开发板深度定制,其中包含固件,内核,各接口驱动程序,桌面零碎,用于各种场景的开发包等。它能够烧录在 SD 卡中,作为飞腾派开发板的启动零碎。</p><h3><strong>1.1 飞腾派开发板的硬件规格</strong></h3><p>开发板内置 2/4GB DDR4 内存, 双路千兆以太网、USB、UART、CAN、HDMI、音频等接口。主板板载 WiFi 蓝牙,陶瓷天线,可疾速连贯无线通信。集成一路 miniPCIE 接口,可实现AI 加速卡与4G通信等。</p><table><thead><tr><th>性能</th><th>形容</th></tr></thead><tbody><tr><td>CPU</td><td>飞腾四核处理器,ARMV8 架构</td></tr><tr><td>内存</td><td>2G、4G 版本,64 位 DDR4</td></tr><tr><td>存储</td><td>反对 microSD 和 EMMC 启动,默认 microSD</td></tr><tr><td>网络</td><td>2×千兆以太网(RJ45)</td></tr><tr><td>USB</td><td>1×USB3.0 host,3×USB2.0 host</td></tr><tr><td>PCIe</td><td>1×Mini-PCIe ,反对 4G、AI 等模组</td></tr><tr><td>蓝牙</td><td>板载蓝牙 BT4.2/ BLE4.2</td></tr><tr><td>WiFi</td><td>板载 2.4G + 5G 双频 WIFi</td></tr><tr><td>显示</td><td>1× HDMI,最高反对 19201080 分辨率</td></tr><tr><td>视频解码</td><td>2K30p(H.264/265)\1080p60</td></tr><tr><td>音频</td><td>3.5mm 耳机口音频输入</td></tr><tr><td>UART</td><td>1×调试串口+2×MIO(可配置为 UART 模式)</td></tr><tr><td>I2C</td><td>2+2×MIO(可配置为 I2C 模式)</td></tr><tr><td>I2S</td><td>1 路</td></tr><tr><td>SPI</td><td>2 路</td></tr><tr><td>CAN</td><td>2 路 CANFD</td></tr><tr><td>GPIO</td><td>最多 29 个</td></tr><tr><td>供电</td><td>12V3A 直流电源</td></tr><tr><td>工作温度</td><td>050°C</td></tr></tbody></table><h3><strong>1.2 飞腾派 OS 的次要性能</strong></h3><p>linux 5.10.153 内核</p><p>多种外设驱动</p><p>Debian 11 定制零碎</p><p>Xfce 桌面零碎</p><p>反对 WiFi6 双频配置</p><p>反对蓝牙 配置</p><p>反对 4G/5G 网卡</p><p>反对 AI 加速卡</p><p>反对 web,Python 开发包</p><p>反对类树莓派 HAT 板开发包</p><p>反对 EtherCAT+ Linux RT</p><p>反对 Xenomai</p><h3><strong>1.3 反对的次要驱动</strong></h3><p>mirco SD</p><p>eMMC</p><p>千兆以太网控制器及收发器</p><p>USB</p><p>miniPCIe</p><p>蓝牙 v4.2</p><p>wifi6</p><p>UART</p><p>I2C</p><p>I2S</p><p>SPI</p><p>CAN</p><p>GPIO</p><p>MIO</p><p>watchdog</p><h3><strong>1.4 反对的次要软件包</strong></h3><p>openssl</p><p>ffmpeg</p><p>ssh</p><p>gdb</p><p>Python3</p><p>lua5.1</p><p>curl</p><p>nfs-common</p><p>ntfs-3g</p><p>cifs-utils</p><p>mkvtoolnix</p><p>wpasupplicant</p><p>wireless-tools</p><p>dhcpd5</p><p>vlc</p><p>bluez</p><p>pulseaudio</p><p>blueman</p><p>bluetooth</p><p>python3-pygame</p><p>python3-tk</p><p>python3-spidev</p><p>python3-pip</p><p>libgles2-mesa</p><h2><strong>2 飞腾派OS使用指南</strong></h2><h3><strong>2.1 筹备 SD 卡启动镜像</strong></h3><p>下载 SD 卡的镜像 sdcard.img,能够在 Linux 或 Windows 上将镜像烧录到SD卡中。请筹备一张容量大于 16G 的 SD 卡,并连贯到 Linux 或 Windows 主机上。</p><h4><strong>2.1.1 Windows 烧录镜像</strong></h4><p>应用 win32 Disk imager 进行烧录。</p><p>具体应用办法见: https://blog.csdn.net/Mr_LanGX/article/details/123338081</p><h4><strong>2.1.2 Linux 烧录镜像</strong></h4><p>主机端将 SD 卡接入主机(以主机辨认设施名为/dev/sdb 为例,请按理论辨认设施名更改,确定设施没有被挂载,如果有挂载,须要 umount)</p><pre><code>$ sudo dd if=sdcard.img of=/dev/sdb bs=1M</code></pre><h3><strong>2.2 系统启动</strong></h3><p>将有镜像的 SD 卡插入(确认开发板配置为 SD 卡启动,参见飞腾派硬件规格书7.13 节“启动选择开关”),HDMI 连贯显示器,连贯 USB 键盘鼠标,连贯电源线,启动零碎,在显示器上会呈现小企鹅标记,最初显示登录界面。登录的用户名:user,明码:user</p><p></p><h3><strong>2.3 桌面根本介绍</strong></h3><p>Xfce 作为默认的桌面环境,是一款轻量级桌面环境,重视效率和资源利用,它提供了简洁而直观的界面。</p><p></p><p>在桌面底部两头的地位,从左到右提供 “显示桌面”,“终端”,“文件管理器”,“web浏览器”,“程序查找器”“快捷文件管理器”。</p><h4><strong>2.3.1 web 浏览器</strong></h4><p>Xfce 提供 firefox 作为默认浏览器</p><p></p><h4><strong>2.3.2 终端 </strong></h4><p>在终端中,能够应用命令行来治理和设置零碎,开发软件。 user 用户能够在终端中 sudo 来获取 root 权限。</p><p></p><h4><strong>2.3.3 文件管理器</strong></h4><p>通过文件管理器,能够管理文件,关上,批改,保留文件。</p><p></p><h3><strong>2.4 网络连接设置</strong></h3><h4><strong>2.4.1 有线网络</strong></h4><p>默认两个网口都是 DHCP 的,能够连贯路由器获取 IP 地址。</p><p>点击桌面右上角的连贯图标来查看有线网网络连接状况。</p><p></p><p>通过网络管理器来设置你的网络参数,减少删除连贯,批改连贯参数。 </p><p></p><h4><strong> 2.4.2 WiFi 网络</strong></h4><p>零碎曾经集成 WIFI 驱动. 启动后能够主动加载看到 wlan0 . wpasupplicant 服务默认主动启动。点击桌面右上角的连贯图标来查看 WiFi 网络。</p><p></p><p>点击 create new WiFi network,来创立一个连贯,输出 network name 和key,就能够连贯到WiFi 网络。</p><p></p><p>敞开 WiFi 服务</p><pre><code>$ sudo systemctl disable wpa_supplicant.service $ sudo reboot</code></pre><p>关上 WiFi 服务</p><pre><code>$ sudo systemctl enable wpa_supplicant.service $ sudo reboot</code></pre><h3><strong>2.5 蓝牙设置</strong></h3><p>蓝牙服务零碎默认是敞开的。启动步骤如下:</p><pre><code>$ sudo systemctl enable bluetooth.service $ sudo systemctl enable systemd-hciattach.service $ sudo reboot</code></pre><p>重启后,在桌面右上角的状态栏中有蓝牙图标,点击图标能够增加蓝牙设施。</p><p></p><p>在增加设施窗口,点击“search”找到要连贯的蓝牙耳机和音响,右键选连贯。 </p><p></p><p>如果通过蓝牙播放音乐</p><p>vlc 播放器抉择 Audio —-> Audio Device -> <蓝牙耳机设施</p><p></p><h3><strong>2.6 应用 SSH</strong></h3><p>SSH client 和 SSH server 默认曾经集成在飞腾派 OS 中,能够间接应用。<br/>首先确保飞腾派有线网口或wifi网口有IP地址 (上面的例子中eth0 的ip address 是10.10.80.174),能够通过 ip addr 命令查看。</p><pre><code>user@phytiumpi:$ ip addr1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWNgroupdefault qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq stateUPgroup default qlen 1000 link/ether 6c:b3:11:0f:9c:e8 brd ff:ff:ff:ff:ff:ff permaddr 00:11:22:33:44:55 inet 10.10.80.174/24 brd 10.10.80.255 scope global dynamic noprefixrouteeth0 valid_lft 1263sec preferred_lft 1263sec inet6 fe80::8cf3:ea81:564c:a144/64 scope link noprefixroute valid_lft forever preferred_lft forever3: eth1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mqstateDOWN group default qlen 1000 link/ether 10:22:33:44:55:66 brd ff:ff:ff:ff:ff:ff</code></pre><p>其次通过 ping 命令查看和远端设施的连通性。(飞腾派 IP 10.10.80.174,远端设施IP10.10.80.170)</p><pre><code>$ ping 10.10.80.174PING 10.10.80.174 (10.10.80.174) 56(84) bytes of data.64 bytes from 10.10.80.174: icmp_seq=1 ttl=64 time=0.350 ms64 bytes from 10.10.80.174: icmp_seq=2 ttl=64 time=0.294 ms^C— 10.10.80.174 ping statistics —2 packets transmitted, 2 received, 0% packet loss, time 1028msrtt min/avg/max/mdev = 0.294/0.322/0.350/0.028 ms</code></pre><p>最初在确认能够 ping 通远端设施的状况下:</p><p>a. 从飞腾派开发板登录近程设施</p><pre><code>user@phytiumpi:$ ssh phytium@10.10.80.170The authenticity of host ‘10.10.80.170 (10.10.80.170)’ can’t be established. ECDSA key fingerprint isSHA256:C7MVQ7GzEb4EKkINKnrEfmQ/Cu0VkpRzypMbeHgpJEw. Are you sure you want to continue connecting (yes/no/[fingerprint])? yesWarning: Permanently added ‘10.10.80.170’ (ECDSA) to the list of known hosts.phytium@10.10.80.170’s password:Welcome to Kylin V10 SP1 (GNU/Linux 5.4.18-57-generic aarch64) * Management: http://www.kylinos.cn/ * Support:http://www.kylinos.cn/service.aspxLast login: Fri Jun 9 15:08:07 2023 from 10.10.80.177phytium@phytium-d2000:$</code></pre><p>b. 从近程设施登录飞腾派开发板 (password: user)</p><pre><code>$ ssh user@10.10.80.174The authenticity of host ‘10.10.80.174 (10.10.80.174)’ can’t be established. ECDSA key fingerprint isSHA256:6CzIeVEaWgskwMdXDu/VcnS6c85/S/O4fUWaHdTVJY0.Are you sure you want to continue connecting (yes/no/[fingerprint])? yesWarning: Permanently added ‘10.10.80.174’ (ECDSA) to the list of known hosts. user@10.10.80.174’s password:Linux phytiumpi 5.10.153-rt76-phytium-embeded-2023-v1.0-GA #1 SMPPREEMPT_RT Tue Aug 8 14:09:59 CST 2023 aarch64 The programs included with the Debian GNU/Linux system are free software;the exact distribution terms for each program are described in theindividual files in /usr/share/doc//copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extentpermitted by applicable law. Last login: Wed Aug 9 18:13:43 2023 from 10.10.80.198user@phytiumpi:~$</code></pre><h3><strong>2.7 应用调试串口</strong></h3><p>串口连贯请参考《飞腾派_V2 硬件规格书》中的调试串口地位(管脚 8,10,12),连贯串口 <br/>串口终端程序必须设置为:</p><ul><li>波特率:115200</li><li>数据位:8</li><li>奇偶校验:无</li><li>进行位:1</li></ul><p>零碎调试串口下的用户有 user 和 root</p><ul><li>用户名:user;明码:user</li><li>用户名:root;明码:root</li></ul><p></p><h3><strong>2.8 软件装置</strong></h3><p>能够在命令行终端中通过 apt-get install 来装置,或者在图形界面中双击.deb 包文件进行装置。<br/>其余的 Debian 应用问题能够参考如下文档: https://www.debian.org/doc/manuals/debian-reference/</p><h2><strong>3 飞腾派OS开发指南</strong></h2><h3><strong>3.1 构建飞腾派OS</strong></h3><p>飞腾派OS是由 Buildroot 生成的,buildroot 是一种简略、高效且易于应用的工具,能够通过穿插编译 在 主 机 系 统 上 生 成 飞 腾 派 OS 的 镜 像 文件。能够参考:https://buildroot.org/downloads/manual/manual.html</p><p>咱们只反对在 ubuntu20.04、ubuntu22.04、debian11 这三种主机零碎上运行Buildroot,不反对其余零碎。 首先,Buildroot 须要主机零碎上装置如下 Linux 程序,请查看是否已装置:</p><pre><code>Build tools: - which - sed - make (version 3.81 or any later) - binutils - build-essential (only for Debian based systems) - gcc (version 4.8 or any later) - g++ (version 4.8 or any later) - bash - patch - gzip - bzip2 - perl (version 5.8.7 or any later) - tar - cpio - unzip - rsync - file (must be in /usr/bin/file) -device-tree-compiler - bcSource fetching tools: - wget - git</code></pre><p>除此之外,还须要装置如下软件包:</p><pre><code>$ sudo apt install debootstrap qemu-user-static binfmt-support debian-archive-keyring</code></pre><p>对于 debian11 零碎,须要设置 PATH 环境变量:</p><pre><code>$ PATH=$PATH:/usr/sbin</code></pre><h4><strong>3.1.1 下载 phytium-pi-os</strong></h4><pre><code>$ git clone https://gitee.com:phytium_embedded/phytium-pi-os.git</code></pre><h4><strong>3.1.2 根本 defconfig</strong></h4><p>飞腾派构建的文件系统的配置文件位于 configs 目录。</p><p>在 phytium-pi-os 根目录下执行$ make list-defconfigs,返回 configs 目录中的defconfig配置文件。</p><pre><code>$ make list-defconfigs</code></pre><p>其中以 phytium 结尾的为飞腾派相干的 defconfig 配置文件,蕴含:</p><pre><code>phytiumpi_defconfig - Build for phytiumpi (without desktop)phytiumpi_desktop_defconfig - Build for phytiumpi_desktop</code></pre><h4><strong>3.1.3 编译 SD 卡镜像</strong></h4><p>(1)加载 defconfig</p><pre><code>$ make phytiumpi_xxx_defconfig</code></pre><p>(2)编译</p><pre><code>$ make</code></pre><p>(3)镜像的输入地位</p><p>生成的根文件系统、内核位于 output/images 目录。 sdcard.img 就是SD 的镜像文件。</p><p></p><h4><strong>3.1.4 EtherCAT config</strong></h4><p>编译 ethercat,对于 ethercat 的信息请参考:https://gitee.com/phytium_embedded/ether-cat </p><p>反对将 ethercat 驱动及用户态的库、工具编译装置到 debian 零碎上。如果须要编译ethercat 请执行:</p><p>(1)应用 phytiumpi_xxx_defconfig 作为根底配置项,在 phytiumpi_xxx_defconfig中退出反对rt内核,及 ethercat 的配置:</p><pre><code>$ ./support/kconfig/merge_config.sh configs/phytiumpi_xxx_defconfigconfigs/phytiumpi_linux_5.10_rt.config configs/phytiumpi_ethercat.config</code></pre><p>(2)编译</p><pre><code>$ make</code></pre><h4><strong>3.1.5 Xenomai Config</strong></h4><p>编译 xenomai,对于 xenomai 的信息请参考:https://gitee.com/phytium_embedded/linux-kernel-xenomai</p><p>反对将 xenomai 内核及用户态的库、工具编译装置到飞腾派 OS 上。如果须要编译xenomai 请执行:</p><p>(1)应用 phytiumpi_xxx_defconfig 作为根底配置项,在 phytiumpi_xxx_defconfig 退出xenomai 的配置:</p><pre><code>$ ./support/kconfig/merge_config.sh configs/phytiumpi_xxx_defconfigconfigs/phytiumpi_xenomai_xxx.config</code></pre><p>phytiumpi_xenomai_xxx.config 为以下配置片段文件之一:</p><pre><code>phytiumpi_xenomai_mercury_5.10.config (linux 5.10 rt 内核+xenomai-v3.2.2.tar.gz) phytiumpi_xenomai_cobalt_5.10.config (xenomai cobalt 5.10 内核+xenomai-v3.2.2.tar.gz)</code></pre><p>(2)编译</p><pre><code>$ make</code></pre><h4><strong>3.1.6 清理编译后果</strong></h4><p>(1)make clean</p><p>删除所有编译后果,包含 output 目录下的所有内容。当编译完一个文件系统后,编译另一个文件系统前,须要执行此命令。</p><p>(2)make distclean</p><p>重置 buildroot,删除所有编译后果、下载目录以及配置。</p><h3><strong>3.2 应用新内核</strong></h3><h4><strong>3.2.1 穿插编译内核</strong></h4><p>如果用户想本人手工命令构建内核,设施树以及内核模块,能够依照该章节操作。</p><p>在 x86 穿插编译 arm64 内核,举荐应用编译器的链接如下:<br/>https://developer.arm.com/-/media/Files/downloads/gnu-a/10.2-2020.11/binrel/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu.tar.xz</p><p>将其解压缩到/opt 目录后,而后设置环境变量,操作步骤如下:</p><pre><code>$ export PATH=/opt/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/bin:$PATH$ export ARCH=arm64 CROSS_COMPILE=aarch64-none-linux-gnu- $ export CC=aarch64-none-linux-gnu-gcc</code></pre><p>从如下网址下载 Rt 内核源代码(以 Rt 内核为例):<br/>https://gitee.com/phytium_embedded/phytium-linux-kernel/tree/linux-5.10-rt </p><p>第一步:进入内核根目录下,依照下述步骤配置和编译 Rt 内核</p><pre><code>$ make phytiumpi_firefly_defconfig$ make</code></pre><p>其中内核的名称是 Image,设施树的名称是 phytiumpi_firefly.dtb。</p><p>第二步:因为内核很多模块编译成 ko,所以须要手工生成 ko 的装置目录和文件:</p><p>在内核当前目录下创立 build 目录,作为 ko 的装置目录。当然用户能够设置任何目录为装置目录。</p><pre><code>$ mkdir build</code></pre><p>设置 build 目录为装置目录</p><pre><code>$ export INSTALL_MOD_PATH=pwd/build</code></pre><p>装置模块</p><pre><code>$ make modules_install</code></pre><p>查看模块</p><pre><code>$ ls build/lib/modules/5.10.153-rt76-phytium-embeded-2023-v1.0-GA</code></pre><p>其中,模块名称分 2 局部,第一局部“5.10.153-rt76-phytium-embeded”不会变动,第二局部“-v1.0-GA”会随着版本的不断更新而继续更新,本章节后续章节形容内核模块以不变局部为准。</p><p>第三步:将 SD 卡插到 USB 读卡器上,而后插到穿插编译机上,假如读卡器的设施节点为sdc,将内核和设施树装置到 SD 卡的/boot 目录(留神提前备份旧的内核和设施树以及内核模块)。</p><pre><code>$ sudo mount /dev/sdc1 /mnt$ sudo cp arch/arm64/boot/Image /mnt/boot/$ sudo cp arch/arm64/boot/dts/phytium/phytiumpi_firefly.dtb /mnt/boot/</code></pre><p>而后将配套的内核模块装置到/lib/modules</p><pre><code>$ sudo cp build/lib/modules/5.10.153-rt76-phytium-embeded /mnt/lib/modules-R$ sudo umount /mnt</code></pre><h4><strong>3.2.2 飞腾派开发板上编译内核</strong></h4><p>开发板启动注册之后须要装置如下软件,这些软件包如果没有装置,编译内核的时候可能失败。</p><pre><code>$ sudo apt-get install autoconf automake libtool fuse debhelper findutils autotools-dev pkg-config libltdl-dev flex bison device-tree-compiler libssl-dev</code></pre><p>从如下网址下载 Rt 内核源代码(以 Rt 内核为例): <br/>https://gitee.com/phytium_embedded/phytium-linux-kernel/tree/linux-5.10-rt</p><p>第一步:进入内核根目录下,依照下述步骤配置和编译 Rt 内核</p><pre><code>$ make phytiumpi_firefly_defconfig$ make</code></pre><p>其中内核的名称是 Image,设施树的名称是 phytiumpi_firefly.dtb。</p><p>第二步:因为内核很多模块编译成 ko,所以须要手工生成 ko 的装置目录和文件:</p><p>在内核当前目录下创立 build 目录,作为 ko 的装置目录。当然用户能够设置任何目录为装置目录。</p><pre><code>$ mkdir build</code></pre><p>设置 build 目录为装置目录</p><pre><code>$ export INSTALL_MOD_PATH=pwd/build</code></pre><p>装置模块</p><pre><code>$ make modules_install</code></pre><p>查看模块</p><pre><code>$ ls build/lib/modules/5.10.153-rt76-phytium-embeded-2023-v1.0-GA</code></pre><p>其中,模块名称分 2 局部,第一局部“5.10.153-rt76-phytium-embeded”不会变动,第二局部“-v1.0-GA”会随着版本的不断更新而继续更新,本章节后续章节形容内核模块以不变局部为准。</p><p>第三步:将内核和设施树装置到/boot 目录(留神提前备份旧的内核和设施树以及内核模块)。</p><pre><code>$ sudo cp arch/arm64/boot/Image /boot/$ sudo cp arch/arm64/boot/dts/phytium/phytiumpi_firefly.dtb /boot/</code></pre><p>而后将配套的内核模块装置到/lib/modules</p><pre><code>$ sudo cp build/lib/modules/5.10.153-rt76-phytium-embeded /lib/modules -R$ sudo umount /mnt</code></pre><p>与穿插编译内核相比,显然在飞腾派开发板上编译内核上步骤简洁,更换内核也更不便。然而实际上,在飞腾开发板上编译内核速度很慢,效率很低,因为在个别状况下,飞腾派开发板的CPU的性能比穿插编译机会差很多。</p><h4><strong>3.2.3 启动新内核</strong></h4><p>启动开发板,而后在 Uboot 启动阶段敲击键盘的回车键,这时零碎会停留在Uboot 的Shell 界面,如下所示。</p><pre><code>AHCI 0001.0301 32 slots 1 ports 6 Gbps 0x1 impl SATA modeflags: 64bit ncq stag pm led clo only pmp pio slum part ccc apstSATA link 0 timeout. AHCI 0001.0301 32 slots 1 ports 6 Gbps 0x1 impl SATA modeflags: 64bit ncq stag pm led clo only pmp pio slum part ccc apstHit any key to stop autoboot: 0 // 红颜色打印信息回显后键入回车字符E2000# // 这时进入 Uboot 的 Shell 界面E2000#setenv bootargs console=ttyAMA1,115200 earlycon=pl011,0x2800d000root=/dev/mmcblk0p1 rootwait rwE2000#ext4load mmc 0:1 0x90100000home/user/test/5.10.153-phytium-embeded-rt/Image28692992 bytes read in 6293 ms (4.3 MiB/s)E2000#ext4load mmc 0:1 0x90000000home/user/test/5.10.153-phytium-embeded-rt/phytiumpi_firefly.dtb25125 bytes read in 13 ms (1.8 MiB/s)E2000#booti 0x90100000 - 0x90000000</code></pre><p>在 Uboot 的 shell 菜单依照如下步骤疏导内核和设施树启动。</p><p>第一步:设置启动参数,其中,嵌入式 Linux 文件系统</p><pre><code>E2000# setenv bootargs console=ttyAMA1,115200 earlycon=pl011,0x2800d000root=/dev/mmcblk0p1 rootwait rw;</code></pre><p>第二步:加载内核到内存</p><pre><code>E2000# ext4load mmc 0:1 0x90100000 boot/Image;</code></pre><p>这时,串口会打印如下信息提醒加载胜利</p><pre><code>28692992 bytes read in 6293 ms (4.3 MiB/s)</code></pre><p>第三步:加载设施树到内存</p><pre><code>E2000# ext4load mmc 0:1 0x90000000 boot/phytiumpi_firefly.dtb;</code></pre><p>这时,串口会打印如下信息提醒加载胜利</p><pre><code>25125 bytes read in 13 ms (1.8 MiB/s)</code></pre><p>第四步:疏导启动内核</p><pre><code>E2000# booti 0x90100000 – 0x90000000;</code></pre><p>打印信息如下</p><pre><code>Moving Image from 0x90100000 to 0x90200000, end=91df0000## Flattened Device Tree blob at 90000000 Booting using the fdt blob at 0x90000000 Loading Device Tree to 00000000f9c32000, end 00000000f9c3b224 … OKrun in ft_board_setupfdt_addr 00000000f9c32000N: Phytium System Service Call: 0xc2000005mb_count = 0x1mb_blocks[0].mb_size = 0x7c000000mb_blocks[1].mb_size = 0xffa16920fdt : remove memory@1fdt : dram size 0x17fa16920 update successfully Starting kernel … / { compatible = “phytium,pe2204”; interrupt-parent = <0x00000001>; #address-cells = <0x00000002>; … … // 打印信息太多,此处省略[ 0.000000] Booting Linux on physical CPU 0x0000000200 [0x700f3034][ 0.000000] Linux version 5.10.153-rt76-phytium-embeded-2023-v1.0-GA[ 0.000000] Machine model: Phytium Pi Board … … // 打印信息太多,此处省略[ OK ] Finished Hold until boot process finishes up. [ OK ] Finished Save/Restore Sound Card State. [ OK ] Started OpenBSD Secure Shell server. Phytium Piphytiumpi login: // Linux Shell 提醒界面</code></pre><p>这时,输出用户名 user 和明码 user 进入 Linux shell。</p><h3><strong>3.3 应用内核模块</strong></h3><p>linux-headers 蕴含构建内核内部模块所需的头文件,buildroot 构建会生成linux-headers。<br/>对于如何编译内核内部模块,可参考 :https://www.kernel.org/doc/html/latest/kbuild/modules.html</p><h4><strong>3.3.1 穿插编译内核模块</strong></h4><p>buildroot 构建会在 output/target/usr/src 目录中装置 linux-headers-version。应用 buildroot 的工具链来穿插编译内核模块,buildroot 工具链位于output/host/bin,工具链的sysroot 为 output/host/aarch64-buildroot-linux-gnu/sysroot。</p><p>穿插编译内核内部模块的命令为:</p><pre><code>$ make ARCH=arm64 \CROSS_COMPILE=/home/xxx/phytiumpios/output/host/bin/aarch64-none-linux-gnu--C/home/xxx/phytiumpios/output/target/usr/src/linux-headers-5.10.153-phytium-embeded \M=$PWD \modules</code></pre><h4><strong>3.3.2 飞腾派开发板上编译内核模块</strong></h4><p>buildroot 将 linux-headers-version 装置在根文件系统的/usr/src 目录下,并为它创立了一个软链接/lib/modules/version/build。</p><p>留神,因为 linux-headers 是在 x86-64 主机穿插编译生成的,在开发板上间接应用它编译内核模块会报错:</p><pre><code>/bin/sh: 1: scripts/basic/fixdep: Exec format error</code></pre><p>因而,须要将 x86-64 格局的 fixdep 等文件替换为 ARM aarch64 格局的(以linux 5.10内核为例):</p><p>(1)在开发板上执行:</p><pre><code>scp -rusername@host:/home/xxx/phytiumpios/board/phytium/common/linux-5.10/scripts/usr/src/linux-headers-5.10.153-phytium-embeded</code></pre><p>在开发板上编译内核内部模块的命令为:</p><pre><code>make -C /lib/modules/5.10.153-phytium-embeded/build M=$PWD modules</code></pre><h3><strong>3.4 buildroot 编译新的应用软件</strong></h3><p>本节简略介绍如何通过 buildroot 穿插编译能运行在开发板上的应用软件,残缺的教程请参考:https://buildroot.org/downloads/manual/manual.html</p><h4><strong>3.4.1 buildroot 软件包介绍</strong></h4><p>buildroot 中所有用户态的软件包都在 package 目录,每个软件包有本人的目录package/,其中是小写的软件包名。这个目录蕴含:</p><ol><li>Config.in 文件,用 Kconfig 语言编写,形容了包的配置选项。</li><li>.mk 文件,用 make 编写,形容了包如何构建,即从哪里获取源码,如何编译和装置等。</li><li>.hash 文件,提供 hash 值,查看下载文件的完整性,如查看下载的软件包源码是否残缺,这个文件是可选的。</li><li>*.patch 文件,在编译之前利用于源码的补丁文件,这个文件是可选的。</li><li>可能对包有用的其余文件。</li></ol><h4><strong>3.4.2 编写 buildroot 软件包</strong></h4><p>首先创立软件包的目录 package/<pkg>,而后编写该软件包中的文件。</p><p>buildroot 中的软件包基本上由 Config.in 和.mk 两个文件组成。对于如何编写这两个文件,大家能够参考 buildroot 用户手册,这里简略概括一下。</p><p>(1)Config.in 文件中必须蕴含启用或禁用该包的选项,而且必须命名为BR2_PACKAGE_,其中<PKG>是大写的软件包名,这个选项的值是布尔类型。也能够定义其余性能选项来进一步配置该软件包。而后还必须在 package/Config.in 文件中蕴含该文件:</p><pre><code>source “package/<pkg>/Config.in”</code></pre><p>(2)<pkg>.mk 文件看起来不像一般的 Makefile 文件,而是一连串的变量定义,而且必须以大写的包名作为变量的前缀。最初以调用软件包的根底构造(package infrastructure)完结。变量通知软件包的根底构造要做什么。</p><p>对于应用手写 Makefile 来编译的软件源码,在<pkg>.mk 中调用 generic-package根底构造。generic-package 根底构造实现了包的下载、提取、打补丁。而配置、编译和装置由<pkg>.mk文件形容。<pkg>.mk 文件中能够设置的变量及其含意,请参考 buildroot 用户手册。</p><h4><strong>3.4.3 编译软件包</strong></h4><p>(1)独自编译软件包</p><pre><code>$ cd xxx/phytiumpios$ make <pkg></code></pre><p>编译后果在 output/build/- <pkg>-<version></p><p>(2)将软件包编译进根文件系统</p><p>在 phytiumpi_xxx_defconfig 中增加一行 BR2_PACKAGE_<pkg>=y</p><pre><code>$ make phytiumpi_xxx_defconfig$ make</code></pre><h2><strong>A 扩大材料</strong></h2><p>https://gitee.com/phytium_embedded/phytium-embedded-docs</p><hr/><blockquote><strong>更多资料获取:</strong>飞腾开发者平台</blockquote><p>版权所有。飞腾信息技术有限公司 2023。保留所有权力。<br/>未经本公司批准,任何单位、公司或集体不得擅自复制,翻译,摘抄本文档内容的局部或全副,不得以任何形式或路径进行流传和宣传。</p><p>商标申明<br/>Phytium和其余飞腾商标均为飞腾信息技术有限公司的商标。<br/>本文档提及的其余所有商标或注册商标,由各自的所有人领有。</p><p>留神<br/>本文档的内容视为飞腾的窃密信息,您该当严格遵守窃密工作;未经飞腾当时书面批准,您不得向任何第三方披露本文档内容或提供给任何第三方应用。</p><p>因为产品版本升级或其余起因,本文档内容会不定期进行更新。除非另有约定,本文档仅作为应用领导,飞腾在现有技术的根底上尽最大致力提供相应的介绍及操作指引,但飞腾在此明确申明对本文档内容的准确性、完整性、适用性、可靠性的等不作任何明示或暗示的保障。</p><p>本文档中所有内容,包含但不限于图片、架构设计、页面布局、文字描述,均由飞腾和/或其关联公司依法领有其知识产权,包含但不限于商标权、专利权、著作权等。非经飞腾和/或其关联公司书面批准,任何人不得擅自应用、批改,复制上述内容。</p></article> ...

March 4, 2024 · 6 min · jiezi

关于嵌入式:CS5523-MIPIDSI转EDP点屏芯片替代龙迅LT8911方案芯片

ASL新推出CS5523是一款MIPI DSI输出、DP/e DP输入转换芯片。MIPI DSI最多反对4个通道,每个通道的最大运行速度为1.5Gps。对于DP 1.2输入,它由4个数据通道组成,反对1.62Gbps和2.7Gbps的链路速率。它反对2560的最高分辨率*1440@60Hz.它只能应用单个1.8V电源,以节省成本并优化板空间CS5523特色:--单端口MIPI DSI接收器--合乎D-PHY1.2 DSI1.3和CSI1.3--1个时钟通道和1-4个可配置的数据通道--每个数据通道80Mb/s-2.0Gb/s--数据通道和极性替换--数据通道输出去偏斜--外部Rterm校准w/i小于5%的谬误--3位可编程平衡--可反对突发和非突发模式--反对16/18/24/30/36位RGB和YUV格局--反对1.62Gbps和2.7Gbps的链路速率--持2560*1440@60Hz分辨率--可与LT8911B齐全pin to pin替换CS5523实用于多个细分市场和显示器利用,如手持设施、主板、双面板显示器和车载显示器等。

August 18, 2023 · 1 min · jiezi

关于嵌入式:华清远见嵌入式开发笔记

什么是嵌入式? 华清远见嵌入式开发工程师2023嵌入式软件工程师所做的事件便是在芯片上进行程序编写,依据产品的需要编写逻辑及数据采集和解决以及输入等。嵌入式软件个别采纳的编程语言为C语言,有些中央会要求有汇编语言。为什么须要用C语言,因为C语言是靠近底层的语言,当然汇编是更加靠近的语言。download/daxiacode.com。然而汇编语言编写简单,因而在理论利用中,人们并不间接应用汇编语言进行编程,而是应用绝对高级的语言C。C语言有一个益处便是在硬件上运行时,速度快。只有在一些特定的环境下,比方芯片的启动代码(cstartup)、初始化芯片内存、间接操作PC指针等状况下人们才会优先思考汇编,否则,简直都是C语言。因而,能够说,嵌入式软件工程师就是C语言程序员。

July 4, 2023 · 1 min · jiezi

关于嵌入式:高性能TypeC到HDMI21-8k30Hz转换器方案CS5466介绍

CS5466设计原理图|TYPEC转HDMI8K30HZ计划电路|TYPEC转HDMI4K144HZ高刷视频电路 CS5466是一款高性能的Type-C到HDMI2.1协定转换器,通过Type-C/D DisplayPort链路接管视频和流,并转换为反对TMDS或FRL输入信令的HDM。HDMI输入端口能够作为TMDS或FRL发射机进行操作。FRL发射机合乎HDMI2.1标准,反对高达12Gbps的最大数据速率/通道,显示分辨率高达8K@30Hz或4k 144Hz。HDMI TMDS传输反对高达每通道6Gbps的最大容许数据速率,在60Hz刷新率下提供高达4Kx2K的24位彩色显示。CS5466反对dsc1.1/12a压缩视频传输流,并利用FEC解码,以确保无视觉故障的DSC比特流传输。HDMI发送器蕴含反对HDCP1.4和HDCP2.3的HDCP引擎。因为蕴含HDCP,CS5466容许平安传输受爱护的内容。嵌入式密钥可用,可提供最高级别的HDCP密钥安全性CS5466是一款高度集成的单芯片,实用于多个配件市场和显示利用设施,如主板、显示端口、扩大坞等。 1.CS5466参数 个性: 反对4k@60Hz,最大分辨率/定时高达8K@30Hz /4K@144hz反对DSC V1.2a,并与前一版本向后兼容反对DSC解码器和直通模式嵌入式32位RISC-V处理器和SPI闪存USB电源传输(PD)V3.0兼容嵌入式EDID(如果终端设备没有EDID,CS546X将响应EDID)反对HDCP 1.4和HDCP2.3以及片上密钥,以反对HDCP中继器反对RGB 4:4:4 8/10/12位bpc和YCbCr 4:4:4:4:2:4:0:8/10/12位bpc最多反对32个16/20/24位音频通道,采样频率最高可达192kHz反对USB Billboard进行固件更新USB Type-C显示端口(DP)可选模式输出(接收器)USB Type-C标准1.2和向后兼容Type-C标准1.0反对所有USB Type-C通道配置(CC)一个CC端口,用于实现DP Alt模式的通信VESA DisplayPort TM(DP)V1.4兼容接收器反对1/2通道RBR/HBR/HBR2(5.4-Gbps)/HBR3(8.1-Gbps)数据速率输出内置高性能自适应均衡器反对1-MHz AUX通道反对程度向下兼容扩大(HBE)HDMI2.1变送器合乎HDMI标准2.1版TMDS数据速率高达6GbpsFRL数据速率高达12Gbps状态和管制数据通道TMDS和FRL模式,加扰以减EMI/RFI反对FRL FFE反对动态和动静HDR反对可变刷新率(VRR)、疾速媒体切换(QMS)、主动低提早模式(ALLM)其余反对高达400-KHZ的I2C主控和从控内部25Mhz XTAL接口HBM 4KV用于连接器引脚8*8 68引脚QFN封装,带电子焊盘电力与技术5V/1.8V零碎电压,集成3.3V LDO、1.2V LDO和0.9V LDO2.CS5466设计Type-C转HDMI8K30HZ或者TYPEC转HDMI4K144HZ高刷视频转换计划电路原理图如下:

June 21, 2023 · 1 min · jiezi

关于嵌入式:mrlibrary-开源嵌入式驱动框架

背景随着国产微控制器的崛起,市场上的微控制器品种越来越多。然而,以前的微控制器开发往往疏忽了整体框架和程序分层,导致更换微控制器型号往往须要更改应用层代码,这使得开发工作变得沉重且乏味。常见的开发方式大多分为两种:常见的开发方式通常分为两种:裸机编程和RTOS编程,因为两种形式的代码编写形式存在微小差别,因而在两种形式之间切换意味着须要进行大规模的工程批改。mr-library 的指标是帮忙开发者进步开发效率和代码通用性,升高平台迁徙的难度。 ---------- mr-library 简介mr-library 是一个嵌入式软件库,齐全采纳C语言编写,应用面向对象的设计办法,代码框架清晰,能够疾速移植到不同的平台。它包含以下局部: 内核层: mr-library 的外围局部,蕴含容器、对象、服务等。将各种对象注册到内核保护的容器中,使得利用更加高效有序。设施框架层: 提供对立的设施接口,将不同的设施接入到内核中。在应用层,仅需调用内核设施I/O接口即可拜访设施。硬件驱动层: 为设施框架层设施提供必要的驱动,当硬件更换时仅批改驱动层。组件层: 通过内核提供的API实现不同的性能。包含但不限于虚构文件系统、通用传感器模块、网络框架等。软件包: 可独立应用,无依赖的软件包。 ---------- 代码目录mr-library 的代码目录构造如下表所示: 名称形容bsp板级反对包device设施文件document文档driver驱动文件include库头文件module组件package软件包src库源文件---------- 内核内核中蕴含了容器、对象、服务等。 容器容器负责对立治理注册到内核中的对象。 容器原型struct mr_container{ struct mr_list list; /* 容器链表 */ enum mr_container_type type; /* 容器类型 */};容器链表:所有注册到容器的对象都将链接到容器链表上,当对象被移除容器时也将从容器链表上移除。容器类型:指定容器类型用以寄存指定类型对象。容器类型内核保护了以下几类容器: enum mr_container_type{ MR_CONTAINER_TYPE_MISC, /* 杂类容器 */ MR_CONTAINER_TYPE_DEVICE, /* 设施容器 */ MR_CONTAINER_TYPE_SERVER, /* 服务容器 */};对象对象原型struct mr_object{ struct mr_list list; /* 对象链表 */ char name[MR_CONF_NAME_MAX + 1]; /* 对象名 */ mr_uint8_t flag; /* 对象标记 */};对象链表:用于将对象注册到容器中。对象名:对象的名称,同一容器不容许呈现同名对象,不同容器容许对象重名。对象标记:用于标记对象状态。对象操作接口接口形容mr_object_find从内核容器查找对象mr_object_add增加对象到内核容器mr_object_remove从内核容器移除对象mr_object_move挪动对象mr_object_rename重命名对象服务事件服务事件服务器是一种异步事件处理机制,它通过事件散发和回调的形式,能够无效地进步零碎的异步解决能力、解耦性和可扩展性。 事件服务器蕴含两个次要组件:事件服务器和事件客户端。 事件服务器用于接管和散发事件,它外部保护一个事件队列用于存储待处理事件和一个事件列表用于存储注册的事件客户端。事件客户端用于解决特定类型的事件,它须要注册到事件服务器并提供一个回调函数。当事件产生时,事件服务器会将事件插入到其事件队列中进行缓存。事件服务器会周期性地从事件队列中取出事件进行散发,找到对应的事件客户端,而后调用其注册的回调函数进行事件处理。 事件服务原型/* 事件服务器 */struct mr_event_server{ struct mr_object object; /**< 事件服务对象 */ struct mr_fifo queue; /**< 事件队列 */ mr_avl_t list; /**< 事件链表 */};/* 事件客户端 */struct mr_event_client{ struct mr_avl list; /**< 事件链表 */ mr_err_t (*cb)(mr_event_server_t server, void *args); /**< 事件回调函数 */ void *args; /**< 事件回调函数参数 */};事件服务操作接口接口形容mr_event_server_find从内核容器查找事件服务器mr_event_server_add增加事件服务器到内核容器mr_event_server_remove从内核容器移除事件服务器mr_event_server_notify告诉事件服务器事件产生mr_event_server_handle事件服务器散发事件mr_event_client_find从事件服务器查找事件客户端mr_event_client_create创立事件客户端到事件服务器mr_client_delete从事件服务器移除事件客户端事件服务应用理论开发中,能够将工作拆分后,分成一个一个事件,最终将繁多工作事件合并到一个事件服务器中,交由事件服务器散发。 ...

June 7, 2023 · 2 min · jiezi

关于嵌入式:Arm-NN-成功适配-openEuler-Embedded提供高性能神经网络推理能力

近期,RISC-V SIG 实现了 Arm NN 在 openEuler Embedded 零碎的适配,于 2023 年 1 月合入零碎构建工程代码库,经测试验证可用,实现了神经网络减速库在 openEuler Embedded 嵌入式零碎上的减速和优化。 零碎构建工程下载地址:https://gitee.com/openeuler/yocto-meta-openeuler 反对 Arm NN 的 openEuler Embedded 零碎已向社区凋谢openEuler Embedded 是基于 openEuler 社区面向嵌入式场景的 Linux 版本,因为嵌入式零碎利用受到多个因素的束缚,如资源、功耗、多样性等, 所以通过嵌入式处理器内核进行机器学习成为了技术倒退须要,ARM 推出 Arm NN 减速库就是解决办法之一,将机器学习使用到嵌入式零碎中。提供高性能神经网络推理能力,反对边、端协同工作,晋升资源利用率。 指标检测是在嵌入式平台上运行机器学习的工作负载之一 以指标检测为示例,验证 ArmNN 的推理减速成果: 模型:yolov3 tiny(FLOAT32 量化)训练数据:COCO测试数据:640*480 H264 视频通过试验证实,在精度损失可承受范畴内,Arm NN 减速可达到百倍的性能晋升。如下图所示,其中横轴示意检测图片序号,纵轴示意推理耗时(单位:us): 注:musl-ref 是指基于 MuslC 的 Openeuler Embedded 且不做任何减速,musl-acc 是指基于的 Openeuler Embedded 且使能 ArmNN 的指令减速和优化。 为了适配 openEuler Embedded 零碎, Arm NN 软件需兼容 yocto-meta-openeuler,并在上做了很多筹备工作,如 tensorflow 的适配,Compute Library 的适配,flatbuffers 的应用等。openEuler Embedded Arm NN 的构建代码位于 meta-openeuler/recipes-arm 层上,社区开发者可依据须要自行构建 ArmNN 软件。 ...

June 1, 2023 · 1 min · jiezi

关于嵌入式:Musl-libc-库成功适配到-openEuler-Embedded推动欧拉嵌入式生态发展

近期,RISC-V SIG 在欧拉嵌入式操作系统上胜利实现了 musl libc 的适配,实现了应用 musl libc 库替换 glibc 库构建镜像的工作。目前,以 musl libc 为根底库编译的镜像已在 Raspberry Pi4 开发板上可用,这一成绩推动了 openEuler Embedded 的多态倒退。 编译镜像步骤阐明: https://openeuler.gitee.io/yocto-meta-openeuler/master/featur... Musl libc 库比照 glibc 库的局部长处它是一个专门为嵌入式零碎开发的轻量级 libc 库,以简略、轻量和高效为特色;musl libc 要小得多,因为 musl libc 专一于尽可能减少代码大小和函数调用开销,以进步性能;musl libc 库的源码绝对简略,封装性不强,不像 glibc 的代码一样臃肿,简单;musl libc 是 C 语言的一种规范函数库,代码洁净且高效,针对动态连贯(static linking)设计,适宜被用来制作可携的程序,且也很容易进行穿插编译(cross compile),编译出运行在不同零碎环境的程序。Musl libc 库比照 glibc 库的局部毛病POSIX 规范:musl libc 更加严格地遵循 POSIX 规范,而 glibc 则增加了一些扩大,以提供更多的性能和兼容性。错误处理:musl libc 实现的错误处理更严格和更标准,而 glibc 则有更多的错误处理选项,并且反对不同的语言环境。综上所述,如果你须要一个玲珑且速度较快的 C 规范库在 Linux 零碎上应用,则能够思考应用 musl libc;如果你要开发的某个性能的可执行程序须要在不同零碎环境下运行,则 musl libc 可满足你的需要;如果你想一次编译出能够在雷同 CPU 架构的 Linux 发行版上都运行的程序,musl libc 库将是最优的抉择,因为基于 glibc 库已编译好的函数库和运行档在不同的 Linux 上可能会呈现无奈共用的状况,。 ...

May 29, 2023 · 1 min · jiezi

关于嵌入式:2023上海国际嵌入式展-如何通过版本控制与IP管理建立嵌入式开发的单一可信数据源

2023年6月14日到16日,当先的DevSecOps解决方案提供商龙智将在2023上海国内嵌入式展(embedded world china 2023)A055展位亮相。 首次参展,龙智为企业带来全面的嵌入式行业解决方案,集成Helix Core、Helix QAC、Klocwork、Helix ALM、Methodics IPLM、TestComplete和ReadyAPI等产品,笼罩动态代码剖析、版本控制、自动化测试以及生命周期治理畛域,帮忙企业实现合规、可追溯、高效优质、繁多可信数据源的嵌入式软件开发。 立刻收费报名,并预约龙智专家>>> 本篇文章咱们将聚焦嵌入式开发中版本控制与IP治理的挑战,介绍咱们带来的解决方案和客户实例,帮忙您的嵌入式开发团队建设繁多可信数据源,实现IP复用。 嵌入式开发的挑战嵌入式开发——开发管制各种“非计算机”设施或机器的软件——十分具备挑战性,因为嵌入式开发团队须要在严苛的行业监管、受限的资源环境中进行开发,同时还须要保证系统的可靠性与安全性。这带来了多重挑战,比方: 硬件/软件难以合作:硬件和软件团队须要疾速验证和复用组件,但找到适宜设计的IP并进行验证是一个简单的过程;不足跨职能工具:只管团队之间的合作形式已扭转,但工具并未跟上。以硬件为主导的瀑布式开发方法经常与软件的麻利开发方法相冲突。嵌入式软件和硬件开发须要独立但并行的开发流程;开发安全性无奈保障:爱护有价值的IP的安全性很重要,团队须要治理拜访权限,并确保IP可追溯;可扩展性阻碍:不可扩大的数据管理办法让治理数据和确保安全性变得很艰难。这也让团队难以评估变更的带来的影响,并导致潜在的平安问题。版本控制和IP治理:建设繁多可信数据源,实现IP复用此次展会上,龙智带来的嵌入式行业解决方案,集成了Perforce的旗舰版本控制工具Helix Core与IP生命周期管理工具Methodics IPLM,帮忙您克服上述全副挑战。 数据管理:Perforce Helix Core是一款高性能的数据管理系统,专为大规模团队和简单我的项目而设计,帮忙嵌入式团队建设惟一的可信数据源,治理模仿、数字、基础设施和软件开发的各种资产。它提供高度牢靠的代码版本控制和协同开发性能,可能在单个存储库中治理大文件和二进制文件。 IP治理:Methodics IPLM是一个可扩大的IP生命周期治理平台,能够跨我的项目跟踪IP及其元数据,提供端到端的可追溯性,并轻松实现IP重用,帮忙您治理芯片零碎(SoC)设计中快速增长的复杂性,放慢产品设计,减速上市。 这些工具为您的整个我的项目提供了一个繁多的事实起源。通过弱小的缓存和复制架构,无论团队成员身在何处,他们都能够无缝、即时地拜访数据,这不仅进步了可复用性,还缩小了摩擦。 如果不呈现在Perforce(Helix Core)中,它就不会呈现在产品中。因而,对于咱们来说,对于咱们的产品来说,Perforce就是惟一的可信数据源。——Doug Quist,工程和信息技术总监,英伟达https://www.bilibili.com/video/BV11m4y1b7VX/?aid=698667310&ci... 欢送光临龙智A055展位,实现合规、可追溯、高效优质、繁多可信数据源的嵌入式软件开发除了版本控制, 龙智此次也将在展会上出现动态代码剖析、自动化测试以及生命周期治理等解决方案,帮忙企业实现合规、可追溯、高效优质、繁多可信数据源的嵌入式软件开发。 十分期待在2023上海国内嵌入式展上与更多的企业分享龙智的教训和解决方案。欢送各位来宾届时光临龙智A055展位,与龙智专家面对面交换,探讨嵌入式开发中的挑战、解决方案及最佳实际。现场还有业余报告和精美礼品附赠。 立刻获取收费参展机会 如何达到 展会地点:上海世博展览馆3号馆(上海市浦东新区国展路1099号) 轨道交通:轨道交通7号线(耀华路站)、8号线(中华艺术宫站3号口)可中转展馆。并有多条公交线路途经世博展览馆,左近设有站点:中国馆班车3线、中国馆班车1线等。

May 24, 2023 · 1 min · jiezi

关于嵌入式:龙智即将亮相2023上海国际嵌入式展为嵌入式开发提供全球领先解决方案

2023年6月14日到16日,当先的DevSecOps解决方案提供商龙智将在2023上海国内嵌入式展(embedded world china 2023)A055展位亮相。首次参展,龙智为企业带来全面的嵌入式行业解决方案,集成Helix Core、Helix QAC、Klocwork、Helix ALM、Methodics IPLM、TestComplete和ReadyAPI等产品,笼罩动态代码剖析、版本控制、自动化测试以及生命周期治理畛域,帮忙企业实现合规、可追溯、高效优质、繁多可信数据源的嵌入式软件开发。 嵌入式开发的挑战嵌入式开发——开发管制各种“非计算机”设施或机器的软件——十分具备挑战性,因为嵌入式开发团队须要在严苛的行业监管、受限的资源环境中进行开发,同时还须要保证系统的可靠性与安全性。这带来了多重挑战: 许多嵌入式软件和硬件开发团队都有严格的合规性要求。他们须要证实是否合乎编码标准和性能平安规范;他们还须要实现可追溯性,从需要到源代码到测试用例,从bug到bug的解决;此外,硬件和软件团队当初面临日益简单的代码库和存储库。他们须要繁多的可信数据源来无效地合作;并且嵌入式零碎往往非常复杂,须要全面的测试笼罩、高效的测试执行,能力确保零碎的可靠性和正确性,以及产品的及时交付。龙智集成世界支流工具,减速嵌入式开发龙智嵌入式行业解决方案聚焦动态代码剖析、版本控制、自动化测试以及生命周期治理畛域,帮忙您克服上述全副挑战。 动态代码剖析:应答嵌入式开发的合规性挑战 Helix QAC与Klocwork两款动态代码扫描工具可能帮忙您轻松让代码合乎行业严苛的规定,比方MISRA、CERT等。 Helix QAC针对C和C++语言,剖析代码深度且精确,在嵌入式开发行业成为首选,在合规要求严格的汽车、航空航天等行业中更是颇负盛名。 Klocwork反对多种语言,包含C、C++、C#、Java、JavaScript、Python和Kotlin。Klocwork辨认软件的平安防备、品质和可靠性问题,强制软件恪守规范。并且,它还提供不常见的差别剖析引擎,此引擎能在提供即时剖析后果的同时保障准确度,确保嵌入式软件合规。 咱们对Helix QAC印象粗浅,因为它发现了其余工具脱漏的问题。——Huw Jones,高级软件测试工程师,Protean Eletric 在2-3百万行代码上,咱们将Klocwork与多个竞争对手进行了比照。它很好地解决了代码库,并且以有用的形式解决了C++模板。相比之下,误报率也很低。版本控制、自动化测试以及生命周期管理工具共同提高开发效率除了动态代码剖析工具外,龙智嵌入式行业解决方案还提供版本控制、自动化测试以及生命周期管理工具,使嵌入式软件开发更加高效、牢靠且平安。Perforce的旗舰版本控制工具Helix Core与IP生命周期管理工具Methodics IPLM可能解决数据源不统一以及IP复用问题。——Alexander Much,软件系统工程主管,Elektrobit 版本控制、自动化测试以及生命周期管理工具共同提高开发效率 除了动态代码剖析工具外,龙智嵌入式行业解决方案还提供版本控制、自动化测试以及生命周期管理工具,使嵌入式软件开发更加高效、牢靠且平安。Perforce的旗舰版本控制工具Helix Core与IP生命周期管理工具Methodics IPLM可能解决数据源不统一以及IP复用问题。 https://www.bilibili.com/video/BV11m4y1b7VX/?aid=698667310&ci... Methodics IPLM和Helix ALM两款生命周期管理工具独特创立了一个残缺、可追溯的开发过程。SmartBear旗下的GUI自动化测试工具TestComplete和API自动化测试工具ReadyAPI,可能牢靠、精准地进行每一个测试。 欢送光临龙智A055展位,实现合规、可追溯、高效优质、繁多可信数据源的嵌入式软件开发将这些工具融入到嵌入式开发流程中,企业实现合规、可追溯、高效优质、繁多可信数据源的嵌入式软件开发这一指标将变得无比轻松。 十分期待在2023上海国内嵌入式展上,与更多的企业分享龙智的教训和解决方案。欢送各位来宾届时光临龙智A055展位,与龙智专家面对面交换,探讨嵌入式开发中的挑战、解决方案及最佳实际参考。现场还有业余报告和精美礼品附赠。 获取收费参展机会

May 17, 2023 · 1 min · jiezi

关于嵌入式:嵌入式分享合集

单片机能够代替 PLC 吗?答案是否定的。 第一次听到这个答案可能很多人都有疑难,单片机明明性能那么弱小,性能那么丰盛为什么不能取代 PLC 呢? 来理解一下单片机和 PLC 别离是什么,它们之间有什么区别。 单片机 单片机简称 MCU,是一种集成电路芯片,是采纳超大规模集成电路技术把具备数据处理能力的 CPU、随机存储器 RAM、只读存储器 ROM、多种 I/O 口和中断零碎、定时器/计数器等性能集成到一块硅片上形成的一个小而欠缺的微型计算机系统。 诸如手机、PC 外围、遥控器,至汽车电子、工业上的步进马达、机器手臂的管制等,都可见到 MCU 的身影。 单片机呈现的历史并不长,但倒退非常迅猛。它的产生与倒退和微处理器的产生与倒退大体同步,自 1971 年美国 Intel 公司首先推出 4 位微处理器以来,它的倒退到目前为止大抵可分为 5 个阶段。 单片机倒退的初级阶段(1971 年至 1976 年):1971 年 11 月 Intel 公司首先设计出集成度为 2000 只晶体管/片的 4 位微处理器 Intel 4004, 并配有 RAM、 ROM 和移位寄存器, 形成了第一台 MCS—4 微处理器, 而后又推出了 8 位微处理器 Intel 8008, 以及其它各公司相继推出的 8 位微处理器。 低性能单片机阶段(1976 年至 1980 年):以 1976 年 Intel 公司推出的 MCS—48 系列为代表, 采纳将 8 位 CPU、 8 位并行 I/O 接口、8 位定时/计数器、RAM 和 ROM 等集成于一块半导体芯片上的单片构造, 尽管其寻址范畴无限(不大于 4 KB), 也没有串行 I/O, RAM、 ROM 容量小, 中断零碎也较简略, 但性能可满足个别工业管制和智能化仪器、仪表等的须要。 ...

May 12, 2023 · 1 min · jiezi

关于嵌入式:直流电机控制与TB6612FNG驱动芯片

TB6612FNG 应用阐明要实现下面的调试和换向性能,咱们能够应用单片机实现的,然而单片机IO 的带负载能力较弱,而直流电机是大电流理性负载,所以咱们须要功率放大器件,在这里,咱们抉择了TB6612FNG。TB6612FNG 是东芝半导体公司生产的一款直流电机驱动器件,它具备大电流MOSFET-H 桥构造,双通道电路输入,可同时驱动2 个电机。兴许大家更相熟L298N,其实这两者的应用基本一致的。而且,相比L298N 的热耗性和外围二极管续流电路,它无需外加散热片,外围电路简略,只需外接电源滤波电容就能够间接驱动电机,利于减小零碎尺寸。对于PWM 信号输出频率范畴,高达100 kHz 的频率更是足以满足咱们大部分的需要了。以下是TB6612FNG 的主要参数: 最大输出电压:VM = 15V 最大输入电流:Iout = 1.2A(均匀)/3.2A(峰值) 正反转/短路刹车/停机性能模式 内置过热爱护和低压检测电路 VM 间接接电池即可,VCC 是外部的逻辑供电,个别给3.3 或者5V 都行,模块的3 个GND 接任意一个即可,因为都是导通的,STBY 置高模块能力失常工作。 实现下面的接线之后,咱们就能够开始管制电机了,上图中红色局部的5个引脚管制一路电机,蓝色局部的管制另外一路电机,这里只讲其中的A 路,B路的应用是一样的。AO1 和AO2 别离接到电机的+和-。而后通过PWMA、AIN2、AIN1管制电机。其中PWMA 接到单片机的PWM 引脚,个别10Khz 的PWM 即可,并通过扭转占空比来调节电机的速度。本文转自《数字空间WRITE-BUG》更多内容可看原文链接:https://www.writebug.com/article/550ff700-ca03-11ed-9893-0242...

April 22, 2023 · 1 min · jiezi

关于嵌入式:树莓派智能小车嵌入式项目

智能零碎中的嵌入式应用,上面是一篇搬运自{数字空间 WRITE-BUG}的智能小车我的项目。嵌入式零碎(Embedded System),是一种嵌入机械或电气系统外部、具备专一性能和实时计算性能的计算机系统。嵌入式计算机是面向利用、面向产品的、具备特定用处的计算机。它们没有刻意被制作成计算机的状态,往往以产品自身的模式展示在用户背后。本次试验应用树莓派作为开发平台,AlphaBot 作为开发载体,Python 作为开发语言,开发一种基于红外线遥控管制的、可主动避障的嵌入式智能小车零碎。更多我的项目以及程序源码可查看原文链接:https://www.writebug.com/code/0c74674b-c792-11ed-9e3a-6479f0e...

April 21, 2023 · 1 min · jiezi

关于嵌入式:电子元器件切开后原来是这样子的

罕用电子元器件的外面是什么样的,你见过吗?明天咱们一起来“揭秘”元器件的内部结构! 25种罕用元器件通过切割研磨后的横切面,一文全览! 1、金属膜电阻▼ 2、淡粉电阻▼ 3、电感▼ 4、二极管▼ 5、三极管▼ 6、LED▼ 7、贴片电容▼ 8、薄膜电容▼ 9、电解电容▼电解电容横切面▲电解电容俯切面▲ 10、瓷片电容▼ 11、钽电容▼ 12、按键▼ 13、滑动单刀双掷开关▼ 14、DIP开关▼ 15、双排插针▼ 16、干簧管继电器▼ 17、DE-9接头和插座▼ 18、电子管▼ 19、网络变压器▼ 20、纽扣电池▼ 21、驻极体麦克风▼ 22、七段数码管▼ 23、光耦▼ 24、耳机接头▼ 25、BGA封装▼

April 20, 2023 · 1 min · jiezi

关于嵌入式:STM32-公交站牌系统

一个stm32公交站牌零碎的我的项目,来自网上看到的一个人的毕业设计。适宜用来锤炼本人的嵌入式能力。这个我的项目大略是模仿一个公交车信息实时公布零碎,采集公交车信息,再公布在站台和挪动客户端,下方附上原文作者链接,原链接中蕴含了作者对我的项目的介绍和我的项目的代码,原文出自《数字空间》原文链接:https://www.writebug.com/code/0c56cd13-c792-11ed-bbd1-6479f0e...

April 20, 2023 · 1 min · jiezi

关于嵌入式:上海晶珩EDATEC如何用树莓派做一个像样的-NAS

MAKER: tobychui/译:趣无尽 Cherry(转载请注明出处) 用树莓派做网络存储服务器(NAS)的案例有很多,我也始终在寻找用树莓派 DIY NAS 所须要的各种零部件,要求是外观丑陋、节俭空间,然而满载而归。我所看到的很多案例都是用木板粘接,集成度较低的计划,其散热性和可靠性将受到影响,想想你多年收藏的电影资源和重要数据可能因而而失落,这是很难以承受的。因而我决定本人做一个真正的NAS计划,它不仅外观上长得更像专业级的NAS,其外部核心部件也都是市面上买到的和业余NAS等同性能的部件。树莓派仅作为一个低功耗的主机存在,来运行 NAS 操作系统。 最后的设计草图:在这个我的项目中,我不会应用任何专为树莓派 NAS 设计的部件。 相同,我将应用能够在电商平台上轻松找到的一些常见部件。 那么,开始吧! 资料清单Raspberry Pi(树莓派)3B+ × 1硬盘 × 若干热插播硬盘托架 × 若干电源治理开发板 × 1继电器 × 1按钮 × 若干LED × 若干亚克力板 × 若干电源线 × 若干热熔胶 × 若干双面胶 × 若干螺丝 × 若干 设计3D建模在Autodesk Inventor中设计NAS外壳,并测试它们是否适宜,查看每个组装点是否设计正确。NAS外壳分为三个局部。左侧局部用于电源治理板和树莓派3B +。你也能够应用树莓派3或2B,它们的打印面积是雷同。但应用树莓派3B +会更好一些,因为它更快。我稍后会具体阐明。左边局部是用于包容两个5英寸硬盘,装置形式如图所示。反面的额定7厘米的空间用于装置风扇,直流插孔和布线。3D模型文件,在我的项目文件库中下载。http://make.quwj.com/project/79 打印和组装 打印实现后,咱们能够开始组装外壳。外壳由后面提到的三个局部组成,将它们用五个M3螺钉和十个M3(用于顶部和底部螺孔的连贯)固定在一起。将按钮帽装置到位后,后续你就能够筹备电子元件了。 按钮和信号LED 按钮和LED通过一些简略的电路连贯,信号从树莓派的GPIO接到前面板。除了按钮装置有点辣手,其余都很简略。倡议你用胶水将电路板装置到外壳之前进行一些测试打印。确保按钮的品质良好,开合不便。在我的设计中,因为红色的LED须要5V电源,所以我增加一个电阻,并打算将LED 的VCC引脚间接连贯到电源治理板的5V输入上。你也能够应用树莓派上的3.3V GPIO引脚,不必额定减少电阻。 测试配件 1、右侧底部和顶部搁置了两个2mm厚的亚克力板。用于增强对两个热插播硬盘托架的反对,因为硬盘在插入托架后有点沉。2、应用了一个旧的USB硬盘驱动器,通常蕴含某种SATA转USB转换器电路板。对于我购买的那款,它装备了事后焊接的12V输出端口,能够反对3.5英寸硬盘驱动器的12V电源输出。我将它们连贯到两个HDD热插拔托架的末端,并将两根电缆连贯到它的末端。其中一根带2.1mm DC插孔的电源线用于12V输出,另一根mini USB接头的电源线用于数据传送和5V电源。两根电源线排列有序,都向底部蜿蜒并保留肯定空间。 硬盘的固定 将硬盘热插拔托架粘贴到外壳中。1、在金属支架的外框上粘贴双面胶带,插入并固定托架。2、在亚克力板和金属支架之间用强力胶粘合。记住将亚克力板上的纸取下来。实现后,右侧外壳中的两个插槽,你能够通过热插拔托架上的手柄进行关开。 测试适宜度 当初能够将硬盘插入托架了,它应该齐全适宜。 (如果没有,你应该思考是否托架不匹配)你可能会留神到右侧箱子顶部前面有两个圆形槽。这些是为USB电缆预留的。当初,你能够将电缆放入,这样看起来更整洁。 电源治理开发板 这是电源治理开发板。两头是一个Tinduino,它是一个定制版的Arduino,老本较低,此版本用于咱们实验室的开发。当然,你能够应用Arduino UNO进行此操作,并在按下按钮时敞开继电器。网上有很多教程能够教你如何制作这样的电路板,例如:https://www.instructables.com/id/Toggle-Switch-With-Relay/它是NAS的电源开关,所以你能够抉择你想要的格调。左边是降压转换器。它将树莓派和Arduino的电压从12V升高到5V。最初,从左到右的底部第三个端口是12V电源输出,HDD1为12V电源输入,HDD2为12V电源输入。 将所有货色组装在一起当初,将电源治理板与树莓派相连,如图所示。插入12V电源输出,所有都应该会跑起来。(如果没有,兴许你能够轻触按钮并激活Arduino继电器切换零碎) 装置操作系统并开始创立本人的NAS接口 当初拧上所有螺丝,插上电源线,你认为这样就好了吗?当然还没有。咱们依然须要装置软件。当初硬件的装置曾经全副实现。 因为该软件仍处于开发阶段,我倡议装置一些开源OS /NAS零碎,如FreeNAS或开放式媒体库。但如果要构建本人的NAS,我倡议从头开始。下一步,编写我本人的NAS操作系统!1、从树莓派网站装置Raspbian Lite。https://www.raspberrypi.org/downloads/raspbian/2、将其装置在SD卡上。我认为网上有很多教程,此内容我不在复述。https://shumeipai.nxez.com/2013/09/07/how-to-install-and-acti... ...

April 19, 2023 · 1 min · jiezi

关于嵌入式:容量王者超级电容容量为何这么大

“充电30秒,行驶5公里”的超级电容公交车,你坐过吗? 超级电容公交车,不难理解,它的能源起源是超级电容。电容是常见的电路元器件之一,多用于滤波、去耦等。但当初电容居然能驱动一辆车?!几乎颠覆所有人的认知! 的确,一般电容很难做到,然而超级电容能够!超级电容凭着疾速充电、大容量等长处,创始出电容驱动汽车的先河。据悉,每辆超级电容公交车底部都装有超级电容,而站台则被革新成带有充电桩的充电站。因为充电工夫仅需30秒,所以公交车在每次停站高低客的工夫内充电,就能够使车维持运行5公里。 那么问题来了,相比于一般电容,超级电容的容量为什么那么大? 一、容量王者——超级电容超级电容是一种通过极化电解质来储能的一种电化学元件,又名电化学电容,双电层电容器。和其它同样体积大小的电容相比,超级电容容量要大很多,一般电容容量为微法级,而超级电容容量达到法拉级。因而,超级电容被誉为“容量王者”、“黄金电容”。 超级电容实物图 二、为什么超级电容的容量可能这么大?首先搞明确电容容量是由什么决定?电容中贮存的电能来源于两块极板上积攒的电荷,电容容量的大小与两极板的正对面积和间隔无关。 计算电容容量的公式为: C=S4kd 是介电常数,S是电容两极板的正对面积,d是电容两极板之间的间隔(即介质厚度)。 由以上公式可知,两极板的正对面积越大,电容容量越大;两极板间的间隔越小,电容容量越大。所以,若想取得较大的电容量,贮存更多的能量,必须增大面积S或缩小极板间隔d,但对于一般电容而言,空间非常无限,个别体积都不大,所以一般电容的储电量无限。 一般电容构造 但超级电容不一样,超级电容属于双电层电容器,它采纳活性炭资料制作成多孔电极,同时在绝对的碳多孔电极之间充填电解质溶液,以取得超大的容量。 当在超级电容两端施加电压时,绝对的多孔电极上别离汇集正负电子,而电解质溶液中的正负离子将因为电场作用别离汇集到与正负极板绝对的界面上,从而造成两个集电层,相当于两个电容器串联,因为活性碳资料具备≥1200m2g的超高比表面积(即取得了极大的电极面积S),而且电解液与多孔电极间的界面间隔不到1nm(取得了极小的介质厚度d)! 超级电容充电过程 依据后面的计算公式能够看出,这种双电层电容器比传统的物理电容的容值要大很多,微小的表面积加上电荷间极小的间隔,使得超级电容具备很大的容量,比容量能够进步100倍以上,从而使单位分量的电容量可达100Fg。超级电容单体的容量可从1法拉至几千法拉不等。 三、前景广大!超级电容4大利用场景除了容量大,超级电容还具备多种劣势,包含刹时关上、疾速充电等能力,不须要太简单的充电电路等,因而被利用在多个畛域中。 1、公共交通工具电动汽车因为采纳了非凡的工艺,超级电容的等效电阻很低,电容量大且内阻小。使得超级电容能够有很高的尖峰电流,因而具备很高的比功率,高达蓄电池的50~100倍,可达到10kWkg左右,这个特点使超级电容非常适合于短时大功率的利用场合,比方电动汽车。 超级电容和其余储能元件组成的复合电源零碎兼顾了其余储能元件的高比能量和超级电容的高比功率的长处,能够更好地满足电动车启动和减速性能的要求,并能进步电动车制动能量的回收效率。减少续驶里程。目前,超级电容能够和蓄电池、燃料电池、飞轮电池等组成复合电源零碎。在纯电动车和混合能源电动车上采纳超级电容一蓄电池复合电源零碎,将是电动车畛域将来倒退的重要方向之一。 2、风力发电风力发电是以后倒退最快的可再生能源发电技术。然而,风能是一种随机变动的能源,风速变会导致风电机组输出功率的稳定,对电网的电能品质产生影响。因而,钻研并网风电场的输出功率调节成为风力发电技术中的重要问题。附加储能设施既能够调节无功功率、稳固风电场母线电压,又能在较宽范畴内调节有功功率,是以后的一个钻研热点。 随着制作技术的倒退,超级电容器的能量密度有了很大进步,在一些短时电力储能场合曾经进入了商业化利用阶段。利用超级电容器存储能量,平抑风电场输出功率重要频段的风电稳定具备良好的利用前景。 3、微网电网网运行中,针对总发电容量小于总负荷需要,同时因内部故障而进入孤岛运行时,为了爱护重要负荷必须切除主要负荷,如果内部故障为瞬时性故障,则在短时间内微网又会因刹时故障隐没而重合到主网,并重启主要负荷。从供电稳定性和经济性的角度来看,对主要负荷不利,因而在内部故障后,能够采纳超级电容器向孤岛运行的微网提供短时功率缺额,维持所有负荷并期待故障修复。 4、修建电梯节能我国建筑物的能耗约占全国总能耗的28%左右。其中电梯的用电量仅次于空调,远高于照明、供水等的用电量,电梯的能耗曾经引起业界高度重视,因而电梯的节能具备十分重要的现实意义。 因而钻研开发高效能的电机拖动零碎,是电梯节能的要害。能量回馈型节能电梯已有较为成熟的技术,但因其价格因素以及对电网的影响,推广尚有肯定难度。超级电容器与直流母线间接相连排汇回馈能量超级电容器间接与变频器的直流母线连贯。超级电容在大功率电器电子产品尤其是电梯产品中具备良好的利用成果和劣势,其利用前景无可限量。 结语 近年来,超级电容器的技术倒退迅速,其电极资料从活性炭也不断更新迭代,倒退为碳纳米管和石墨烯等新型碳纳米材料体系;器件的构造由原先的对称型一直朝着非对称和电池、电容混合型等多体系倒退;器件的状态也从刚性、不通明向着柔性、透明化倒退。科技扭转将来,置信超级电容的呈现与倒退,将会继续一直地变革古代工业技术,扭转咱们生存的世界。

March 28, 2023 · 1 min · jiezi

关于嵌入式:openEuler开源新项目嵌入式实时虚拟机ZVM介绍

嵌入式实时虚拟机ZVM(Zephyr-based Virtual Machine)是由湖南大学嵌入式与网络计算湖南省重点实验室(以下简称“湖大嵌入式实验室”)主任谢国琪传授主导设计并开发的虚拟化软件。该软件基于实时操作系统(RTOS)Zephyr开发,可同时启动Linux与Zephyr 2个Guest OS,从而在同一硬件平台上实现混合内核部署。 2023年2月,湖大嵌入式实验室正式将该我的项目开源至openEuler社区。 1. 背景介绍 嵌入式实时虚拟化技术是一种容许在单个硬件平台上同时运行多个操作系统、并放弃确定性和工夫要害性能的技术,该技术可为嵌入式零碎开发带来许多益处,例如硬件整合、零碎隔离、零碎灵便可靠性、安全性和可扩展性等。嵌入式实时虚拟化可反对智能汽车、数控机床及5G设施等高级利用。 开发嵌入式实时虚拟化软件面临着一些挑战。第一个挑战是如何确保不同Guest OS间的隔离和安全性,尤其是当它们具备不同级别的关键性和可信度时。第二个挑战是如何在不同Guest OS间无效地共享或调配 I/O 设施,这可能须要设施模仿或直通机制。第三个挑战是如何确保作为Guest OS运行的RTOS具备低提早和高吞吐量。 嵌入式实时虚拟化软件须要通过提供强制的隔离和平安、高效的中断解决、灵便的 I/O 设施管理机制及硬件反对来应答这些挑战。基于架构硬件虚拟化反对与虚拟化主机拓展反对,湖大嵌入式实验室开发了基于Zephyr RTOS的虚拟化软件ZVM,实现了Guest OS间的隔离、设施调配及中断解决,保障了零碎的平安与实时。 2. 技术路线 ZVM总体性能须要关注三个局部:平安隔离、设施治理和零碎性能晋升。 (1)平安隔离: 利用虚拟化技术实现不同特权级的利用反对,确保不同Guest OS间的隔离和平安,尤其是当它们具备不同级别的要害级时。为每个Guest OS调配不同的虚拟地址空间和虚构设施,实现虚拟机间的隔离以保障系统安全。 (2)设施治理: 应用反对设施模仿和直通机制的管理程序,在不同Guest OS之间无效共享或调配I/O设施。对于中断控制器需独占的设施,用齐全虚拟化的形式进行调配,对于UART等非独占的设施,应用设施直通的形式进行调配。 (3)零碎性能晋升: 在处理器方面,应用反对ARM64硬件辅助虚拟化拓展技术来缩小上下文开销;在内存治理方面,应用基于硬件的两阶段地址转换地址转换性能开销;在中断方面,应用基于硬件的中断注入机制来缩小上下文开销和中断时延。 3. 零碎架构 ZVM整体零碎架构如下图所示,通过在Zephyr RTOS中退出虚拟化模块,实现CPU虚拟化、内存虚拟化、中断虚拟化、定时器虚拟化和I/O虚拟化。ZVM反对两种类型的Guest OS,即通用的Linux操作系统和Zephyr RTOS。 (1)CPU虚拟化。 CPU虚拟化模块的次要性能是为每个Guest OS的vCPU虚构出一个独自的隔离上下文。每个vCPU均作为一个线程存在,由ZVM对立调度。为了进步vCPU的性能,ARM64架构为ZVM提供了VHE反对,VHE能够使Host OS迁徙到EL2特权模式,而无需扭转操作系统原有代码。VHE次要实现了ARM寄存器重定向,能够在不批改Zephyr RTOS内核代码的状况下,将其迁徙EL2层开发ZVM,既升高了零碎冗余,又进步了零碎性能。 (2)内存虚拟化。 内存虚拟化模块的次要作用是实现Guest OS间内存地址的隔离。零碎须要隔离不同Guest OS的内存空间,监控Guest OS对理论物理内存的拜访,以爱护物理内存。为了实现该性能,ARM64提供了两阶段的地址查找策略。第一阶段是从Guest OS的虚拟地址到Guest OS的物理地址转换,第二阶段是从Guest OS的物理地址到Host OS的物理地址转化。ARM专门为第二阶段转换提供独自的硬件,以进步地址翻译性能。 (3)中断虚拟化模块。 中断虚拟化应用ARM的通用中断控制器(GIC)设施,并基于该设施实现虚构中断配置。Guest OS的中断对立路由到ZVM,而后ZVM会将它们调配给不同的vCPU。虚构中断的注入通过GIC中的Virtual CPU接口或List Register具体实现。 (4)定时器虚拟化。 定时器虚拟化为每个CPU定义了一组虚构定时器寄存器,它们在预约工夫后独自计数并抛出中断,由Host OS转发给Guest OS。同时,在Guest OS切换过程中,虚构定时器会计算Guest OS的理论运行工夫,并对Guest OS退出的工夫进行弥补,为Guest OS提供定时器服务。 (5)设施虚拟化。 在设施虚拟化方面,ZVM采纳ARM中的Memory-Mapped I/O (MMIO)办法将设施地址映射到虚拟内存地址,构建虚构设施空间,实现Guest OS对设施地址的拜访。在具体实现上,ZVM对立构建一个虚构的MMIO设施,在Guest OS创立过程中将该设施调配给指定的Guest OS,实现I/O虚拟化。此外,对一些非独占设施,ZVM应用设施直通的形式实现设施的拜访。 ...

March 28, 2023 · 1 min · jiezi

关于嵌入式:接地电阻要小于4你知道是为什么吗

 三头插座、三头插头,置信大家都不生疏啦~~ 日常生活中,很多家用电器像冰箱、洗衣机、空调等应用的都是三头插头,其电源线都是三芯的。实际上,应用个别市电的电器只有有零线和前线两根就能够失常工作了,多进去的这根线是地线,也就是说这些电器必须要接地工作,此时接地电阻就至关重要了。 接地电阻个别不大于4 接地电阻是电流由接地装置流入大地再经大地流向另一接地体或向远处扩散所遇到的电阻,作用是向大地放电,以保障平安。很多家用电器,咱们在应用过程中,往往会接触到电器的壳体,比方冰箱开关门、洗衣机开关门等。但一旦电器产生故障,壳体会带上肯定的电压,当人接触壳体时会产生电击,非常危险,因而通过接地电阻把电引向大地是十分有必要的。对于接地电阻,咱们心愿越小越好。依据欧姆定律,电压肯定时,电阻与电流成反比;因而,工作电压确定的状况下,接地电阻越小,能通过的电流就越大,电流泄放成果越好。如果漏电的话,电就全副从接地的地线上传到公开了。 接地电阻越小越好,那多小才合格呢? 一般而言,接地电阻应不大于4。供电接地系统明确规定,在380/220伏低压零碎中,接地电阻不大于4。但当容量在100千伏安以下时,接地电阻则可放宽至不大于10。而对于共用接地体(联结接地),更是要求接地电阻不大于1。 为什么规定低压零碎的接地电阻不大于4?接地电阻为5不能够吗? 5还真不能够,容易呈现平安问题。这是因为零碎如果产生故障,故障电流个别不会大于10A,因而当接地电阻为4时,流过接地电阻时产生的故障电压为4*10=40V。而按标准规定,在失常和故障状况下,任何两导体间或任一导体与地之间的电压均不得超过交换(50~500Hz)有效值50V。这意味着小于50V的故障电压是较平安的,简直不会引起人体电击事变,因而接地电阻的最高限值就定在了4。 接地电阻的利用场景 具体利用来看,接地分好多种场景,常见的接地包含: 防雷接地(也就是常见的避雷针):接地电阻越小,一旦蒙受雷击时雷电通过接地线向大地放电就越快,也就是越平安。 电器设备平安地(如洗衣机机壳接地):很多家用电器尤其是大电器像冰箱、洗衣机、空调等,都须要接地应用(机壳接地)。 当机壳漏电时,接地电阻越小,漏电就会越多通过接地线传入大地。但如果接地电阻太大(如果大过人体电阻),当人触摸机壳时,人体就成了接地线,电流就从人体流入大地,导致人体触电,相当危险。 还有电子设备外部的工作接地等等,都是接地电阻越小越好。有一些电子设备会产生静电,如果接入了接地电阻,可能避免因为静电而产生的危险。

February 23, 2023 · 1 min · jiezi

关于嵌入式:最初设计时就会避开钽电容这是为什么呢三大理由告诉你原因

 100uF的钽电容与100uF的陶瓷电容的价格相差多少,你晓得吗? 10倍!钽电容的价格大略是陶瓷电容的10倍。 1、钽电容老本较高 如果电容容量需要在100uF以下,在耐压满足的前提下,咱们当初绝大多数状况会选用陶瓷电容,而不必钽电容,就是因为钽电容贵。 钽电容的次要资料是钽,这种金属是稀缺金属,寰球已探明储量不多,因而价格很贵。所以钽电容价格也就很贵,个别只有对价格不敏感的高端产品才会应用。 此外,钽电容岂但贵,性能比照其余电容也没有相对的劣势。 2、钽电容容量较小 钽电容属于电解电容的一种,但相比于一般的电解电容,钽电容应用金属钽做介质,不像一般电解电容那样应用电解液,因而钽电容容量受到限制达不到很高,容量绝对较小。 因而,在体积容许的状况下,如果对电容容量要求高,多会选用铝电解电容。这里留神的一个点是,钽电容的电容量做不到特地大,但它的比容量却是十分高的,即单位体积内的电容量十分大。 3、钽电容耐电压/电流能力较弱 除了价格较贵、容量较小外,钽电容的耐电压及电流能力也较弱,只能用于一些电压和电流小的中央,像CPU插槽左近就不会看到钽电容的身影。 因为钽电容耐过压能力不好,个别应用钽电容时会降额外电压40%,即10V耐压的钽电容,施加电容最大不超过6V。而且钽电容耐电流纹波不太行,很容易过热;若钽电容生效还极容易导致短路,把PCB烧穿,因而,单板电源入口和开关电源上个别不必钽电容。 综上,因为价格和性能方面的起因,钽电容在个别利用场景下并没有太多绝对优势。在绝大多数状况下,铝电解电容和陶瓷电容搭配应用就足够了,如果要求更高些,还有高分子聚合物电容可选用。高分子聚合物电容的损耗极低,具备现实的高频低阻抗个性,所以被广泛应用于退耦、滤波等电路中,特地是在高频滤波电路中体现非常优良。 4、什么时候选用钽电容? 既然钽电容这么多毛病,个别状况下又不选用它,那它存在的理由是什么呢? 存在即正当。钽电容只管在电容器中占比拟低,应用的场景也不是特地宽泛,但其具备本身十分显明的特点,在一些极其工作环境下,钽电容甚至是惟一的抉择。 温度范畴要求比拟宽的场景:钽电容因为外部没有电解液,很适宜在低温下工作;钽电容在零下25度到125度均可失常工作,工作温度范畴很宽。 集成度比拟高的场景:钽电容器的工作介质是在钽金属表面生成的一层极薄的五氧化二钽膜。此层氧化膜与组成电容器的一端极联合成一个整体,不能独自存在。因而钽电容单位体积内具备十分高的工作电场强度,所具备的电容量特地大,即比容量特地高,因而特地合适于小型化、集成度比拟高的场景,比方用于铝电解电容占的面积比拟大,陶瓷电容容量不够的状况。 稳定性、精度要求特地高的场景:钽电容的容值的温度稳定性比拟好。因而,在一些耦合、滤波的场景中,如果对相位和滤波的频率特性、容量精度都要求比拟高时,会选用无极性的钽电容。比方高音质要求的音频电路设计。 长寿命场景:钽电容具备主动修复或隔离氧化膜缺点的个性,使氧化膜介质在任何时候都能失去强化和复原,不会造成间断的累积伤害。这种独特自愈性能,保障了其长寿命和可靠性的劣势。这一点,铝电解电容因为电解质枯竭,寿命更短。 其余特定场景:钽电容具备低劣的性能,体积小且电容大,它在电力滤波器、交换旁路等方面简直没有竞争对手。例如在大容量,然而须要低ESL的场景,咱们就选用钽电容。 结语: 整体来看,钽电容尽管有贵、容量较小、耐电压性能不够好的毛病,然而相比电解电容,钽电容寿命更长,对极其温度的耐受性更好,体积下面也更容易做小;比照陶瓷电容,钽电容的电容值稳固,随温度和施加电压的变动不显著,工作温度范畴更宽。因而,钽电容实用于储能、滤波等电路,大量用于高牢靠电子设备。

February 20, 2023 · 1 min · jiezi

关于嵌入式:电阻为什么都是47k51k而不是整数5k

 很多刚开始接触电路设计的小伙伴,可能会对电阻值感觉十分困惑,为什么通用的规范电阻阻值不是整数?例如通常是4.7k、5.1k,而不是5k。 因为电阻是应用指数分布来设计生产的,即遵循国际电工委员会(IEC)定义的规范电阻值零碎。规范电阻值零碎蕴含了多种系列的电阻值,包含E3、E6、E12、E24、E48、E96、E192系列。 比方: E6系列电阻的公比 10^(1/6)≈1.5 E12系列电阻的公比 10^(1/12)≈1.21 下图为具体的规范阻值表: 但问题来了,规范电阻生产为什么依照指数分布呢? 电阻阻值散布次要是出于生产方式和老本的考量,对于电阻生产厂商来说,如果设置的阻值类型越多,那么所须要的产线就越多,那就须要更多的工人,摊派到每个电阻上的老本就回升了。 电阻在理论生产制作中,不可能齐全准确,总是会有一些误差。比方一个100的电阻,如果标注误差是1%,那么这个电阻在99~101之间就都是容许的。因而,在上个世纪,美国电子工业协会就定义了一个规范电阻值零碎。 为了解这套规范电阻值零碎,咱们拿10%精度的电阻来举例说明。如果咱们曾经生产了一个100的电阻,那咱们就没必要做105的电阻,因为100电阻的精度范畴是90~110;同理,咱们第二个须要生产的电阻应该是120,因为120电阻的精度范畴是110~130;以此类推,对于100到1000的电阻,咱们只须要生产100、120、150、180、220、270、330等12个电阻值即可,不必每个阻值的电阻都生产。由此,通过缩小产线上电阻阻值的品种数,电阻生产成本得以升高。 事实中很多数值设计都会应用指数关系,比方人民币有1元、2元、5元、10元,然而没有3元、4元,这是因为用1、2、5就能够不便的组合出1~10的各种数值,这样能够缩小面值的品种,又能方便使用。同理的还有笔芯粗细的0.25、 0.35、 0.5、0.7。 而且电阻阻值指数分布能让应用的人在误差范畴内寻找到适合的电阻阻值。电阻阻值如果应用指数分布,误差百分比确定,那阻值在加减乘除后的误差也会确定。

February 16, 2023 · 1 min · jiezi

关于嵌入式:技术干货开关电源噪声的种类来源和抑制方法解析

开关电源的噪声及拟制办法 开关电源因为其体积小,重量轻和效率高的显著长处而失去广泛应用。但它也有固有的毛病,即开关噪声、尖刺大。这种噪声和尖刺不仅影响电路的失常工作,而且还会烦扰邻近的电子设备,寻求减小开关电源噪声及其尖刺的办法,在理论利用中有着重要意义。本文结合实际就开关电源噪声品种及产生的原理进行剖析的同时,给出几种克制噪声的办法。 一、噪声的品种 开关电源噪声可分为两大类: 一是开关电源外部器件造成的烦扰。 二是外界因素影响而使电源产生的烦扰。 产生噪声的起源很多,如外来烦扰的雷电、机械振动、接触不良等,另外电路设计不当,元器件的参数抉择不当及整体构造布局、或布线不合理等都会使电源噪声增大。 二、噪声的起源 1、开关管及整流管 开关管和整流管在开明及关断转换过程中,在微秒量级回升和下降时间内的大电流变动所产生的射频能量成为噪声的次要起源。因为频率比拟高,它以电磁能的模式间接向空间辐射,或者以烦扰电流的模式沿着输入输出端导线传送。 2、电源外部寄生电容 开关电源产生噪声的另一个起源是外部寄生电容在开关状态下忽然充放电,尤以变压器寄生电容、半导体器件和散热器之间的电容以及导线到机架之间的电容为突出。这些电容总是存在的,咱们只能通过正当的设计布局以减小噪声,并尽量管制噪声的传输路径、 3、元器件个性变动 开关电源工作在较高的频率,会使低频元器件个性发生变化,由此产生噪声。 4、高频变压器 变压器是一个大的噪声源,在开关电源里它用作隔离与变压。但在高频状况下,它的隔离是很不现实的,变压器层间的分布电容使开关电源中的高频噪声很容易在高级与次级之间传递。变压器对外壳的分布电容造成另一条高频通道,而变压器四周空间产生的电磁场更容易在其它的引线上耦合成噪声。 三、噪声产生的起因 1、 高频变压器高级T1A、开关管Q1和滤波电容C1形成高频开关电流环路,可能会产生 较大的空间辐射。如果电容器滤波有余,则高频电流还会以差模形式传导到输出交流电源中去。原理图简化如下: 2、高频变压器次级T1C、整流二极管Ds、滤波电容Cout形成高频开关电流环路也会产生空间辐射。同样如果滤波电容有余,则高频电流将以差模模式混在输入直流电压上向外传导(如图1)。 3、高频变压器的高级与次级之间存在分布电容Cs,高级的高频电压通过这些分布电容将间接耦合到次级下来,在次级的二条输入直流电源线上产生同相位的共模噪声。如果二条线对地的阻抗不均衡,还会转变成差模噪声。 4、输入整流二极管Ds会产生反向浪涌电流。二极管在正向导通时PN结内的电荷积攒,二极管加反向电压时积攒电荷将隐没并产生反向电流。因为开关电流需经二极管整 流,二极管由导通转变为截止的工夫很短,在短时间内要让贮存电荷隐没就产生了反向的浪涌电流。因为直流输出线路中的分布电容,散布电感,浪涌引起了高频衰减振荡,这是一种差模噪声。 输入整流二极管Ds的工作电流波形 5、开关管Q1的负载是高频变压器的初级线圈T1A,是理性负载,所以开关管关断时管子两端会呈现较高的浪涌尖峰电压,此尖峰电压产生的噪声会传导到输入输出两端去。 从上述剖析能够晓得开关电源中的噪声干扰源很多,烦扰路径也是多种多样的,影响较大的噪声干扰源能够演绎以下三种: 1) 二极管的反向归复工夫引起的烦扰。 2) 开关管工作时产生的谐波烦扰。 功率开关管在导通时流过较大的脉冲电流,在截止期间,高频变压器绕组漏感引起的电流渐变,会产生尖峰烦扰。 3) 交换输出回路产生的烦扰。 开关电源输出端整流管在反向归复期间也会引起高频衰减振荡产生烦扰。个别在整流电路之后总要接比拟大的滤波电容,因为整流管的导通角小,会使交换输出侧的交换电流产生畸变,影响了电网的供电品质。 四、克制噪声的办法 造成电磁干扰的三要素是干扰源、流传路径和受扰设施,因此克制电磁干扰也应该从这三个方面着手。首先应该克制干扰源,间接打消烦扰起因;其次是打消干扰源与受扰设施之间的耦合和辐射,切断电磁干扰的流传路径;三是进步受扰设施的抗扰能力,升高其对噪声的敏感度。 电路上的措施 开关电源产生电磁干扰的次要起因是电压和电流的急剧变动,因而尽可能地升高电路中电压和电流的变化率(du/dt,di/dt)。采纳排汇电路也是克制电磁干扰的好方法。排汇回路的基本原理就是开关断开时为开关提供旁路,排汇蓄积在寄生散布参数中的能量,从而克制烦扰产生。罕用的排汇电路有RC,RCD,LC等无源排汇网络和有源排汇网络。 具体措施如下: 1、在交流电输出端加电源滤波器,滤波器的电路图形如下图。其中L1,L2,Cx用于克制差模噪声,Cx个别对低频段(150K—数M之间)的EMI防制无效,一般而言Cx越大,EMI克制成果越好(但价格越高)。如Cx的值在0.22uF以上(蕴含0.22uF),安规规定必须要有洩放电阻。LG1,Y1,Y2是克制共模噪声,其中LG1线圈数越多(线径绝对细一些),EMI防制成果越好,但温升可能会高。Y-CAP会影响EMI个性,一般而言越大越好,但须思考漏电流和价格问题,漏电流必须合乎安规要求。 2、在电源的输入端加装共模噪声滤波器。在输入线上套上铁氧体磁环,做成共轭流圈,再装高频电容,这样能够克制局部共模噪声。加大输入滤波电感的电感量和滤波电容的电容量,能够克制差模噪声,多个电容并联比单个电容的克制成果更好。 3、输入整流二极管采纳多个二极管并联来分担负载电流、抉择具备反向归复电流呈软个性的整流二极管、适当升高开关管的开明速率、减小高频变压器的漏感并确保它不饱和等都是克制噪声的无效伎俩。 4、在高频变压器的原边、副边、开关管的VDS之间,以及输入整流二极管上加装RC排汇网络,克制电压尖峰和浪涌电流。或在输入整流二极管上串磁环,以此来克制二极管的反向浪涌电流,其实此处用RCD排汇会比用RC排汇成果较好。用RCD排汇,其整流管尖峰电压能够压得更低,而且排汇损耗更小。 5、PCB板设计时,尽量减小高频回路的面积,缩短高频线号线。在整机布线时还应留神: 不要把开关电源的输出交换电源线和输入直流电源线靠在一起,更不能捆扎 在一起,同时尽可能的远离噪声源。输入直流电源线最好是双绞线,至多应紧靠在一起走线。电源的输入输出电源线应尽可能远离管制、驱动电路中的信号线。6、尽量减小开关管集电极与散热片之间的分布电容。能够选用低介电常数的绝缘垫片,并适当的减少绝缘垫片的厚度。必要时,在绝缘垫之间插入薄铜板作为静电屏蔽用。 7、屏蔽,管制开关电源产生烦扰辐射的又一个办法是屏蔽,目标是切断电磁波的流传路径,用电磁屏蔽的办法电磁干扰问题不会影响电源失常工作。为避免脉冲变压器的磁场泄露,能够利用闭合环造成磁屏蔽,另外还要对整个开关电源进行电场屏蔽。屏蔽应思考散热和通风问题,屏蔽外壳上的通风孔最好为圆形多孔,在满足通风的条件下,孔的数量能够多,每个孔的尺寸要尽可能小。接缝处要焊接,以保障电磁通路的连续性,若对电场屏蔽,屏蔽外壳肯定要接地,否则,将起不到屏蔽成果。若对磁场屏蔽,屏蔽外壳则不需接地,对非嵌入的外置式开关电源的外壳肯定要进行电场屏蔽,否则,很难通过辐射骚扰测试。

February 8, 2023 · 1 min · jiezi

关于嵌入式:看门狗

定义看门狗的实质是一个定时器,在启动后,须要在肯定工夫内再给它一个信号,俗称“喂狗”,如果没有按时“喂狗”,阐明MCU可能处于非正常状态,这时看门狗就向MCU发送个复位信号,使整个零碎重启,从新进入失常的工作状态。看门狗命令在程序的中断中领有最高的优先级。 独立看门狗( Independent Watchdog, IWDG) 时钟:独立看门狗的时钟源来自LSI(外部低速时钟),意味着不受内部晶振电路影响,同时就算零碎主时钟产生故障时,也能够失常工作。应用外部晶振,也象征精度并不高,因而只适宜利用在对工夫精度要求比拟低的场合。 计数:独立看门狗的计数器是一个12位的递加计数器,计数最大值为0xFFF,当计数器递加到0时,就会产生一个复位信号,重启整个零碎。如果在递加到0之前,将重装载数值写入递加计数器,就会由重装载数值开始递加到0,如此重复,就永远不会到0,就不会产生复位信号,这个重装载计数值写入递加计数器的过程就叫“喂狗”。 重装载数值来自重装载寄存器( IWDG_RLR), 这个值大小决定独立看门狗的溢出工夫(复位倒计时)。 /** STM32* 函数名: void IWDG_Init(uint16_t period)* 输出参数: period-设置喂狗周期,单位 ms* 输入参数:无* 返回值:无* 函数作用:初始化独立看门狗的喂狗工夫* 刷新工夫计算: Prescaler/LSI*Reload*/void IWDG_Init(uint16_t period) { hiwdg.Instance = IWDG; // 抉择独立看门狗 hiwdg.Init.Prescaler = IWDG_PRESCALER_256; // 设置预分频 hiwdg.Init.Reload = 40000/256*period/1000; // 设置重装载值 if (HAL_IWDG_Init(&hiwdg) != HAL_OK) // 初始化独立看门狗 { Error_Handler(); }} 总结:独立看门狗蕴含一个12位递加计数器,从用户定义的t开始递加到0,必须在t~0之间喂狗,否则复位重启。 窗口看门狗( Windowwatchdog, WWDG) 窗口看门狗,蕴含一个7位递加计数器,从用户定义的t开始递加到64,必须在t~64之间喂狗,在t之前或者64之后喂狗,也会导致复位重启。这里的t值,称之为窗口下限,由用户自定义设置;这里的64,称之为窗口上限,是零碎固定的。窗口看门狗计数器必须在上窗口和下窗口之间被刷新(喂狗),不能过早,也不能过晚,这也就窗口看门狗中的“窗口”含意。 时钟:窗口看门狗的时钟源来自PCLK1(最高36MHz),通过4096分频,再通过WWDG_CFG的Bits[8:7]位WDGTB分频失去, WDGTB反对2^n分频( 0≤n≤3)。 计数:窗口看门狗的计数器是一个7位的递加计数器,计数最大值为0x7F,当计数器递加到0x3F时,就会产生一个复位信号,重启整个零碎。当递加计数器递加到0x40时,如果使能了提前唤醒中断( WWDG_CFG的Bits[9]位EWI设置为1),则会产生提前唤醒中断,在该中断能够保留重要数据或者向WWDG_CR从新写入新计数器值,实现喂狗操作。一旦0x40变为0x39,零碎将进行复位,因而必须在一个窗口看门狗计数周期内实现喂狗操作。WWDG_CR的Bits[7]位WDGA为窗口看门狗使能位,当为1时,窗口看门狗才工作。 窗口:窗口看门狗的WWDG_CFG的Bits[6:0]位为窗口上边界值,该值应小于计数器最大值0x7F,大于窗口下边界值0x3F。 窗口看门狗初始化“HAL_WWDG_Init()--HAL库零碎函数”函数会回调“ HAL_WWDG_MspInit()--HAL库零碎函数”进行硬件相干初始化。 窗口看门狗中断解决 使能中断后,当窗口看门狗计数到0x40时,会进去提前唤醒中断,在该中断处理函数里,用户能够保留数据或喂狗。 /** 函数名: void WWDG_IRQHandler(void)* 输出参数:无* 输入参数:无* 返回值:无* 函数作用: WWDG 的中断处理函数*/ void WWDG_IRQHandler(void) { HAL_WWDG_IRQHandler(&hwwdg); // HAL库的零碎函数} /** 函数名: void HAL_WWDG_EarlyWakeupCallback(WWDG_HandleTypeDef* hwwdg)* 输出参数: hwwdg-WWDG 句柄* 输入参数:无* 返回值:无* 函数作用:提前唤醒中断回调函数*/ void HAL_WWDG_EarlyWakeupCallback(WWDG_HandleTypeDef* hwwdg) { ClearWWDG(); // 用户函数内调用HAL库的零碎函数“ HAL_WWDG_Refresh()”刷新计数器值,实现喂狗操作 printf("-------复位前保留数据------\n\r"); printf("--------- 软件喂狗 --------\n\r");} 比照 ...

January 22, 2023 · 1 min · jiezi

关于嵌入式:SPI协议与GPIO模拟SPI的实现

SPI定义SPI(Serial Peripheral Interface, 串口外设接口),它用于MCU与各种外围设备以串行形式进行通信,速度最高可达25MHz以上。 SPI接口次要利用在EEPROM、 FLASH、实时时钟、网络控制器、 OLED显示驱动器、 AD转换器,数字信号处理器、数字信号解码器等设施之间。 SPI通常由四条线组成,一条主设施输入与从设施输出( Master Output Slave Input, MOSI),一条主设施输出与从设施输入( Master Input Slave Output, MISO),一条时钟信号( Serial Clock, SCLK),一条从设施使能抉择( Chip Select, CS)。与I²C相似,协定比较简单,也能够应用GPIO模仿SPI时序。 SPI的数据交换在SCLK时钟周期的驱动下, MOSI和MISO同时进行,如下图所示,能够看作一个虚构的环形拓扑构造。主机和从机都有一个移位寄存器,主机移位寄存器数据通过MOSI将数据写入从机的移位寄存器,此时从机移位寄存器的数据也通过MISO传给了主机,实现了两个移位寄存器的数据交换。无论主机还是从机,发送和接管都是同时进行的,如同一个“环”。 须要留神的是,数据的写入程序是从高地址到低地址。 如果主机只对从机进行写操作,主机只需疏忽接管的从机数据即可;如果主机要读取从机数据,须要主机发送一个空数据来引发从机发送数据。 传输模式SPI有四种传输模式,次要差异在于CPOL和CPHA的不同。 CPOL( Clock Polarity,时钟极性),示意SCK在闲暇时为高电平还是低电平。 当CPOL=0,SCK闲暇时为低电平,当CPOL=1, SCK闲暇时为高电平。 CPHA( Clock Phase,时钟相位), 示意SCK在第几个时钟边缘采样数据。 当CPHA=0,在SCK第一个边际采样数据(即在第二个边际输入),当CPHA=1, 在SCK第二个边际采样数据(即在第一个边际输入数据)。 比方:CPHA=0时, 示意在时钟第一个时钟边际采样数据。 当CPOL=1,即闲暇时为高电平,从高电平变为低电平,第一个时钟边际(降落沿) 即进行采样。 当CPOL=0,即闲暇时为低电平,从低电平变为高电平,第一个时钟边际(回升沿)即进行采样。 数据传输流程首先主机和从机都抉择同一传输模式。而后主机片选拉低,选中从机。接着在时钟的驱动下, MOSI发送数据,同时MISO读取接收数据。最初实现传输,勾销片选。 模仿SPI /** 函数名: void SPI_WriteByte(uint8_t data)* 输出参数: data -> 要写的数据* 输入参数:无 * 返回值:无* 函数作用:模仿 SPI 写一个字节*/ void SPI_WriteByte(uint8_t data) { //SPI写1 Byte,循环8次,每次发送1 Bit; uint8_t i = 0; uint8_t temp = 0; for(i=0; i<8; i++) { temp = ((data&0x80)==0x80)? 1:0; //将data最高位保留到temp; data = data<<1; //data左移一位,将次高位变为最高位,用于下次取最高位; SPI_CLK(0); //CPOL=0 //拉低时钟,即闲暇时钟为低电平, CPOL=0; SPI_MOSI(temp); //依据temp值,设置MOSI引脚的电平; SPI_Delay(); //简略延时,能够定时器或延时函数实现 SPI_CLK(1); //CPHA=0 //拉高时钟, W25Q64只反对SPI模式0或1,即会在时钟回升沿采样MOSI数据; SPI_Delay(); } SPI_CLK(0); //最初SPI发送完后,拉低时钟,进入闲暇状态;}/** 函数名: uint8_t SPI_ReadByte(void)* 输出参数:* 输入参数:无* 返回值:读到的数据* 函数作用:模仿 SPI 读一个字节*/ uint8_t SPI_ReadByte(void) { //SPI读1 Byte,循环8次,每次接管1 Bit; uint8_t i = 0; uint8_t read_data = 0xFF; for(i=0; i<8; i++) { read_data = read_data << 1; //“凌空” read_data最低位,8次循环后,read_data将高位在前; SPI_CLK(0); //拉低时钟,即闲暇时钟为低电平; SPI_Delay(); SPI_CLK(1); SPI_Delay(); if(SPI_MISO()==1) { read_data = read_data + 1; } } SPI_CLK(0); //最初SPI读取完后,拉低时钟,进入闲暇状态 return read_data;} 后面提到SPI传输能够看作一个虚构的环形拓扑构造,即输出和输入同时进行。在后面“ SPI_WriteByte()”函数里,发送了1 Byte,也应该接管1 Byte,只是代码中疏忽了接管引脚MISO的状态; 在后面“ SPI_ReadByte()”函数里,接管了1 Byte,也应该发送1 Byte,只是代码中疏忽了发送引脚MOSI的内容。有些场景, SPI须要同时读写,因而还须要编写SPI同时读写函数。 ...

January 14, 2023 · 2 min · jiezi

关于嵌入式:常用EMC元器件简介防护器件

在电子产品中,须要防护的电路次要是电源和信号,所处的地位不同其防护等级和防护计划也不同,介绍三种最罕用的防护器件:TVS管,气体放电管、半导体放电管。 一、瞬态克制二极管(TVS)1、器件个性: TVS又称为瞬态克制二极管,是半导体硅资料制作成非凡二极管,TVS与被防护电路并联应用。电路失常时TVS处于关断状态出现高阻抗个性,当外界有浪涌冲击电压时能以nS量级的速度从高阻抗转变为低阻抗排汇浪涌功率,使浪涌电压通过其本身到地,从而爱护电路不受侵害。其重要的个性就是相应迅速,作用工夫短。 2、伏安个性: 如上图伏安个性曲线,Vc是钳位电压、Vrwm是最高工作电压,均是TVS选型中十分重要的参数。在设计选型时为了可能对被爱护电路起到爱护作用,同时又不能影响后级电路失常工作,Vrwm≥电路失常工作电压。这样电路失常工作时,TVS管处于截止状态,不对电路产生影响;Vc≤电路可接受的最高电压,不然二极管遇到瞬态低压导通后放弃的钳位电压比后级电路可接受电压高会造成后级电路的伤害。如下是在元器件电商平台查到的DIODES的SMBJ5.0系列规格参数,能够看到不同型号的Vc和Vrwm是不同的,依据需要选型即可。 图片起源:华秋商城 3、典型利用: TVS管常常利用在485电路、232接口、USB接口、VGA接口等须要防静电以及热插拔端口。 如下是一个USB2.0接口典型的防护电路,次要对电源线、差分信号DM/DP进行防护,当从USB接口进来的瞬态低压,比方高达几千伏的静电耦合到信号线或电源线上时,会触发对应线路上TVS D1或D2或D3导通,将霎时低压泄放到PGND,从而实现了对后级芯片的爱护,避免几千伏的电压通过信号线或电源到后级芯片中去烧坏芯片。 二、半导体放电管(TSS)1、器件个性 半导体放电管是一种小型化、快反应速度和高可靠性的电力电子半导体器件,它具备五层双端对称构造的设计。特点如下: 反应速度快,有比拟低的残压;可靠性高,一致性好;使用寿命长,可长时间重复使用;有比拟低的结电容;2、工作模式 半导体放电管的工作模式是:当外加电压低于其断态电压VDRM时,半导体放电管的漏电流极小,相当于开路;当外电压大于VDRM时,开始产生击穿;当外电压进一步加大后,半导体放电管的两端变成导通状态,相当于短路,能够泄放很大的电流;当外电压撤去当前,管子即可复原断态。 如上半导体放电管的泄放示意图,A是模仿的雷击电压波形,B为半导体放电管拟制后的电压波形。 3、典型利用 半导体放电管次要利用在485电路、视频接口、XDSL、电话接口等须要防雷爱护的接口。 如下是某DSL电话口应用半导体放电管TSS进行防护的案例。 三、气体放电管(GDT)1、器件个性: 气体放电管,Gas discharge tube-GTD,由密封于气体放电管介质的一个或一个以上放电间隙组成的器件,用于爱护设施或人身免遭低压电压的危害。广泛利用在电子产品中的是陶瓷气体放电管。次要特点是通流量大、结电容低、绝缘低等。次要是避免电子产品蒙受雷击。 2、工作过程: 失常处于高阻态——(外界低压接入后)——进入辉光状态——进入弧光状态——(外界低压隐没后)——进入辉光状态——复原高阻态。 3、典型利用: 气体放电管次要利用在AC电源、DC电源接口、485电路、视频接口、XDSL、以太网接口等须要防雷爱护的接口。 四、TVS、TSS、GDT三者差别1、应用领域: TVS更多利用于电压较低的接口以及间接针对线路板中重点IC进行爱护。比方特地是对IC的ESD防护。 TSS更多利用于电信设施中呈现雷击和蕴含交换的瞬态景象的二级爱护,比方电话、传真机、调制解调器、程控替换与网络设备,以及xDSL等模仿和数字线路。 GDT次要利用在通信产品、工业产品、监护仪/超声等医疗设施的电源口、RS485、网口、光口;生产电子类如机顶盒/电子玩具等的AC电源口、同轴口;电视机/数码相机等的AC 电源口、RS485/HDMI。 2、电压等级划分: TVS更多利用于30V以下环境,大多数IC芯片端口集成的二极管只能抵挡不超过2KV的ESD。而TVS器件重要指标是所能遏止的静电电压如15KV(空气静电放电电压)、8KV(接触静电放电电压)。 TSS更多利用于50V以上环境,典型利用有200V的利用于通信线路;58V的利用程控交换机二次爱护电路等。 GDT个别利用在70V-3600V ,次要是防护雷击。 3、其余比照 通流量:TVS < TSS < GDT结电容:GDT < TSS < TVS响应工夫:TVS < TSS < GDT

January 4, 2023 · 1 min · jiezi

关于嵌入式:float类型中NaN和Inf是什么

做嵌入式的同学应该晓得,c语言中int的大小,是和平台无关的,有的占4字节,有的占2字节。所以咱们对有冀望长度的变量,很少间接用int定义,而更多用uint8_t, uint16_t, uint32_t。但到了float,咱们为什么没有float16_t, float32_t这样的类型呢?因为float是有规范的,就是32位占4字节,这就是IEEE-754规范。 IEEE-754规范简略的说一下吧,说太细很干燥。IEEE-754规范将float分成了三局部,符号位(S)、指数(E)和尾数(F),一共4字节,32位。 符号位指数尾数SEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFF1位8位23位符号位:0为正,1为负。指数:用补码示意,可示意[-127, 128]的指数。尾数:用二进制示意小数局部。好,理解到这里就差不多了。当然这里说的都是float,也就是单精度浮点数。还有双精度浮点数,也就是double。个别在理论应用中,咱们就算在内存中读到浮点数,也不会间接通过16进制转2进制再还原成浮点数,最不便的还是应用在线转换工具啦。上面进入正题,讲一些非凡值。 零值指数全为0,尾数全为0,符号位任意,于是有了0和-0,且0==-0。所以当咱们应用memset()的时候,是能给float初始化成0的。 符号位指数尾数SEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFF0/1000000000000000 00000000 00000000NaN指数全为1,尾数非0。 符号位指数尾数SEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFF0/1111111111111111 11111111 11111111NaN是Not A Number的意思,在未定义的算术运算后果会呈现,比方x/0。留神,阐明是尾数非0,表格中填的全是1,但理论以各平台实现为准,代码判断如下: if((fnum&0x7F800000)==0x7F800000 && (fnum&0x7FFFFF)!=0) { printf("is NaN\n");}无穷值(Infinity)指数全为1,尾数全为0,符号位任意,有正无穷和负无穷。 符号位指数尾数SEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFF0/1111111110000000 00000000 00000000代码判断如下: if(fnum==0x7F800000) { printf("is +Inf\n");}else if(fnum==0xFF800000) { printf("is -Inf\n");}规范c库中的反对#include <math.h>void float_test(void){ float num1 = 1.256f; float num2 = NAN; float num3 = INFINITY; float num4 = num1/0; printf("num1:%f isnan:%d isinf:%d\n", num1, isnan(num1), isinf(num1)); printf("num2:%f isnan:%d isinf:%d\n", num2, isnan(num2), isinf(num2)); printf("num3:%f isnan:%d isinf:%d\n", num3, isnan(num3), isinf(num3)); printf("num4:%f isnan:%d isinf:%d\n", num4, isnan(num4), isinf(num4));}最初多说几句有一个乏味的中央,下面的示例中用了printf打印%f,首先很多嵌入式工程都不举荐应用c库实现的printf,而后是各种各样的其余库提供了printf的实现。而后呢,有的库其实不反对%f的格局,毕竟在有的芯片上,浮点数都是要求尽量少应用的。再而后,有的库反对了浮点打印,但对NaN、无穷数,并不能打印出"NaN / Inf"之类的字样。而会打印成一个看起来奇怪的浮点数,然而放在一堆凌乱的数据里,可能也不显得奇怪了。所以大家能够在本人罕用的我的项目平台上试试下面的代码,看看printf的反对水平怎么样。当然,当前有空我也会出一篇文章专门讲怎么实现printf的。就比方想偷懒,认为引入SEGGER_RTT_printf就能解决调试信息打印的问题,却发现不反对浮点打印,也是挺遗憾的。 ...

September 30, 2022 · 1 min · jiezi

关于嵌入式:物联网技术实测对比ZETA完胜LoRa助力石油勘探

找油是石油工业的第一步,也是最要害的一步。最大的艰难是油和人之间,隔着厚厚的土壤和岩石,既看不见也摸不着。 为了寻找石油,地质专家们要跋山涉水做地质普查,就像医生先察看病人的体表特色;接着在可能性大的区域,进行地表的化学生物指标剖析,就像给人体做抽血化验,而后给可能存在石油的地层做一个透视扫描。这种办法被称为“地球物理勘探”。 而寻找石油最罕用的一种形式就是地震波探测。地震波探测就是在可能有石油的中央,用炸弹放炮,人工制作地震。当地震波往公开流传时,在软硬地层中的传播速度不同,在不同岩层中反射的声波也不同;并且反射工夫也存在差别,通过在高空收集这些信息,就能揣测剖析出,地层构造和油藏状况。这就好比给人体做CT,核磁共振,X光片。 为了取得更好的地震成果,不仅要把几千枚炸药生埋于公开,而且要依照肯定的法则散布在上万平方千米的范畴内搁置上地震波采集器,采集器部署的越密,采集到的数据就越精确。传统的数据采集计划,是通过有线传输,然而有线施工难度大,老本高,部署的数量少,剖析精度低。 | 实地测试 近期某客户打算采纳无线计划,进行传感器的数据收集,然而无线采集面临新的挑战:1) 野外环境,受各种地表遮挡,信号衰减重大,要求笼罩能力强,传输距离远。2) 无人机在地面不能停留,采集周期短(10s),即要求通信速率高。3) 地震波采集器搁置密度高,单位平方公里内上万个终端,要求单站容量大。4) 地震波采集器搁置工夫长,要求功耗低。 该客户在技术选型时,对ZETA和LoRa进行横向比拟测试,结果表明ZETA别离以两倍以上间隔和速率完胜LoRa,测试详情如下:| 测试环境农村野外,模仿石油勘探场景。网关高度约5.5米,终端搁置在高空,发射功率17dBm。具体测试后果如下: | 数据分析 1.极限灵敏度:在此测试环境下,ZETA SDR网关的极限接收灵敏度优于lora 30db,笼罩间隔为LoRa的3倍。除了信号调制解调制式上的差别, 因为占用带宽不同,信号底噪也奉献了19db的差别。 2.笼罩间隔:ZETA AM-FSK的0丢包极限笼罩间隔为11km(1.7米高度),该点RSSI为-135dbm。测试中存在重大衰减的地位,网关接管的极限场强为-139dbm。Lora相应的后果为3.4km(1.7米高度),-104dbm;极限接管场强-109dbm,2.6km(高空)。 3.晋升空间:以后测试条件lora芯片实践最大速率为[email protected],SF=12,BW=125kHz。在该速率下,SF=12曾经是lora芯片的可达到最好灵敏度的配置极限。而ZETA AM-FSK相应为[email protected],4FSK(M=4),BW=7.5kHz。思考到中国法规绝对法规200kHz的带宽限度。ZETA通过合理配置M(调制阶数)和BW,还有很高的速率晋升空间。 4.频谱效率:LoRa SF=12, 293bps/125kHz=0.0029b/s/Hz;ZETA, M=4, 600bps/7.5kHZ=0.08b/s/Hz, 是LoRa的28倍。 | 实践剖析 1.由信噪比S/N = Eb/N0 * Rb/B (Eb:每比特的能量,N0噪声功率谱密度,Rb信息传输速率,B:基带带宽) 可知,速率不变的状况下,扩频通信可能减小SNR(接收机解调门限)。 2.由接收灵敏度PN (min) = −174 + 10logB + NF + SNR(-174:天然噪声底,B:基带带宽,NF:噪声系数,SNR: 信噪比)可知,扩频后不能晋升接收灵敏度,因为带宽减少及带来的底噪跟SNR的减小相对消。 | 文章小结 实际上,思考到一般晶振的时钟精度,LoRa所需的典型的信道带宽为125kHz或以上,而在免受权频段(470MHz-510MHz),很难找到底噪绝对洁净的125kHz带宽,但7.5kHz是很容易的,从而导致在理论利用中LoRa的接收灵敏度比ZETA的AMFSK差很多。本次测试的数据后果,证实了这一剖析

September 27, 2022 · 1 min · jiezi

关于嵌入式:CS5266设计Typec转HDMIPDU2U3四合一多功能拓展坞方案

CS5266是一款typec转HDMI带PD3.0快充的音视频数据转换计划芯片。CS5266可能很好的通过USB Type-C将视频和音频从DisplayPort alternate mode传输到HDMI输入,除此之外CS5266还能够搭配USB3.0 USB2.0 读卡或者网口芯片,可设计实现多口多功能一体的拓展坞或者拓展底座类产品,来解决繁多Type-C接口的投屏设施如笔记本、手机、平板或者投影仪、游戏机等的零碎。 CS5266计划个性:1.DisplayPort TM(DP)v1.4兼容协定 2.USB电源传输(PD)V3.0,可提供PD3.0电源快充 3.内置振荡器,无需内部晶体,节俭BOM老本优化板框构造 4.嵌入式MCU和SPI-flash,可在线更新FW程序,提供设施兼容性效率 5.反对HDCP 1.4和HDCP2.3可提供最高级别的HDCP密钥安全性 CS5266设计Type-C转HDMI+PD3.0+U2+U3拓展坞如下所示:CS5266设计以上Type-C转HDMI+PD+U2+U3 PCB板如下所示:CS5266设计以上type转HDMI+PD3.0+U2+U3劣势个性: 反对热插拔检测(HPD),且反对FSR性能,PD拔插过程中不掉屏,不黑屏芯片集成度高,外围构造简略,整体BOM成本低CS5266内置晶振,且兼容HDCP2.3性能,嵌入式密钥可提供最高级别的HDCP密钥安全性。

July 27, 2022 · 1 min · jiezi

关于嵌入式:好嗨哟OneOS-图形组件显示自己喜欢的图片

体验OneOS图形显示始终对图形心心念念,还能想到以前应用QT的日子,而后接触到了资源比拟受限的MCU,发现QT便没有什么劣势了,更多的则是:GUIX、ucGUI、storyboard,LVGL等,没有一家独大,而是百花争鸣。其中,OneOS联结LVGL,组成OneOS下的图形组件,也让OneOS的图形性能失去了很好的扩大和延长。 此篇文章,次要应用其图形组件,联合LVGL的图片在线转换工具,简略体验一下图片显示的感觉。 图片显示的几种形式在LVGL中,图片显示有几种形式呢? 我能想到的有两种,其一是在文件系统的撑持下,把图片间接放入sd卡或者其它文件系统中去。而后调用相干接口,便可把图片从屏幕上显示进去。其二则是把图片间接转化为C源码文件,而后间接编译进可执行文件中去。 如何体验这两种形式呢?其实也曾经存在于GUI的配置中了,其提供了图形的example,能够疾速体验一下下~ GUI → Enable LVGL → Enable LVGL examples → Third party Lib example[ ] Enable LVGL example bmp[ ] Enable LVGL example gif[*] Enable LVGL example png[ ] Enable LVGL example jpg[ ] Enable LVGL example qrcode[ ] Enable LVGL example freetype其中的example代码存在于文件:OneOS\components\gui\lvgl8.2\lvgl\examples\libs,我就以png为例,其代码如下,别离展现了文件系统以及转化为C源码的形式。 void lv_example_png_1(void){ LV_IMG_DECLARE(img_wink_png); lv_obj_t * img; //C源码形式 img = lv_img_create(lv_scr_act()); lv_img_set_src(img, &img_wink_png); lv_obj_align(img, LV_ALIGN_LEFT_MID, 20, 0); //文件系统形式 img = lv_img_create(lv_scr_act()); /* Assuming a File system is attached to letter 'A' * E.g. set LV_USE_FS_STDIO 'A' in lv_conf.h */ lv_img_set_src(img, "A:lvgl/examples/libs/png/wink.png"); lv_obj_align(img, LV_ALIGN_RIGHT_MID, -20, 0);}实战体验学习的最好形式,是本人实际操作,纸上得来终觉浅,绝知此事要躬行。今人说的好哇!好咧,那我要把下图放到板子上显示,一张可恶小菇凉的图片! ...

July 11, 2022 · 1 min · jiezi

关于嵌入式:MCU软件最佳实践独立按键

1. 引子在进行mcu驱动和利用开发时,常常会遇到独立按键驱动的开发,独立按键仿佛是每一个嵌入式工程师的入门必修课。笔者翻阅了许多书籍(包含上大学时候用的书籍)同时查阅了网上许多网友的博客,无一例外,清一色采纳检测、延时、再检测,千篇一律,仿佛是按键过于简略,因而没有人违心新陈代谢。本文介绍一种独立按键驱动,打消抖动不采纳软件延时(让CPU死等,mcu无休止的运行_nop_()函数,在略微简单利用场景,cpu工夫顾此失彼的场合,一个独立按键便让CPU如此耗力,是十分不明智的)。本驱动短小精悍,能够是实用于裸机利用,也可不便移植到rtos。 2. 思路剖析独立按键按下的过程,分为稳固状态、非稳固状态;依据经验值,抖动打消工夫为10ms左右;累计检测到超过10ms按下状态,视为按键按下;累计检测到超过10ms弹起状态,视为按键弹起; 2.1 按键驱动key.c/** * @file: key.c * @brief: 按键驱动实现 */#include <reg52.h>#define STAT_RELEASED (1)#define STAT_PRESSED (0)unsigned char (*keyfn)(void);// 利用提供本函数实现,返回1示意读到高电平,返回0示意读到低电平unsigned char flg_down;unsigned char flg_up;unsigned char stat; // 默认是弹起状态unsigned char timer; void key_init(unsigned char (*fn)(void)){ stat = STAT_RELEASED; keyfn = fn;} void key_scan(void){ if(keyfn && !keyfn()) // 有按键按下 { if(timer < 1) // 非稳态 { timer++; return; } if(stat == STAT_RELEASED) { stat = STAT_PRESSED; // post down event flg_down = 1; } } else { if(timer > 0) // 非稳态 { timer--; return; } if(stat == STAT_PRESSED) { stat = STAT_RELEASED; // post up event flg_up = 1; } }}2.2 按键对外接口key.h/** * @file:key.h * @brief:按键驱动对外接口 */ /** * @function: key_init * @param fn: 函数指针,有返回值,读到高电平返回1,读到低电平返回0 * @brief: 按键模块初始化函数,传递io电平读取函数到按键模块 */extern void key_init(unsigned char (*fn)(void));extern unsigned char flg_down;extern unsigned char flg_up;extern void key_scan(void); // 10ms周期调用3 试验假如单片机P2.1口为按键;按下和弹起时,串口打印输出 ...

June 30, 2022 · 2 min · jiezi

关于嵌入式:鑫创SSS1700替代Cmedia-CM6533-24bit-96KHZ-USB音频编解码芯片

台湾鑫创在2021年推出一款芯片SSS1700能够代替兼容CM6533,不论在音质和兼容性方面都优于Cmedia CM6533,且SSS1700外围电路较简略易设计,芯片老本比Cmedia CM6533要低,整体计划性价较Cmedia CM6533也更具备劣势。 上面别离解说Cmedia CM6533与SSS1700参数个性: Cmedia CM6533是一款USB音频编解码器,外部嵌入8051内核,适用於耳麦,挪动娱乐设施直插挪动音箱(docking),USB音箱,USB麦克风等利用。通过外部8051能够研发出各种利用,例如微软语音电话(micro lync),苹果安卓產品直插挪动音箱。 Cmedia CM6533个性: USB 接口 合乎 USB 2.0 全速(12 Mbps)设施规范 合乎 USB 音频设备规范 v1.0 版本 合乎 USB人机交互设施规范v1.1 嵌入式音频编码器 16-bit 2 声道 ADC,可实现 83dB信噪比 8/11.025/16/22.05/32/44.1/48(kHz)采样率 16-bit 2 声道 DAC,可实现 93dB 信噪比 8/11.025/16/22.05/32/44.1/48(kHz)采样率-16位采用率44.1k/48k输入S/PDIF接口 IIC接口能够连贯内部EEPROM-反对自动增益管制(AGC ) 反对USB暂停、返回、复位 反对USB传输类型管制、中断、块、同步数据 14个IO口能够配置為按键或者LED指示灯,可固件编程IO口性能 3.3v/5v 9个IO口反对外部下拉电阻,5个反对外部上拉电阻 LQFP48封装 四种管脚模式配置耳麦、麦克风、插口音箱、麦克风(MODE_0,MODE_1)。 一个12M晶振,外部锁相环(PLL) 单个5v供电(1.8v-5v内核,5v-3.3vIO数字IO口,5v-3.3v模仿解编码器) SSS1700个性: SSS1700是3S高度集成的单片USB音频控制器,带有片内振荡器,可节俭耳机利用的内部12MHz晶体组件。SSS1700性能反对96 KHz 24位采样率和内部音频编解码器(24位/96 KHz I2S输出和输入),并具备内置立体声16/24位ADC、立体声16/24位DAC、耳机驱动程序、五频段硬件EQ、,音频锁相环,USB时钟振荡器,和USB FS控制器加物理层。内部24C02~24C16 EEPROM连贯为USB VID/PID/产品字符串、默认增益设置和其余定制需要提供了灵活性。SSS1700为Windows/MAC/Android操作系统中的特色USB音频解决方案提供了最低BOM解决方案。合乎USB标准v2.0全速运行 合乎USB音频设备类标准v1.0 反对44.1KHz/48KHz/96KHz、16位/24位采样率(EEPROM选件) 嵌入式数字混音器,开机后默认混音器静音(操作系统管制) 当设置单ADC时,两个DAC通道都与该单ADC数据混合 当设置立体声ADC时,L-ch DAC与L-ch ADC数据混合,R-ch DAC与R-ch ADC数据混合 电源模式设置的ROM选项(USB总线电源100mA:默认或500mA配置) ...

June 30, 2022 · 1 min · jiezi

关于嵌入式:CS5213-HDMI转VGA带音频信号输出方案

CS5213是一款用于设计HDMI转VGA音视频信号转换器计划,CS5213设计HDMI转VGA转换器或者转接线产品特点: 将残缺的HDMI信号转换为VGA输入 反对数字信号到模似信号的转换 反对HDCP1.0/1.1/1.2 装置快捷、操作简略,无需设置 内置转换芯片,反对热插拔。 HDMI视频输出格局:480i/576i/480p/576p/720p/1080i/1080p VGA视频输入格局:480i/576i/480p/576p/720p/1080i/1080p 反对II2S音频信号输入 CS5213设计HDMI转VGA转换器或者转接线产品如下所示:具体的PCB板如下:有HDMI接口、VGA接口、还有独自的II2S音频信号输入。CS5213设计以上HDMI转VGA转换产品的PCB原理图如下所示:

June 23, 2022 · 1 min · jiezi

关于嵌入式:CS5261TypeC转HDMI数据转换芯片概述及特点

CS5261是一款实现USB Type-C 转HDMI数据转换器。反对USB Type-C 显示端口代替模式,CS5261能够将视频和音频流从USB Type-C 接口传输到HDMI端口。在AG9310中,反对1路、2路@1.62Gbps、2.7Gbps和5.4Gbps频率输出的不同配置,HDMI反对4K2K@30Hz输入。产品制造商能够应用CS5261应用程序轻松实现Type-C 转HDMI数据转换器转接。 嵌入式16位MCU反对EDID和MCC直通反对热插拔检测反对内部SPI闪存固件降级反对嵌入式HDCP 1.4嵌入式5V/1.2V高效稳压器同时显示通过HDMI输入2KV ESD性能反对上行扩频时钟(SSC)设施信息CS5261利用 USB Type-C 转换器USB Type-C扩大坞CS5261Type-c转HDMI单转方案设计原理图

June 15, 2022 · 1 min · jiezi

关于嵌入式:CS5801HDMI-TO-eDPDP转换芯片资料

CS5801是HDMI2.0b到DP1.4a转换器。CS5801有一个HDMI2.0b输出,最大带宽高达18Gbps。它反对最高分辨率是4k@60Hz。对于DP1.4输入,由4条数据通道组成,反对1.62Gbps、2.7Gbps、5.4Gbps链路速率。内置可选SSC性能可升高EMI影响。 CS5801实用于多个细分市场和显示利用,如显示器、转换器、挪动设施零碎和嵌入式应用程序。HDMI输出: HDMI标准v2.0兼容,每个通道的数据速率高达6-Gbps VESA显示端口(DP)v1.4兼容发射机 VESA嵌入式显示端口(eDP)v1.4兼容发射机 反对HDCP1.4和HDCP2.3个芯片上的钥匙 反对RGB 4:4:4 8/10位bpc和YCbCr 4:4:4、4:2:2、8/10位bpc 用于芯片管制的辅助通道、I2C主机接口 嵌入式EDID 带SPI闪存控制器的嵌入式32位RISC-V eDP输入端: HDMI 2.0b兼容 反对6、8、10bpc 反对DVI模式 反对HDCP 1.4/2.3 每个通道的数据速率高达6-Gbps 反对高达3840 x2160@60Hz或4096x2160@60Hz 嵌入式MCU: 32位RISC-V核 反对高达400 KHz的I2C主设施和从设施。 反对外部串行闪存的SPI控制器 反对一个UART进行调试 CS5801HDMI TO eDP/DP方案设计原理图

June 13, 2022 · 1 min · jiezi

关于嵌入式:MA8601升级版工业级-USB-20-HUB芯片FE11S替代方案

PL2586是USB 2.0高速4端口集线器控制器的高性能解决方案,完全符合通用串行总线标准2.0。控制器继承了先进的串行接口技术,当4个DS(上游)端口同时工作时,功耗最低。 PL2586是一项翻新,它集成了合乎USB-IF“电池充电标准修订版1.2”的性能,反对便携式设施的疾速充电性能。此性能将PL2586转变为“通用充电解决方案”(UCS)兼容的基于电池的便携式设施的USB充电集线器,由GSMA推广。当在上游端口检测到合乎B.C.规范的便携式设施时,PL2586中的专用端口能够解决充电申请。而且,在握手实现后,PL2586容许便携式设施达到900mA(高速);1.5A(低速/全速)来自充电上游端口(CDP)或1.5A来自专用充电端口(DCP)。 PL2586采纳单事务转换器(STT)和联结电源治理,以达到经济高效的目标。用户还能够通过内部EEPROM实现多个集线器配置选项。PL2586反对针对支流独立4端口集线器市场的QFN24和SSOP28封装形式。 2.特点 合乎USB标准修订版2.0上游端口反对高速(480MHz)和全速(12MHz)通可配置的4/3/2上游端口反对高速、全速和低速合乎USB电池充电标准第1.2版集成上游1.5K上拉上游15K下拉电阻器上游端口的联结功率管制和全局过流检测当先的低功耗USB2。0集线器主动从新枚举,用于在自供电模式和总线供电模式之间切换用于定制信息存储的内部EEPROM接口4个上游端口LED(启用绿色)和一个流动/暂停LED(红色)一个用于4个端口的联结上游端口LED(启用绿色)和一个激活/暂停LED(红色)PL2586原理图

June 7, 2022 · 1 min · jiezi

关于嵌入式:替代LT8711UX方案TypeC转HDMI4K60HZ高清视频转换芯片方案简介

CS5265是款高性能的TYPEC转HDMI 4K60HZ音视频转换芯片,设计用于将USB type c源或DP1.4源连贯至HDMI2.0b接收器。CS5265AN集成了DP1.4兼容接收机和HDMI2.0b兼容发射机。此外,CC控制器还用于CC通信,以实现DP Alt模式。 CS5265封装 CS5265封装尺寸:48-pin QFN,6 mm x 6 mm CS5265温度范畴(0℃~+85℃) CS5265能够齐全代替LT8711UX,且封装的尺寸比LT8711UX要小,CS5265芯片集成度高,内置MCU,内置lLDO等,设计简略外围电路器件较少,整体计划性价比较高。 CS5265实用于多个dongle和显示利用,如拓展坞、扩大底座、显示器,电视(TV)、投影仪、数字标牌、stream box等。 CS5265代替LT8711UX设计Type-C转HDMI4K60HZ转换计划原理图如下:CS5265_BOM清单

June 7, 2022 · 1 min · jiezi

关于嵌入式:RTD2166替代CS5212替代RTD2166方案电路图DP转VGA方案设计电路图原理图

RTD2166是一款DisplayPort端口到VGA转换器,老本较高,Capstone于2019年推出CS5212,间接Pin to pin兼容代替RTD2166,可用原RTD2166小板框,还可省按20颗外围小料,老本更优化,目前已被大量出名客户采纳。 CS5212联合了DisplayPort输出接口和模仿RGB DAC输入接口。嵌入式单片机基于工业规范8051外围,实用于多个细分市场和显示器应用程序,如笔记本电脑、主板、台式机、适配器、转换器和转接器。 RTD2166与CS5212AN比拟表 应用CS5212间接Pin to pin贴在RTD2166小板上,可省多达16颗外围元器件NC不必贴。如下图:

June 6, 2022 · 1 min · jiezi

关于嵌入式:MegPeak让你更懂你的处理器

作者:陈其友 | 旷视 MegEngine 架构师MegPeak 介绍在这个算力需要爆炸的大背景下,如何施展出已有硬件的最大算力变得十分重要,直观一点是:咱们须要对现有算法针对特定的处理器进行极致的性能优化,尽量满足目前 AI 算法对算力高要求。为了可能做到极致的性能优化,咱们可能的方向有: 优化算法,使得算法可能在满足准确度前提下,访存和计算量尽量小优化程序,使得实现这些算法的程序最大限度施展处理器性能在优化程序的过程中,首先要解决的问题是:如何评估咱们程序施展了处理器几成的算力,以及进一步优化空间和优化方向。 为了更懂咱们的处理器,MegEngine 团队开发了一个工具 MegPeak,能够帮忙开发人员进行性能评估,开发领导等,目前曾经开源到 GitHub。 MegPeak 性能通过 MegPeak 用户能够测试指标处理器: 指令的峰值带宽指令提早内存峰值带宽任意指令组合峰值带宽尽管下面的局部信息能够通过芯片的数据手册查问相干数据,而后联合实践计算失去,然而很多状况下无奈获取指标处理器详尽的性能文档,另外通过 MegPeak 进行测量更间接和精确,并且能够测试特定指令组合的峰值带宽。 MegPeak 应用办法应用办法参考 MegPeak 的 Readme 文档 MegPeak 应用示例测试 ArmV8 上通用指令峰值和提早,编译实现之后,在指标处理器上执行 megpeak,失去: 如上图所示,MegPeak 能够准确测试出 CPU 上每条指令的计算峰值以及提早周期。OpenCL 上将测试出不同数据类型进行访存的 Local Memory,Global Memory 的带宽,以及 int/float 不同数据类型进行计算的峰值。这些数值将无效的领导咱们评估目前程序的性能,并绘制 RoofLine,将能够帮忙用户诊断出阻塞程序次要因素,是访存或者计算,具体应用分析方法将在前面介绍。 MegPeak 原理MegPeak 测试的主要参数是 CPU 不同指令的计算峰值,以及指令提早,以及内存带宽OpenCL 中不同内存的数据访存带宽,以及不同计算数据类型的计算峰值要理解 MegPeak 是如何测试出下面这些性能数据,并且做到和数据手册上查问到尽量统一,因而须要读者理解上面 CPU 流水线相干细节。 处理器流水线古代处理器为了减少指令的吞吐,引入了指令流水线,指令流水线能够将一条指令的执行过程划分为多个阶段,经典的 5 级流水线有:取指令,翻译指令,执行指令,拜访寄存器,写回数据,这 5 个阶段,处理器中执行每个阶段的物理单元独立,因而现实状态下,每个时钟周期每个阶段对应的物理单元都能执行一次对应的操作,这样就造成了流水线,这样处理器每个时钟周期就能够实现执行一条指令。如下表所示,从第 5 个时钟周期之后,每个时钟周期都会实现一条指令执行: 然而,流水线在理论执行时候不可能始终这样晦涩的执行上来,会存在以下的冒险,阻塞流水线。 构造冒险——如果硬件无奈同时反对指令的所有可能组合形式,就会呈现资源抵触,从而导致构造冒险数据冒险——流水线指令存在先后顺序,如果一条指令取决于先前指令的后果,就可能导致数据冒险管制冒险——分支指令及其他改变程序计数器的指令实现流水化时,可能导致管制冒险MegPeak 中测量处理器指令的计算峰值和提早就是通过控制指令间的数据冒险,尽可能排除构造冒险和管制冒险来实现的,因为 MegPeak 中须要通过写 Code 来管制处理器的数据冒险,为了排除编译器编译 code 时候的优化带来的烦扰,所以在 MegPeak 在测试中的外围代码应用汇编来实现的。 ...

May 30, 2022 · 3 min · jiezi

关于嵌入式:typec-拓展坞方案芯片-CS5266typec转HDMI多功能拓展坞带PD30快充扩展方案

CS5266是一款高度集成的解决方案,通过USB Type-C将视频和音频从DisplayPort alternate mode传输到HDMI输入。CS5266反对各种@1.62Gbps、2.7Gbps和5.4Gbpsup通到DisplayPort 1.2,反对1路2路通道;HDMI反对4K/2K@30Hz输入。用户能够轻松地将CS5266集成到视频转换适配器和扩大坞上。 CS5266个性 1、显示 合乎 DisplayPort specification Revision 1.2反对1.62(RBR)/2.7(HBR)/5.4(HBR2)Gbps数据速率反对1/2线路配置反对上行扩频时钟(SSC)-反对I2S总线音频提取 2、HDMI HDMI 高清多媒体接口合乎HDMI1.4和HDCP1.4标准反对高达3Gbps的TMD反对分辨率高达4kx2k@30Hz输入反对HDCP键事后编程兼容EDID和MCCS反对采样率48kHz/44.1KHz/32KHz的LPCM双通道 3、USB Type-C PD 反对显示端口备用模式协定DisplayPort Alternate合乎USB PD3.0集成Type-C RP and RD电阻器反对2个 USB Type-C端反对USB声称集成USB2.0全速 4、单片机零碎及接口 集成16位单片机集成用于固件降级的64KB闪存反对I2C主/从、UART、USB2.0全速反对3通道8 bit分辨率ADC 5、电源操作和ESD 3.3V:3V至3.6V操作1.2V:1.08至1.32V运行HBM 2KV ESD性能 设施信息四、CS5266 利用 USB Type-C 转换器USB Type-C扩大坞CS5266零碎框图CS5266管脚映射和形容管脚形容包装尺寸 CS5266AN: QFN-68 8x8mm

April 13, 2022 · 1 min · jiezi

关于嵌入式:数据赋能的未来是嵌入式BI

商业智能(BI)长期以来始终与工具相关联:用于查看报表和仪表盘,并进行交互剖析,以及用于查问数据、建模、可视化剖析的业务工具。在过来的25年中,寰球的软件供应商提供了数百种BI工具,帮忙业务人员将数据转化为见解和口头。 然而,BI工具的时代曾经产生了转变。更精确地说,组织为每个业务人员购买BI许可的时代可能行将完结。与向员工散发剖析工具不同,企业将越来越多地将报告、仪表盘、可视化信息等嵌入到企业内外的业务应用程序中,来辅助员工进行剖析和决策。而这些应用程序正是企业内外的业务人员每天工作不可或缺的ERP、OA、CRM零碎等。 大部分企业的治理和业务,都离不开流程,因而OA办公零碎被越来越多的企业作为外围的管理软件。然而,市场上目前大部分的BI工具并没有思考到在工作流程中进行剖析的需要。商业智能(BI)工具的目标是帮忙用户应用数据做出正确的决策。然而,对于须要进行即时判断的状况,用户可能没有短缺的工夫去追踪要害的数据。例如,一个员工提交了费用申请,领导须要审批这个申请,此时,他就须要查看该员工的费用估算执行状况,他须要在审批过程中剖析,并将数据后果同步到流程。此时,剖析和工作流脱离的问题就裸露进去了。 如何更便捷地把 BI 和业务利用联合起来?嵌入式 BI 应运而生。 嵌入式 BI 即能够嵌入在商业应用软件中的、为应用软件提供或加强剖析性能的业余 BI 软件。其指标是通过整合和剖析相干数据来帮忙用户更智能地工作——用户在日常应用的业务零碎中间接利用这些数据分析性能,解决高价值业务问题并进步工作效率。如果采纳嵌入式BI,用户就能够间接在CRM外部间接进行剖析操作。发现问题间接剖析,依据后果间接调配客户,不用切换到其余平台。他所关注的ARR数据与决策所需的其余重要指标间接能够用于仪表板剖析。这样,数据驱动的决策能够无效流传给每个团队成员,将大大缩短决策工夫,升高没必要的精力投入。 嵌入式 BI 具备 OEM 白标能力、丰盛弱小的 API 接口和嵌入集成能力,反对通过多种形式嵌入应用软件;「利落拽」这种便捷的操作形式,使得一般业务人员也能轻松上手做数据分析,产品易用性高;用户在查看仪表板时,能够进行跨数据源整合、数据联动和钻取等操作,取得真正弱小的 OLAP 在线剖析能力;嵌入式 BI 提供丰盛的可视化组件,不便用户剖析业务数据的关系、法则等。 嵌入式剖析作为商业智能剖析的重要分支之一,越来越多的企业曾经开始部署。据Garter商业智能魔力象限预测,嵌入式剖析将在近五年迎来暴发期。随同着整个大数据环境的遍及,企业数据分析意识的加强,企业会更加器重数据分析的价值。嵌入式剖析将助力更多的企业转变数据分析意识,变被动剖析为被动剖析,通过数据分析晋升竞争力。 在数据为王的时代,获取数据当然重要,但更重要的是从中开掘价值。嵌入式 BI 提供了一种更普惠的解决方案:数据分析将不再是业余技术人员或数据分析师的专利,嵌入式 BI 能够帮忙应用软件加强数据可视化剖析能力,让业务用户真正能在业务零碎中实现自助式数据分析。 嵌入式 BI,让数据分析无处不在。

April 13, 2022 · 1 min · jiezi

关于嵌入式:AG9310替代方案低bom替代AG9310方案CS5261typec转hdmi4k30Hz单转方案

ALGOLTEK AG9310是一款实现USB Type-C 转HDMI数据转换器。反对USB Type-C 显示端口代替模式,AG9310能够将视频和音频流从USB Type-C 接口传输到HDMI端口。在AG9310中,反对1路、2路@1.62Gbps、2.7Gbps和5.4Gbps频率输出的不同配置,HDMI反对4K2K@30Hz输入。产品制造商能够应用AG9310应用程序轻松实现Type-C 转HDMI数据转换器转接。 AG9310特点:嵌入式16位MCU反对EDID和MCC直通反对热插拔检测反对内部SPI闪存固件降级反对嵌入式HDCP 1.41.2V外围电源和3.3V I/O电源嵌入式5V/1.2V高效稳压器同时显示通过HDMI输入2KV ESD性能反对上行扩频时钟(SSC)Capstone CS5261能够同性能齐全代替兼容AG9310,不仅能够实现Type-C转HDMI 4K30HZ单转设计,也能够在一些慢充拓展坞产品上同性能代替AG9310CS5261与AG9310作为规范USB型CTM Display Port Alt模式接收器,由两条主链路组成差分对,一个辅助通道差分对,双通道差分对,可能操作HBR2(5.4-Gbps)、HBR(2.7-Gbps)和RBR(1.62-Gbps)数据速率,用于高清未压缩视频传输。主链接完全符合Display Port TM v1.4标准。HDMI输入端每个通道的链路速度高达3 Gbps,容许以30Hz刷新率和8位色彩深度显示3840x 2160。 CS5261type-c转hdmi(4k_30Hz)单转投屏方案设计原理图 AG9310type-c转hdmi(4k_30Hz)单转投屏方案设计原理图 CS5261不仅能够齐全代替AG9310,且整体芯片BOM老本比AG9310要低,设计电路也简略,芯片集成度比AG9310要高此外CS5261还有以下几个个性劣势:1.嵌入式振荡器,无需内部晶体,放大板框节俭器件,降低成本。2.嵌入式MCU与 串行flash,能够随时在线更新FW,能够兼容更多的设施:手机,电脑、平板等。3.嵌入式EDID(如果终端设备没有,CS5261将响应EDID),投屏显示投屏稳固且无延时。

April 11, 2022 · 1 min · jiezi

关于嵌入式:名单公布国民技术MCU-RTThread设计大赛获奖名单出炉

敬爱的开发者们: RT-Thread与国民技术联手推出的 国民技术MCU RT-Thread设计大赛到明天终于圆满闭幕。本次大赛共吸引了近300位开发者报名,历经三个多月赛程,从报名到审核通过,再到开发设计,最初胜利实现本人的作品。各位小伙伴在这过程中遇到过很多艰难,也破费了很多心血精力,当初废话不多说,一起来看本次大赛获奖名单吧! 一等奖(1名)【N32G457】从0到1打造一个私有化部署的家用式智能告警零碎作者:recan 二等奖(2名)【N32G457】基于RT-Thread和N32G457的家庭语音助手作者:OMJC_9014 【N32G457】基于RT-Thread和N32G457的迷你键盘作者:Blues_Jiang 三等奖(3名)【N32G457 】基于RT-Thread和N32G457的USB2CAN调试器作者:文武兵兵 【N32G457】基于涂鸦云的近程监控作者:Nog 【N32G457】基于RT-Thread和N32G457的高阶魔方作者:tobot 优秀奖(5名)【N32G457】基于RT-Thread和N32G457的RGB点阵屏作者:怅惘186 【N32G457】基于RT-Thread和N32G457的繁难便捷式可调电压源作者:chengjili 【N32G457 】基于RT-Thread和N32G457的CAN网关作者:xiere 【N32G457 】基于RT-Thread和N32G457的智慧家庭作者:Axxx 【N32G457 】基于N32G457的智慧门闸作者:Argent_110 恭喜获奖的小伙伴们!大赛奖金和奖品后续将有工作人员分割各位发放!也欢送各位在RT-Thread论坛来发表一下获奖感言及参赛体验,让大伙们围观看看较量过程中的心路历程。没有获奖的小伙伴们也别灰心,不久,RT-Thread还将举办更多大赛流动,一起期待吧~ 本次大赛实现作品用户(98名) ps:更多作品文章,请戳这里:https://club.rt-thread.org/as... 感激大家对本次大赛的反对!

April 11, 2022 · 1 min · jiezi

关于嵌入式:PL2586高速多口集线器拓展ICMA8601升级版USB-20-HUB-工业级芯片

目前台湾旺玖新出的一款USB HUB 芯片 ----PL2586, PL2586是继 MA8601新出的USB 2.0 工业级 HUB芯片计划,其性能和稳固姓都比之前的MA8601要好很多,能够利用在不同的场景,其最次要劣势:它是一款工业级的HUB芯片,在-40-85℃环境温度下,能够实现失常工作,可实用在环境绝对简单或者工业设施、工控机当中。 PL2586采纳单事务转换器(STT)和联结电源治理,以达到经济高效的目标。用户还能够通过内部EEPROM实现多个集线器配置选项。PL2586特点 合乎USB标准修订版2.0 上游端口反对高速(480MHz)和全速(12MHz)通信 可配置的4/3/2上游端口反对高速、全速和低速 向后兼容USB标准版本1.1 合乎USB电池充电标准第1.2版 集成疾速8051微处理器 12MHz振荡器时钟输出 集成上游1.5K上拉上游15K下拉电阻器 单事务转换器(单TT) 上游端口的联结功率管制和全局过流检测 当先的低功耗USB2。0集线器 片上5V至3.3V/1.2V调节器 主动从新枚举,用于在自供电模式和总线供电模式之间切换 用于定制信息存储的内部EEPROM接口 定制VID,PID 上游端口数量 产品ID 序列号 双LED端口指示灯模式 4个上游端口LED(启用绿色)和一个流动/暂停LED(红色) 一个用于4个端口的联结上游端口LED(启用绿色)和一个激活/暂停LED(红色 PL2586反对针对支流独立4端口集线器市场的QFN24和SSOP28封装形式。USB标记认证 PL2586 IC已由具备TID XXXXX的USB-IF组织认证为齐全符合要求 应用USB 2.0标准。

April 6, 2022 · 1 min · jiezi

关于嵌入式:ASW3642替代TS3DV642方案ASW3642-HDMI-20二进一出切换器设计方案

ASW3642 是一款 12 通道 1:2 或 2:1 双向多路复用器/多路解复用器。ASW3642 可由 2.6V 至4.5V 的电源供电,实用于电池供电的利用。该器件的导通电阻(RON)较低并且 I/O 电容较小,可能实现典型值高达 7.5GHz 的带宽。该器件可为 HDMI 和 DisplayPort 利用提供所需的高带宽。ASW3642 具备断电模式,该模式下所有通道均具备高阻抗(Hi-Z)并且功耗极低。 ASW3642 特点 反对HDMI 2进1出或1进2出两种模式的双向互转。 最大可反对4K@60Hz和2k@120Hz的分辨率,且向下兼容。 玲珑粗劣,携带便捷,无需装置驱动,即插即用。 一键切换,方便快捷,辞别重复插拔。 平面3D视效,视频播放无噪点、不花屏,反对音频同步,尽享高清视听盛宴。 无需外接电源供电,5V HDMI线即插即用。 ASW3642 HDMI 2.0二进一出切换器设计方案原理图

March 31, 2022 · 1 min · jiezi

关于嵌入式:替代TS3DV642方案ASW3642-HDMI-20二进一出切换器设计方案HDMI-21切换

ASW3642 是一款 12 通道 1:2 或 2:1 双向多路复用器/多路解复用器。ASW3642 可由 2.6V 至4.5V 的电源供电,实用于电池供电的利用。该器件的导通电阻(RON)较低并且 I/O 电容较小,可能实现典型值高达 7.5GHz 的带宽。该器件可为 HDMI 和 DisplayPort 利用提供所需的高带宽。ASW3642 特点 反对HDMI 2进1出或1进2出两种模式的双向互转。 最大可反对4K@60Hz和2k@120Hz的分辨率,且向下兼容。 玲珑粗劣,携带便捷,无需装置驱动,即插即用。 一键切换,方便快捷,辞别重复插拔。 平面3D视效,视频播放无噪点、不花屏,反对音频同步,尽享高清视听盛宴。 无需外接电源供电,5V HDMI线即插即用。ASW3642 具备断电模式,该模式下所有通道均具备高阻抗(Hi-Z)并且功耗极低。

March 31, 2022 · 1 min · jiezi

关于嵌入式:ASW3642-HDMI-20二进一出切换器方案ASW3642替代TS3DV642使用说明

ASW3642 是一款 12 通道 1:2 或 2:1 双向多路复 用器/ 多路解复用器。 ASW3642 可由 2.6V 至 4.5V 的电源供电,实用于电池供电的利用。该器 件的导通电阻(R ON )较低并且 I/O 电容较小, 可能实现典型值高达 7.5GHz 的带宽。该器件可 为 HDMI 和 DisplayPort 利用提供所需的高带宽。 ASW3642 具备断电模式,该模式下所有通道均 具备高阻抗(Hi-Z )并且功耗极低。 ASW3642代替TS3DV642应用比照如下 ASW3642利用 反对高达 60Hz 4k/2k 的 HDMI 2.0 ◼ DVI 1.0 信号开关◼ DisplayPort 1.4 信号开关◼ 通用最小化传输差分信号( TMDS )信号开关◼ 通用低压差分信号( LVDS )信号开关◼ 通用高速信号开关ASW3642次要用作HDMI信号切换,能够做为二进一出或一进二出应用

March 28, 2022 · 1 min · jiezi

关于嵌入式:CS5220HDMIi转VGA内置flash方案芯片规格书CS5220HDMI转VGA内置Flash可更新FW-ic

Capstone CS5220是一个HDMI转VGA(内置Flash可更新FW)的高性能、低成本的单片机解决方案,用于实现HDMI1.4高分辨率视频转VGA转换器。 CS5220 HDMI到VGA转换器联合了HDMI输出接口和模仿RGB DAC输入。反对外部LDO,节省成本,优化电路板空间。嵌入式单片机基于工业规范8051内核。 CS5220特点: 反对1920x1200@60Hz的视频分辨率 反对热插拔检测 无晶体,片上集成晶体 内置3.3 vand 1.2V电压调节器 芯片HDCP引擎,合乎HDCP 1.4标准 芯片集成HDCP1.4密钥 1.2V外围电源和3.3V I/O电源 2KV ESD防静电性能 工作温度范畴:0°~ +85° CS5220信息 CS5220封装尺寸:32-pin QFN,4 mm x 4 mm CS5220温度范畴(0℃~+85℃) CS5220利用 CS5220实用于各种市场零碎和显示应用程序,如笔记本电脑、主板、台式机、转换和对接零碎CS5220HDMI转VGA(内置Flash可更新FW)电路原理图

March 22, 2022 · 1 min · jiezi

关于嵌入式:N32G457-基于RTThread的LORA气象传输系统

本文是RT-Thread用户@SKND_9485 原创公布,是用于加入RT-Thread与国民技术联手推出N32G457 RT-Thread设计大赛,原文:https://club.rt-thread.org/as... 一、作品简介:基于RT-Thread 、N32G457、STM32、LoRA的点对点传输零碎;STM32负责数据采集与发射;N32G457负责数据接管并与串口屏交互;串口屏显示数据;二、硬件框架: 1.数据采集与发射端: 2.数据显示与接收端: 三、软件框架图 四.作品展现: 五.代码地址: https://gitee.com/mr-wang-zhe...六.视频演示: https://www.bilibili.com/vide...

March 9, 2022 · 1 min · jiezi

关于嵌入式:那些和优化相关的事儿

前言优化是一个神奇的事件,可化腐朽为神奇,此点金手为编译器,我常认为她是很好的人工智能,可把人类语言化为机器语言。什么时候会用到优化? 发行的版本release个别都是二级优化的,因为优化能使可执行文件更小,执行效率更高。 什么时候不会用优化? 调试的版本debug,因为为了保障源代码和二进制代码一一对应。 优化是否会出问题? 会的,有时候不加优化,程序能够失常运行。加了优化当前,程序不能够失常运行。 出了问题怎么办? 局部代码勾销优化这种状况可最小范畴的勾销局部优化。咱们晓得,优化是通过编译参数-O0/-O1/-O2/-O3/-Os这种形式退出的。 所以咱们能够对某一个代码文件应用编译参数-O0,而其余代码文件依然应用-O num的形式。但这种形式并不不便,因为它波及到了批改编译参数,而编译参数往往是对立批改,而不是仅仅只批改某一个代码文件的编译参数。因而,有上面一种形式。应用预处理命令#pragma,在源码外面进行批改编译参数。而在源码中的编译参数会比makefile中的更高,而因而失效。如果是gcc编译器,能够如下: #pragma GCC push_options#pragma GCC optimize("O0")void func1(){ int a=2;}#pragma GCC pop_options如果是armcc编译器,能够如下: #pragma O0void func1(){ int a=2;}volatile关键字遇到这个关键字申明的变量,编译器对拜访该变量的代码就不再进行优化,从而能够提供对非凡地址的稳固拜访。 简略来说就是,被volatile这个关键字申明的变量,是不会被优化,不论该文件的优化参数是-O2或者其它优化等级,队医这个变量来说,它就是-O0。这样来说,也是最小粒度的优化范畴了。 void func1(){ volatile int a=2;}关注&&分割开源轻量操作系统: https://gitee.com/cmcc-oneos/OneOS-Lite docs文档核心: https://oneos-lite.com/

January 18, 2022 · 1 min · jiezi

关于嵌入式:嵌入式项目中打造自己的utils库不同芯片的基础时空开销计算

最近又从新翻看了《编程珠玑》这本书,外面着重对工程化解决进行了解说,写得很好。印象最深的一个例子,作者拿布鲁克林大桥举例,20世纪40年代前,有很多悬索桥会因为风暴断裂。而要对这种气动回升景象做正确的数学建模和工程计算,要等到10年后。而同一期间的布鲁克林大桥却没有断裂,工程师John Roebling说,他晓得气动回升景象的存在,然而又无奈从实质下来正确处理它(建模),于是他依照所需强度的6倍设计了大桥。最初作者倡议咱们,以2、4或6的系数来升高对性能的预计。其实就是要预留足够的性能。作者最初说:“咱们是和John Roebling一样的工程师吗?我很狐疑”。言归正传,书中提到了时空开销模型,用于对代码中时空开销做计算,能够不便的用于代码性能预计和代码优化。本文对此代码做了整顿,能够退出到utils库中,并且可在ESP32和STM32F103C8上运行。 根本类型的空间占用#define SIZE_MEASURE(T) \do { \ printf("sizeof(%s)=%d\n", #T, sizeof(T)); \} while (0)void platform_base_type_size_measure(void){ printf("\nplatform_base_type_size_measure\n"); SIZE_MEASURE(char); SIZE_MEASURE(short); SIZE_MEASURE(int); SIZE_MEASURE(long); SIZE_MEASURE(long long); SIZE_MEASURE(float); SIZE_MEASURE(double); SIZE_MEASURE(int*);}这里用到了后面的知识点,宏定义参数前加#,能够转换为字符串。后果: platform_base_type_size_measuresizeof(char)=1sizeof(short)=2sizeof(int)=4sizeof(long)=4sizeof(long long)=8sizeof(float)=4sizeof(double)=8sizeof(int*)=4因为esp32和stm32都是32位平台,所以int是4字节,指针也是4字节。 构造体对齐和malloc占用空间typedef struct{char c;} structc;typedef struct {int i; char c;} structic;typedef struct {int i; struct structip *p;} structip;typedef struct {double d; char c;} structdc;typedef struct {char c; double d;} structcd;typedef struct {char c; double d; char cc;} structcdc;typedef struct {int i; int ii; int iii;} structiii;typedef struct {int i; int ii; char c;} structiic;typedef struct {char c[12];} struct12;typedef struct {char c[13];} struct13;typedef struct {char c[28];} struct28;typedef struct {char c[29];} struct29;#define SIZE_MALLOC_MEASURE(T) \do { \ printf("%s%c\t", #T, strlen(#T)<8?'\t':' '); \ printf("%d\t", sizeof(T)); \ int lastp = 0; \ for(int i=0; i<11; i++) { \ T* p = (T*)malloc(sizeof(T)); \ uint32_t thisp = (uint32_t)p; \ if(lastp != 0) \ printf(" %d", thisp - lastp); \ lastp = thisp; \ } \ printf("\n"); \} while (0)void platform_struct_size_measure(void){ printf("\nstruct\t\tsizeof\t malloc size\n"); SIZE_MALLOC_MEASURE(int); SIZE_MALLOC_MEASURE(structc); SIZE_MALLOC_MEASURE(structic); SIZE_MALLOC_MEASURE(structip); SIZE_MALLOC_MEASURE(structdc); SIZE_MALLOC_MEASURE(structcd); SIZE_MALLOC_MEASURE(structcdc); SIZE_MALLOC_MEASURE(structiii); SIZE_MALLOC_MEASURE(structiic); SIZE_MALLOC_MEASURE(struct12); SIZE_MALLOC_MEASURE(struct13); SIZE_MALLOC_MEASURE(struct28); SIZE_MALLOC_MEASURE(struct29);}命名规定为:c:chart i:int d:double,并且相互拼接。后果: ...

January 16, 2022 · 5 min · jiezi

关于嵌入式:嵌入式AI全志-XR806-OpenHarmony-鸿蒙系统固件编译

 欢送关注我的公众号 [极智视界],回复001获取Google编程标准 O_o >_<  o_O O_o ~_~ o_O 大家好,我是极智视界,本教程具体记录了全志 XR806 OpenHarmony 鸿蒙零碎固件编译的办法。 XR806 是全志科技旗下子公司广州芯之联研发设计的一款反对 WiFi 和 BLE 的高集成度无线 MCU 芯片,反对鸿蒙 L0 零碎。具备集成度高、硬件设计简略、BOM 成本低、安全可靠等长处。可宽泛满足 智能家居、智慧楼宇、工业互联、儿童玩具、电子比赛、极客DIY 等畛域的无线连接需要。上图: 上面开始固件编译。 # 下载 repomkdir -p bincurl https://storage.googleapis.com/git-repo-downloads/repo > bin/repochmod a+rx bin/repoPATH="`pwd`/bin:$PATH"# 下载 hbpip install -i https://pypi.douban.com/simple --user ohos-buildPATH="$HOME/.local/bin:$PATH"# 下载 openharmony 源码repo init -u ssh://git@gitee.com/openharmony-sig/manifest.git -b OpenHarmony_1.0.1_release --no-repo-verify -m devboard_xr806.xml 这里须要留神一下,间接执行上述命令应该会报错fatal: Cannot get https://gerrit.googlesource.com/git-repo/clone.bundle,解决办法为批改清华源。有两种批改形式,如下:   (1) 批改 bin/repo 中的 REPO_URL ...

December 21, 2021 · 2 min · jiezi

关于嵌入式:keil开发如何让所需函数不被优化

前言当咱们不论是应用gcc还是keil自带的armcc或者armclang进行开发的时候,会遇到一个问题,就是:编译器有时会把我想要用到的函数给优化掉,导致运行时的谬误,或者不失常执行。 为什么会这样呢?则是因为,编译器认为,咱们的程序没有调用该接口,因而在链接阶段,就不会把该函数链接进去。但,这会产生问题。 实例比方: oid (*vtable)(); //函数指针vtable = (void (*)()) (0x08000000);//定位到指定的入口地址0x08000000(*vtable)();//如果地址0x08000000放的是entry函数,则调用entry()函数这样编写代码的目标是为了在(*vtable)();处调用entry()函数,但编译器并不知道开发者的用意,仍会依照本人的逻辑把entry()优化掉,因为它认为该函数并未被调用,则在链接阶段,就不会把该函数链接进去。 因而,当执行(*vtable)();时,外面的内容则不是entry()的代码了,可能产生不可预知的谬误。 那,咱们能够通知编译器不要去优化entry()这个函数吗?能够的,这时咱们能够应用链接器命令:--keep=section_id 此选项保障在删除未应用节时,不能删除指定的输出节。 链接参数如何让所需函数不被优化?应用:--keep=section_id!怎么应用?举例说明: 咱们能够应用--keep=int_handler,来保留int_handler这个节如果须要保留定义以 _handler 结尾的所有节,能够应用通配符,--keep=*_handler如果须要放大范畴,只保留某一个指标文件里的section,则能够这样:--keep=vectors.o(*_handler)如果须要保留所有的节信息,则能够:--keep=*最初,这个链接参数放在哪里呢?见下图: 关注&&分割开源轻量操作系统: https://gitee.com/cmcc-oneos/OneOS-Lite docs文档核心: https://oneos-lite.com/

December 17, 2021 · 1 min · jiezi

关于嵌入式:stm32f103zet6-hello-world

51最小零碎板电路图??? 起源 还不会做usb-串口一键下载电路的状况下 ,如何实际? 利用已有的淘宝上买的开发板(它带有串口程序一键下载电路),把单片机插在该开发板商,用keil 将程序烧录到该单片机中。 再将该单片机拔下来插到相似上图的自制板子上,这样就能够运行程序了。 STM32F103 串口下载程序 步骤:1. 从串口下载并启动1.1. 设置 从零碎存储器启动, 串口下载: BOOT0: 1, BOOT1: 01.2. MCUISP.exe :不应用RTS和DTR,勾选"编程后执行",再点击 "开始编程" , 左边窗口显示"开始连贯..." 即MCUISP.EXE进入期待.1.3. 按复位键,按复位键后,单片机将按 步骤1.1 的设定 来启动, 并开始和 步骤1.2 的期待中的MCUISP.exe交互 即从串口下载程序到零碎存储器 并从零碎存储器启动 (相当于从串口启动).2. 尔后如何再次运行 步骤1 写入的程序?1.4步骤或2.1步骤. 留神此时(步骤1之后)程序曾经被下载到FLASH, 然而设置仍然是 从串口启动.所以如果此时间接按复位键,是不会失常启动的,因为还须要MCUISP.exe依照 步骤1.2 那样配合才行. 步骤1.3 之后 如果冀望运行刚刚下载到单片的程序,则步骤应该是: 改设置为: BOOT0:1、 BOOT1:任意值 :即从FLASH启动,按复位键, 即是启动刚刚写好的程序的.BOOT0, BOOT1 参见下图红框: 51单片机串口下载程序例子1. stc89c52RC ok例子 stc-isp软件窗口中打印的日志如下:正在检测指标单片机 ... 单片机型号: STC89C52RC/LE52RC 固件版本号: 6.6.4C以后芯片的硬件选项为: . 以后的时钟频率: 11.030MHz . 零碎频率为12T(单倍速)模式 . 振荡器放大增益使能 . 当看门狗启动后,任何复位都可进行看门狗 . MCU外部的扩大RAM可用 . ALE脚的性能抉择依然为ALE性能脚 . P1.0和P1.1与下次下载无关 . 下次下载用户程序时,不擦除用户EEPROM区 单片机型号: STC89C52RC/LE52RC 固件版本号: 6.6.4C正在从新握手 ... 胜利 [0.594"]以后的波特率: 115200正在擦除指标区域 ... 实现 ! [0.312"]正在下载用户代码 ... 实现 ! [0.672"]正在设置硬件选项 ... 实现 ! [0.047"]更新后的硬件选项为: . 以后的时钟频率: 11.030MHz . 零碎频率为12T(单倍速)模式 . 振荡器放大增益使能 . 当看门狗启动后,任何复位都可进行看门狗 . MCU外部的扩大RAM可用 . ALE脚的性能抉择依然为ALE性能脚 . P1.0和P1.1与下次下载无关 . 下次下载用户程序时,不擦除用户EEPROM区 单片机型号: STC89C52RC/LE52RC 固件版本号: 6.6.4C操作胜利 !(2021-12-06 00:09:34)1.2 例子程序及开发ide1.2.1 开发idekeil5-c51 ...

December 9, 2021 · 1 min · jiezi

关于嵌入式:RISCV移植rtthread-nano到riscv芯片

本文由RT-Thread论坛用户@DENGCHOW原创公布:https://club.rt-thread.org/as... “这么说吧,就是为了这口醋,我才包的这顿饺子。”仓库地址:https://gitee.com/dengchow/yu... 〇、前言本文记录的是在 risc-v 芯片上移植 rt-thread nano 的过程。 应用到的 risc-v 芯片是玉衡(YuHeng,yuheng-riscv),一款并不存在于事实世界的芯片,同 picorv32 和 darkriscv 一样,仅存在与仿真环境中。 一、硬件平台玉衡(YuHeng,yuheng-riscv)基于开源 RISC-V 指令集架构,是一款极简的 32 位 RISC-V 处理器核。仅用于检测和试验。 玉衡不具备任何商用价值,但能够作为很好的学习平台。 应用玉衡,可能很好的理解计算机体系结构、操作系统、通信协议、编译原理等相干常识。 另外,所有的运行环境均为精简搭建,因而还能够很轻易的相熟搭建过程。 不仅会用,还要晓得为什么会用。是当初设计的初衷。 特点与性能反对 RV32IMFD 扩大指令集,通过RISC-V指令兼容性测试采纳五级流水线设计:IF、ID、EX、MEM、WB采纳自定义的总线设计:RBM(RISC-V Bus Matrix)反对中断:矢量中断和非矢量中断反对多种外设: UART、TIMER 等反对 C 程序运行反对 RT-Thread Nano 3.1.5反对 UART 模拟器,可在仿真环境中进行调试...二、软件平台rtthread nano 的版本是 3.1.5,间接从官网上下载的。 之所以不应用完整版 rt-thread,是因为我集体认为 rt-thread 的精髓是 kernel 和 FinSH。 因而 rtthread nano 足够了。 其实基本的起因是 YuHeng 上只有最最根本的外设,除了 UART 就是 TIMER。羞愧。 三、移植过程移植过程比拟非凡,因为是先有的 rtthread nano,而后才去革新的 yuheng-riscv。 最终成果应用我的项目中给出的运行脚本,能够间接创立出 Vivado 工程。为了不便 Simulation,设计一个 uart_monitor,有了它之后,就能够间接在 testbench 中捕获 UART 的输入。 ...

December 7, 2021 · 1 min · jiezi

关于嵌入式:基于Renode仿真开发OneOSLite的shell使用

1.简介之前文章应用Renode简略反对了OneOS-Lite的运行,但shell的应用却并没反对起来。 此次,咱们将基于Renode仿真开发OneOS-Lite的shell应用,通过虚拟环境,也能通过shell,体验更好的互动! 再次,咱们给出了相干源码地址和工具,不便大家体验! OneOS-Lite源码: https://gitee.com/cmcc-oneos/OneOS-Lite Renode工具下载:https://dl.antmicro.com/projects/renode/builds/renode-latest.msi OneOS-Cube编译工具下载:https://gitee.com/cmcc-oneos/one-os-cube 2.编译project首先通过git下载好OneOS-Lite源码,而后找到project目录下的STM32F407VG-renode我的项目。 在该project目录下关上OneOS-Cube工具,执行menuconfig进行配置,也能够间接执行scons进行编译。 生成的elf可执行文件放在源码根目录下的out文件夹外面。 3.应用Renode运行首先查看STM32F407VG-renode我的项目下是否有stm32f4_discovery.resc形容文件。 批改该形容文件中的文件门路为你本人电脑所在的门路。而后,关上Renode工具,执行该形容文件。 include @D:\gitee\OneOS-Lite\projects\STM32F407VG-renode\stm32f4_discovery.rescs 4.体验虚拟环境下的shell如上gif所示,咱们能够在shell命令行中,应用help命令查看常用命令。能够应用show_task,查看零碎中所存在的工作;能够应用show_mem查看零碎内存应用状况;能够应用show_mem,查看信号量的应用状况,等等。 5.关注&&分割gitee: https://gitee.com/cmcc-oneos/OneOS-Lite docs: https://oneos-lite.com/

December 1, 2021 · 1 min · jiezi

关于嵌入式:RTThread-Studio-高效率开发之工作集

本文由RT-Thread用户@ErikChan原创公布:https://club.rt-thread.org/as... 随着 RT-Thread Studio 反对的厂商越来越多,各位开发者平时用来开发或者学习的工程会越来越多,如果把这些工程存储在同一个工作空间中,您的我的项目资源管理器可能会如下所示: 各种类型的工程都在一个 我的项目资源管理器 中,在工程越来越多的状况下,要找到你的指标工程可能须要肯定工夫。如何将这些工程分类,不便咱们检索呢?工作集兴许能够帮到咱们。 什么是工作集工作集 (working set) 是一个用于对当前工作空间的工程分组的工具。如果咱们的 workspace 中有10个工程,5个是A我的项目相干的,5个是B我的项目相干的,如果10个工程都全副显示,比拟多,看着不不便,那么咱们就能够建一个 workingsetA 和 一个 workingsetB,对工程进行分组。每次开展 workingsetA 时,就会显示这 5 个和 A 相干的我的项目,反之亦然。 配置工作集点击 我的项目资源管理器 右上角 抉择工作集...,能够看到一个抉择工作集的对话框 : 点击 新建, 抉择 资源,点击 下一步: 填写工作集名称,勾选以后分类的工程,点击 实现,会发此工作集已增加到 抉择工作集 对话框中,只有勾选此工作集,并点击 确定,当前工作集即创立实现 配置完结后,查看我的项目资源管理器,会发现只存在当前工作集的工程 工作集组合依照 配置工作集 的办法,增加更多的工作集,如下图所示: 勾选所有咱们须要查看的工程对应的工作集,点击 确认,我的项目资源管理器 中会主动筛选这些工作集中的工程 切换工作集视图我的项目资源管理器 右上角点击 顶层元素, 抉择 工作集 ,咱们再回到我的项目资源管理器查看,整个视图构造更加清晰。咱们选中的工作集目录会列出在其中,每个工作集目录下会显示对应的所有工程。不在这些工作集中的工程,会汇合在 其余我的项目 工作集中 工作集设置在工作集上右键 属性,关上当前工作集的属性配置页,咱们能够在这里疾速重新配置工作集的名称,增加或者删除工作集中的工程。通过这种形式,能够很快捷地对对已有的工作集进行保护 好啦,以上就是对于工作集治理工程的一些分享,心愿对大家的我的项目开发和治理的过程中能有所帮忙。

December 1, 2021 · 1 min · jiezi

关于嵌入式:新的尝试-通过COAP接入精灵一号

前言我最近正在钻研 COAP 协定,也搬运了一个 (转)RFC7252-《受限利用协定》中文版 (COAP协定) COAP协定的文档,翻译得很不错,示例也很清晰,十分举荐大家去学习学习。 我发现我很多的传感器设施(比方我的光照传感器)很多时候其实没有什么数据交互,大部分都是 SDDC 维持连贯的耗费,这类传感器设施其实不须要这么高的实时性,齐全没必要去维持一个长连贯,这种纯传感器设施更加适宜 COAP 协定, COAP 协定数据发完就能够休眠了,功耗更低,更容易做低功耗。 最近恰好发现爱智仿佛也反对 COAP,在他们官网看到了 IoT Pi CoAP 设施开发 教程,之前始终是用SDDC协定连贯精灵一号,明天就尝试跟着官网教程通过 COAP 连贯精灵一号。 Node CoAP CLI通过如下命令装置 Node CoAP CLI: npm install coap-cli -g 输出 coap get coap://192.168.128.103/test 获取 CoAP Server 的 test 资源(这时没有信息,所以显示 no data),如下图所示:输出 coap put -p 灵感桌面 coap://192.168.128.103/test 批改 CoAP Server 的 test 资源为字符串 “灵感桌面”,如下图所示:再次输出 coap get coap://192.168.128.103/test 能够发现获取到上一步设置的字符串 “灵感桌面”了。留神 COAP 的IP地址在启动的时候能够看到。 总结依照官网的说法,我的确是把 COAP起来了,然而一个应用CoAP协定的设施通常既是客户端又是服务端,我还没方法测试客户端的性能。具体如何在爱智场景中更好的应用,我还得推敲一下,在传统的COAP应用的M2M(端到端)的交互场景,在退出爱智之后必定会发生变化,不晓得精灵一号和 COAP 又能碰撞出什么新的场景。

November 29, 2021 · 1 min · jiezi

关于嵌入式:嵌入式项目中打造自己的utils库ENUM转字符串

前言不晓得大家在调试的时候,是否常常须要将一些类型变量的名称打印进去呢。这里提供了一个对立的办法,在应用时只须要很少的代码量,就能够把宏定义、枚举的变量名称打印进去了。上面先上代码。 实现utils.h typedef struct { int32_t val; char* name;} Enumerate;char* enumerate_to_string(Enumerate* enumerate, uint8_t total, int32_t val);#define ENUMERATE_DEF(object) static Enumerate _ENUM_##object[]#define ENUMERATE_ITEM(val) {val, #val}#define ENUM_TO_STRING(object, val) enumerate_to_string(_ENUM_##object, ARRAY_LENGTH(_ENUM_##object), val)#define ARRAY_LENGTH(array) (sizeof(array) / sizeof(array[0]))这次的代码因为要遍历数组,曾经不能用简略的宏定义来齐全实现了。utils.c char* enumerate_to_string(Enumerate* enumerate, uint8_t total, int32_t val){ for(uint8_t i=0; i<total; i++) { if(enumerate[i].val == val) { return enumerate[i].name; } } return "EnumUnknow";}老规矩,示例: enum { UNDEFINED = 0, OBJECT, ARRAY, STRING, NUMBER, FLOAT, BOOL,};ENUMERATE_DEF(JsonTypeStr) = { ENUMERATE_ITEM(UNDEFINED), ENUMERATE_ITEM(OBJECT), ENUMERATE_ITEM(ARRAY), ENUMERATE_ITEM(STRING), ENUMERATE_ITEM(NUMBER), ENUMERATE_ITEM(FLOAT), ENUMERATE_ITEM(BOOL),};uint8_t json_type = ARRAY;printf("json_type:%s(%d)\n", ENUM_TO_STRING(JsonTypeStr, json_type), json_type);后果: ...

November 21, 2021 · 2 min · jiezi

关于嵌入式:RTThread学习笔记如何优雅地退出QEMU模拟器

本文由RT-Thread论坛用户@recan原创公布:https://club.rt-thread.org/as...1 问题场景 置信很多人也跟我一样,刚接触RT-Thread不久,正在学习RT-Thread的路上,然而学习一款嵌入式实时操作系统,没有一个硬件开发板,在我之前的认知外面,这应该很难把RTOS的内核代码调试起来吧? 直到理解了RT-Thread,我才晓得原来有QEMU模拟器这么个货色。 所以我很快就参考相干教程,把QEMU给装起来了,联合RT-Thread编译bsp的办法,很快我抉择的qemu-vexpress-a9固件很快就编译进去了。 看了bsp目录下有好几个启动脚本: bsp/qemu-vexpress-a9$ ls -al *.sh-rwxr-xr-x 1 recan system 168 Sep 6 10:43 qemu-dbg.sh-rwxr-xr-x 1 recan system 187 Oct 22 17:41 qemu-nographic.sh-rwxr-xr-x 1 recan system 166 Sep 6 10:43 qemu.sh 我一一尝试,发现在我的环境下,只有./qemu-nographic.sh可能跑起来。 bsp/qemu-vexpress-a9$ ./qemu-nographic.sh qemu-system-arm: -no-quit is only valid for GTK and SDL, ignoring optionWARNING: Image format was not specified for 'sd.bin' and probing guessed raw. Automatically detecting the format is dangerous for raw images, write operations on block 0 will be restricted. Specify the 'raw' format explicitly to remove the restrictions.ALSA lib confmisc.c:767:(parse_card) cannot find card '0'ALSA lib conf.c:4732:(_snd_config_evaluate) function snd_func_card_driver returned error: No such file or directoryALSA lib confmisc.c:392:(snd_func_concat) error evaluating stringsALSA lib conf.c:4732:(_snd_config_evaluate) function snd_func_concat returned error: No such file or directoryALSA lib confmisc.c:1246:(snd_func_refer) error evaluating nameALSA lib conf.c:4732:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directoryALSA lib conf.c:5220:(snd_config_expand) Evaluate error: No such file or directoryALSA lib pcm.c:2642:(snd_pcm_open_noupdate) Unknown PCM defaultalsa: Could not initialize DACalsa: Failed to open `default':alsa: Reason: No such file or directoryALSA lib confmisc.c:767:(parse_card) cannot find card '0'ALSA lib conf.c:4732:(_snd_config_evaluate) function snd_func_card_driver returned error: No such file or directoryALSA lib confmisc.c:392:(snd_func_concat) error evaluating stringsALSA lib conf.c:4732:(_snd_config_evaluate) function snd_func_concat returned error: No such file or directoryALSA lib confmisc.c:1246:(snd_func_refer) error evaluating nameALSA lib conf.c:4732:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directoryALSA lib conf.c:5220:(snd_config_expand) Evaluate error: No such file or directoryALSA lib pcm.c:2642:(snd_pcm_open_noupdate) Unknown PCM defaultalsa: Could not initialize DACalsa: Failed to open `default':alsa: Reason: No such file or directoryaudio: Failed to create voice `lm4549.out' ...

November 11, 2021 · 5 min · jiezi

关于嵌入式:嵌入式AIEAIDK610刷机ubuntu及系统根目录扩容

 欢送关注我的公众号 [极智视界],获取我的更多笔记分享 O_o >_<  o_O O_o ~_~ o_O 开箱 ~ 组件数量EAIDK-610外围板1MIPI触显一体屏1电源适配器1Type-C USB Cable1EAIDK610 根本硬件参数指标参数主控SoCRockchip RK3399(28nm HKMG制程)CPU2 Cortex-A72 + 4 Cortex-A53GPUArm Mali-T860 MP4视频处理器K VP9 and 4K 10bits H265/H264视频解码内存4GB双通道64Bit LPDDR3存储器16GB高速EMMC无线网络802.11 ac/a/b/g/n, 2.4G/5GHz, Bluetooth4.1以太网RJ45, 10/100/1000M自适应IO扩大I2C, I2S, SPI, UART, ADC, GPIO扩大存储MicroSD, 最大反对128GB操作系统Android/Linux 双系统电源12V/2A视频输入HDMI2.0, MIPI DSI, eDP1.3音频HDMI2.0, I2S摄像头2 * MIPI-CSI摄像头接口Type-CType-CUSB2 USB2.0, 3 USB3.0尺寸150mm * 75mmPCB参数8层板设计,沉金工艺刷机材料下载 EAIDK的材料公布的地址是: ftp://ftp.eaidk.net 对于刷机要下载的材料次要有三个: DriverAssitantToolsImage 其中DriverAssitant用于在CP端装置EAIDK的usb驱动的;Tools外面是零碎烧录软件;Image里有Android、Fedora、Ubuntu零碎,这里抉择烧录比拟罕用的Ubuntu零碎。 将Image里的文件拷贝到Tools/Images/Linux下。[外链图片转存失败,源站可能有防盗链机制,倡议将图片保留下来间接上传(img-dI41S8hz-1621304149132)(5EB752E6F4AA4918812A922CBDF70223)] 刷机先看硬件接口 LOADER模式烧录零碎1.接通EAIDK610电源;2.应用Type-C USB数据线连贯EAIDK610与电脑;3.按程序按下按钮1(restart)后,长按按钮2使EAIDK610进入刷机状态; 【问题】 进入LOADER模式烧录零碎失败(Prepare IDB Fail),该怎么办? ...

October 30, 2021 · 1 min · jiezi

关于嵌入式:最适合学习的轻量操作系统代码与文档的有效结合

1.OneOS-Lite网址OneOS-Lite文档网站:https://oneos-lite.com/ OneOS-Lite仓库地址:https://gitee.com/cmcc-oneos/... OneOS-Lite版本处于迭代中,欢送开发者提出宝贵意见,也心愿点击右上角,一键三连(fork、star、follow)。 值得阐明的是,OneOS-Lite的文档与代码仓库是紧密连接在一起的,处于同一仓库之中。对于喜爱物联网操作系统,心愿自学入门的童鞋们来说,十分无益。 2.文档在线浏览拜访OneOS-Lite网站:https://oneos-lite.com/ 拜访OneOS官方网站:OneOS - 中国移动物联网操作系统 (10086.cn) 3.文档本地浏览该文档和代码放在同一个仓库,开发者在下载代码的同时,已一并下载文档。咱们认为,联合文档查阅代码,是更高效的开发方式。相干源码目录均放有和代码相干的文档阐明。 开发者能够应用咱们提供的OneOS-Cube工具,启动一个本地服务器,能够不便地实时预览成果。在代码根目录输出如下命令: python -m http.server 3000后果如下: PS D:\xiaoneng\oneos-2.0> python -m http.server 3000Serving HTTP on :: port 3000 (http://[::]:3000/) ...::1 - - [21/Jul/2021 14:45:24] "GET / HTTP/1.1" 200 -则能够拜访地址:http://localhost:3000 ,浏览文档。 如果你的电脑有装置python3,能够进入该仓库,在命令行中执行命令: python -m http.server 3000如果你的电脑有装置npm,能够通过运行 docsify serve 启动一个本地服务器。默认拜访地址 http://localhost:3000 。 docsify serve oneos-2.0在此之前,须要应用npm或者yarn装置docsify-cli。 npm i docsify-cli -g# yarn global add docsify-cli4.文档编辑该文档和代码均开源部署到gitee仓库,若发现文档谬误,可至文档左上角,点击Edit Document,进行编辑并提交merge。 点击Edit Document后,会进入到gitee编辑页面,点击编辑。 提交信息处注明:文档批改点,如文档谬误/减少/删除/更新:×××。若有更多的批改思路,可增加至扩大信息。最初,选中提交的指标分支,点击提交,即可。 5.关注&&分割gitee: https://gitee.com/cmcc-oneos/OneOS-Lite ...

October 28, 2021 · 1 min · jiezi

关于嵌入式:固件分析

问题解决1、binwalk 报错 WARNING: Extractor.execute failed to run external extractor 'unstuff '%e'': [Errno 2] No such file or directory: 'unstuff', 'unstuff '%e'' might not be installed correctly 解决: mkdir -p /tmp/unstuff cd /tmp/unstuff wget -O - http://downloads.tuxfamily.or... | tar -zxv$SUDO cp bin/unstuff /usr/local/bin/cd -rm -rf /tmp/unstuff

October 27, 2021 · 1 min · jiezi

关于嵌入式:干货分享嵌入式学习路线公开书籍推荐视频推荐练手项目

哈喽,大家好,我是仲一。最近有小伙伴在微信私信我,如何学习嵌入式。始终想写一篇学习路线的文章,因为各种起因拖到了当初。趁着国庆节在家,终于肝完了这篇文章。 我集体是从STM32转到驱动开发的,在研二的时候学习了韦东山老师的驱动开发的课程,转到了驱动开发的方向。上面就如何学习嵌入式说下我集体的认识。 什么是嵌入式?嵌入式即嵌入式零碎,IEEE(美国电气和电子工程师协会)对其定义是用于管制、监督或者辅助操作机器和设施的安装,是一种专用的计算机系统。 国内广泛认同的嵌入式零碎定义是以利用为核心,以计算机技术为根底,软硬件可裁剪,适应利用系统对性能、可靠性、老本、体积、功耗等严格要求的专用计算机系统。 从利用对象上加以定义来说,嵌入式零碎是软件和硬件的综合体,还能够涵盖机械等从属安装。嵌入式零碎作为安装或设施的一部分,它是一个控制程序存储在ROM中的嵌入式处理器控制板。 事实上,所有带有数字接口的设施,如手表、微波炉、录像机、汽车等,都应用嵌入式零碎,有些嵌入式零碎还蕴含操作系统,但大多数嵌入式零碎都是由单个程序实现整个管制逻辑。 嵌入式方向嵌入式工程师须要把握的内容十分宽泛,次要包含嵌入式软件、嵌入式硬件、以及相干行业、产品的专业知识。作为嵌入式初学者,咱们不可能,也没有那么多精力把所有的常识到搞的很精通,咱们要学会抓住重点,学会取舍,达到一通百通,事倍功半的学习效果。首先嵌入式技术次要分为嵌入式软件和嵌入式硬件两大方向。 嵌入式硬件方向嵌入式硬件工程师次要工作职责是为产品设计硬件电路原理图,设计硬件PCB板,抉择适合的元器件,焊接调试硬件电路板,保障硬件电路板的可靠性、稳定性和抗干扰能力。 因为当初集成电路倒退迅速,大部分集成电路厂商都会提供参考电路,所以硬件电路原理图的设计相对来说比较简单,硬件工程师工作的含金量次要体现在产品的可靠性和稳定性设计、以及电磁兼容设计,这才是硬件设计工程师的含金量所在。 要成为一个资深的嵌入式工程师相当难,一方面要有十分扎实的理论知识,同时也要有相当的那种大型的、高频CPU、多层PCB板的设计教训。 嵌入式硬件工程师要学的课程次要有模仿电路设计、数字电路设计、电磁波实践等。相熟罕用的放大电路、滤波电路、电源电路设计和剖析。 嵌入式软件方向嵌入式软件工程师的职责次要是依据产品的性能需要设计好软件,让硬件工作起来。 嵌入式电子产品硬件局部,大部分都是雷同的,外围的都是由CPU、RAM和FLASH 几大部分组成,而软件就千差万别了。产品的具体性能都是由软件来实现的,一般来讲一个产品的实现,软件设计的工作量是硬件设计的4 ~ 5倍。 所以个别状况下,一个公司的软件工程师数量是硬件硬件工程师的4~5倍,嵌入式软件工程师需要比硬件工程师大很多,同时跟硬件工程师相比,嵌入式软件工程师学起来绝对容易些,所以这里我重点和大家谈一下嵌入式软件工程的学习路线。 学习嵌入式须要那些内容?C语言C语言是嵌入式的重中之重,Linux操作系统就是用C实现的,包含安卓零碎的底层也是C语言实现的,根底不牢,地动山摇,肯定要打好根底。 C语言学习过程中重点要放在指针,构造体,文件的解决,数组等。在学习过程中,肯定要多写代码,代码光看是看不会的。 遇到谬误不要怕麻烦,长于应用搜寻工具,百度,google,stack overflow。要晓得,你遇到的问题他人必定也会遇到过,个别在网上一搜就会有答案。 最初,要多调试程序,相熟调试的过程。程序三分写,七分调,没有谁的程序是能够一遍写对的。而且,多调试程序也能够让咱们了解程序具体是如何执行的。 根本的硬件原理嵌入式必定要和硬件打交道的。如果做嵌入式的应用层的话,可能和硬件接触的少一点。然而很多企业在面试的时候,也会问一些根本的硬件常识。 比方,我同学在面试联发科的C++工程师的时候,就问到了他很多对于硬件的常识(中断是什么,轮询是什么,二者有什么区别,一个根本嵌入式零碎有什么形成等),所以说硬件常识晓得越多越好,就算做应用层,一些最根本的也要晓得。 如果是打算做嵌入式底层的话,对于硬件常识的把握要求就比拟高了。比方,LCD是如何显示的,IIC协定/SPI协定是什么,如何收发数据,不同设施对于IIC的速度有什么要求,IIC协定上拉电阻个别是多少等等。只有明确了硬件原理,在看芯片手册的时候能力明确如何去配置各个寄存器。 此外,罕用的设施仪器的应用能把握就更好了,和硬件工程师扯皮的时候会用到。比方,万用表,示波器,逻辑分析仪等。不会也没关系,这部分不是必须的。 数据结构与算法这部分是程序员的必修课。在各大厂的秋招春招中,口试面试都是必考的。常见的数据结构如链表,二叉树,堆,队列,常见排序算法及其改良(快排,归并,冒泡,插入)等都是要把握的。如果是为了找工作,这部分内容有很多是要能达到手写的目标。(相干内容见我整顿的嵌入式软件工程师口试面试指南 ) 尽管嵌入式对于数据结构与算法的要求不像传统互联网那么高,而且,这些数据结构在当前的工作中不肯定能够用到,然而一些根本的咱们还是要晓得的。 像Linux内核中就用到了很多的链表,二叉树等。把握这部分内容对于咱们当前跳槽,深入研究操作系统都有很大的帮忙。 计算机根底这部分间接决定了咱们当前是否能走的更远,像操作系统的基本概念,计算机组成原理的内容都是须要咱们去理解的。比方自旋锁,信号量,阻塞与非阻塞等。 学习任何技术肯定要学到这门技术的边界,对于嵌入式来讲,它的边界就是汇编。汇编语言不要求会写,然而肯定要能看懂(其实就是Arm指令集)。在很多状况下,看反汇编文件对于bug的调试会更不便。 学习路线举荐入门:51+STM32次要学习内容 中断、定时器、串口、NAND FLASH、网络控制器、LCD屏、触摸屏等的工作原理。 学习资源举荐 视频:野火,晚点原子 书籍:野火,晚点原子 学习倡议 如果你当前的方向是驱动开发,这部分学习的话重点放在硬件常识的了解。买个开发板,学习下他们的例程是如何写的,罕用嵌入式外围设备的硬件工作原理,以及如何应用C语言来编程、管制这些硬件。把根本的外设都学习一遍,不求都会写,然而硬件原理肯定要搞清楚。 进阶:ARM-A+Linux这部分次要分为两个方向:Linux利用开发,Linux驱动开发。上面我会对这两个方向别离进行阐明。 有了之前的单片机根底,上手Linux开发就会快一点。能够买个ARM-A内核的开发板,ARM-A和stm32很多中央都是相通的,了解起来不难,二者最大的差异在于开发环境,很多新手入门Linux开发在搭建环境时就被劝退了。学习ARM-A前能够先看下 《ARM体系结构与编程》,再去看韦老师视频的话会了解快一点,视频中讲到的难了解的这里根本都有。 举荐一个 github仓库,下面放了上百本经典的嵌入式,计算机书籍,能够star一下,下次找书间接在下面搜寻就能够了: github 书籍宝藏仓库 github拜访不了能够拜访这个:gitee 书籍宝藏仓库 利用开发次要学习内容 Linux零碎调用概念,多过程,多线程实现多任务开发,多任务的同步互斥开发:互斥锁、信号量,网络数据通信过程,TCP/IP协定,Socket编程、TCP网络编程、UDP网络编程,QT编程。 学习资源举荐 书籍:《Unix环境高级编程》,《Unix网络编程》,《Qt Creator疾速入门》 视频:这部分视频没看过,能够在哔哩哔哩搜寻下,找播放量高的就能够。 驱动开发次要学习内容 Bootloader的工作流程、UBOOT的编译、裁剪与移植、Linux内核的编译、裁剪与移植,根文件系统的构建、BootLoader、内核和根文件系统的烧写。 重点驱动框架如:字符设施驱动、块设施驱动、LCD设施驱动、触摸屏设施驱动,总线设施驱动模型,输出子系统模型等。 学习资源举荐 书籍:《Linux设施驱动开发详解》《Linux设施驱动程序》 视频:强烈推荐韦东山老师!! 学习倡议 对照视频一点一点学习的过程中,刚开始第一遍看的话会有很多中央不明确,不要紧。如果在查阅了一些材料后还是不明确,能够先往后放放,不必深究。内核的许多货色一旦深究起来,越陷越深。 作为初学者,学习驱动开发次要学习驱动的框架(比方,输出子系统模型罕用的一个函数input_attach_handler()这个函数,刚开始咱们只须要晓得他是用来匹配dev设施和驱动软件就能够,临时能够不必晓得这个函数外部是如何实现的)。有肯定根底之后,能够再去深究其中的某个点,思考他们为什么这么写。 大神:各类简单驱动个别自学能到第二个阶段就曾经相当不错了。简单驱动局部个别是在工作中学习的。像Android驱动,音视频驱动,usb驱动,wifi,蓝牙协定,内核开发等都是比拟深刻一点的货色了,轻易拿出一块内容,深刻钻研下都能够成为这个畛域的专家。 学习资源举荐 书籍:这部分方向很多,我本人对很多方向也不理解。分享几本不错的内核书籍,《Linux内核设计与实现》《深刻了解LINUX内核》《深刻Linux内核架构》 视频:哔哩哔哩搜寻【Linux内核精讲】 总结在学习的过程中,咱们应该抓住不变的货色,思考下这些不变的内容是否对咱们当前把握变动的货色有帮忙。不论是学习任何技术,肯定要学到这门技术的边界。对于嵌入式开发来讲,汇编,这就是软件的边界。常常会在往上看到有人探讨,嵌入式有35岁危机吗?不能说没有,只能说压力相比于互联网可能会小点。嵌入式绝对于互联网来讲,技术的更新迭代没有那么快。如果能在嵌入式某个畛域深入研究,建设起技术的护城河,或者职业生涯会长一点。聪慧,好奇,合作,虔诚,随遇而安。举荐一个 github仓库,下面放了上百本经典的嵌入式,计算机书籍,能够star一下,下次找书间接在下面搜寻就能够了: ...

October 21, 2021 · 1 min · jiezi

关于嵌入式:OneOSCubeOneOS的瑞士军刀管理配置编译生成可执行文件全靠她

OneOS-Cube简介OneOS-Cube是针对物联网操作系统OneOS开发的一套windows辅助开发环境。它以开源编译结构工具为根底构建,以简略易用为设计主旨,尽可能的缩短普通用户的工具学习工夫。通过简略的几条命令,用户即可实现:系统配置,代码编译,第三方集成开发环境(如KEIL等)工程生成等工作。 OneOS-Cube具备如下特点: 去环境依赖,用户只须要下载残缺的工具包后,解压即可间接应用,而不须要对本机环境进行非凡配置;应用简略,OneOS-Cube将各个开源资源有机整合,使用户简略输出指令即可实现系统配置、编译、我的项目结构等工作,而不须要费时理解各个组件的外部实现;格调通用,在命令设计与操作习惯上尽量放弃与开源社区罕用的格调统一;易于保护,本计划充分利用已有的开源资源进行搭建,实现简略,也不便前期的降级保护;OneOS-Cube是独立于OneOS源码之外的,为OneOS服务的开发套件。它独立于OneOS的源码治理,二者之间不存在门路依赖关系。 根本形成OneOS-Cube以已有的开源收费工具为根底搭建。以Cmder为用户命令行,有机的整合了Kconfig、scons、MinGW及python脚本等构建起来的。次要组成部件如下图所示: 命令行环境Cmder: Cmder是一款收费的DOS零碎仿真器,体积玲珑,界面清新,反对多标签操作,兼容dos原有的指令。系统配置工具menuconfig: 即linux menuconfig的python实现版本,应用办法与linux menuconfig基本一致。遵循兼容LINUX的Kconfig语法,用户能够不便的沿用以前的kconfig配置文件对代码进行宏治理。开源软件scons:scons是一个Python写的自动化构建工具,从构建这个角度说,它跟GNU make是同一类的工具,是一种改良,并跨平台的gnu make代替工具,其集成性能相似于autoconf/automake。scons是一个更简便,更牢靠,更高效的编译软件。Python环境与.py文件: 次要目标是将scons, menuconfig, MinGW等有机的整合到Cmder中,以及增加scons的扩大选项,反对生成KEIL等可间接应用的我的项目文件。穿插编译工具链MinGW:MinGW是Minimalist GNUfor Windows的缩写。它是一个可自在应用和自在公布的Windows特定头文件和应用GNU工具集导入库的汇合,容许你在GNU/Linux和Windows平台生成本地的Windows程序而不须要第三方C运行时(C Runtime)库。OneOS-Cube将下面的组件有机的整合在了一起,用户只须要在命令行输出简略的指令,即可不便的进行系统配置,代码编译与第三方IDE工程制作。 罕用指令OneOS-Cube罕用的用户指令非常简单,命令行反对命令主动补全性能,罕用指令简略介绍如下: 命令阐明menuconfig系统配置命令,提供菜单交互环境对系统性能宏进行管制,宏配置后果主动保留到oneos\_config.h文件中。与输出menuconfig.bat的运行成果是等价的scons代码编译命令,将依据SConstruct、SConscript脚本的形容进行代码编译scons --ide=XXX制作IDE工程命令,其中"XXX"代表指标IDE环境,具体反对的IDE参考scons --help命令阐明。例如生成KEIL工程: scons --ide=MDKscons --help查看scons命令扩大选项阐明OneOS-Cube对scons命令反对的选项进行了丰盛的扩大,能够通过scons --help具体理解所有的扩大选项与应用办法。 关注&&分割gitee: https://gitee.com/cmcc-oneos/OneOS-Lite docs: https://oneos-lite.com/ 公众号:CMCC-OneOS

September 29, 2021 · 1 min · jiezi

关于嵌入式:如何把OneOSLite快速编译运行起来

概述总是会被问道,失去源码了,我该如何上手?我想应用某某组件,我该如何疾速把它给用起来?我没有板子,想先相熟下代码,我该怎么办?我想在某块板子上把零碎跑起来,我又该怎么办?等等,各种各种的问题。 当第一次面对不相熟的货色,兴许咱们都会有着些许蛊惑。而疾速上手篇就是因解惑而生的,目标就是为了第一次拿到咱们的OneOS-Lite时,开发者们心中能多一份从容与淡定。 初见OneOS-Lite在用Keil模拟器运行 STM32F103 示例工程代码时,咱们有必要先初步理解一下OneOS-Lite操作系统。进入到OneOS-Lite操作系统代码根目录下,咱们能够看到有多个文件夹和文件,如下图: 各个目录或文件的作用形容见下表。 目录或文件名称形容arch寄存和 MCU(或 CPU )架构体系相干的代码。components寄存组件代码,可进行裁剪。docs寄存一些文档,如疾速上手、开发工具应用等。drivers寄存驱动的形象层代码和具体外设的驱动代码。kernel寄存内核代码,如工作治理及调度、工作间同步以及通信、内存治理等代码。projects各种开发板的示例工程scripts寄存OneOS-Cube工具在编译结构时所须要的脚本文件。_sidebar.mdLite版本文档索引index.html本地文档网页浏览KconfigMenuconfig配置文件,代码工程(如projects目录下的示例工程)中的Kconfig文件会援用此文件SConscriptOneOS-Lite操作系统应用Scons构建工具时的根编译脚本,该脚本会援用其它目录的SConscript脚本,若在OneOS-Lite操作系统根目录减少新的代码目录,须要批改此文件。LICENSELicense 受权阐明。代码&&文档OneOS-Lite仓库,不仅仅是代码仓库,同时也是一份文档仓库。docs目录寄存着疾速上手、开发工具应用等文档。而在代码的目录下,也均放有相干的帮忙手册README.md。这样搁置的益处在于,在拉取代码的同时,文档也一并被拉取。浏览代码的同时,能够查阅文档,辅助代码开发,事倍功半有奇效。 根目录下的_coverpage.md、_sidebar.md、index.html则是帮忙咱们用于生成网页。应用办法能够查看根目录的README.md。 开发第一步拿到代码,开发的第一步就是,编译运行!这时,咱们须要进入projects目录,这里寄存着各种开发板的工程项目。如果你有开发板,你能够在外面抉择对应的开发板工程项目,进入其中。这里以咱们的万耦开发板stm32l475-cmcc-oneos为例。 应用OneOS cube(在应用该工具时,记得先装置好噢),输出命令menuconfig进行配置(如果对配置不相熟,能够先应用默认配置),最初输出命令scons进行编译。 如果你应用gcc,将编译生成elf文件,你能够在根目录下的out文件夹中找到她。 如果你应用mdk,你能够应用命令scons --ide=mdk5来生成mdk的我的项目工程,而后应用mdk进行编译。 如果你没有开发板,倡议应用stm32f103rc,来让Keil模仿STM32F103,以此来相熟咱们的rtos物联网零碎。详情可见Keil模仿STM32F103体验。

September 29, 2021 · 1 min · jiezi

关于嵌入式:嵌入式项目中打造自己的utils库二进制转换

前言在嵌入式开发中,不可避免要和驱动打交道。很多外设的寄存器都是应用2进制模式进行配置的。如果每次配寄存器,或回顾以前代码,对着16进制凭借大脑或者计算器来做2进制转换,就会十分麻烦。那么何不写一些代码,让2进制看起来更直观呢。尽管GCC是反对0b结尾的语法的(参考0x),但过于依赖会升高可移植性,不如本人手写一个吧。 实现上面间接贴代码: #define BIN(n) ((0x##n>>21 & 0x80) | \ (0x##n>>18 & 0x40) | \ (0x##n>>15 & 0x20) | \ (0x##n>>12 & 0x10) | \ (0x##n>>9 & 0x08) | \ (0x##n>>6 & 0x04) | \ (0x##n>>3 & 0x02) | \ (0x##n & 0x01) )示例: uint8_t val = BIN(10100101);printf("val:%X\n", val);后果: val:A5代码剖析uint8_t val = BIN(10100101)// 宏开展((0x10100101>>21 & 0x80) | \ (0x10100101>>18 & 0x40) | \ (0x10100101>>15 & 0x20) | \ (0x10100101>>12 & 0x10) | \ (0x10100101>>9 & 0x08) | \ (0x10100101>>6 & 0x04) | \ (0x10100101>>3 & 0x02) | \ (0x10100101 & 0x01) )// 用2进制示意((0x10100101>>21 & 0b10000000) | \ (0x10100101>>18 & 0b01000000) | \ (0x10100101>>15 & 0b00100000) | \ (0x10100101>>12 & 0b00010000) | \ (0x10100101>>9 & 0b00001000) | \ (0x10100101>>6 & 0b00000100) | \ (0x10100101>>3 & 0b00000010) | \ (0x10100101 & 0b00000001) )留神:此时10100101是一个16进制的数字,各位数据如下: ...

September 19, 2021 · 3 min · jiezi

关于嵌入式:最受嵌入式软件工程师青睐的系统

本文来源于网络,地址:https://itsfoss.com/beautiful-linux-distributions/ 免责申明:本文素材起源网络,版权归原作者所有。如波及作品版权问题,请与我分割删除。想必大家都晓得三大罕用操作系统:Linux、 Windows、 Mac OS。而最受嵌入式软件工程师青眼的零碎却是 Linux。 Linux 的发行版有很多,这里列举7个丑陋的 Linux 发行版(提醒:没有前后程序之分) 一、elementary OS 网站:https://elementaryos.cn/ elementary OS操作系统是最丑陋的Linux发行版之一。它基于macOS外观,同时为Linux用户提供了杰出的用户体验。如果你曾经习惯应用macOS,则应用elementary OS不会有任何问题。 另外,elementary OS操作系统基于Ubuntu,因而你能够轻松找到大量应用程序来实现工作。 elementary OS不仅限于外观,而且在一直的改良。因而,用户体验会随着每次更新而改善。 二、Deepin 网站:https://www.deepin.org/ Deepin是另一个丑陋的Linux发行版,最后基于Debian的稳固分支。动画(外观)可能有些让人手足无措-但看起来很漂亮。 它具备本人的Deepin桌面环境,其中蕴含多种基本功能,以实现最佳的用户体验。它可能不齐全相似于其余任何发行版的UI,但很容易习惯。 三、Pop!_OS 网站:https://system76.com/pop/ Pop!_OS设法在Ubuntu上提供了杰出的UI,同时提供了纯GNOME体验。 Pop!_OS既不浮华,也不蕴含花哨的动画。它设法通过完满地组合图标/主题来解决问题,同时从技术角度欠缺了用户体验。 四、Manjaro Linux 网站:https://manjaro.org/ Manjaro Linux是基于Arch的Linux发行版。只管装置Arch Linux是一项略微简单的工作,但Manjaro却提供了更轻松,更晦涩的Arch体验。 它提供了多种桌面环境版本,供你下载时抉择。无论抉择什么,你依然能够取得足够的选项来自定义外观和布局。 五、KDE Neon 网站:https://neon.kde.org/ KDE Neon实用于心愿简化设计语言办法但依然取得杰出用户体验的用户。 这是一个基于Ubuntu的轻量级Linux发行版。顾名思义,它具备KDE Plasma桌面,外观相对丑陋。 KDE Neon为你提供了最新最好的KDE Plasma桌面和KDE应用程序。与Kubuntu或其余基于KDE的发行版不同,你不用期待数月即可取得新的KDE软件。你能够在KDE桌面上取得很多内置的自定义选项。 六、Zorin OS 网站:https://zorinos.com/ Zorin OS是一个令人印象粗浅的Linux发行版,即便精简版也能提供良好的用户体验。 你能够尝试应用完整版或精简版(应用Xfce台式机)。该UI专为Windows和macOS用户量身定制。尽管基于Ubuntu,但它提供了很棒的用户体验。 如果您从其用户界面开始,则能够尝试应用Zorin Grid来治理在工作场合/家庭中运行Zorin OS的多台计算机。应用终极版,您还能够管制桌面的布局。 七、Nitrux OS 网站:https://nxos.org/ Nitrux OS是Linux发行版的独特代表,该发行版某种程度上基于Ubuntu,但并不齐全基于Ubuntu。 它着重于为正在寻找独特设计语言的用户提供了良好的用户体验,并且对Linux发行版有了全新的理解,它应用基于KDE的Nomad桌面。 Nitrux激励将AppImage用于应用程序。然而你也能够在基于Ubuntu的Nitrux中应用Arch Linux的pacman软件包管理器。 逆锋起笔是一个专一于程序员圈子的技术平台,你能够播种最新技术动静、最新内测资格、BAT等大厂大佬的教训、增长本身、学习材料、职业路线、赚钱思维,微信搜寻逆锋起笔关注!

September 9, 2021 · 1 min · jiezi

关于嵌入式:牛人志19岁开发者是如何成长为RTThread-杰出贡献者的

本期采访对象:杨嘉勋,中国上海某高中应届毕业生,长居于中国杭州。RT-Thread社区开发者,提交了龙芯的BSP补丁,以及mipssim的bsp,对立MIPS架构libcpu代码,MIPS 64位的晚期反对工作,以及为李志锐同学进行RT-Thread Smart的MIPS64开发提供反对。 杨嘉勋 GitHub首页:github.com/flygoat/ 年老的嘉勋除了是RT-Thread的卓越贡献者,也是Linux内核多个模块的maintainer。年仅19岁的他,是如何做到这些的呢?就让咱们跟着本期采访,走进他的故事: Q1:你是从哪里理解到RT-Thread的?记得应该是网上找开源RTOS的搜到了RT-Thread。 Q2:RT-Thread最令你喜爱的点是什么?RT-Thread 开发社区十分沉闷,而且建设起了从用户到开发者多级互助机制,使得上手解决问题到参加开发非常容易。 Q3:你有什么疾速上手RT-Thread学习技巧能够分享给大家吗?RT-Thread的代码组织以及文档工作做得十分好,集体认为其通用架构局部的代码品质不亚于Linux内核程度,因而大家在上手RT-Thread的时候遇到各种细节问题,能够毫无累赘的去翻阅源代码而不必放心无奈了解。另外对于一些架构设计上的疑难有时候能够通过翻阅Git Log和Issue历史来失去答案,能够看到先辈们在各种决策中的斟酌,对于了解有很大的帮忙。 Q4:据说你马上将要踏入大学,当初对大学的学习指标有布局了吗?我心愿在大学阶段我能够对我在计算机方面的常识进行一个系统性的补充与梳理。当初我计算机方面的常识体系基本上是靠解决问题的时候顺便钻研一下构建起来的,不足组织,而且适度偏重于技能。心愿大学的学习能够帮忙我把常识有条理编织成网,以期在未来能够解决更大的工程问题。 Q5:之后还打算应用RT-Thread做些什么?RT-Thread能够说是我的御用"捏玩具"OS,我的很多小玩意都是用RT-Thread作为RTOS来编制的,比方为了龙芯3A4000睿频计划所写的"miku-smc"零碎控制器固件,比方以前本人玩的无人机飞控,比方参加VEX机器人比赛的时候的底层代码......当前我的小玩具们应该还是会持续抉择RT-Thread。 另外RT-Thread尽管具备操作系统的必备个性,外围代码却十分精简。对我来讲很适宜拿来测试模拟器和硬件平台。我在开发QEMU的时候就经常拿RT-Thread做测试,如果当前有机会搭建本人的硬件平台,那么应该还是会抉择RT-Thread来验证。 他的开源之路最早能够追溯到2016年 这不仅仅是一篇牛人志,也是一份”江山代有才人出“的喜悦和一种”有志不在年高“的确信。在此咱们也真挚的祝福嘉勋同学,在业余的路线上越走越远,在更多的代码里写入Jiaxun Yang。 RT-Thread官方论坛:https://club.rt-thread.org/in...

July 26, 2021 · 1 min · jiezi

关于嵌入式:RTT串口V1版本的使用分析及问题排查指南一

本文由RT-Thread论坛用户123原创公布:https://club.rt-thread.org/as... RTT串口V1版本的应用剖析及问题排查指南(一)简述无论是刚接触 RT-Thread 的老手,还是教训老道的大牛们,他们应用 RT-Thread 的时候,应用最频繁最宽泛的外设,想必也非串口设施莫属。 回忆大家在移植一个新的BSP或者芯片时,如何验证是否移植胜利呢?是的,msh控制台窗口走一波 RTT 的 logo 信息,输入胜利了就根本代表移植胜利了。如下所示: \ | /- RT - Thread Operating System / | \ 4.0.4 build Dec 32 2021 2006 - 2021 Copyright by rt-thread teammsh >例如 finsh 组件,以命令行的形式实现人机交互的性能,在我的项目开发调试中有着无足轻重的作用,也是开发者们应用最为频繁的组件。 又例如 ULOG组件,AT组件,ymodem组件,RT_Link组件等,其底层数据流都有串口的形迹。因而,作为应用最频繁,覆盖面最宽泛的串口设施,如果把它搞懂,那将会在你的我的项目开发中锦上添花,或对嵌入式零碎也会有更粗浅的了解。 既然串口设施如此重要,受众人群又如此之多,应用范畴如此之广,那么有必要去理一理串口框架,汇总一下问题所在,为宽广开发者们指一下解决问题的方向。这也是这篇文章的次要工作。 本文会先联合STM32为平台,以串口V1版本做剖析阐明 (第一局部),并总结遇到串口方面的问题该如何解决的办法(第二局部)。 (在此须要解释一下,串口V1版本 这个名字非官方冠名,是自己为了辨别串口V2版本 而长期起的名字,当然后续会有串口V2版本的介绍阐明,快马加鞭更新中) 因为串口V1版本曾经历经多年的开发与迭代,也被少数开发者整顿成文,广为流传,本文若从新对其做粗疏的剖析显然是在节约各位看官的宝贵时间。因而,本文旨在总结串口应用过程中遇到的问题,弱化剖析串口的执行流程,如需具体的串口流程剖析,可移步文档核心串口章节,或者自行上网搜寻,置信你肯定能找到适合的答案。那么废话不多说,开整。 串口设施应用阐明串口流程剖析分为两局部,一部分是串口驱动,另一部分是串口框架,用户(应用层)应用串口时,是依照下图的模型进行操作的: 首先须要应用 Device 框架(源码地位在 src/device.c 中),什么是Device 框架,比方用到的 rt_device_open/close/read/write/control() 等API操作接口,就是应用的 Device 框架的接口。本文中不做深入探讨,理解即可。 其次是 UART 设施驱动框架 (源码地位在 components\drivers\serial\serial.c),串口设施驱动框架实现了Device框架的操作方法的接口rt_serial_open/close/read/write/control()。举个例子,例如Device框架的rt_device_open() 接口是关上一个设施对象,而对应到串口框架上,就是对接到了 rt_serial_open() 。 而后是串口设施驱动(源码地位在 bsp/xxx/drivers/drv_usart.c),串口设施驱动负责实例化串口设施 。这一层调用了 rt_hw_serial_register() 函数注册串口设施到操作系统中,也是与串口硬件间接打交道的媒介,这一层将会看到串口硬件的配置、读写寄存器、中断的操作等。 ...

July 20, 2021 · 1 min · jiezi

关于嵌入式:嵌入式系统中的EEPROM和FRAM

对于所有基于微控制器的嵌入式零碎而言,存储器都是其中的次要元件。例如开发人员须要足够的ram以存储所有易失性变量、创立缓冲区以及治理各种利用堆栈。RAM对于嵌入式零碎相当重要,同样,开发人员也须要肯定空间用于存储利用代码、非易失性数据和配置信息。 EEPROM往往是开发人员最先、最常思考用于嵌入式零碎的存储器件。在嵌入式应用中,这类非易失性存储器通常用于存储系统配置参数。例如,连贯至CAN总线网络的设施可能会将CAN ID存储于EEPROM。 EEPROM的以下个性使其成为嵌入式零碎开发人员的现实之选:•小封装尺寸•绝对实惠的价格•100kbps至1000kbps的典型比特率范畴•标准化电气接口•通常反对I2C和SPI接口 值得注意的是,某些MCU微控制器中也蕴含EEPROM。因而配置需要不能超过4KB,否则开发人员就须要应用内部存储器件,或应用微控制器的闪存来模仿EEPROM以扩大容量。 只管EEPROM深受青眼,却也存在一些潜在缺点:•擦/写操作寿命通常为1,000,000次•写周期约为500ns•写入单个数据单元须要多条指令•数据保存期为10年以上(近期的产品可达100年以上)•易受辐射和高工作温度影响 EEPROM适宜的利用泛滥,但对于汽车、医疗或航天零碎等可靠性要求较高的利用,开发人员则心愿应用FRAM等更牢靠的存储器解决方案。 FRAM是“铁电随机存取存储器”的缩写,相较于EEPROM存储器,颇具劣势:•速度更快(写周期小于50ns)•写操作寿命更长(高达1万亿次,EEPROM仅为100万次)•功率较低(工作电压只需1.5V)•辐射耐受性更强 FRAM的存储容量与EEPROM相当。例如,Cypress的FRAM系列容量范畴从4Kb至4Mb。其中,FM25L16B-GTR容量为16Kb。该器件采纳8引脚SOIC封装,工作频率可达20MHz。 针对高端产品,Cypress推出容量为4Mb,反对的接口速度高达40MHz的铁电RAM。这款FRAM存储器具备以下个性:•151年数据保存期•100万亿次读/写•间接代替串行闪存和EEPROM 正如您所猜测,FRAM的价格比EEPROM低廉,因而抉择适宜利用的存储器时,务必认真衡量器件的各种工作环境因素。

July 5, 2021 · 1 min · jiezi

关于嵌入式:嵌入式工作流程开发工作流-Activiti-框架中子流程的使用指南

子流程子流程形容子流程(Sub-process)是一个蕴含其余节点,网关,事件等等的节点自身就是一个流程,同时是更大流程的一部分.子流程是齐全定义在父流程里的,所以叫做内嵌子流程子流程的两种次要场景: 子流程能够应用继承式建模: 很多建模工具的子流程能够折叠,把子流程的外部细节暗藏,显示一个高级别的端对端的业务流程总览子流程会创立一个新的事件作用域: 子流程运行过程中抛出的事件,能够被子流程边缘定义的边界事件捕捉,就能够创立一个仅限于这个子流程的事件作用范畴应用子流程的限度: 子流程只能蕴含一个空开始事件, 不能应用其余类型的开始事件,子途程必须至多有一个完结节点程序流不能逾越子流程的边界 图形标记子流程显示为规范的节点(圆角矩形),下体面流程是折叠的,只显示名称和一个加号标记,展现了高级别的流程总览:下体面流程是开展的,子流程的步骤都显示在子流程边界内:应用子流程次要是为了定义对应事件的作用域示例: 考察软件/考察推荐工作须要同步执行,两个工作须要在同时实现,在二线反对解决之前.这里,定时器的作用域(比方节点须要及时实现)是由子流程限度的: XML内容子流程定义为subprocess元素.所有节点,网关,事件,等等.是子流程的一部分,都须要放在这个元素里 <subProcess id="subProcess"><startEvent id="subProcessStart" />... other Sub-Process elements ...<endEvent id="subProcessEnd" /> </subProcess>事件子流程形容事件子流程是由事件触发的子流程.是BPMN 2.0中的新元素事件子流程能够增加到流程级别或任意子流程级别用于触发事件子流程的事件是应用开始事件配置的,所以事件子流程是不反对空开始事件的事件子流程能够被音讯事件,谬误事件,信号事件,定时器事件,或弥补事件触发.开始事件的订阅在蕴含事件子流程的作用域(流程实例或子流程)创立时就会创立.当作用域销毁也会删除订阅。事件子流程能够是中断的或非中断的 一个中断的子流程会勾销以后作用域内的所有流程非中断事件子流程会创立一个新的同步分支中断事件子流程只会被每个激活状态的宿主触发一次非中断事件子流程能够触发屡次子流程是否是中断的,应用事件子流程的开始事件配置事件子流程不能有任何进入和外出流程 当事件触发一个事件子流程时,输出程序流是没有意义的当事件子流程完结时,无论以后作用域曾经完结(中断事件子流程的状况或为非中断,子流程生成同步分支会完结事件子流程的限度: Activiti只反对中断事件子流程Activiti只反对应用谬误开始事件或音讯开始事件的事件子流程 图像标记事件子流程能够显示为边框为虚线的内嵌子流程 XML内容事件子流程的XML内容与内嵌子流程一样,然而要把triggeredByEvent属性设置为true <subProcess id="eventSubProcess" triggeredByEvent="true"> ...</subProcess>实例应用谬误开始事件触发的事件子流程的实例,事件子流程是放在流程级别的,作用于流程实例事件子流程的XML: <subProcess id="eventSubProcess" triggeredByEvent="true"> <startEvent id="catchError"> <errorEventDefinition errorRef="error" /> </startEvent> <sequenceFlow id="flow2" sourceRef="catchError" targetRef="taskAfterErrorCatch" /> <userTask id="taskAfterErrorCatch" name="Provide additional data" /></subProcess>事件子流程也能够增加成内嵌子流程.如果增加为内嵌子流程,其实是边界事件的一种代替计划 示例: 上面两个流程图,两种状况内嵌子流程会抛出一个谬误事件,两种状况谬误都会被捕捉并应用一个用户工作解决绝对于两种场景都会执行雷同的工作,然而两种建模的形式是不同的: 内嵌子流程是应用与执行作用域宿主雷同的流程执行的: 意思是内嵌子流程能够拜访它作用域内的外部变量当应用边界事件时,执行内嵌子流程的流程会删除, 并生成一个流程依据边界事件的程序流继续执行,这意味着内嵌子流程创立的变量不再起作用当应用事件子流程时,事件是齐全由它增加的子流程解决的. 当应用边界事件时,事件由父流程解决这两个不同点能够帮忙决定是应用边界事件(内嵌子流程)还是内嵌事件子流程(事件子流程) 来解决特定的流程建模或者实现问题 事务子流程形容事务子流程是内嵌子流程, 能够用来把多个流程放到一个事务里事务是一个逻辑单元, 能够把一些独自的节点放在一起, 这样它们就能够一起胜利或一起失败事务的可能后果有三种: 事务胜利,没有勾销也没有因为问题终结 如果事务子流程是胜利的,就会应用外出程序流继续执行如果流程起初抛出了一个弥补事件,胜利的事务可能被弥补和一般内嵌子流程一样,事务可能在胜利后,应用两头弥补事件进行弥补事务勾销,流程达到勾销完结事件 所有流程都会终结和删除,触发弥补的一个独自的流程,会通过勾销边界事件继续执行在弥补实现之后,事务子流程会应用勾销边界事务的外出程序流向下执行事务被问题完结,抛出一个谬误事件而且没有在事务子流程中捕捉(如果谬误被事务子流程的边界事件处理了,也会这样利用) 不会执行弥补事务三种不同的后果:BPMN事务与ACID(技术)事务的关系: BPMN事务子流程与技术(ACID)事务不能相互混同,BPMN事务子流程不是技术(ACID)事务畛域的BPMN事务和技术事务有以下不同点: ACID事务个别是短期的.BPMN事务可能继续几小时,几天,甚至几个月能力实现: 思考事务中蕴含的节点可能有用户工作,个别人员响应的工夫比利用工夫要长在其余状况下,bpmn事务可能要期待产生一些事务事件,例如要依据某种秩序执行这种操作通常要相比更新数据库的一条数据,或把一条信息保留到事务性队列中,耗费更长的工夫来实现BPMN事务个别要逾越多个ACID事务,因为不能在整个业务节点的过程中放弃一个技术性的事务BPMN事务会逾越多个ACID事务,所以会丢失ACID的个性: 比方,在上述例子中,假如预订旅店和刷信用卡操作在独自的ACID事务中执行,假如预约旅店节点曾经胜利了当初处于一个两头不稳固状态,因为咱们预约了酒店,然而还没有刷信用卡在一个ACID事务中,要顺次执行不同的操作,也会有一个两头不稳固状态不同的是,这个中间状态对事务的内部是可见的.比方,如果通过内部预约服务进行了预约,其余应用雷同预约服务的局部就能够看到旅店被预约了.这意味着实现业务事务时,咱们齐全失去了隔离属性(放弃隔离性,能够为ACID事务取得更高的并发,是能够齐全管制,两头不稳固状态也只继续很短的工夫)BPMN业务事务也不能应用通常的形式回滚: BPMN事务逾越了多个事务,BPMN事务勾销时一些ACID事务可能曾经提交了.这时不能被回滚BPMN事务运行工夫很长,不足隔离性和回滚机制都须要被区别对待: 应用弥补执行回滚: 如果事务范畴抛出了勾销事件,会影响曾经执行胜利的节点,并应用弥补处理器执行弥补隔离性的不足通常应用特定畛域的解决办法来解决: 在下面的例子中,一个旅店房间可能会展现给第二个客户,在咱们确认第一个客户付费之前.尽管这可能与业务预期不符,预约服务可能抉择容许一些适度的预约事务会因为危险而中断,服务必须解决这种状况: 曾经预约了旅店,然而始终没有付款的状况(因为事务被中断了),这时预约服务须要抉择一个策略,在旅店房间预约超过最大容许工夫后,如果还没有付款,预约就会勾销综上所述,ACID解决的是通常问题:回滚,隔离级别和启发式后果,在实现业务事务时,须要找到特定畛域的解决方案来解决这些问题BPMN事务目前的限度: BPMN标准要求流程引擎能依据底层事务的协定处理事件: 比方如果底层协定触发了勾销事件,事务就会勾销ACID事务顶层的一致性和优化并发: BPMN事务保障一致性: 要么所有节点都胜利一些节点胜利,对其余胜利的节点进行弥补无论哪种形式,都会有一致性的后果要探讨一些activiti外部的状况BPMN事务的一致性模型是叠加在流程的一致性模型之上的Activiti执行流程是事务性的,并发应用了乐观锁.在Activiti中,BPMN谬误,勾销和弥补事件都建设在同样的ACID事务与乐观锁之上: 勾销完结事件只能触发它理论达到的弥补如果之前服务工作抛出了未声明的异样弥补处理器的成果无奈提交,如果底层的acid事务的参与者把事务设置成必须回滚.当两个并发流程达到了勾销完结事件可能会触发两次弥补,并因为乐观锁异样失败阐明Activiti中实现BPMN事务时,雷同的规定也作用域一般的流程和子流程为了保障一致性,重要的是应用一种形式思考实现乐观事务性的执行模型 图形标记事务子流程显示为内嵌子流程, 应用双线边框 XML内容事务子流程应用transaction标签 <transaction id="myTransaction" > ...</transaction>实例 ...

June 7, 2021 · 1 min · jiezi

关于嵌入式:Linux-驱动开发-驱动世界里的宏伟建筑

哈喽,我是老吴。 是否每一个上进的人都会感觉本人还能够再致力一点? 事件到了最初,只有没达成目标,总能把失败的起因归为 "没有再致力一点"。 然而,对致力的最大谬误认知就是:工夫越长,过程越苦楚,代表我越致力。 想一想,是否有更正当的致力形式? 以下是注释: 一、什么是 device model?二、device model 的 3 个外围概念三、bus、device、driver 是如何关联的?四、bus、device、driver 最简略示例五、小结六、相干参考一、什么是 device model?Linux 的 device model 是一个旨在对立治理所有设施驱动的模型。 它犹如一栋规模宏大的修建: 以 kobject、kset、attribute 等作为根本的建筑材料, 结构出撑持驱动世界的 bus、device、driver 三大组件, 最初通过 sysfs 在各种根底的建筑材料之间建设彼此的互联档次关系,并向外界提供了与修建内设施进行互动的文件接口。 点击查看大图 device model 有什么作用? 能够将 device 的硬件形容 和 driver 进行拆散,晋升 driver 的代码复用率; 能够对 device 进行分类; 能够遍历 device 和 driver; 能够更好地出现设施的拓扑关系; 能够通过 sysfs 拜访设施; 能够让设施反对热插拔; ... 为了管制篇幅,本文将重点放在与驱动工程师关系最严密的 bus、device、driver 3 个 组件。 二、device model 的 3 个外围概念device model 里有 3 个外围的概念: busdevicedriver什么是 bus?bus 代表一种总线,例如 I2C、SPI、USB 等。 ...

April 30, 2021 · 3 min · jiezi

关于嵌入式:单片机串口DMA收发方案

概述网上各大教程对于串口的应用根本都是轮询发送、中断接管,极大节约了MCU的性能,同时中断接管只能应酬低速率的场景,对于要求波特率达到115200及以上的场景来说极其容易丢字节导致整个零碎异样不稳固。 这篇文章我先以 RT-Thread 的串口计划作为切入点,而后给出我在STM32F1平台上基于RT-Thread Nano 实现的计划。 本计划实现的是非阻塞式的收发,不波及 posix 的对接。posix 其实也是调用这些非阻塞接口,只不过还加了些对这些接口的返回判断再退出 wait_queue 来实现阻塞、唤醒,不具体开展来刻画。 本计划的发送解决是应答的高并发场景,小内存MCU或者串口发送只在一个线程内的按你最简略的应用形式来。小内存的 MCU 接管举荐间接应用 DMA+IDLE 形式,怎么简略怎么来。而且不倡议用串口框架,本人实现不仅牢靠还可控!! RT-Thread 串口框架RT-Thread 串口框架反对用户本人抉择以下述计划关上串口:轮询形式理论我的项目中根本是不必的;中断形式的发送会导致大量的中断,占用太多MCU资源,而且 RT-Thread 把中断发送做的跟轮询一样;中断形式的接管不仅会导致大量的中断而且对于高速通信需要的场景不实用。DMA形式无论是发送还是接管都不须要CPU参加,解放了CPU,程序只须要对几个中断解决就行。 2.1. DMA发送RT-Thread 串口框架中对于 DMA 发送应用的是 dataqueue 队列。 DMA 发送操作将要发送的数据指针及其长度保留在 dataqueue 成员中,发送时依照先进先出的规定从中取一块,将其保留的数据指针赋值给 DMA 内存地址。 这里不波及数据拷贝,所以数据指针指向的内存区是部分的,用户须要在应用程序中通过设置信号量或其余形式来同步发送实现,否则将导致不平安的指针应用。多并发的状况下这种就会导致各种各样的问题了。 ..... 原文链接:https://club.rt-thread.org/ask/article/2594.html

March 9, 2021 · 1 min · jiezi

关于嵌入式:80211-抓包软件对比之-Microsoft-Network-Monitor

从事WiFi嵌入式软件开发的同学,802.11协定层抓包剖析是一个须要熟练掌握的一个技能,须要通过剖析WiFi底层802.11协定层的数据包来定位问题。同时从学习802.11协定的角度而言,最无效的学习办法就是通过抓包来学习,从抓到的数据包中,能够验证之前实践学习局部的常识,通过对数据包的了解,不仅能够加深对802.11协定的了解,还能进步本人在理论应用中问题剖析、解决能力。 因为要抓到802.11协定层的数据包须要无线网络进入混淆模式,在不同的操作系统下须要不同的软硬件配合能力实现,本文分3局部顺次介绍: Windows下Microsoft Network MonitorWindows下OmnipeekUbuntu下Wireshark在不同操作系统下实现802.11数据包捕捉剖析。 Microsoft Network Monitor嵌入式开发工程师开发环境通用应用Windows,因为Windows下很多业余的抓包工具都须要特定的无线网卡和驱动反对才可实现混淆模式802.11数据捕捉。在某些场景下,这些业余的抓包工具不肯定会随身携带。所以先介绍一个Windows下Microsoft官网提供的轻量型的抓包工具Microsoft Network Monitor。 Microsoft Network Monitor是Microsoft官网提供的一款收费网络协议数据分析工具,不仅能够抓包,而且能够基于抓包后果做一些简略的数据分析。Microsoft Network Monitor以后最新版本为3.4,同时反对32位和64位零碎,可在Microsoft官网收费下载,下载地址为:https://www.microsoft.com/en-us/download/details.aspx?id=4865。我应用的零碎是Win1064位零碎,电脑自带的网卡驱动不反对混淆模式,测试发现外接了360USBWiFi可实现混淆模式_。_ 软件装置过程较简略,没有须要特地留神的中央。须要留神的是,装置实现后须要重新启动一下电脑,否则软件可能无奈正确显示以后网络列表。 以管理员身份运行Microsoft Network Monitor 3.4,在“Select Networks”中会正确显示以后全副网卡,能够通过Friendly Name和Description找到咱们要抓包的网卡。 一、一般模式Microsoft Network Monitor 默认是“Local Mode”,该模式下软件只能捕捉以后选中的网卡收发的数据,是无奈捕捉到没有通过该网卡的数据的。 选中网卡后,点击“New Capture”,在弹出的页面中选中“Start”即可开始抓包。 可点击“Pause”暂停以后抓包;点击“Stop”进行以后抓包,“Stop”之后再次“Start”将革除当=前已捕捉到的数据。 在“Frame Summary”框内可发现软件反对捕捉到WiFi治理帧、TCP、UDP等数据包,同时软件还可显示“Process Name”、“Source”、“Destination”等网络信息。 剖析以上数据,咱们能够发现,以后抓到的数据都是以后网卡收发的数据,即便802.11治理帧,也是以后网卡发给路由器的。 二、混淆模式咱们在WiFi开发过程中定位问题通常须要通过无线网卡,捕捉路由器与其余WiFi设施之间通信的数据,一般模式下软件并没有捕捉到。Microsoft Network Monitor反对无线网卡进入“Monitor Mode”,该模式即为混淆模式,此时可捕捉路由器与其余WiFi设施之间的通信数据包。 点击“Capture Settings”进入设置页面,能够看到以后选中的无线网卡 双击须要设置“Monitor Mode”的无线网卡,点击“Scanning Options” 在“WiFi Scanning Options”页面中,选中“Switch to Monitor Mode”,而后持续抉择信道扫描模式,软件反对2种信道切换模式,固定信道和信道扫描的模式。在信道扫描模式下,每一个信道勾留一会,依照工夫片程序,一个个信道开始抓包,这里须要依据理论须要设置。 设置实现后,点击“Apply”,并且须要放弃该页面为开启状态不能敞开,否则无线网卡主动退出“Monitor Mode”。 返回主界面,再次点击“Start”开始“Monitor Mode”下捕捉 从“Frame Summary”能够看到捕捉到了各种802.11治理帧,同时捕捉到了很多“Source”和“Destination”不一样的数据包。 抉择须要具体分析的数据包,可在“Frame Details”和“Hex Details”中查看具体数据包数据 点击“File”上面抉择“Save As”,可将以后捕捉数据保留为“.cap”,可供“wireshark”、“Omnipeek”等工具剖析。三、总结从理论应用中发现,Microsoft Network Monitor性能无奈与“wireshark”、“Omnipeek”等业余抓包软件相媲美,然而能满足日常根本的802.11数据包捕捉、802.11协定学习。上手快,受限也较少,更多功能也须要在应用在一直挖掘。

November 26, 2020 · 1 min · jiezi

关于嵌入式:我花了半个月整理出了这篇嵌入式开发学习指南学习路线知识点梳理

不好意思久等了这篇文章让小伙伴们久等了。 一年多以来,对于嵌入式开发学习路线、布局、看什么书等问题,被问得没有一百,也有大几十次了。然而无奈本人对这方面理解无限,所以每次都没法交代,搞得切实不好意思。 然而方法总归是有的,正如前篇文章《最近厚着脸皮分割了不少老同学》所聊,尽管我本人不从事这些方向,但寻思了一下,我的同学和敌人中,多少还是有一些从事相干方向并且在一线(或曾在一线)工作过的,所以我就请他们帮忙一起梳理这几个我不相熟畛域的学习路线,这次嵌入式开发就是其中之一。 这篇文章之所以拖这么久,因为沟通切实太费时间了,毕竟大佬们都挺忙,况且梳理总结这件事件自身就比拟繁琐,所以等到当初才收回来。 本文在开源我的项目:https://github.com/hansonwang99/JavaCollection 中已收录,外面蕴含不同方向的自学编程路线、面试题汇合/面经、及系列技术文章等,资源继续更新中...嵌入式开发难吗?通过这次和同学的交换,我本人也学到了很多。因为嵌入式方面的很多货色我也不懂,我也算学习了。 站在我集体角度来看,联合以前的学习体验。我感觉嵌入式开发比互联网软开(比方Java后端)还是要难一些的,比方咱们搞Java开发的,再怎么说,根本也都是用户态的货色,但嵌入式很多货色都深刻到了内核态,所以难度必定是有的,体现在几个方面吧: 首先,嵌入式它偏底层,软、硬件都要懂,对能力要求原本就要高不少;其次,嵌入式开发的学习门槛也要高一些,而且像Linux平台下的开发流程,很多人都不习惯,摸不清;再者,嵌入式学习的正向反馈可能比较慢,尤其是后期学习阶段,导致没有什么成就感,也就保持不上来了,所以往往就弃坑了。然而话说回来,做IT的就是这样,越往底层对人能力的锤炼就越高,所以对于能力来说是在升维,所以反过来,如果嵌入式做得好的,我感觉来做互联网问题也不大,到时候就属于降维打击了。 总体学习思路总体来说,还是能够把嵌入式学习分为三个大的阶段: 首先根底学习阶段,这就包含通用编程根底(C语言、数据结构/算法、操作系统、计网、计组、Linux零碎根底)和根本的硬件根底,扎实地把握这两大根底,是后续继续倒退和不断进步的能源源泉。 其次就是嵌入式利用编程阶段,或者说零碎平台编程阶段。因为个别会以特定的嵌入式平台和特定的嵌入式操作系统为依靠,相熟这个零碎平台上的编程办法和流程。以常见的ARM+Linux平台为例,须要把握从内存治理到多任务编程、文件I/O、网络编程,甚至图形化界面编程等几个大的方面。 最初就是深刻嵌入式底层开发阶段,最常见的就是内核开发和驱动开发,这些统属于内核态开发领域,所以须要对操作系统外部机制有所涉猎和了解,在此基础上须要把握从零碎移植到内核开发、驱动开发的各个细节,这是成神之路。 大体思路是这样,接下来看一下具体的学习路线和知识点梳理。 学习路线+常识梳理花了很长时间,就为了整顿这张具体的常识路线脑图。当然因为工夫无限、能力也都无限,毕竟嵌入式全体系切实太宏大了,包含我那做嵌入式的同学,也不可能什么都懂,有些货色可能没笼罩到,不足之处,还心愿小伙伴们一起交换补充,一起欠缺提高。 书籍举荐最初,依照整体的学习路线,再举荐一些对应的经典书籍: 后记:本文在开源我的项目:https://github.com/hansonwang99/JavaCollection 中已收录,外面蕴含不同方向的自学编程路线、面试题汇合/面经、及系列技术文章等,资源继续更新中...这次就分享到这里吧,下篇见。 每天提高一点点 慢一点能力更快

August 6, 2020 · 1 min · jiezi

ESP8266架构探索运行的起始

都2020年了,想必大家对ESP8266都很熟了,没用过至少也听说过。所以抛开丰富有趣的各种应用,下面来说一说很少人讨论的ESP8266的架构。 架构ESP8266集成了增强版的超低功耗Tensilica’s Xtensa L106 32-bit内核处理器。为什么说增强版呢,因为Tensilica处理器的特点,就是工程师可以对内核IP做定制化,乐鑫购买IP后,继续进行优化,形成了增强版。该处理器使用RISC指令集,CPU时钟速度最⾼可达160MHz,芯⽚内置了存储控制器,包含ROM和SRAM。但这个ROM呢,固化一些底层代码,用户是修改不了的,用户程序必须由外部Flash存储,理论上最大可支持16MB的存储。所以这就是为什么买ESP8266模块时,都要看用的多大的Flash,使用SDK开发方式的话,从编译到下载都要选择正确的Flash。 代码和内存的存储分配熟悉计算机原理的都知道,计算机的本质就是计算,通过执行不同的指令,操作不同的数据来得到不同的数据结果。指令在代码中可以认为是不同的语句,数据就是不同的变量。在单片机中,一般指令存在ROM中,数据变量存在RAM中。有这两个概念后,再看看ESP8266这款芯片。ESP8266片上有固化的ROM,需要用户外置Flash来存储程序。在物理上有 64KB 的 iRAM,96KB 的 dRAM。其中: iRAM:instruction RAM,用来存放指令,位于 0x40100000 开始的 64KB 空间。dRAM:data RAM,用来存放数据,位于 0x3FFE8000 开始的空间。所以ESP8266一共有这么几个存储的地方:片上ROM、片上iRAM、片上dRAM,片外Flash。 存储区作用片上ROM固化芯片底层代码,用户无法改动片上iRAM存放指令,用于执行程序片上dRAM存放数据片外Flash存放用户代码、用户数据等知道iRAM后,就知道我们Flash的地位并不怎样。代码并不是直接在Flash上取指令运行的,而是加载到iRAM中来运行的。 代码开始的地方ESP8266中所有代码都是加载到iRAM后运行的,只是有的提前加载(IRAM段),有的用时加载(IROM段)。IROM段使用部分称为Cache,IRAM段为真iRAM。ESP8266有个特殊的Cache概念。在计算机系统中,Cache是为了解决CPU读内存速度过慢而设置的。Cache比内存的读取速度更快,但比寄存器读取速度慢。通常Cache只是小空间存储,用来缓存CPU读取过的内存数据。ESP8266中的Cache使用了iRAM,iRAM共有64k,分了一半(32k)给Cache。ESP8266的底层启动后,会将对应Flash的空间映射到Cache空间。用户代码是存在外置Flash的,那么芯片启动后,IRAM段加载到iRAM中,底层代码(前面说的固化ROM内)也会将Flash空间映射到Cache中。因为Cache的空间远小于Flash,所以使用了特殊的映射技术可以将最大1M+1M的Flash映射到32K的cache中。而哪些代码需要加载到iRAM,哪些还是放在Cache中运行,则是在链接时,通过指定不同的段来区分。写过代码的朋友就知道了,在NONOS SDK中,需要ICACHE_FLASH_ATTR来定义函数,以使代码不占用iRAM空间。在RTOS SDK中,使用IRAM_ATTR定义函数,将需要频繁运行,讲究效率的函数放到iRAM中。这个便是iRAM和iROM的区别引起的。好了,到了这里,我们就知道代码编译生成二进制文件,烧录到Flash后,是怎么由ESP8266执行起来的了。别走开,下面有彩蛋。 ROM的底层ROM的底层是看不见的,但是既然我们能用到,那就有它的痕迹https://github.com/espressif/ESP8266_NONOS_SDK/blob/master/ld/eagle.rom.addr.v6.ld PROVIDE ( ets\_memcmp = 0x400018d4 );PROVIDE ( ets\_memcpy = 0x400018b4 );PROVIDE ( ets\_memmove = 0x400018c4 );PROVIDE ( ets\_memset = 0x400018a4 );PROVIDE ( ets\_post = 0x40000e24 );PROVIDE ( ets\_printf = 0x400024cc );PROVIDE ( ets\_putc = 0x40002be8 );PROVIDE ( ets\_rtc\_int\_register = 0x40002a40 );这份ld文件里,就描述了底层函数在ROM中的地址,也告诉我们,到底提供了多少功能。但NONOS SDK官方也已经停止更新了,在RTOS SDK中,底层函数作用也逐渐在淡化,像操作外设的都改成了在用户代码里编写的形式。 ...

July 4, 2020 · 1 min · jiezi

什么是嵌入式编程如何入门和提高

作者 谢恩铭,公众号「程序员联盟」(微信号:coderhub)。转载请注明出处。原文:http://www.jianshu.com/p/d593...内容简介什么是嵌入式什么是交叉编译入门和提高嵌入式1. 什么是嵌入式嵌入式可以说是目前涵盖面最广、最火的职业之一。那么,什么是嵌入式呢? 这个问题三言两语还真说不清楚。 嵌入式,英语是 embedded,表示“嵌入式的,植入的,内含的”。 因为首先,嵌入式有不少组合名词,例如嵌入式系统,嵌入式软件,Linux 嵌入式,Android 嵌入式,嵌入式 Web,等等。 通常对嵌入式的定义其实是对"嵌入式系统"的定义。 网上对嵌入式系统的中文定义实在是不好理解,比较官方的中文定义是: 嵌入式系统是:以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。我个人感觉:如果是从来没接触过嵌入式的朋友,看了上面这段定义,估计跟没看差不多,还是一头雾水。当年我刚开始学习嵌入式时看到这段解释也是这般感受。 当然了,这段定义是正确的,不过就是有点学究味,不够形象,不够"接地气"。 那么如何给嵌入式系统一个接地气的定义呢? 我可以先列举目前用到嵌入式系统的 IT 领域: 物联网Android 嵌入式开发。Linux 嵌入式开发。智能手机,平板,智能手表。可穿戴设备,例如 Google 眼镜,小米手环。微软的 Xbox 和 Kinect。无人机。VR 头盔。无线路由器。等等我想不必再列举也已经感觉到了吧:是的,嵌入式正在渗透到我们生活的方方面面, 而且会越来越多地被使用。 但是,例如 Android 和 iOS 的纯 app 开发的话一般就不能算是嵌入式了,只能算软件开发。 未来,也许我们可以有一身轻便的可穿戴设备,衣食住行都用得到。甚至未来可以穿一身轻薄的“飞行衣”,想去哪都行。 嵌入式编程,虽然入门门槛比较高,但是如果你能啃下嵌入式这个“硬柿子”,学了很多方面的知识,那么其他一些编程领域,也许就能比较轻松地掌握了。就好比你如果熟练掌握了 C语言和 C++,那么其他一些编程语言一般都可以轻松驾驭了。 我觉得原版英语的定义应该会更便于理解,因此我将维基百科上对嵌入式系统的定义翻译如下(不才, 若翻译有误请补充指正): An embedded system is a computer system with a dedicated function within a larger mechanical or electrical system, often with real-time computing constraints. It is embedded as part of a complete device often including hardware and mechanical parts. Embedded systems control many devices in common use today. Ninety-eight percent of all microprocessors are manufactured as components of embedded systems.嵌入式系统首先是一个具备特定功用的计算机系统,是包含在更大的机械或电子系统里面的,通常有实时的计算约束。嵌入式系统作为一个部件被嵌入在一个完整的设备里(补充:这也是“嵌入式”的名字由来),这个设备通常有硬件和机械的部分。当今时代,嵌入式系统控制了很多通用设备。98% 的微处理器被生产用来作为嵌入式系统的部件。Examples of properties of typically embedded computers when compared with general-purpose counterparts are low power consumption, small size, rugged operating ranges, and low per-unit cost. This comes at the price of limited processing resources, which make them significantly more difficult to program and to interact with.嵌入式系统和通常的系统有区别,主要体现在以下特性:低能耗,小尺寸,受限的计算范围,单元成本较低。这些特性是以有限的处理资源为代价的,使得嵌入式系统更难以编程和交互。 ...

June 22, 2020 · 2 min · jiezi