AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / coding / 问题 / 79575134
Accepted
Jippe
Jippe
Asked: 2025-04-15 20:19:37 +0800 CST2025-04-15 20:19:37 +0800 CST 2025-04-15 20:19:37 +0800 CST

ATtiny841 从属 SPDR 寄存器

  • 772

版本 1:

我使用 Raspberry Pi Pico 作为 SPI 主设备,使用 ATtiny841 作为 SPI 从设备。

主代码:

#include "pico/stdlib.h"
#include "hardware/spi.h"
#include <stdio.h>

#define SPI_PORT spi0
#define PIN_MISO 16
#define PIN_MOSI 19
#define PIN_SCK  18
#define PIN_CS   17

uint8_t tx_dummy = 0xAA;
uint8_t rx_buf[3];

void spi_init_master()
{
    spi_init(SPI_PORT, 1000000);
    gpio_set_function(PIN_MISO, GPIO_FUNC_SPI);
    gpio_set_function(PIN_MOSI, GPIO_FUNC_SPI);
    gpio_set_function(PIN_SCK,  GPIO_FUNC_SPI);

    gpio_init(PIN_CS);
    gpio_set_dir(PIN_CS, GPIO_OUT);
    gpio_put(PIN_CS, 1);
}

int main()
{
    stdio_init_all();
    spi_init_master();

    while(true)
    {
        gpio_put(PIN_CS, 0); // Select slave
        tx_dummy = 0xAA;
        for(int i = 0; i < 3; i++)
        {
            spi_write_read_blocking(SPI_PORT, &tx_dummy, &rx_buf[i], 1);
            tx_dummy++;
        }

        gpio_put(PIN_CS, 1); // Deselect slave

        printf("Ontvangen bytes: ");
        for(int i = 0; i < 3; i++)
        {
            printf("0x%02X ", rx_buf[i]);
        }
        printf("\n");

        sleep_ms(1000);
    }
}

从属代码:

#define SS     PA7
#define MOSI   PA6
#define MISO   PA5
#define SCK    PA4

byte dataToSend[3] = {0xDE, 0xAD, 0xBE};
volatile byte sendIndex = 0;

void setup() {
  pinMode(SCK, INPUT);
  pinMode(MOSI, INPUT);
  pinMode(MISO, OUTPUT);
  pinMode(SS, INPUT);

  SPCR = (1 << SPE) | (1 << SPIE);

  SPDR = dataToSend[0];
}

ISR(SPI_STC_vect) {
  byte received = SPDR;

  
  sendIndex++;
  if (sendIndex >= 3) {
    sendIndex = 0; 
  }
  SPDR = dataToSend[sendIndex];
 
}

void loop() {
}

我没有收到数组 {0xDE, 0xAD, 0xBE},而是收到了 {0xDE, 0xAA, 0xAB}。

有谁知道我该如何编写代码,以便 ATtiny841 的 SPDR 寄存器在主机请求新值之前用数组的下一个值覆盖主机的虚拟值?

我试过用中断,也试过不用中断。但每次我收到的都是来自主设备的虚拟值作为输入。我更喜欢用中断。

版本 2:

通过在 ATtiny841 的 CS 引脚上生成中断并在 Pico 上的主代码中放置一些小的延迟,我能够将数据从 ATiny841 从属设备传输到 Pi Pico 主设备。

(使用 SPI 中断总是返回我从主机发送到从机的虚拟数据)

现在我尝试通过发送两个字节(字节1 = 寄存器地址,字节2 = 虚拟值)来添加一个寄存器结构。每个字节的CS都会变为低电平和高电平,以触发从机上的中断。

这段代码几乎可以正常工作,但如果主机请求寄存器 0x​​01,它会获取寄存器 0x​​02 的值。如果主机请求寄存器 0x​​02,它会获取寄存器 0x​​01 的值。

有人看到/知道我该如何解决这个问题吗?

主控的输出:

Reg value 0x01: 0x99 - 0x01
Reg value 0x02: 0x43 - 0x02
Reg value 0x01: 0x99 - 0x01
Reg value 0x02: 0x43 - 0x02
Reg value 0x01: 0x99 - 0x01
Reg value 0x02: 0x43 - 0x02

主代码:

#include "pico/stdlib.h"
#include "hardware/spi.h"
#include <stdio.h>

#define SPI_PORT spi0
#define PIN_MISO 16
#define PIN_MOSI 19
#define PIN_SCK  18
#define PIN_CS   17

uint8_t tx_dummy = 0xAA;
uint8_t rx_buf[2];

void spi_init_master()
{
    spi_init(SPI_PORT, 1000000);
    gpio_set_function(PIN_MISO, GPIO_FUNC_SPI);
    gpio_set_function(PIN_MOSI, GPIO_FUNC_SPI);
    gpio_set_function(PIN_SCK,  GPIO_FUNC_SPI);

    gpio_init(PIN_CS);
    gpio_set_dir(PIN_CS, GPIO_OUT);
    gpio_put(PIN_CS, 1);
}

int main()
{
    stdio_init_all();
    spi_init_master();
    uint8_t adress = 0x01;
    uint8_t test = 0x02;
    while(true)
    {
        gpio_put(PIN_CS, 0);
        sleep_us(10);
        spi_write_read_blocking(SPI_PORT, &adress, &rx_buf[0], 1);
        gpio_put(PIN_CS, 1);
        sleep_us(10);
        gpio_put(PIN_CS, 0);
        sleep_us(10);
        spi_write_read_blocking(SPI_PORT, 0x00, &rx_buf[1], 1);
        gpio_put(PIN_CS, 1);
        sleep_us(10);
        printf("Reg value 0x01: 0x%02X - 0x%02X\n", rx_buf[0], rx_buf[1]);
        sleep_ms(1000);

        gpio_put(PIN_CS, 0);
        sleep_us(10);
        spi_write_read_blocking(SPI_PORT, &test, &rx_buf[0], 1);
        gpio_put(PIN_CS, 1);
        sleep_us(10);
        gpio_put(PIN_CS, 0);
        sleep_us(10);
        spi_write_read_blocking(SPI_PORT, 0x00, &rx_buf[1], 1);
        gpio_put(PIN_CS, 1);
        sleep_us(10);
        printf("Reg value 0x02: 0x%02X - 0x%02X\n", rx_buf[0], rx_buf[1]);
        sleep_ms(1000);      
    }
}

从属代码:

#define SS     PA7
#define MOSI   PA6
#define MISO   PA5
#define SCK    PA4

volatile byte registerMap[3] = {};

volatile bool lastSSState = 0;
volatile byte receivedAddress = 0;
volatile byte transactionStep = 0;

void setup()
{
  pinMode(SCK, INPUT);
  pinMode(MOSI, INPUT);
  pinMode(MISO, OUTPUT);
  pinMode(SS, INPUT);

  SPCR = (1 << SPE);

  SPDR = registerMap[0];

  registerMap[0x01] = 0x43;
  registerMap[0x02] = 0x99;

  PCMSK0 |= (1 << PCINT7);
  GIMSK |= (1 << PCIE0);
  lastSSState = digitalRead(SS);

  sei();
}

void loop(){}

ISR(PCINT0_vect)
{
  bool currentState = digitalRead(SS);

  if(lastSSState && !currentState) //Falling edge
  {
    if(transactionStep == 0) //First falling edge
    {
      while(!(SPSR & (1 << SPIF)));
      byte received = SPDR;
      receivedAddress = received;

      if(SPSR & (1 << WCOL))
      {
        volatile byte tmp = SPDR;
      }

      SPDR = registerMap[receivedAddress];
      transactionStep = 1;
    }
    else if(transactionStep == 1) //Second falling edge
    {
      while(!(SPSR & (1 << SPIF)));
      volatile byte dummy = SPDR;
      transactionStep = 0;
      receivedAddress = 0;

      if(SPSR & (1 << WCOL))
      {
        volatile byte tmp = SPDR;
      }
      SPDR = 0x00;
    }
  }
  lastSSState = currentState;
}
spi
  • 2 2 个回答
  • 60 Views

2 个回答

  • Voted
  1. Best Answer
    atl
    2025-04-17T10:00:05+08:002025-04-17T10:00:05+08:00

    试试这个,它基于你的版本 2 想法,但简化了操作,只执行最小的 SPI 事务。你只会看到值 0x12,这对于在主应用程序开始运行之前判断是否存在故障很有用。

    奴隶

    void setup()
    {
      pinMode(SCK, INPUT);
      pinMode(MOSI, INPUT);
      pinMode(MISO, OUTPUT);
      pinMode(SS, INPUT);
      SPCR = (1 << SPE);        // SPI CONTROL REGISTER, ENABLE SPI IN SLAVE MODE
      SPDR = 0x12;              // CONSTANT VALUE SLAVE SENDS RESPONSE TO MASTER ADDRESS
      PCMSK0 |= (1 << PCINT7);  // PIN CHANGE MASK SELECTS PA7/!SS AS PIN TO WATCH
      GIMSK |= (1 << PCIE0);    // PIN CHANGE INTERRUPT ENABLE 0
      sei();                    // SREG I-BIT = 1
    }
    
    void loop(){}
    
    ISR(PCINT0_vect)
    {
      // PIN CHANGED (LOW)
      while( !digitalRead(SS) ) ; // WAIT FOR MASTER TO SET SS HIGH
      SPDR = 0x34; // SS IS HIGH, UPDATE DATA REGISTER, NEXT LOW SS WILL GET THIS VALUE
    }
    

    掌握

    #include "pico/stdlib.h"
    #include "hardware/spi.h"
    #include <stdio.h>
    
    #define SPI_PORT spi0
    #define PIN_MISO 16
    #define PIN_MOSI 19
    #define PIN_SCK  18
    #define PIN_CS   17
    
    void spi_init_master()
    {
        spi_init(SPI_PORT, 1000000);
        gpio_set_function(PIN_MISO, GPIO_FUNC_SPI);
        gpio_set_function(PIN_MOSI, GPIO_FUNC_SPI);
        gpio_set_function(PIN_SCK,  GPIO_FUNC_SPI);
    
        gpio_init(PIN_CS);
        gpio_set_dir(PIN_CS, GPIO_OUT);
        gpio_put(PIN_CS, 1);
    }
    
    int main()
    {
        stdio_init_all();
        spi_init_master();
        uint8_t address = 0x00;
        uint8_t value  = 0x00;
        uint8_t dontcare  = 0x00;
        gpio_put(PIN_CS, 0);
        sleep_us(10);
        spi_write_read_blocking(SPI_PORT, &address, &dontcare, 1);
        gpio_put(PIN_CS, 1);
    
        printf("SENT ADDRESS 0x%02X GOT BACK 0x%02X\n", address, dontcare);
        sleep_us(10);
    
        gpio_put(PIN_CS, 0);
        sleep_us(10);
        spi_write_read_blocking(SPI_PORT, &dontcare, &value, 1);
        gpio_put(PIN_CS, 1);
        sleep_us(10);
    
        printf("SENT DUMMY 0x%02X GOT BACK 0x%02X\n", dontcare, value);
    }
    
    • 0
  2. Jippe
    2025-04-17T16:30:57+08:002025-04-17T16:30:57+08:00

    使用 SPI 接收并发送值到 ATtiny841

    ATtiny841 从属代码:

    void setup()
    {
      pinMode(SCK, INPUT);
      pinMode(MOSI, INPUT);
      pinMode(MISO, OUTPUT);
      pinMode(SS, INPUT);
      SPCR = (1 << SPE);        // SPI CONTROL REGISTER, ENABLE SPI IN SLAVE MODE
      SPDR = 0x12;              // CONSTANT VALUE SLAVE SENDS RESPONSE TO MASTER ADDRESS
      PCMSK0 |= (1 << PCINT7);  // PIN CHANGE MASK SELECTS PA7/!SS AS PIN TO WATCH
      GIMSK |= (1 << PCIE0);    // PIN CHANGE INTERRUPT ENABLE 0
      sei();                    // SREG I-BIT = 1
    }
    
    void loop(){}
    
    volatile byte address = 0;
    volatile byte testValue = 0;
    
    ISR(PCINT0_vect)
    {
      while(!digitalRead(SS));   // WAIT FOR MASTER TO SET SS HIGH
      address = SPDR;               // SAVE REGISTER ADDRESS
    
      switch(address)
      {
        case 0x10:                  // SEND REGISTER
          SPDR = 0x34;              // VALUE TO SEND BACK
          break;
        case 0x20:                  // SEND REGISTER
          SPDR = 0x99;              // VALUE TO SEND BACK
          break;
        case 0x30:                  // RECV REGISTER
          while(digitalRead(SS));   // WAIT FOR MASTER TO SET SS LOW
          while(!digitalRead(SS));  // WAIT FOR MASTER TO SET SS HIGH
          testValue = SPDR;         // SAVE RECV VALUE
          break;
        case 0x40:                  // SEND REGISTER
          SPDR = testValue + 1;     // VALUE TO SEND BACK
          break;
      }
    }
    

    Pi Pico 主代码:

    #include "pico/stdlib.h"
    #include "hardware/spi.h"
    #include <stdio.h>
    
    #define SPI_PORT spi0
    #define PIN_MISO 16
    #define PIN_MOSI 19
    #define PIN_SCK  18
    #define PIN_CS   17
    
    void spi_init_master()
    {
        spi_init(SPI_PORT, 1000000);
        gpio_set_function(PIN_MISO, GPIO_FUNC_SPI);
        gpio_set_function(PIN_MOSI, GPIO_FUNC_SPI);
        gpio_set_function(PIN_SCK,  GPIO_FUNC_SPI);
    
        gpio_init(PIN_CS);
        gpio_set_dir(PIN_CS, GPIO_OUT);
        gpio_put(PIN_CS, 1);
    }
    
    int main()
    {
        stdio_init_all();
        spi_init_master();
        uint8_t address = 0x10;
        uint8_t testValue = 0x00;
        uint8_t value  = 0x00;
        uint8_t dontcare  = 0x00;
    
        for(;;)
        {
            printf("*************************************************************\n");
            address = 0x10;
            gpio_put(PIN_CS, 0);
            sleep_us(10);
            spi_write_read_blocking(SPI_PORT, &address, &dontcare, 1);
            gpio_put(PIN_CS, 1);
            printf("SENT ADDRESS 0x%02X GOT BACK 0x%02X\n", address, dontcare);
            sleep_us(10);
            gpio_put(PIN_CS, 0);
            sleep_us(10);
            spi_write_read_blocking(SPI_PORT, &address, &value, 1);
            gpio_put(PIN_CS, 1);
            sleep_us(10);
            printf("SENT DUMMY 0x%02X GOT BACK 0x%02X\n", address, value);
            printf("+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n");
    
            address = 0x20;
            sleep_ms(1000);
            gpio_put(PIN_CS, 0);
            sleep_us(10);
            spi_write_read_blocking(SPI_PORT, &address, &dontcare, 1);
            gpio_put(PIN_CS, 1);
            printf("SENT ADDRESS 0x%02X GOT BACK 0x%02X\n", address, dontcare);
            sleep_us(10);
            gpio_put(PIN_CS, 0);
            sleep_us(10);
            spi_write_read_blocking(SPI_PORT, &address, &value, 1);
            gpio_put(PIN_CS, 1);
            sleep_us(10);
            printf("SENT DUMMY 0x%02X GOT BACK 0x%02X\n", address, value);
            printf("+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n");
    
            address = 0x30;
            sleep_ms(1000);
            gpio_put(PIN_CS, 0);
            sleep_us(10);
            spi_write_read_blocking(SPI_PORT, &address, &dontcare, 1);
            gpio_put(PIN_CS, 1);
            printf("SENT ADDRESS 0x%02X GOT BACK 0x%02X\n", address, dontcare);
            sleep_us(10);
            gpio_put(PIN_CS, 0);
            sleep_us(10);
            spi_write_read_blocking(SPI_PORT, &testValue, &value, 1);
            gpio_put(PIN_CS, 1);
            sleep_us(10);
            printf("SENT DUMMY 0x%02X GOT BACK 0x%02X\n", testValue, value);
            testValue++;
            printf("+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n");
    
            address = 0x40;
            sleep_ms(1000);
            gpio_put(PIN_CS, 0);
            sleep_us(10);
            spi_write_read_blocking(SPI_PORT, &address, &dontcare, 1);
            gpio_put(PIN_CS, 1);
            printf("SENT ADDRESS 0x%02X GOT BACK 0x%02X\n", address, dontcare);
            sleep_us(10);
            gpio_put(PIN_CS, 0);
            sleep_us(10);
            spi_write_read_blocking(SPI_PORT, &address, &value, 1);
            gpio_put(PIN_CS, 1);
            sleep_us(10);
            printf("SENT DUMMY 0x%02X GOT BACK 0x%02X\n", address, value);
            printf("+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n");
            sleep_ms(1000);
        }
    }
    

    Pi Pico printf()输出:

    *************************************************************
    SENT ADDRESS 0x10 GOT BACK 0x12
    SENT DUMMY 0x10 GOT BACK 0x34
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    SENT ADDRESS 0x20 GOT BACK 0x34
    SENT DUMMY 0x20 GOT BACK 0x99
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    SENT ADDRESS 0x30 GOT BACK 0x99
    SENT DUMMY 0x00 GOT BACK 0x30
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    SENT ADDRESS 0x40 GOT BACK 0x00
    SENT DUMMY 0x40 GOT BACK 0x01
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    *************************************************************
    SENT ADDRESS 0x10 GOT BACK 0x01
    SENT DUMMY 0x10 GOT BACK 0x34
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    SENT ADDRESS 0x20 GOT BACK 0x34
    SENT DUMMY 0x20 GOT BACK 0x99
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    SENT ADDRESS 0x30 GOT BACK 0x99
    SENT DUMMY 0x01 GOT BACK 0x30
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    SENT ADDRESS 0x40 GOT BACK 0x01
    SENT DUMMY 0x40 GOT BACK 0x02
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    *************************************************************
    SENT ADDRESS 0x10 GOT BACK 0x02
    SENT DUMMY 0x10 GOT BACK 0x34
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    SENT ADDRESS 0x20 GOT BACK 0x34
    SENT DUMMY 0x20 GOT BACK 0x99
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    SENT ADDRESS 0x30 GOT BACK 0x99
    SENT DUMMY 0x02 GOT BACK 0x30
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    SENT ADDRESS 0x40 GOT BACK 0x02
    SENT DUMMY 0x40 GOT BACK 0x03
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    *************************************************************
    SENT ADDRESS 0x10 GOT BACK 0x03
    SENT DUMMY 0x10 GOT BACK 0x34
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    SENT ADDRESS 0x20 GOT BACK 0x34
    SENT DUMMY 0x20 GOT BACK 0x99
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    SENT ADDRESS 0x30 GOT BACK 0x99
    SENT DUMMY 0x03 GOT BACK 0x30
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    SENT ADDRESS 0x40 GOT BACK 0x03
    SENT DUMMY 0x40 GOT BACK 0x04
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    *************************************************************
    
    • 0

相关问题

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    重新格式化数字,在固定位置插入分隔符

    • 6 个回答
  • Marko Smith

    为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会?

    • 2 个回答
  • Marko Smith

    VScode 自动卸载扩展的问题(Material 主题)

    • 2 个回答
  • Marko Smith

    Vue 3:创建时出错“预期标识符但发现‘导入’”[重复]

    • 1 个回答
  • Marko Smith

    具有指定基础类型但没有枚举器的“枚举类”的用途是什么?

    • 1 个回答
  • Marko Smith

    如何修复未手动导入的模块的 MODULE_NOT_FOUND 错误?

    • 6 个回答
  • Marko Smith

    `(表达式,左值) = 右值` 在 C 或 C++ 中是有效的赋值吗?为什么有些编译器会接受/拒绝它?

    • 3 个回答
  • Marko Smith

    在 C++ 中,一个不执行任何操作的空程序需要 204KB 的堆,但在 C 中则不需要

    • 1 个回答
  • Marko Smith

    PowerBI 目前与 BigQuery 不兼容:Simba 驱动程序与 Windows 更新有关

    • 2 个回答
  • Marko Smith

    AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String”

    • 1 个回答
  • Martin Hope
    Fantastic Mr Fox msvc std::vector 实现中仅不接受可复制类型 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant 使用 chrono 查找下一个工作日 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor 构造函数的成员初始化程序可以包含另一个成员的初始化吗? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský 为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul C++20 是否进行了更改,允许从已知绑定数组“type(&)[N]”转换为未知绑定数组“type(&)[]”? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann 为什么 {2,3,10} 和 {x,3,10} (x=2) 的顺序不同? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller 在 5.2 版中,bash 条件语句中的 [[ .. ]] 中的分号现在是可选的吗? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench 为什么双破折号 (--) 会导致此 MariaDB 子句评估为 true? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng 为什么 `dict(id=1, **{'id': 2})` 有时会引发 `KeyError: 'id'` 而不是 TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String” 2024-03-20 03:12:31 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve