Raspberry Pi Pico汇编代码编译失败:未定义link_gpio_get函数求助
Raspberry Pi Pico汇编代码编译错误解决:未定义link_gpio_get函数
我为Raspberry Pi Pico编写了一段汇编代码,实现LED和两个按键的功能:一个按键点亮LED,另一个按键熄灭LED。作为树莓派新手,我在虚拟机中使用cmake和make编译,但无法生成UF2文件,报错原因是sdlink.c文件中未定义link_gpio_get函数,导致cmake因未定义引用错误而失败。
我的汇编代码
.EQU LED_PIN1, 0 .EQU BUT_PIN1, 1 .EQU BUT_PIN2, 2 .EQU GPIO_IN, 0 .EQU GPIO_OUT, 1 .thumb_func .global main main: MOV R0, #LED_PIN1 BL gpio_init MOV R0, #LED_PIN1 MOV R1, #GPIO_OUT BL link_gpio_set_dir @ Initialize PIN1 MOV R0, #BUT_PIN1 BL gpio_init MOV R0, #BUT_PIN1 MOV R1, #GPIO_IN BL link_gpio_set_dir MOV R0, #BUT_PIN2 BL gpio_init MOV R0, #BUT_PIN2 MOV R1, #GPIO_IN BL link_gpio_set_dir wait_on: MOV R0, #BUT_PIN1 @ Wait for turn on button BL link_gpio_get CMP R0, #1 BEQ turn_on B wait_on turn_on: MOV R0, #LED_PIN1 MOV R1, #1 BL link_gpio_put @ Turn on led B wait_off turn_off: MOV R0, #LED_PIN1 MOV R1, #0 BL link_gpio_put @ Turn off led B wait_on wait_off: MOV R0, #BUT_PIN2 @ Wait for off BL link_gpio_get CMP R0, #1 BEQ turn_off B wait_off
原sdlink.c文件
/* C wrapper functions for the RP2040 SDK * Incline functions gpio_set_dir and gpio_put. */ #include "hardware/gpio.h" void link_gpio_set_dir(int pin, int dir) { gpio_set_dir(pin, dir); } void link_gpio_put(int pin, int value) { gpio_put(pin, value); }
解决方法
你需要在sdlink.c中补充实现link_gpio_get函数,该函数封装RP2040 SDK提供的gpio_get函数,用于读取GPIO引脚的电平状态。修改后的sdlink.c代码如下:
/* C wrapper functions for the RP2040 SDK * Incline functions gpio_set_dir and gpio_put. */ #include "hardware/gpio.h" void link_gpio_set_dir(int pin, int dir) { gpio_set_dir(pin, dir); } void link_gpio_put(int pin, int value) { gpio_put(pin, value); } // 新增link_gpio_get函数,读取指定引脚的电平 int link_gpio_get(int pin) { return gpio_get(pin); }
补充完成后,重新运行cmake和make即可正常编译生成UF2文件。
内容的提问来源于stack exchange,提问作者Ali Shakouri
相关产品推荐
相关产品推荐

