This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/TM4C123GH6PM:帮助请:错误#1.0234万-D:未解析的符号,以及错误#1.001万:链接期间遇到的错误

Guru**** 2535150 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/598803/ccs-tm4c123gh6pm-help-please-error-10234-d-unresolved-symbols-and-error-10010-errors-encountered-during-linking

部件号:TM4C123GH6PM

工具/软件:Code Composer Studio

您好,如果能解决以下问题,我将不胜感激:

我刚刚在我的PC#2 (Win 7)上加载并更新了CCS 7 (版本:7.1 .0.0.0016万),并尝试运行在此帖子中插入的程序,该程序正在我的另一台PC#1 (Win 7)上运行,运行CCS 6。

我目前无法访问PC#1,因为我目前处于远程状态。

我在PC#1上使用此代码的功能版本将main.c文件直接添加到新项目中。

当我在PC#2上构建新项目时,我收到以下两个错误:

错误#1.0234万-D:未解析的符号

2.错误#1.001万:链接时遇到错误

顺便提一下,"闪烁"在我的LaunchPad (TM4C123GXL)上加载和运行。

谢谢!

错误说明:

属性:

代码

API未突出显示。 可能我没有正确引用API源库,或者根本没有引用,或者我使用的编译器不正确,或者?

另外,我删除了API的参考ROM_,它在 运行CCS 6的另一台PC (Win 7)上运行。

*用于N通道MOSFET (IRF630)电源的光耦合器驱动器(4N25)。

*参见示意图:N通道MOSFET,带光耦合

器*此代码使用PWM模块1发电机0和发电机3

* PWM模块1发电机0:M1PWM0,GPIO引脚PD0。 PWMGenConfigure使用PWM_GEN_MODE_DOWN
	在倒计时模式下,它将从一个值向下计数到零,
	然后重置为预设值。
	这将产生左对齐的PWM信号
	(即
	发电机产生的两个PWM信号的上升沿将同时出现)。

* PWM模块1发电机3:M1PWM6,GPIO引脚PF2。 PWMGenConfigure使用PWM_GEN_MODE_UP_DOWN
	在向上/向下计数模式下,它将从零到预设值进行计数,向下计数到零,
	然后重复该过程。 这将产生中心对齐的PWM信号
	(即,
	生成器产生的PWM信号的高/低周期的中间值将同时出现)。*/


#include <stdint.h>
#include <stdbool.h>
#include "inc/HW_memmap.h"
#include "inc/HW_types.h"
#include "glp_lib/lib/driverh"pin.rm/sec"







void )
{//


	设置系统时钟(SYSCLK)和PWM时钟(PWMCLK)

SysctlClockSet( sysctl_SYSDIV_10 | sysctl_use_pll | sysctl_OSC主| sysctl_XTAL_16MHz );// SYSCLK设置为20 MHz (称为"刻度")
											// TM4C123x_ROM用户指南第199/348页
												// TM4C123GH6PM Reve Datasheet,Register 8:运行模式时钟配置(RCC),偏移0x060
												// sysctl_OSC = OSCSRC (振荡器源),MOSC (主振荡器),第257 / 1409页
												// sysctl_XTAL_16MHz = XTAL (晶体值),第256/1409页
												// sysctl_SYSDIV_10 = SYSDIV (系统时钟频率),第254/1409页
												// sysctl_use_PLL = USEPWMDIV (Enable PWM Clock Divisor),第255/1409页

//设置PWM时钟(PWMCLK)

SysCLLPWMClockSet( sysctl_PWMDIV_64);//通过将PWM MHz (tick) 20.0 除以64= PWM时钟312.5 KHz [PWM 31.25万 Hz](PWMCLK)来 设置时钟
											// TM4C123x_ROM用户指南第217/348页
											// TM4C123GH6PM Reve Datasheet,Register 8:运行模式时钟配置(RCC),偏移0x060
											// sysctl_PWMDIV_64 = PWMDIV,第255/1409页

//启用PWM模块1,发生器0到GPIO端口D引脚0的输出,使发生器3到GPIO端口F引脚2的输出

SysctlPeripheralEnable( sysctl_Periph_PWM1 );//启用PWM外设PWM模块1

SysctlPeripheralEnable( sysctl_Periph_GPIOD);//启用GPIO:端口D

SysctlPeripheralEnable( sysctl_Periph_GPIOF );//启用GPIO:端口F


/*--- 将PWM模块1,发生器0,PWM 1配置为在GPIO GPIO端口D,引脚PD0 M1PWM0 */上输出定义的频率和脉冲占空比


GPIOPinTypePWM(GPIO_PORTD_BASE,GPIO_PIN_0);//配置端口D,引脚0,供PWM外设使用。
												//当TM4C123G_LaunchPad是ROM_ API时,程序会加载,但不会在它上运行
												//当TM4C123G_LaunchPad是2.1 3.156 驱动程序库API时,该程序将加载并运行于TM4C123G_LaunchPad上


GPIOPinConfigure( GPIO_PD0_M1PWM0 );//配置端口D,引脚0到PWM输出的备用功能
										// TM4C123GH6PM微控制器数据表-SPMS376E,23.4 GPIO引脚和备用功能,p1351


PWMGenConfigure( PWM1_BASE,PWM_GEN_0,PWM_GEN_MODE_DOWN );//配置PWM模块1,发生器0。 在mode_down中,从PWM发生器的周期(负载)向下计数到零,
																//然后重置为预设的PWM发生器周期(负载)值。
																// TIVA C系列TM4C123x ROM用户指南,PWM,15.2。1.5 ROM_PWMGenConfigure,第157页。
																// TM4C123GH6PM微控制器数据表-SPMS376E,20.3 Tm2 PWM计时器,p1234和图20-3。 PWM倒计时模式,P1235

PWMGenPeriodSet( PWM1_BASE,PWM_GEN_05208 );//设置PWM发生器的0周期(负载)值。 这是方波的频率。
													//周期(负载)值定义为发生器块上零脉冲信号之间的PWM时钟信号的数量。
													// PWMCLK频率[ticks per second (Hz)]= 6.25万 ticks per second (每秒tick数)
													// PWM周期=(1/f)=每刻度的0.0.0032万 秒数
													//所需频率[f]= Hz的数量
													//所需期间=(1/f)=每个期间的秒数
													//每个所需周期的刻度=每个周期的秒数/每个刻度的秒数
													// 60 Hz =5208刻度

//ROM_PWMDeadBandEnable (PWM1_BASE,PWM_GEN_01000,1000);//在PWM0输出信号上启用死区生成,以PWMGenPeriodSet tick的百分比表示
													// PWMGenPeriodSet tick的百分比=

PWMPulseWidthSet( PWM1_BASE,PWM_OUT_0,( PWMGenPeriodGet(PFM1_BASE,PWM_GEN_0)/4);//使用PWMGenPeriodGet获得先前设置的期间,设置PWM发生器0脉冲宽度输出。
																							//设置占空比:在这种情况下,PWM发生器的周期除以10,以获得10 % 占空比。


PWMOutputState( PWM1_BASE,PWM_OUT_0_bit,true );//启用PWM模块1发生器0的输出



PWMGenEnable( PWM1_BASE,PWM_GEN_0);//为PWM模块1发生器0启用计时器/计数器

GPIOPadConfigSet (GPIO_PORTD_BASE,GPIO PIN_0,GPIO强度_8mA,GPIO PIN_TYPE_STD);//为8 MA输出启用GPIO端口D垫和引脚0


/*--- 将PWM模块1,发生器3,PWM 1配置为在GPIO端口F引脚PF2 M1PWM6上输出定义的频率和脉冲占空比------- */


GPIOPinTypePWM(GPIO_PORTF_BASE,GPIO PIN_2 );//配置端口F,引脚2以供PWM外设使用
												//当TM4C123G_LaunchPad是ROM_ API时,程序会加载,但不会在它上运行
												//当TM4C123G_LaunchPad是2.1 3.156 驱动程序库API时,该程序将加载并运行于TM4C123G_LaunchPad上


GPIOPinConfigure( GPIO_PF2_M1PWM6 );//配置端口F的交替功能,引脚0到PWM输出
										// TM4C123GH6PM微控制器数据表-SPMS376E,23.4 GPIO引脚和备用功能,p1351

PWMGenConfigure( PWM1_BASE,PWM_GEN_3,PWM_GEN_MODE_UP_DOWN );//配置PWM模块1,发生器2。 在MODE_UP_DOWN中,从PWM发生器的周期(负载)向下计数到零,
																	/*在向上/向下计数模式中,它将从零向上计数到预设值,
																	倒计时至零,然后重复此过程。
																	这将产生中心对齐的PWM信号
																	(即PWM高/低期间的中间
																	生成器生成的信号将同时出现)。*/
																// TIVA C系列TM4C123x ROM用户指南,PWM,15.2。1.5 ROM_PWMGenConfigure,第157页
																// TM4C123GH6PM微控制器数据表-SPMS376E,20.3 .................2 PWM计时器,p1234和图20-4。 PWM向上/向下计数模式,P1235


PWMGenPeriodSet( PWM1_base, PWM_GEN_3, 5208);//设置PWM发生器的0周期(负载)值。 这是方波的频率。
													//周期(负载)值定义为发生器块上零脉冲信号之间的PWM时钟信号的数量。
													// PWMCLK频率[ticks per second (Hz)]= 6.25万 ticks per second (每秒tick数)
													// PWM周期=(1/f)=每刻度的0.0.0032万 秒数
													//所需频率[f]= Hz的数量
													//所需期间=(1/f)=每个期间的秒数
													//每个所需周期的刻度=每个周期的秒数/每个刻度的秒数
													// 60 Hz =5208刻度

PWMDeadBandEnable (PWM1_BASE,PWM_GEN_320.02万);//在PWM0输出信号上启用死区生成,以PWMGenPeriodSet tick的百分比表示
													// PWMGenPeriodSet tick的百分比=

PWMPulseWidthSet( PWM1_BASE,PWM_OUT_6,( PWMGenPeriodGet(PFM1_BASE,PWM_GEN_3)/4);//通过使用PWMGenPeriodGet获取先前设置的期间,设置PWM发生器0脉冲宽度输出(占空比)。
																							//在这种情况下,PWM发生器的周期除以10,以获得10 % 占空比。

//ROM_PWMOutputInvert (PWM1_BASE,PWM_OUT_0_bit,TRUE);//反转PWM模块1发生器0的输出,位1
//(由于PWM发生器的两个输出相互反转,因此不需要此函数)

PWMOutputState( PWM1_BASE,PWM_OUT_6_bit,TRUE );//启用PWM模块1,发生器2,PWM 4的输出

PWMGenEnable( PWM1_BASE,PWM_GEN_3);//启用PWM模块1发生器0的计时器/计数器

GPIOPadConfigSet (GPIO _PORTF_BASE,GPIO PIN_2,GPIO强度_8mA,GPIO PIN_TYPE_STD);//为8 MA输出启用GPIO端口F垫和引脚0


同时(1){
;}

}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Robert,

    您是否安装了TivaWare? 该项目正在使用driverlib,该库是TivaWare的一部分。 从您的"包含"选项中,我可以看到提及了一个tivaware安装。 该路径是安装的路径吗? 您是否还更新了链接程序搜索路径以指向此位置? 在ARM链接器->文件搜索路径下的项目选项中,应该在顶部有一个driverlib条目。

    此致,
    John
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,John:

    感谢您的及时回复,您做到了!
    非常感谢您的正确,清晰的回答。

    我的目的是设置项目,使它们可以轻松地在我的拖车PC之间移动。
    我正在努力了解如何配置开发环境以及如何正确使用Path和Build Variables。 我正在阅读文档,其中有很多,而且很复杂。
    我们非常感谢您的建议。

    再次感谢Bob
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Bob,

    这里有一些关于制作可移植项目的指南:

    processors.wiki.ti.com/.../Portable_Projects

    就我个人而言,我可能会将ivaware和项目置于源代码控制的结构中,比如这样

    \
    \tivaware
    \project1.
    \project2.

    这样,您就可以使项目引用具有相对路径的tivaware。 另外,可以将tivaware安装在任何位置,您只需拥有一个存储位置的变量,然后每个用户都可以在其工作空间中定义该变量。

    此致,
    John
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,John:

    再次感谢您为我提供的指导,非常有帮助。 我学到了很多。

    如果您愿意,我还有几个问题。 昨天,我花了相当多的时间来处理可移植项目文档,仔细地跟踪和重新跟踪从“CCSv5中的可移植项目”一节开始的信息,如“CCSv6中的可移植项目”一节中所建议的那样。  顺便说一下,我已经安装并使用了完全更新的CCSv7版本。

    我的目标是在我的两台PC上配置CCSv7,以便我可以在任何位置的任何一台计算机上轻松地处理相同的项目。  我一半时间都在温哥华,另一半时间在西雅图南部的一个城市。  我在这两个地方都有开发“实验室”。  “实验室”相当普通,是一个很好的Agilent示波器,差分探头,逻辑分析仪,仪表和各种PCB结构工具。 我也在设计和构建硬件。  我有一个第二代原型正在运行,下面插入了一张照片。  

    现在,最后讨论以下问题:

    1. 由于某种原因,我很难理解和使用路径变量和生成变量。  我不知为何错过了这一点;请回顾以下评论和他们的问题。

    2.根据“可移植项目”部分“在6.1 .x中,接口得到了进一步改进,以便可以在工作空间级别的一个位置设置变量,并自动将其作为工作空间中所有项目的路径变量和生成变量传播。”

    2.1。  CCSv7是否如此?

    2.2。  当我按照上述文档将TIVAARE的任何版本变成工作空间级别变量时,它不会传播,也不会出现在项目的“包括”文件夹中。

    为此,我必须使用以下路径:“项目名称”>“属性”>CCS“生成”>“包括选项”,然后在顶部添加路径。2.2 这是唯一的方法吗?  如果没有,如何进行?

    3.我尝试对driverlib.lib文件执行相同操作。  我可以访问该项目的唯一方法是使用以下路径:“项目名称”>“属性”>CCS生成>ARM链接器”>“文件搜索路径”,并在顶部添加路径。 这是唯一的方法吗?  如果没有,如何进行?

    4.一旦TIVAARE (我尝试了1.1 和2.1 driverlib.lib) 4.178 和driverlib.lib可用于项目,我就将main.c文件复制到项目中。 它使用调试器构建并加载到目标(EK-TM4C123GL)。 但是,当我单击绿色的“继续”按钮时,EXIT.C 16.9 v.3文件打开,并且代码不会在目标上开始运行。 我搜索了论坛,但没有找到解决这个问题的办法。

    4.1 当我按下目标板上的复位按钮或单击红色“终止”按钮时,代码将运行。  如何解决此问题?  当我在同一main.c中使用CSSv6安装时,它没有执行此操作;我必须有未正确配置的内容?

    如果您有时间,我将非常感谢您指导您解决上述问题。

    再次感谢Bob

    项目图片:MOSFET光隔离器HV -低电流电源

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    很抱歉回复太慢。  我今天在登录E2E时遇到了问题。

    在我们使用的Eclipse框架中,生成变量和资源路径变量是不同的实体。  但是我们发现,当您需要一个时,也需要另一个,例如在6.1 3和更高版本(包括7.x)中,如果您设置一个,它会自动创建另一个。

    资源路径变量用于在项目目录外有源文件时。  可以将变量用作路径的一部分。 生成时生成工具使用生成变量,通常在包含路径选项中使用。

    变量本身不会自动显示在包含路径中。  您需要直接添加所需的路径。  通常,变量是路径的一部分,如编译器的${Tivaware}/include的include path和链接器的${Tivaware}/lib include path。  变量本身只是一个字符串,不一定是完整路径。

    对于driverlib,您可能需要按照libc.a在此项目中的方式对其进行设置。  库的名称位于顶部框中,其位置位于底部框中。  在本例中,其位置为${cG_tool_root}/lib

    我可能需要为另一个关于跑步的问题提供一些帮助。  如果exit.c正在打开,则表示程序已运行到退出标签。

    此致,

    John

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,John:

    感谢您的非常有帮助的指导。

    自从星期五晚上以来,我没有任何实验室时间,因为我的妻子这个周末为我们计划了一个非常完整的社交日历。 所以我不可能在任何实验室时间偷偷溜到星期一晚上。  我很想处理您提供的文件搜索路径过程。  

    此外,我期待您对 exit.c.的评论

    再次感谢Bob

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    另外,我期待着您对 EXIT.C.

    的评论。如果main()返回,EXIT函数将被调用。 在主功能结束时,您是否仍有空的While循环,如您的第一篇帖子所示?

    [如果SYS/BIOS内核检测到错误,使用SYS/BIOS或TI-RTOS程序时也会调用退出,但您的代码看起来只是在使用TivaWare,因此不适用]