embedded 相关问题

嵌入式系统是指嵌入式系统,涉及微控制器/ DSP固件编程,实时系统,电子接口,硬件驱动器,串行总线通信等领域。

Pleo LifeOS 工具套件

有人知道 Pleo LifeOS(1.0 或 1.1)仍然可用的任何工具套件吗?据说,Pawn 曾经有过一个工具链,但现在似乎不再可用了。或者...

回答 2 投票 0

如何交叉编译ia188em芯片的C代码

我继承了一个使用Innovasic ia188em处理器(以前是AMD的AM188)的旧项目。我可能需要修改代码,因此需要重新编译。不幸的是,我不确定...

回答 2 投票 0

ESP32 GY-BME/PM280 传感器未被 i2c 总线拾取

概述 我购买了 GY-BME/PM280 压力、温度、湿度和高度传感器,开始涉足嵌入式编程和物联网设备/家庭自动化。 首先,我买了: 面包板

回答 1 投票 0

如何将C源代码转换为intel .HEX文件

我想更改设备启动徽标。我把我的标志放在0x00060000-0x0007FFFF地址范围内,它是128kb。我正在使用这个在线工具来调整大小、格式化和生成数组。 https://

回答 1 投票 0

定义了一点,但没有名称?

所以我有一些用于我的主板的 iodefine 的代码。我在结构体中看到了很多这样的内容。它到底在做什么?它只是最后 4 位的占位符吗?为什么它不会导致编译器错误并且......

回答 2 投票 0

MSP430FR5739 以 16 位无符号整数进行位循环

我正在开发一个项目,必须使用 MSP430FR5739 旋转 16 位无符号整数中的位。 例如: 右移一格后,0111 0000 1101 1101 必须变为 1011 1000 0110 1110。 我读过

回答 2 投票 0

指针转换字节序

#include“stdio.h” typedef 结构 CustomStruct { 短元素1[10]; }自定义结构; 无效 F2(字符* Y) { *Y=0x00; 是++; *Y=0x1F; } 无效 F1(自定义结构* X) { F2((字符*)X); 打印(...

回答 3 投票 0

是否可以将整个数组保存在CPU寄存器中

在下面的代码中, int main() { 寄存器 int arr[4]; /* ... */ } 是否有可能“arr”被分配在某个CPU寄存器中。 (考虑cpu有4个或更多寄存器)。 否则编译器会忽略

回答 5 投票 0

尝试返回指针数组会导致处理器硬故障

我有一些继承的代码正在移植到新设备(Cortex M0+ 内核英飞凌部分)。该代码在引导加载程序和应用程序之间具有共享 API。我正在尝试调试一个硬故障,该故障...

回答 1 投票 0

如何验证AVR ATmega328P中TIMER2溢出频率?

我已经将ATmega328P的timer2配置为正常模式并在10000Hz溢出。我的代码如下。我试图验证频率。所以我只是在每次溢出中断时切换引脚 PB5。

回答 1 投票 0

在STM32H563 MCU上执行函数HAL_FLASH_OB_Launch是否会导致系统复位?

对于STM32H563 MCU,执行HAL_FLASH_OB_Launch函数后会导致系统复位吗? 根据我的实验,在执行 HAL_FLASH_OB_Launch 之前,我可以通过 I2C 从 MCU 读取数据...

回答 1 投票 0

GStreamer 内存缓冲区使用情况

我正在嵌入式系统上试验 gstreamer,我想知道是否有办法确定 gstreamer 将使用的最大内存量。 如果我有一个简单的源 -> 过滤器 ->

回答 1 投票 0

我在为 ARM 构建交叉编译器工具链时遇到错误(错误 2)

我想使用实用程序构建交叉编译器工具链。 所以我下载了所有 tar 文件。然后我更改为父构建根目录。 然后我配置为ARM & ARM 920T。我取消了所有...

回答 2 投票 0

如何使 C 代码符合 MISRA C:2012 合规性?

我正在使用 PC-Lint 验证 MISRA C:2012 标准到我的 MCU 代码。 我遇到了以下错误。这里我发布了一个示例代码,其中我在条件语句中遇到了错误。 1] 无符号整数文字,不带...

回答 2 投票 0

如何在全志H5上启动附加内核?

我正在尝试弄清楚如何为四核全胜 h5 启动 core0 以外的核心。 C_RST_CTRL 寄存器(又名 CPU2 复位控制寄存器)底部有四个位,这意味着它们...

回答 2 投票 0

AVR嵌入式问题(rstack和cstack)

我在大学有一个项目,其中asm中的main必须调用c中的函数,但我不知道如何初始化堆栈(rstack和cstack)。我提到该项目是在 atmega16 上进行的。 主汇编

回答 1 投票 0

通过wpa_cli测试和添加新无线网络配置的过程

我正在尝试实现一个使用 wpa_cli 和 iw 来配置/添加/删除/测试我的 wpa conf 的新网络条目的代码。 要添加新网络 - 我的流程是: wpa_cli 列表_网络 # 我的...

回答 1 投票 0

ARM Cortex 处理器中缓存清理_和_无效的意义是什么?

ARM Cortex 处理器中的缓存清理和失效有何意义? clean将缓存内容写入内存,然后invalidate保证这些刚刚写入的内容被再次读取...

回答 1 投票 0

无法使用 Rust 在 microbitV2 中共享 LED 矩阵和按钮之间的电路板

我正在通过尝试使用 nrf52833_hal 重新创建 microbitV2 库来学习嵌入式 rust,但遇到了困难。 pub 结构 LedMatrix { 栏:[Pin>; 5], 行:[Pin 我正在通过尝试使用 nrf52833_hal 重新创建 microbitV2 库来学习嵌入式 rust,但遇到了困难。 pub struct LedMatrix { col: [Pin<Output<PushPull>>; 5], row: [Pin<Output<PushPull>>; 5], } pub struct Button { pub a: Pin<Input<Floating>>, pub b: Pin<Input<Floating>>, } pub struct Board { port0: p0::Parts, port1: p1::Parts, } impl Board { pub fn init() -> Self { let p = hal::pac::Peripherals::take().unwrap(); Self { port0: p0::Parts::new(p.P0), port1: p1::Parts::new(p.P1), } } pub fn led_matrix(&self) -> LedMatrix { LedMatrix { col: [ self.port0.p0_28.into_push_pull_output(Level::High).degrade(), self.port0.p0_11.into_push_pull_output(Level::High).degrade(), self.port0.p0_31.into_push_pull_output(Level::High).degrade(), self.port1.p1_05.into_push_pull_output(Level::High).degrade(), self.port0.p0_30.into_push_pull_output(Level::High).degrade(), ], row: [ self.port0.p0_21.into_push_pull_output(Level::Low).degrade(), self.port0.p0_22.into_push_pull_output(Level::Low).degrade(), self.port0.p0_15.into_push_pull_output(Level::Low).degrade(), self.port0.p0_24.into_push_pull_output(Level::Low).degrade(), self.port0.p0_19.into_push_pull_output(Level::Low).degrade(), ], } } pub fn button(&self) -> Button { Button { a: self.port0.p0_14.into_floating_input().degrade(), b: self.port0.p0_23.into_floating_input().degrade(), } } } 但是我从clippy中得到了这个错误 error[E0507]: cannot move out of `self.port0.p0_28` which is behind a shared reference ▐ --> src/lib.rs:28:17 ▐ | ▐ 28 | / self.port0 ▐ 29 | | .p0_28 ▐ | |__________________________^ move occurs because `self.port0.p0_28` has type `nrf52833_hal::gpio::p0::P0_28<nrf52833_hal::gpio::Disconnected>`, which does not implement the `Copy` trait▐ 30 | .into_push_pull_output(Level::High) ▐ | ---------------------------------- `self.port0.p0_28` moved due to this method call ▐ | ▐ note: `nrf52833_hal::gpio::p0::P0_28::<MODE>::into_push_pull_output` takes ownership of the receiver `self`, which moves `self.port0.p0_28` ▐ --> /home/rom/.cargo/registry/src/index.crates.io-6f17d22bba15001f/nrf-hal-common-0.18.0/src/gpio.rs:887:1 基本上每个self.port.px_xx都是错误 我的目标是能够 #[entry] fn main() -> ! { let board = Board::init(); let mut led = board.led_matrix(); let mut buttons = board.button(); 所以我询问 ChatGPT,它尝试通过将 &self 替换为 self 来解决 pub fn led_matrix(self) -> LedMatrix { . . . pub fn button(self) -> Button { 这样做会产生另一个问题,board被移动到let mut led = board.led_matrix();并且无法进一步使用。 最后,我会尝试 let mut led = Board::init().led_matrix(); let mut buttons = Board::init().button(); 没有出现错误,但buttons似乎劫持了整个板,现在led什么也不做。 如有任何建议,我将不胜感激。我不需要完整的答案,只需为我指明方向,我可以尝试自己学习。 ChatGPT 就快到了。您确实需要将 self 作为自有值传递给您的函数才能使其正常工作。 hal板条箱采用端口并将其转换为输出引脚,以防止您随后使用该端口进行非法操作。 但是,如果您这样做,则调用 led_matrix 或 button 函数将消耗 Board。为了完成这项工作,您需要稍微重组您的代码。 通常,外围设备位于 take 的顶部,然后相关部分作为自有值传递给需要它们的函数。例如,您可以将结构定义更改为:main 然后从主程序中使用它,如下所示: type LedPin = Pin<Output<PushPull>>; type ButtonPin = Pin<Input<Floating>>; pub struct LedMatrix { col: [LedPin; 5], row: [LedPin; 5], } pub struct Button { pub a: ButtonPin, pub b: ButtonPin, } pub struct Board { matrix: LedMatrix, button: Button, } impl Board { pub fn new( col0: LedPin, col1: LedPin, col2: LedPin, col3: LedPin, col5: LedPin, row0: LedPin, row1: LedPin, row2: LedPin, row3: LedPin, row4: LedPin, a: ButtonPin, b: ButtonPin, ) -> Self { let matrix = LedMatrix { col: [col0, col1, col2, col3, col5], row: [row0, row1, row2, row3, row4], }; let button = Button { a, b }; Board { matrix, button } } } 以这种方式进行操作可以非常清楚地表明,没有人会两次使用端口上的任何引脚。如果您确定程序中的其他地方都不需要访问 #[entry] fn main() -> ! { let p = hal::pac::Peripherals::take().unwrap(); let port0 = p0::Parts::new(p.P0); let board = Board::new( port0.p0_14.degrade().into_push_pull_output(Level::Low), port0.p0_15.degrade().into_push_pull_output(Level::Low), port0.p0_16.degrade().into_push_pull_output(Level::Low), port0.p0_17.degrade().into_push_pull_output(Level::Low), port0.p0_18.degrade().into_push_pull_output(Level::Low), port0.p0_19.degrade().into_push_pull_output(Level::Low), port0.p0_20.degrade().into_push_pull_output(Level::Low), port0.p0_21.degrade().into_push_pull_output(Level::Low), port0.p0_22.degrade().into_push_pull_output(Level::Low), port0.p0_23.degrade().into_push_pull_output(Level::Low), port0.p0_11.degrade().into_floating_input(), port0.p0_12.degrade().into_floating_input(), ); loop {} } ,那么您可以将整个端口的所有权授予 port0 函数,然后永远释放对其的访问权限。 Rust 很安全,但很冗长...

回答 1 投票 0

CCS 错误[128] 此行之前需要 #DEVICE

我正在 错误[128] C:\Program Files\PICC\drivers\string.h 34:此行之前需要 A #DEVICE 编译简单的 helloWorld.c 时 #包括 无效主() { printf("嗨")...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.