标签: microcontroller

6
推荐指数
2
解决办法
2629
查看次数

"6通道DMA"是什么意思?

当我正在研究TMS320F2806x(Piccolo)MCU的架构时,我发现其中的一个功能是6通道DMA.你能否详细说明DMA 的渠道是什么意思?

microcontroller

6
推荐指数
1
解决办法
1451
查看次数

你怎么理解Hex文件?(扩展地址记录)

我正在尝试为PIC18制作一个引导程序,所以我需要了解如何正确处理hex文件.例如,我理解如何处理以下十六行.

:040C0000E2EFFFF030
Run Code Online (Sandbox Code Playgroud)

04:字节数

0C00 :十六进制数字的地址

00:数据记录

E2EFFFF0:数据序列

30:校验和

所以我会知道如何处理上面的行,但是下面的十六行怎么样.

:020000040001F9
Run Code Online (Sandbox Code Playgroud)

02 :字节数

0000: 地址

04:扩展线性地址记录

0001:数据

F9:校验和

但究竟我该怎么做呢?我是否将这些数据写入该地址?你能把它翻译成机器语言吗?

顺便说一下,我的应用程序从地址开始,0c00bootloader从地址开始,在0020它上面是中断向量.谢谢!

更新

如果hex文件的第三行是以下,地址会FFC0改变吗?

:10FFC000FF00FF00FF00FF00FF00FF000001E9EF5E
Run Code Online (Sandbox Code Playgroud)

我在想,因为hex文件的第二行有04(扩展线性地址记录),那么我应该添加0001到第三行的地址FFC0,所以新地址就是这样的.

$0001 + $FFC0将等于1FFC0,所以第3行的下一组数据字节应写入此地址1FFC0,这是正确的吗?

c embedded microcontroller pic bootloader

6
推荐指数
1
解决办法
2121
查看次数

STM32H743 微控制器 (Cortex-M7) 的此链接描述文件中是否使用了所有 RAM 部分?

我知道最新的 STM32 微控制器中的 RAM 存储器包含几个具有显着速度差异的部分。这就是为什么我试图围绕这些设备的链接描述文件(注意:arm-none-eabi-gcc工具链)。不幸的是,CubeMX 为 STM32F767ZI 生成的链接描述文件只是忽略了 RAM 中的不同部分:

/* Specify the memory areas */
MEMORY
{
  RAM (xrw)      : ORIGIN = 0x20000000, LENGTH = 512K
  FLASH (rx)      : ORIGIN = 0x8000000, LENGTH = 2048K
}
Run Code Online (Sandbox Code Playgroud)

 
STMicroelectronics 似乎已经做了一些努力,使其最新的STM32H743ZI的链接描述文件更加复杂:

/* Specify the memory areas */
MEMORY
{
  DTCMRAM (xrw)      : ORIGIN = 0x20000000, LENGTH = 128K
  RAM_D1 (xrw)      : ORIGIN = 0x24000000, LENGTH = 512K
  RAM_D2 (xrw)      : ORIGIN = 0x30000000, LENGTH = 288K …
Run Code Online (Sandbox Code Playgroud)

microcontroller gcc arm stm32 linker-scripts

6
推荐指数
1
解决办法
3124
查看次数

我可以在 Kotlin 中对微控制器进行编程吗?

是否有可能以某种方式在 Kotlin 上对 Arduino 或 ESP8266 微控制器进行编程?关于单板计算机(即 Raspberry Pi)的相同问题。

microcontroller kotlin

6
推荐指数
1
解决办法
3217
查看次数

GCC 如何阻止 ROM 中函数的隐式函数声明误报警告?

我想摆脱代码库中的所有隐式函数声明警告。但存在一个问题,因为某些函数在工厂时已编程到微控制器 ROM 中,并且在链接期间链接器脚本仅提供函数地址。这些函数由 SDK 中的代码调用。

在编译过程中,gcc 当然会发出警告implicit-function-declaration。我怎样才能摆脱这个警告?

需要明确的是,我理解为什么会出现警告以及它的含义。但在这种特殊情况下,SDK 的开发人员保证代码将按照隐式规则运行(即隐式函数仅接受 int 并返回 int)。所以这个警告是误报。

这只是 gnu-C-99,不是 c++。

想法:

  • 猜猜参数类型,在标题中写一个原型并包含它?
  • 告诉 gcc 使用某些 gcc 属性将此类函数视为误报?

c microcontroller gcc

6
推荐指数
1
解决办法
1万
查看次数

为 PIC24 重新定义寄存器掩码以提高可读性是不好的做法吗?

我对使用 PIC 芯片比较陌生,所以这可能是一个新手级别的问题,但我正在尝试编写一个头文件,其中包含所有 I/O 端口的 TRIS/ODC/INIT 掩码.

在内置该芯片的 PCB 上,任何给定组件都可能使用来自多个端口的引脚,并且可能有十几个单独的组件需要详细评论。例如,与特定 SPI ADC 模块的接口使用来自端口 A、D 和 F 的引脚。

对我来说,编写此文件的读者友好的方式似乎是按组件组织文件,以便读者一目了然地知道正在使用哪些引脚,它们是配置为输入还是输出,以及它们是如何初始化的。

例如,仅显示 TRIS 掩码信息,以下是我用来演示我正在谈论的特定 ADC 模块的一段代码:

#define PORTD_TRIS_MASK 0x00
#define PORTF_TRIS_MASK 0x00

// ...
// lots of hardware configuration stuff goes here
// ...

// ANALOG INPUT - THERMOCOUPLE 1
// Thermocouple ADC chip MAX31856 DNP communicates over SPI
// Accepts any type of thermocouple
// TC1_CS pulled high
// TC1_DRDY pulled high

#define TC1_MOSI    LATAbits.LATA14
#define TC1_MISO    PORTDbits.RD10
#define TC1_SCK     LATDbits.LATD11
#define …
Run Code Online (Sandbox Code Playgroud)

c microcontroller pic

6
推荐指数
1
解决办法
156
查看次数

GD32VF103龙眼纳米中断不工作

简介:
我买了一块配备GD32VF103 Risc-V MCU的Longan Nano评估板。
我可以运行视频播放器演示,并使用 VS Code、PlatformIO 和 DFU 工具编译和加载工作代码。下面是电路板和演示运行的视频。
在此输入图像描述
https://www.youtube.com/watch?v=84_PzcNiJb4

我想做的
就是为机器人比赛建造一个机器人作为一种爱好。我使用 Microchip 4809 8 位 MCU 作为电机控制器,但在以 2KHz 运行 PID 控制器时达到了 MCU 的极限,而且我还没有添加电流环路。我想升级电机控制器,我决定选择 Longan Nano,因为它有 LCD 屏幕、优越的 CPU 马力以及学习 Risc-V。
https://www.youtube.com/watch?v=1dQMktoiuLg

问题
我可以在轮询中很好地运行 Longan Nano 的外围设备。我真的很努力地想让中断起作用,但没有成功。我尝试读取轮询中断标志,它们就是这样工作的,所以我认为这要么是 ISR 处理程序链接到 Start.s 中的中断向量表的链接器问题,要么是 ECLIC 的配置问题。

这是一个正确运行的轮询示例。红色 LED 以 2Hz 的频率闪烁,按下启动按钮将切换蓝色 LED。

#include <gd32vf103.h>

void init()
{
    rcu_periph_clock_enable(RCU_GPIOA);
    rcu_periph_clock_enable(RCU_GPIOC);

    gpio_init(GPIOA, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_1);
    gpio_init(GPIOA, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_2);
    gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ,GPIO_PIN_8);

    gpio_init(GPIOC, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_13);

    gpio_bit_set(GPIOC,GPIO_PIN_13);
    gpio_bit_set(GPIOA,GPIO_PIN_1);
    gpio_bit_set(GPIOA,GPIO_PIN_2);

    rcu_periph_clock_enable(RCU_AF);
    
    eclic_init(ECLIC_NUM_INTERRUPTS);
    
    eclic_priority_group_set(ECLIC_PRIGROUP_LEVEL3_PRIO1);
    eclic_irq_enable(EXTI5_9_IRQn, 1, 1);

    exti_deinit(); …
Run Code Online (Sandbox Code Playgroud)

c++ microcontroller interrupt interrupt-handling riscv

6
推荐指数
1
解决办法
872
查看次数

如何在没有运行时开销的情况下轻松配置类?

我最近开始使用 Arduinos,并且来自 Java 世界,我正在努力应对微控制器编程的限制。我越来越接近 Arduino 2 KB RAM 的限制。

我经常面临的一个难题是如何使代码更具可重用性和可重新配置性,而不增加其编译大小,尤其是当它仅用于特定构建中的一种特定配置时。

例如,用于7 段数字显示器的通用驱动程序类至少需要配置每个 LED 段的 I/O 引脚编号,以使该类可用于不同的电路:

class SevenSeg {
private:
    byte pinA; // top
    byte pinB; // upper right
    byte pinC; // lower right
    byte pinD; // bottom
    byte pinE; // lower left
    byte pinF; // upper left
    byte pinG; // middle
    byte pinDP; // decimal point
    
public:
    void setSegmentPins(byte a, byte b, byte c, byte d, byte e, byte f, byte g, byte dp) {
        /* …
Run Code Online (Sandbox Code Playgroud)

c++ microcontroller templates arduino specialization

6
推荐指数
1
解决办法
253
查看次数

如何使用pytest模拟完全重启

如何测试我的程序对于意外关闭的鲁棒性?

我的 python 代码将在意外关闭的微控制器上运行。我想测试意外重新启动的代码的每个部分,并验证它是否正确处理此问题。

尝试:我尝试将代码放入其自己的进程中,然后提前终止它,但这不起作用,因为 MyClass 从命令行调用 7zip,即使进程终止后,该命令仍会继续:

import multiprocessing
import os

def MyClass(multiprocessing.Process):
   ...
   def run():
      os.system("7z a myfile.7z myfile")


process = MyClass()
process.start()
time.sleep(4)
print("terminating early")
process.terminate()
print("done")

Run Code Online (Sandbox Code Playgroud)

我想要的是:

class TestMyClass(unittest.TestCase):
    def test_MyClass_continuity(self):
        myclass = MyClass().start()
        myclass.kill_everything()
        myclass = MyClass().start()
        self.assert_everything_worked_as_expected()

Run Code Online (Sandbox Code Playgroud)

是否有捷径可寻?如果没有,您如何设计可以在任何点终止的健壮代码(例如测试状态机)?

类似的问题(截至 21 年 10 月 26 日尚未回答):Simizing异常终止 in pytest

多谢!

python error-handling microcontroller multiprocessing pytest

6
推荐指数
1
解决办法
481
查看次数