使用 C 语言如何控制硬件
1、前言
计算机、单片机或者其他各嵌入式系统中包括各种各样的硬件,各类硬件通过系统中的各级总线进行互联,由 CPU 居中控制和协调,进而完成各类工作。 对硬件的控制包括总线上互联的各类硬件,如内存控制器、Flash 控制器、USB & PCIe 等各类高速总线、SPI、 I2C & UART 等各类低速外设,以及通过 IO 直接相连的 LED、开关器件等。 此外,CPU 本身也是硬件。
计算机、单片机或者其他各嵌入式系统中包括各种各样的硬件,各类硬件通过系统中的各级总线进行互联,由 CPU 居中控制和协调,进而完成各类工作。 对硬件的控制包括总线上互联的各类硬件,如内存控制器、Flash 控制器、USB & PCIe 等各类高速总线、SPI、 I2C & UART 等各类低速外设,以及通过 IO 直接相连的 LED、开关器件等。 此外,CPU 本身也是硬件。
本文将探讨基于ESP-IDF的ESP32-FreeRTOS项目,该项目提供了丰富的示例,帮助开发者快速掌握ESP32的硬件功能和FreeRTOS实时操作系统。通过学习这些示例,你可以轻松构建各种物联网应用。
环境:oneinstack
续期命令:
|
|
执行完成后,不能关闭远程窗口,等待执行完成,续期自动完成.
使用STM32F407VET6 开发一个项目,使用了 LVGL,然后关注一下 STM32 的 RAM 信息,官方介绍 STM32F407 的 RAM 可用 RAM 是192K,但这 192 K不是连续的,而是分了三块,其中只有两块是连续的,而因为 STM32F4 没有 MMU 这样的内存管理单元,可以将连续的虚拟内核地址翻译到非连续的物理地址,所以我们使用 STM32F407 的 RAM 时必须要注意地址以及内存空间的大小!
#define LV_MEM_CUSTOM 1#define LV_MEM_POOL_DEF_SIZE (32 * 1024 * 1024) (32MB)#define configAPPLICATION_ALLOCATED_HEAP 1#define configTOTAL_HEAP_SIZE 0x1000000 (16MB)malloc 动态内存配置malloc 内存: 16MB
|
|
|
|
|
|
无RTOS(裸机环境)下实现分时调度法,非常适用于单片机环境下的一般应用场景
RTOS优点不用多说了,但对于一些简单的业务需求,移植一个操作系统又显得非常麻烦,且非常占用系统资源。
新建一个 lib 类型的 crate:
|
|
procedural macros 只能在 proc-macro 类型的 crate 内定义,所以需要修改 Cargo.toml:
|
|
删除 src/lib.rs 里的全部内容,然后定义第一个过程宏( procedural macro ):
|
|
目前它的作用跟下面这个声明宏( declarative macro ) 是等价的:
The proc-macro2 crate is a drop-in replacement for proc_macro except that it is available outside of macros - which makes it testable. Its types are all convertible to and from the proc_macro types and have identical methods.
The usual pattern for writing a nontrivial macro is to use proc_macro only for the entry point, and use proc-macro2 for all of the real work:
|
|
It’s common to import items from proc-macro2 so they can be used unqualified, and just used fully qualified names for proc_macro , since the only time you will use it is in the entry point. It’s also usual to put the core components in a separate library crate, which does not have a dependency on proc_macro .
分享一些收集的Rust开发嵌入式项目源码,方便参考。
https://github.com/wuhanstudio/gd32vf103-rust-blinky
现在Rust开发环境中,很多都要收费,不收费的又不好用,由于本人早年做java和cpp开发,对Eclipse的环境特别熟悉, 于是上网找了下,看看有没有基于Eclipse的Rust开发插件,果然还是被我找到了。