rtos_k230 test_gpio.c 测试程序会导致tf卡工作异常,rt-smart系统必崩溃

Viewed 30

问题描述


测试4修改了GPIO30 (TFCARD_D2)的功能,导致系统崩溃。

// 测试4:获取引脚ID
static int test_get_pin_id(void)
{
TEST_START("Get Pin ID");

drv_gpio_inst_t* gpio = NULL;
int ret, pin_id;

// 测试不同的引脚
for (int pin = 0; pin <= TEST_GPIO_PIN_MAX; pin += 10) {
    ret = drv_fpioa_set_pin_func(pin, GPIO0 + pin);
    if (ret != 0) continue;

    ret = drv_gpio_inst_create(pin, &gpio);
    if (ret != 0) continue;

    pin_id = drv_gpio_get_pin_id(gpio);
    TEST_ASSERT(pin_id == pin, "Get correct pin ID");

    drv_gpio_inst_destroy(&gpio);
}

// 测试NULL指针
pin_id = drv_gpio_get_pin_id(NULL);
TEST_ASSERT(pin_id == -1, "Get pin ID with NULL returns -1");

return 0;

}

复现步骤


  1. 注释掉test_get_pin_id函数即可。

硬件板卡


庐山派K230D

软件版本


RTSmart

1 Answers
msh /sdcard/app/examples/peripheral>./gpio.elf

==================================================
GPIO HAL Comprehensive Test Program
==================================================

========== Test: Create and Destroy Instance ==========
[PASS] Set pin function to GPIO
[PASS] Create GPIO instance
[PASS] GPIO instance not NULL
[PASS] Create GPIO instance again
[PASS] Instance pointer cleared after destroy
[hal_gpio]: invalid pin 72
[PASS] Create with invalid pin should fail
[hal_gpio]: pin 12 current fucntion not GPIO
[PASS] Create with non-GPIO function should fail
[PASS] Destroy NULL pointer

========== Test: Mode Set and Get ==========
[PASS] Create GPIO instance
[PASS] Set output mode
[PASS] Get mode returns OUTPUT
[PASS] Set input mode
[PASS] Get mode returns INPUT
[PASS] Set same mode again
[E/gpio] GPIO drive mode is not supported.
[E/gpio] set pin mode failed

[PASS] Set invalid mode should fail
[PASS] Set mode with NULL instance should fail
[PASS] Get mode with NULL returns invalid

========== Test: Value Set and Get ==========
[PASS] Create GPIO instance
[PASS] Set output mode
[PASS] Set HIGH value
[PASS] Read back HIGH value
[PASS] Set LOW value
[PASS] Read back LOW value
[PASS] Set same value again
[PASS] Toggle GPIO
[PASS] Value toggled to HIGH
[PASS] Toggle GPIO again
[PASS] Value toggled to LOW
[PASS] Set value with NULL should fail
[PASS] Get value with NULL returns LOW
[PASS] Toggle with NULL should fail

========== Test: Get Pin ID ==========
[PASS] Get correct pin ID
[PASS] Get correct pin ID
[PASS] Get correct pin ID
[PASS] Get correct pin ID
[PASS] Get correct pin ID
[PASS] Get correct pin ID
[PASS] Get correct pin ID
[PASS] Get pin ID with NULL returns -1

========== Test: Boundary Conditions ==========
[PASS] Create GPIO with pin 0
[PASS] Create GPIO with max pin
[hal_gpio]: invalid pin 72
[PASS] Create GPIO with invalid pin should fail

========== Test: Concurrent GPIO/FPIOA Access ==========
[PASS] Prepared enough GPIOs for concurrent stress test
[INFO] Starting 6 concurrent GPIO workers, 2000 loops each
[PASS] Concurrent worker completed without GPIO/FPIOA error
[PASS] Concurrent worker finished every planned iteration
[PASS] Concurrent worker completed without GPIO/FPIOA error
[PASS] Concurrent worker finished every planned iteration
[PASS] Concurrent worker completed without GPIO/FPIOA error
[PASS] Concurrent worker finished every planned iteration
[PASS] Concurrent worker completed without GPIO/FPIOA error
[PASS] Concurrent worker finished every planned iteration
[PASS] Concurrent worker completed without GPIO/FPIOA error
[PASS] Concurrent worker finished every planned iteration
[PASS] Concurrent worker completed without GPIO/FPIOA error
[PASS] Concurrent worker finished every planned iteration

========== Test: Interrupt Operations ==========
[PASS] Create GPIO instance for IRQ
[PASS] Set input mode for IRQ
[PASS] Set pin2 function
[PASS] Create output GPIO
[PASS] Set output mode
[PASS] Output HIGH

[INFO] Please connect GPIO11 and GPIO12 for irq test
Press Enter to continue...

[PASS] Falling Edge
[PASS] Enable IRQ
[PASS] Output LOW
[FAIL] test_interrupt_operations:382 - Falling Edge IRQ

========== Test: Input/Output Loopback ==========
[IRQ] GPIO interrupt triggered, count=1
[PASS] Set pin1 function
[PASS] Set pin2 function
[PASS] Create output GPIO
[PASS] Create input GPIO
[PASS] Set output mode
[PASS] Set input mode

[INFO] Please connect GPIO11 and GPIO12 for loopback test

Press Enter to continue...[PASS] Output HIGH
[PASS] Input reads HIGH
[PASS] Output LOW
[FAIL] test_io_loopback:523 - Input reads LOW

==================================================
Test Summary:
  Total Tests: 8
  Passed: 73
  Failed: 2
==================================================

你好,我这边进行了测试,在最新的sdk上并未复现该问题。方便发一下镜像嘛?