工具/软件:Code Composer Studio
我目前 正在使用 Launchpad Tiva C 系列 TM4C123G 评估套件。 我正在尝试 连接 NC-SR04超声波设备。 我在行上找到了一些代码、我收到了链接错误、我已经清除了程序中的一些其他错误如果有人能提供帮助、那将会很好。 请参阅下面的程序。
当函数未链接时、我使用的是版本:7.4.0.00015的 CCS、我从程序中删除了所有函数、以查看 是否会链接、并使用它们进行编译。
计划:
#include
#include
#include "stdlib.h"
#include "inc/hw_ints.h"
#include "inc/hw_memmap.h"
#include "inc/hw_timer.h"
#include "inc/hw_UART.h"
#include "inc/hw_gpio.h"
#include "inc/hw_pwm.h"
#include "inc/hw_types.h"
#include "driverlib/pin_map.h"
#include "driverlib/timer.h"
#include "driverlib/gpio.h"
#include "driverlib/interrupt.h"
#include "driverlib/rom.h"
#include "driverlib/rom_map.h"
#include "driverlib/sysctl.h"
#include "driverlib/uart.h"
#include "driverlib/udma.h"
#include "driverlib/pwm.h"
#include "driverlib/ssi.h"
#include "driverlib/SysTick .h"
//#include "EK_TM4C123GXL.h"
#include "utils/uartstdio.h"
#include
//
//
//驱动程序库遇到错误时调用的错误例程。
//
//
#ifdef 调试
无效
_error__(char * pcFilename、uint32_t ui32Line)
{
}
#endif
void inputInt (void);
失效的资产再保险(无效);
void InitConsole (void);
//这是为了避免每次读取时都执行数学运算
CONST 双温度= 1.0/80.0;
//存储脉冲长度
volatile uint32_t puls=0;
//告诉主代码当前是否正在读取 A 脉冲
volatile uint8_t echoait=0;
内部
MAIN ()
{
//将系统时钟设置为80MHz
SysCtlClockSet (SYSCTL_SYSDIV_2_5|SYSCTL_USE_PLL|SYSCTL_OSC_MAIN|SYSCTL_XTAL_16MHz);
//配置 UART
InitConsole();
//配置计时器
Capturetit();
//配置触发引脚
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);
SysCtlDelay(3);
GPIOPinTypeGPIOOutput (GPIO_Porta_base、GPIO_PIN_3);
//配置回显引脚
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);
SysCtlDelay(3);
GPIOPinTypeGPIOInput (GPIO_Porta_base、GPIO_PIN_2);
GPIOIntEnable (GPIO_Porta_base、GPIO_PIN_2);
GPIOIntTypeSet (GPIO_Porta_base、GPIO_PIN_2、GPIO_Bot_Edges);
GPIOIntRegister (GPIO_Porta_base、inputInt);
while (1)
{
//检查是否正在读取脉冲
if (echowait!= 1){
//所需的10us 脉冲
GPIOPinWrite (GPIO_Porta_base、GPIO_PIN_3、GPIO_PIN_3);
SysCtlDelay (266);
GPIOPinWrite (GPIO_Porta_base、GPIO_PIN_3、~GPIO_PIN_3);
/*
这会使代码等待读取完成
如果您希望代码不分块、则可以省略此部分
只有当 echoait=0时、读取才准备就绪。
*
while (echowait!= 0);
//将计数器值转换为 cm。
PULSE =(uint32_t)(temp * PULSE);
脉冲=脉冲/58;
//打印出测量的距离。
UARTprintf ("距离=%2dcm \n",脉冲);
}
//等待大约10ms 直到下一个读数。
SysCtlDelay (400000);
}
}
无效
InputInt (空)
{
//清除中断标志。 因为我们仅在这方面启用了就足够了
GPIOIntClear (GPIO_Porta_base、GPIO_PIN_2);
/*
如果是上升沿、则将定时器设置为0
它处于周期模式、因此它具有一些随机值
*
if (GPIOPinRead (GPIO_PORta_base、GPIO_PIN_2)== GPIO_PIN_2){
HWREG (TIMER2_base + TIMER_O_TAV)= 0;//将值0加载到计时器中。
TimerEnable (TIMER2_base、TIMER_A);
echowait=1;
}
/*
如果检测到下降沿、则获取计数器的值
*
否则{
脉冲= TimerValueGet (TIMER2_base、TIMER_A);//记录值
TimerDisable (TIMER2_base、timer_A);
echowait=0;
}
}
无效
Capturreinit(作废)
{
/*
将计时器设置为周期性。
*
SysCtlPeripheralEnable (SYSCTL_Periph_TIMER2);
SysCtlDelay(3);
TimerConfigure (TIMER2_base、TIMER_CFG_PERIODIC_UP);
TimerEnable (TIMER2_base、TIMER_A);
}
无效
InitConsole (空)
{
//
//启用用于 UART0引脚的 GPIO 端口 A。
// TODO:将其更改为您正在使用的 GPIO 端口。
//
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);
SysCtlDelay(3);
//
//为端口 A0和 A1上的 UART0功能配置引脚复用。
//如果您的器件不支持引脚复用、则无需执行此步骤。
// TODO:更改此选项以选择您正在使用的端口/引脚。
//
GPIOPinConfigure (GPIO_PA0_U0RX);
GPIOPinConfigure (GPIO_PA1_U0TX);
//
//启用 UART0以便我们可以配置时钟。
//
SysCtlPeripheralEnable (SYSCTL_Periph_UART0);
//
//使用内部16MHz 振荡器作为 UART 时钟源。
//
UARTClockSourceSet (UART0_BASE、UART_CLOCK_PIOSC);
//
//为这些引脚选择替代(UART)功能。
// TODO:更改此选项以选择您正在使用的端口/引脚。
//
GPIOPinTypeUART (GPIO_Porta_base、GPIO_PIN_0 | GPIO_PIN_1);
//
//初始化控制台 I/O 的 UART
//
UARTStdioConfig (0、115200、16000000);
}
链接错误
****项目 HC-SR04-Ultrasonic 的配置调试构建****
"C:\\ti\\ccsv7\\utils\\bin\\gmake"-k -j 4 all -O
'生成文件:"../HC-SR04.c"
'调用:ARM 编译器'
"c:/ti/ccsv7/tools/compiler/ti-cgt-arm_16.9.6.LTS/bin/armcl -mv7M4 --code_state=16 --float_support=FPv4SPD16 -me -O2 --fp_mode=relaxed --include_path="E:/TiArm/HC-SR04-UltraSonic /ti/ccsv7/tools/compiler/ti-cgt-arm_16.9.6.LTS/include --include_path="C:/ti/TivaWare_C_Series-2.1.4.178 --include_path="C:--include_path="C:/ti/TivaWare_C_Series-2.1.4.178/utils --include_path="C:ccs_pred=ccs_ecuration="ccs_ecure-ctrab-g-code.come-ccs_ecuration=g-ecrand_decuration="ctrab-ecure-ccs_ecure-ctrab-ecure-ctrab-g-ecuration="-g-ecuration="ccs_guide-ctrab-g-ecure-ctrab-g-ctrab-ecure-ctrab-g-come-ccs_guide-com
'完工建筑:"../HC-SR04.c"
"建筑目标:"HC-SR04-Ultrasonic .out"
'调用:ARM 链接器'
"c:/ti/ccsv7/tools/compiler/ti-cgt-arm_16.9.6.LTS/bin/armcl "-mv7M4 -code_state=16 -float_support=FPv4SPD16 -me -O2 -fp_mode=relaxed -define=ccs"-define=part_TM4C123GH6PM -g -gcc -diag_warning=225 ---cmp_wrap_ex-mspectric_atic"-m4mspectric_atic"-m_ram_overview-region-m_ature-m-r-r-msp.htm-aturbs.htm#-at_display-m_aturbi-display-r.htm#-rfrom-r.htm#-status-r.htm#-r.htm#-status_display-r.htm#-status_display-r.htm#-time-time-status-r.htm#-r.htm#-status_display-r.htm#-status_display-rfrom-r.htm#-status.htm#-status.htm#-status.micro-/ti/ccsv7/tools/compiler/ti-cgt-arm_16.9.6.LTS/include /ti/ccsv7/tools/compiler/ti-cgt-arm_16.9.6.LTS/lib
未定义 的首次引用
符号
------ --------
GPIOIntClear ./HC-SR04.obj
GPIOIntEnable ./HC-SR04.obj
GPIOIntRegister ./HC-SR04.obj
GPIOIntTypeSet ./HC-SR04.obj
GPIOPinConfigure ./HC-SR04.obj
GPIOPinRead ./HC-SR04.obj
GPIOPinTypeGPIOInput ./HC-SR04.obj
GPIOPinTypeGPIOOutput ./HC-SR04.obj
GPIOPinTypeUART ./HC-SR04.obj
GPIOPinWrite ./HC-SR04.obj
SysCtlClockSet ./HC-SR04.obj
SysCtlDelay ./HC-SR04.obj
SysCtlPeripheralEnable ./HC-SR04.obj
SysCtlPeripheralPresent ./uartstdio.obj
TimerConfigure ./HC-SR04.obj
TimerDisable ./HC-SR04.obj
TimerEnable ./HC-SR04.obj
TimerValueGet ./HC-SR04.obj
UARTCharGet ./uartstdio.obj
UARTCharPut ./uartstdio.obj
UARTClockSourceSet ./HC-SR04.obj
UARTConfigSetExpClk ./uartstdio.obj
UARTEnable ./uartstdio.obj
错误#10234-D:未解析的符号仍然存在
错误#10010:链接期间遇到错误;未构建"HC-SR04-Ultrasonic .out"
>>编译失败
Makefile:143:目标'HC-SR04-Ultrasonic .out'的配方失败
gmake.1]:***[HC-SR04-Ultrasonic .out]错误1.
gmake:***[全部]错误2.
Makefile:139:目标'all'的配方失败
****构建完成****
问题
说明 资源 路径 位置 类型
#10010 null:链接期间遇到错误;"HC-SR04-Ultrasonic .out"未构建 HC-SR04-Ultrasonic C/C++问题
"="">processors.wiki.ti.com/.../10234"> null:未解析的符号仍为 HC-SR04-Ultrasonic C/C++问题
Gmake:***[All]错误2 HC-SR04-Ultrasonic C/C++问题
gmake.1]:***[HC-SR04-Ultrasonic .out]错误1 HC-SR04-Ultrasonic C/C++问题
未解析的符号 GPIOIntClear、首先在./HC-SR04.obj HC-SR04-Ultrasonic 中引用 C/C++问题
未解析的符号 GPIOIntEnable、首先在./HC-SR04.obj HC-SR04-Ultrasonic 中引用 C/C++问题
未解析的符号 GPIOIntRegister、首先在./HC-SR04.obj HC-SR04-Ultrasonic 中引用 C/C++问题
未解析的符号 GPIOIntTypeSet、首先在./HC-SR04.obj HC-SR04-Ultrasonic 中引用 C/C++问题
未解析的符号 GPIOPinConfigure、首先在./HC-SR04.obj HC-SR04-Ultrasonic 中引用 C/C++问题
未解析的符号 GPIOPinRead、首先在./HC-SR04.obj HC-SR04-Ultrasonic 中引用 C/C++问题
未解析的符号 GPIOPinTypeGPIOInput、首先在./HC-SR04.obj HC-SR04-Ultrasonic 中引用 C/C++问题
未解析的符号 GPIOPinTypeGPIOOutput、首先在./HC-SR04.obj HC-SR04-Ultrasonic 中引用 C/C++问题
未解析的符号 GPIOPinTypeUART、首先在./HC-SR04.obj HC-SR04-Ultrasonic 中引用 C/C++问题
未解析的符号 GPIOPinWrite、首先在./HC-SR04.obj HC-SR04-Ultrasonic 中引用 C/C++问题
未解析符号 SysCtlClockSet、首先在./HC-SR04.obj HC-SR04-Ultrasonic 中引用 C/C++问题
未解析符号 SysCtlDelay、首先在./HC-SR04.obj HC-SR04-Ultrasonic 中引用 C/C++问题
未解析符号 SysCtlPeripheralEnable、首先在./HC-SR04.obj HC-SR04-Ultrasonic 中引用 C/C++问题
未解析符号 SysCtlPeripheralPresent、首先在./uartstdio.obj HC-SR04-Ultrasonic 中引用 C/C++问题
未解析的符号 TimerConfigure、首先在./HC-SR04.obj HC-SR04-Ultrasonic 中引用 C/C++问题
未解析的符号 TimerDisable、首先在./HC-SR04.obj HC-SR04-Ultrasonic 中引用 C/C++问题
未解析的符号 TimerEnable、首先在./HC-SR04.obj HC-SR04-Ultrasonic 中引用 C/C++问题
未解析的符号 TimerValueGet、首先在./HC-SR04.obj HC-SR04-Ultrasonic 中引用 C/C++问题
未解析的符号 UARTCharGet、首先在./uartstdio.obj HC-SR04-Ultrasonic 中引用 C/C++问题
未解析的符号 UARTCharPut、首先在./uartstdio.obj HC-SR04-Ultrasonic 中引用 C/C++问题
未解析的符号 UARTClockSourceSet、首先在./HC-SR04.obj HC-SR04-Ultrasonic 中引用 C/C++问题
未解析的符号 UARTConfigSetExpClk、首先在./uartstdio.obj HC-SR04-Ultrasonic 中引用 C/C++问题
未解析的符号 UARTEnable、首先在./uartstdio.obj HC-SR04-Ultrasonic 中引用 C/C++问题
一