Проблема с обертыванием модуля Micro python external C - PullRequest
1 голос
/ 17 апреля 2020

Я новичок в микро python, и я пытался обернуть мигание. c, чтобы использовать его в качестве модуля с микро python для управления светодиодом на ESP32. Я выполнил следующие шаги: https://docs.micropython.org/en/latest/develop/cmodules.html, и, похоже, это работает, но всякий раз, когда я пытаюсь это сделать, возникает следующая ошибка.

build-standard/py/objmodule.o:(.data.rel.ro.mp_builtin_module_table+0x208): undefined reference to `blink_user_cmodule'

мой код выглядит следующим образом:

#include <stdio.h>
#include "/home/shawnee/esp/esp-idf/components/freertos/include/freertos/FreeRTOS.h"
#include "/home/shawnee/esp/esp-idf/components/freertos/include/freertos/task.h"
#include "/home/shawnee/esp/esp-idf/components/driver/include/driver/gpio.h"
//#include "~/esp/esp_idf/components/sdkconfig.h"

// included python libraries
#include "/home/shawnee/micropython/micropython/py/obj.h"
#include "/home/shawnee/micropython/micropython/py/runtime.h"
#include "/home/shawnee/micropython/micropython/py/builtin.h"

// built in ESP32 LED
//#define BLINK_GPIO CONFIG_BLINK_GPIO 2

STATIC mp_obj_t blink_led(mp_obj_t led_obj) {   
    gpio_pad_select_gpio(led_obj);
    /* Set the GPIO as a push/pull output */
    gpio_set_direction(led_obj, GPIO_MODE_OUTPUT);
    while(1) {
        /* Blink off (output low) */
    printf("Turning off the LED\n");
        gpio_set_level(led_obj, 0);
        vTaskDelay(1000 / portTICK_PERIOD_MS);
        /* Blink on (output high) */
    printf("Turning on the LED\n");
        gpio_set_level(led_obj, 1);
        vTaskDelay(1000 / portTICK_PERIOD_MS);
    }
}

STATIC MP_DEFINE_CONST_FUN_OBJ_2(blink_led_obj, blink_led);

STATIC const mp_rom_map_elem_t blink_module_globals_table[] = {
    { MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_blink) },
    { MP_ROM_QSTR(MP_QSTR_blink_led), MP_ROM_PTR(&blink_led_obj) },
};

STATIC MP_DEFINE_CONST_DICT(blink_module_globals, blink_module_globals_table);

// Define module object.
const mp_obj_module_t blink_user_cmodule = {
    .base = { &mp_type_module },
    .globals = (mp_obj_dict_t*)&blink_module_globals,
};

// Register the module to make it available in Python
MP_REGISTER_MODULE(MP_QSTR_blink, blink_user_cmodule, MODULE_BLINK_ENABLED);

Я понятия не имею, почему он не "заработает". Пожалуйста помоги.

...