我熟悉自己使用Eclipse/GCC DA14585物联网多传感器开发工具包。我在AN-B064中运行了步骤,成功地编译并运行调试器,没有任何问题。
我决定在UM-B-101第4.2.4节中每张指令尝试和配置空气质量指数。定义IAQ_ENABLED后,我收到以下错误:
/projects/target_apps/common/lib/bsec/user_iaq.c:86: undefined reference to ' bsec_init'
C:/IoT_MSK/DA14585_IOTP/v6.160.4/projects/target_apps/common/lib/bsec/user_iaq.c:99: undefined reference to ' bsec_set_state'
C:/IoT_MSK/DA14585_IOTP/v6.160.4/projects/target_apps/common/lib/bsec/user_iaq.c: undefined reference to ' bsec_init'
/projects/target_apps/common/lib/bsec/user_iaq.c:117: undefined reference to ' bsec_update_subscription'
/ bsec_lib / user_iaq。o:在函数' update_iaq'中:
C:/iot_msk/da14585_iotp/v6.160.4/projects/target_apps/common/lib/bsec/user_iaq.c:145:未定义引用`bsec_sensor_control'
/projects/target_apps/common/lib/bsec/user_iaq.c:169: undefined reference to ' bsec_do_steps'
collect2.exe:错误:LD返回1个退出状态
我猜链接器不知道如何处理user_iaq.c。因为其中的所有内容只在定义了IAQ_ENABLED时才存在。
有什么解决办法吗?显然,我是Eclipse/GCC新手。
谢谢
嗨dsteury,
谢谢你在网上提出的问题。让我检查一下,试着复制一下,我会尽快给你回复。
谢谢,PM_Dialog
嗨dsteury,
请阅读《空气质素指数配置》的第4.2.4节UM-B-101: DA14585物联网多传感器开发工具包开发指南文档。
计算空气质量指数(AQI)的博世BSEC库不包含在默认配置中(未定义IAQ_ENABLED)。如果用户希望编译包含此库的映像,则应该删除其他特性以获得所需的内存空间。例如,这可以通过以下步骤来完成:
1.移除VCNL4010接近传感器,并从da1458x_config_basic.h中取消定义VCNL4010_OPTO_SENSOR_AVAILABLE。
2.通过在user_app_iot_config.h中定义ALWAYS_ADVERTISE来禁用“wake on motion”特性。这也消除了ICM426xx驱动程序的低功耗配置部分。
3.禁用快速加速度计校准,并取消user_app_iot_config.h中的ALWAYS_ USE_FAST_ACC_CAL。
4.构建。
5.从da1458x_config_basic.h定义IAQ_ENABLED
6.再次构建。iot585产生。十六进制现在包含了AQI特性。
谢谢,PM_Dialog
我读了UM-B-101的4.2.4配置空气质量指数,我认为我正确地遵循了说明。也许我错过了什么;所以,我再重复一遍。
我删除了我的整个SDK目录并从zip文件中重新提取到c:\ da14585_iotp_v6.160.4。然后我打开SmartSnippets,进入IDE(记住我使用的Eclipse / GCC)并重新实现的项目,所以我可以从头开始。我构建了项目,运行调试器和一切正常工作正常。
1.移除VCNL4010接近传感器,并从da1458x_config_basic.h中取消定义VCNL4010_OPTO_SENSOR_AVAILABLE。
我不太确定“Remove the VCNL4010”是什么意思。这是否意味着我应该从板中实际删除部分,或者我应该从项目中删除虚拟文件夹vcnl4010,或者这意味着其他什么?我不知道该怎么办;所以我什么都没做。
我改变了da1458x_config_basic.h中的第75行:
#定义VCNL4010_OPTO_SENSOR_AVAILABLE
:
# undef VCNL4010_OPTO_SENSOR_AVAILABLE
保存文件。
2.通过在user_app_iot_config.h中定义ALWAYS_ADVERTISE来禁用“wake on motion”特性。这也消除了ICM426xx驱动程序的低功耗配置部分。
我改变了user_app_iot_config.h的第24行:
#undef ALWAYS_ADVERTISE //禁用运动唤醒功能
:
#define ALWAYS_ADVERTISE //禁用运动唤醒功能
保存文件。
3.禁用快速加速度计校准,并取消user_app_iot_config.h中的ALWAYS_ USE_FAST_ACC_CAL。
我搜索user_app_iot_config.h for ALWAYS_ USE_FAST_ACC_CAL,它不在那里;但是,这里有一个USE_FAST_ACC_CAL(前面没有“ALWAYS_”),所以我认为这是一个输入错误,从这里更改第41行:
#定义USE_FAST_ACC_CAL
:
#undef use_fast_acc_cal.
保存文件。
4.构建。
我构建,运行调试器,打开物联网传感器,可以看到接近传感器不再工作;所以,我想到目前为止我做的一切都还不错。
5.从da1458x_config_basic.h定义IAQ_ENABLED
我改变了da1458x_config_basic.h的第88行:
#undef IAQ_ENABLED //包括iAQ库,在板上处理气体数据
:
#define IAQ_ENABLED //包括iAQ库,在板上处理气体数据
保存文件。
6.再次构建。iot585产生。十六进制现在包含了AQI特性。
我再做一次,得到7个错误。当我打开控制台时,我在窗口的末尾看到的是:
COLLECT_GCC_OPTIONS='-mcpu=cortex-m0' '-mthumb' '-Os' '-fmessage-length=0' '-fsigned-char' '- function-sections' '-fdata-sections' '-g3' '-T' './ldscript_common. /ldscript_common. /像“- l ../../../../../../项目/ target_apps /物联网/ common_iot_files / lib”“- l ../../../../../../ SDK_585 / sdk / common_project_files / misc“- l ../../../../../../ SDK_585 / sdk /平台/ system_library /输出/ GCC“规格= nano。规格的规格=好管闲事。` ` -v ` ` -o ` ` iot585.elf ` `
C:/diasemi/smartsnippetsstudio2.0.10/gcc/7-2018-q2/bin / lib / gcc / arm-none-eabi / 7.3.1 / collect2.exe -plugin c:/diasemi/smartsnippetsstudio2.0.10/GCC / 7-2018-Q2 / BIN / ... lib / gcc / arm-none-eabi / 7.3.1 / liblto_plugin-0.dll -plugin-opt = c:/diasemi/smartsnippetsstudio2.0.10/gcc/7-2018-q2 / bin / bin / arm-none-eabi / 7.3.1 / lto-wrapper.exe -plugin-opt = -freesolution = c:\ david \ appdata \ local \ temp \ ccokcoya.res -plugin-opt = -pasp-tod = -lgcc -plugin-opt = -pass-tout = -lg_nano -plugin-opt = -pasp-tod = -lc_nano -plugin-opt = -pass-tout = -lgcc-plugin-opt = -pasp-opt = -lc_nano -plugin-opt = -pass-opt = -lnosys -plugin-opt = -lgcc-tod = -lgcc -plugin-opt = -pase-tout = -lc_nano -plugin-opt = -pass-tod = -lnosys - sysroot = c:\ diasemi \ smartsnippetsstudio2.0.10 \ gcc \ 7-2018-q2 \ bin \ ../ arm-none-eabi-x -o iot585.elf c:/diasemi/smartsnippetsstudio2.0.10/gcc/7-2018-q2/bin/../lib/gcc/arm-none-eabi/7.3.1/thumb/v6-m/crti.o c:/diasemi/smartsnippetsstudio2.0.10/gcc/7-2018-q2/bin/../lib/gcc/arm-none-eabi/7.3.1/thumb/v6-m/crtbegin.o c:/diasemi/smartsnippetsstudio2.0.10/gcc/7-2018-q2/bin/../lib/gcc/arm-none-eabi/7.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/crt0.o -L../../../../../../projects/target_apps/iot/common_iot_files/lib -L../../../../../../SDK_585/sdk/common_project_files/misc -L../../../../../../SDK_585/sdk/platform/system_library/output/GCC -Lc:/diasemi/smartsnippetsstudio2.0.10/gcc/7-2018-q2/bin/../lib/gcc/arm-none-eabi/7.3.1/thumb/v6-m -Lc:/diasemi/smartsnippetsstudio2.0.10/gcc/7-2018-q2/bin/../lib/gcc/arm-none-eabi/7.3.1/../../../../arm-none-eabi/lib/thumb/v6-m -Lc:/diasemi/smartsnippetsstudio2.0.10/gcc/7-2018-q2/bin/../arm-none-eabi/lib/thumb/v6-m -Lc:/diasemi/smartsnippetsstudio2.0.10/gcc/7-2018-q2/bin/../lib/gcc/arm-none-eabi/7.3.1 -Lc:/diasemi/smartsnippetsstudio2.0.10/gcc/7-2018-q2/bin/../lib/gcc -Lc:/diasemi/smartsnippetsstudio2.0.10/gcc/7-2018-q2/bin/../lib/gcc/arm-none-eabi/7.3.1/../../../../arm-none-eabi/lib -Lc:/diasemi/smartsnippetsstudio2.0.10/gcc/7-2018-q2/bin/../arm-none-eabi/lib --gc-sections -Map iot585.map --no-wchar-size-warning ./wkup_adapter/wkup_adapter.o ./vcnl4010/vcnl4010.o ./vcnl4010/vcnl4010_impl.o ./user_sfl/user_sfl_util.o ./user_sensors/user_sensor_config.o ./user_sensors/user_sensor_raw.o ./user_sensors/user_sensor_sfl.o ./user_sensors/user_sensors.o ./user_profiles/dws.o ./user_profiles/dws_task.o ./user_platform/i2c_gpio_extender.o ./user_platform/sensors_periph_interface.o ./user_platform/user_iot_dk_utils.o ./user_platform/user_periph_setup.o ./user_app/user_dws.o ./user_app/user_dws_reports.o ./user_app/user_dws_task.o ./user_app/user_iot.o ./sensors_interface/sensors_interface.o ./sensors_interface/sensors_interface_api.o ./sensor_calibration/basic_acc_cal.o ./sensor_calibration/basic_autocal.o ./sensor_calibration/basic_prox_cal.o ./sensor_calibration/sensor_calibration.o ./sensor_calibration/static_calibration.o ./sdk_profiles/attm_db_128.o ./sdk_profiles/bass.o ./sdk_profiles/bass_task.o ./sdk_profiles/custom_common.o ./sdk_profiles/diss.o ./sdk_profiles/diss_task.o ./sdk_profiles/prf.o ./sdk_profiles/prf_utils.o ./sdk_profiles/proxr.o ./sdk_profiles/proxr_task.o ./sdk_profiles/suotar.o ./sdk_profiles/suotar_task.o ./sdk_driver/adc.o ./sdk_driver/battery.o ./sdk_driver/gpio.o ./sdk_driver/hw_otpc.o ./sdk_driver/sky66111.o ./sdk_driver/spi.o ./sdk_driver/spi_flash.o ./sdk_driver/syscntl.o ./sdk_driver/systick.o ./sdk_driver/timer0.o ./sdk_driver/trng.o ./sdk_driver/uart2.o ./sdk_driver/wkupct_quadec.o ./sdk_boot/hardfault_handler.o ./sdk_boot/ivtable_DA14585_586.o ./sdk_boot/nmi_handler.o ./sdk_boot/startup_DA14585_586.o ./sdk_boot/system_DA14585_586.o ./sdk_ble/rf_585.o ./sdk_ble/rwble.o ./sdk_ble/rwip.o ./sdk_arch/arch_console.o ./sdk_arch/arch_main.o ./sdk_arch/arch_rom.o ./sdk_arch/arch_sleep.o ./sdk_arch/arch_system.o ./sdk_arch/jump_table.o ./sdk_arch/nvds.o ./sdk_app/app.o ./sdk_app/app_bass.o ./sdk_app/app_bass_task.o ./sdk_app/app_customs.o ./sdk_app/app_customs_common.o ./sdk_app/app_customs_task.o ./sdk_app/app_default_handlers.o ./sdk_app/app_diss.o ./sdk_app/app_diss_task.o ./sdk_app/app_easy_msg_utils.o ./sdk_app/app_easy_security.o ./sdk_app/app_easy_timer.o ./sdk_app/app_entry_point.o ./sdk_app/app_msg_utils.o ./sdk_app/app_proxr.o ./sdk_app/app_proxr_task.o ./sdk_app/app_security.o ./sdk_app/app_security_task.o ./sdk_app/app_suotar.o ./sdk_app/app_suotar_task.o ./sdk_app/app_task.o ./icm426xx/Icm426xxDriver.o ./icm426xx/Icm426xxDriver_HL.o ./icm426xx/Icm426xxTransport.o ./icm426xx/Icm426xx_impl.o ./driver_adaptation_layer/environmental_bme680.o ./driver_adaptation_layer/magneto_ak099.o ./driver_adaptation_layer/motion_bmi160.o ./driver_adaptation_layer/motion_icm4X6.o ./driver_adaptation_layer/optical_vcnl4010.o ./bsec_lib/user_iaq.o ./bmi160/bmi160.o ./bmi160/bmi160_impl.o ./bme680/bme680.o ./bme680/bme680_impl.o ./ak09915/ak09915.o ./ak09915/ak09915_impl.o -lsystem_library -lsensor_fusion -lsensor_calibration --start-group -lgcc -lg_nano -lc_nano --end-group --start-group -lgcc -lc_nano -lnosys --end-group --start-group -lgcc -lc_nano -lnosys --end-group c:/diasemi/smartsnippetsstudio2.0.10/gcc/7-2018-q2/bin/../lib/gcc/arm-none-eabi/7.3.1/thumb/v6-m/crtend.o c:/diasemi/smartsnippetsstudio2.0.10/gcc/7-2018-q2/bin/../lib/gcc/arm-none-eabi/7.3.1/thumb/v6-m/crtn.o -T ./ldscript_common.lds
/ bsec_lib / user_iaq。o:在函数init_iaq中:
/DA14585_IOTP/v6.160.4/projects/target_apps/common/lib/bsec/user_iaq.c:86: undefined reference to ' bsec_init'
/DA14585_IOTP/v6.160.4/projects/target_apps/common/lib/bsec/user_iaq.c:99: undefined reference to ' bsec_set_state'
/DA14585_IOTP/v6.160.4/projects/target_apps/common/lib/bsec/user_iaq.c:101: undefined reference to ' bsec_init'
C:/da14585_iotp_v6.160.4/da14585_iotp/v6.160.4/projects/target_apps/common/lib/bsec/user_iaq.c:117:未定义引用`bsec_update_subscription'
/ bsec_lib / user_iaq。o:在函数' update_iaq'中:
C:/DA14585_IOTP /v6.160.4/projects/target_apps/common/lib/bsec/user_iaq.c:145: undefined reference to ' bsec_sensor_control'
/DA14585_IOTP/v6.160.4/projects/target_apps/common/lib/bsec/user_iaq.c:169: undefined reference to ' bsec_do_steps'
collect2.exe:错误:LD返回1个退出状态
: * * * (iot585。精灵]错误1
10:41:19建造完成(耗时1m:49秒426毫秒)
如果我做错了什么,请告诉我。
谢谢
嗨dsteury,
我为耽搁道歉。我从团队那里得到了反馈。不幸的是,Bosch库在GCC项目中有很大的内存需求。因此,它是不可能使空气质量配置GCC为基础的项目。
谢谢,PM_Dialog
谢谢回复。
这些步骤基本上减少了代码的大小,以便使用Keil编译空气质量指数代码时合适。我猜GCC并不像凯尔高效优化时(我不知道,因为我没有访问凯尔),但这并没有回答这个问题,为什么会有一群未定义的引用bsec_init, bsec_set_state, bsec_update_subscription, bec_sensor_control bsec_do_steps。
我做了更多的挖掘,看起来这些函数存在于一个名为libalgobsec_full的库中。Lib,它与user_iaq.c在同一个目录中。为了让GCC使用这个库,我经历了一些痛苦。最后,我明白了,但我得出了相同的结论,这段代码不适合这个部分。理论上,我认为可以去掉更多用于其他传感器的代码,让空气质量指数(Air Quality Index)工作,但我不太确定。
我包括了我用来让GCC使用这个库的步骤,这样其他人就不必费力地(像我一样)找到它。
链接器已经在/projects/target_apps/iot/common_iot_files/lib中寻找一些库。我可以通过以下步骤找到这个库的链接器:
1.libalgobsec_full副本。/projects/target_apps/common/ Lib /bsec到/projects/target_apps/iot/common_iot_files
2.重命名”。Lib“扩展到”。所以文件名是libalgobsec_full。a’(我注意到这个目录中的其他库都有一个版本。当我进行文件比较时,我注意到.lib和.a版本的内容是相同的。)
3.在Eclipse中右键单击iot585项目,属性,C/ c++通用,路径和符号,然后在Libraries选项卡下添加'algobsec_full'(不要使用'libalgobsec',确保不要在前面包含'lib')
4.确保从上面的步骤5定义了IAQ_ENABLED。
5.构建
link不应该抱怨对上述函数未定义的引用,但现在出现了一大堆不同的错误:
C:/diasemi/smartsnippetsstudio2.0.10/gcc/7-2018-q2/bin /../ lib / gcc / arm-none-eabi / 7.3.1 / ../../../ ... ARM-none-eacbi / bin / ld.exe:iot585.elf部分`i.bsec_gashumitybaselinetracker_isbaselineallowedadapt'不适合区域`lr_irom3'
嗨dsteury,
非常感谢您的指示,并很高兴您能够减少代码大小。
谢谢,PM_Dialog