Giter Club home page Giter Club logo

x-track's Introduction

X-TRACK

开源GPS自行车码表。

拥有可显示实时位置的离线地图。

支持记录和显示实时轨迹以及导出标准GPX格式的轨迹文件。

全新设计的"页面生命周期管理""消息订阅发布框架"

演示视频:https://www.bilibili.com/video/BV1GB4y1K7VV

image

GUI

LVGL V8

硬件配置

  • 1.主控: AT32F435CGU7 (主频:288MHz RAM:512KB ROM:1MB)
  • 2.屏幕: ST7789 IPS 1.54inch SPI接口 240x240分辨率 60Hz刷新率
  • 3.储存器: Micro SD CARD 32GB
  • 4.输入设备: 旋转编码器
  • 5.RTC: MCU内置RTC时钟
  • 6.加速度计: LSM6DSM (支持硬件计步输出)
  • 7.地磁计: LIS3MDL
  • 8.GPS: ATGM336H (BDS + GPS + GLONASS + GALILEO + QZSS + SBAS)
  • 9.电池: Li-ion 3.7V 683030 700mAh
  • 10.电源管理: LP5907-3.3 + MCP73831
  • 11.外壳: 3D打印 光固化

功能

  • 1.支持速度、距离、时间、卡路里、航向显示
  • 2.拥有离线地图,支持显示实时位置,支持缩放
  • 3.支持计步
  • 4.支持经纬度、海拔显示
  • 5.支持RTC自动根据GPS校准
  • 6.支持记录轨迹,可导出GPX格式的文件
  • 7.支持掉电自动保存数据(JSON格式文件)
  • 8.四小时续航 (持续工作,始终亮屏)
  • 9.支持在PC模拟器模拟,脱离硬件调试(配置为Release x86)
  • 10.支持显示实时轨迹
  • 11.待续...

实物演示

测速

default.mp4

历史轨迹显示(GPXSee)

image

致谢

感谢@davidce贡献的参考设计“自制基于arduino的GPS地图导航系统3.0”。

感谢@W-Mai改进的地图下载链接生成工具地图下载器LVGL图片转换器(Python版)批量文件重命名工具

感谢@Trigger-CNUI设计

感谢@MouriNaruto的LVGL Visual Studio模拟器lv_sim_visual_studio

感谢@dj140编写地图下载教程

x-track's People

Contributors

artisticzhao avatar dj140 avatar dozingfiretruck avatar fastshift avatar gyy0814 avatar johnsbark avatar jwreagor avatar lytsingstudio avatar nikoteslawu avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

x-track's Issues

想请教一些有关于时钟的问题

您好,我在研究这个项目的DataProc的部分遇到一些疑问,想请教一下。系统上电初始化后Clock通过GPS (TzConv) 矫正RTC时钟,但矫正过程中DP_TzConv中首先更新了ArduinoTime库中的时间,然后使用ArduinoTime库中的时间返回给Clock。而之后的Recorder模块中直接通过Clock从RTC获取时间,那ArduinoTime库的时间还会在哪里用到呢?其他应用中为什么不直接使用RTC时间呢?

X-Track复位问题以及屏幕背光

X-Track只有在用keil DEBUG的时候才能复位,但是要点三次run才能复位成功,然后屏幕停在主界面数秒后缓慢熄灭。平时上电则不能复位成功。我朋友的也是这样,不是焊接问题。麻烦了

请问缓存一个页面是在哪里实现的?

大佬你好,我在学习你的PageManager代码,我看到当SwitchTo一个页面时,会判断这个页面的isCached是否为真,若为真,则更改状态为WILL_APPEAR,这时就会设置该页面可见并启动页面切换动画。而若isCached为假,则会进入LOAD状态,这时会创建页面的root并执行onViewLoad();
我想问一下此处的Cached是指什么?我为什么没有找到具体的执行某个函数将某个页面Cach的代码,只是看到有些地方将isCached赋值为真,有些地方将isCached赋值为假。
不知道我能不能说明白我的意思,希望大佬能解答我的疑惑。

中文加载问题

您好,我用lvgl官方工具生成一些中文字体后用ResourceManager管理却无法显示中文?有解决方法吗

V2.1开机黑屏问题

器件组合:

GPS IMU MAG 开机
正常
黑屏
正常
黑屏

另外使用V1.9版本的固件在上面的组合都开机正常。
请问各位有遇到相似的问题吗?

keil5 编译源码错误,请教

..\USER\App\Utils\ArduinoJson\src\ArduinoJson/Numbers/parseNumber.hpp(76): error: #304: no instance of overloaded function "ArduinoJson6180_51::VariantData::setInteger" matches the argument list

..\Libraries\SdFat\src\SdFat.h(333): error: #441: argument list for class template "SdFileSystem" is missing

关于GPS获取速度信息不准确的问题?

大家有没有遇到过获取GPS的速度信息不准确的情况?我这边没有用作者推荐的GPS模块,而是买的别的家的模块,我手上有两块不同厂家的,获取的GPS速度信息都不太准确呢,有什么好的调整方式么?

关于页面管理器 页面状态 (PageState) 切换的问题

问题总结

systeminfosView.cpp 中存在函数 onFocus ,用于选项卡的切换。

我加入调试信息 LV_LOG_USER("SYSTEMP-ONFOCUS\r\n"); 发现只有在每次键盘或鼠标输出时,才能进入到该函数中。而 onFocus 在如下函数中被调用。

查询代码最终在 void PageManager::StateUpdate(PageBase* base) 发现了页面状态切换的过程。

问题1:


StateDidAppearExecute 中返回的 StatePAGE_STATE_ACTIVITY ,按道理来说下次进入 StateUpdate 函数时,应该执行 case PageBase::PAGE_STATE_ACTIVITY: 分支,但调试发现,执行的一直是 case PageBase::PAGE_STATE_DID_APPEAR: 分支。
我想问问在哪里导致了状态的变化?

问题2:

为什么只有在鼠标键盘输出时,才会进入 onViewDidAppear(); 函数,并打印我添加的信息。这个页面过程的具体代码在哪里?

结构与 PCB 形状如何完美耦合

大佬我想问个问题,就是我知道使用建模软件导出外壳 DXF 文件提供给 PCB 可以约定 PCB 板子的形状,我知道底面怎么做但是侧面怎么办?所以我的疑问是怎么通过导入结构设计文件的方式使得外壳侧边开口和 PCB 上接口位置对应起来。(比如外壳侧边 USB 开口和 PCB 板子上的 USB 接口契合)

About GPS Accuracy on Live MAP

I've successfully run this program with ESP32 and Ili9341 3.2 TFT LCD with Ublox-M8N GPS module.

However I have a problem with the result showing in Live Map (ARROW point), it doesn't look like what I see with the web based map even though it's the same longitude and latitude.

when viewed in Live View from Tile X and Y it does give the correct image but gives the wrong ARROW point.

is there any configuration to be able to adjust it?

may provide an offset configuration or other to match the actual situation.

Thanks very much.

显示屏功耗问题

X-TRACK在外面使用一段时间之后,SD卡壳有点烫手。
做了以下的基本功耗量测。所有的量测都是在USB接口5V供电且未接电池的前提之下:

器件组合 电流
完整X-TRACK 210 mA

完整X-TRACK是指:CH340E+MCP73831+LP5907+MCU+IMU+SD+ENCODER+GPS+显示屏。

拆解功耗量测结果如下:

器件组合 电流
完整X-TRACK去掉GPS 190 mA
完整X-TRACK去掉显示屏 60 mA
完整X-TRACK去掉显示屏、GPS 40 mA

也就是说显示屏的电流功耗为150 mA。
以3颗LED的标准电流值是60 mA来说应该是太大了。
上面的电流值是在背光控制电路原理图当中的R12=10欧姆的状况之下。
用手边有的电阻更换之后量测如下:

器件组合 电流
完整X-TRACK@R12=10欧姆 210 mA
完整X-TRACK@R12=27欧姆 110 mA

这样换算一下,如果显示屏的背光驱动电流要60 mA的话,再加上驱动IC的功耗需求,
那么R12的电阻值应该在20~25欧姆之间即可。
使用R12=27欧姆的X-TRACK在阳光下并无大碍,可用。
不知大家有没有遇到过相同的问题?

PageManager::Install相关问题

大佬好,我在App.cpp代码段中发现一次性加载了所有的pagemanager.Install,实际应用中发现这种操作会占用较多堆栈(我使用的单片机可操作堆栈较少),此处能否修改当某一page即将加载时在对其Install,随后page消失后对其Uninstall,尽可能减少堆栈的占用。如果可以该怎么操作?能否提供一个思路?

switch 组件无法显示的问题?

你好。
我在使用模拟器进行开发时需要用到switch这个组件。经过初步调试,代码可以正常工作,点击后event事件能够正常响应。
但是在屏幕上没有显示对应的组件,我尝试调整过不通的背景颜色,均无法显示该控件。
想请问下需要做什么工作才能让switch组件正常显示?
感谢~

请问在Power Off的状态之下充电完成时LED灯会熄灭吗?

如题请问版主我的状况是充电完成后LED灯都不会熄灭。
但是如果把单片机解焊后,充电完成时LED灯就会熄灭了。
请问各位有遇到相同的问题吗?

量测BAT_CHG_DET这根信号的电压值如下:

状态 Power ON Power OFF
充电下 0.8V 2V
未充电 3.3V 0V

请问如果需要更换软件I2C的GPIO口需要如何修改才行?

你好,我这边在查看代码后发现代码中的I2C是使用的软件模拟的,我在自己的设计中由于一些其他原因需要更换I2C的IO口。
具体是从PB6/PB7更换为PB8/PB9。
我的具体做法是修改mcu_config.h中的WIRE_SDA_PIN/WIRE_SCL_PIN的内容。但是我发现修改后无法正常产生I2C波形。
期间我尝试过打开WIRE_USE_FULL_SPEED_I2C宏,这样虽然有波形了,但是用逻辑分析仪抓取波形后发现波形不对劲,另外也和我的外设无法通讯。另外我也尝试在关闭WIRE_USE_FULL_SPEED_I2C的情况下修改IO口的输出类型为OUTPUT(原始代码是OUTPUT_OPEN_DRAIN),这样修改后也能产生波形,但是依旧通讯失败。
同一个外设,我在使用PB6/PB7时是可以正常通讯的。

因此这里想请教下是不是我有漏了什么需要修改的地方?
期待回复~

请问缓存一个页面是在哪里实现的?

大佬你好,我在学习你的PageManager代码,我看到当SwitchTo一个页面时,会判断这个页面的isCached是否为真,若为真,则更改状态为WILL_APPEAR,这时就会设置该页面可见并启动页面切换动画。而若isCached为假,则会进入LOAD状态,这时会创建页面的root并执行onViewLoad();
我想问一下此处的Cached是指什么?我为什么没有找到具体的执行某个函数将某个页面Cach的代码,只是看到有些地方将isCached赋值为真,有些地方将isCached赋值为假。
不知道我能不能说明白我的意思,希望大佬能解答我的疑惑。

远程定位

希望可以支持远程查看位置和轨迹

地图文件的优化

用 1.6 的 java 地图下载器,下载地图后,再用 Tools\TilesConverterForLVGL.exe 工具进行转换,有两个问题:

  • 这个工具可否改进一下,可指定输出目录,这样原图 .png 和 .bin 就可以分开,拷贝的时候,文件数量会少一半;
  • 再一个,bin 文件一般是 256 * 256 * 2 = 128KB,有点浪费,特别是空图。是不是可以进行一个压缩处理?比如做一个 fs 的 filter。
    我看 lv_lib_png 的 blog 说,'width x height x 4 byteRAM' 用 png/split-jpg 似乎 ram 不够。

请问如果需要更换软件I2C的GPIO口需要如何修改才行?

你好,我这边在查看代码后发现代码中的I2C是使用的软件模拟的,我在自己的设计中由于一些其他原因需要更换I2C的IO口。
具体是从PB6/PB7更换为PB8/PB9。
我的具体做法是修改mcu_config.h中的WIRE_SDA_PIN/WIRE_SCL_PIN的内容。但是我发现修改后无法正常产生I2C波形。
期间我尝试过打开WIRE_USE_FULL_SPEED_I2C宏,这样虽然有波形了,但是用逻辑分析仪抓取波形后发现波形不对劲,另外也和我的外设无法通讯。另外我也尝试在关闭WIRE_USE_FULL_SPEED_I2C的情况下修改IO口的输出类型为OUTPUT(原始代码是OUTPUT_OPEN_DRAIN),这样修改后也能产生波形,但是依旧通讯失败。
同一个外设,我在使用PB6/PB7时是可以正常通讯的。

因此这里想请教下是不是我有漏了什么需要修改的地方?
期待回复~

BOM 配单问题

什么也不懂,没有经验,想拿这个项目练练手(是真的什么都不懂QwQ)
拿去淘宝 BOM 配单的时候店家说这些不够详细
大佬可以帮忙补充下吗,谢谢!

FootPrint Comment LibRef Designator Quantity 问题
Pad_B BAT_IN Pad BAT+ 1 型号?
Pad_B GND Pad BAT- 1 型号?
蜂鸣器 Buzzer BZ BZ1 1 体积  多少V  有源无源
_SMD5020         什么感值
电容_C0805 4.7UF cap C1, C3 2  
电容_C0603 104 cap C2, C4, C7, C8, C13, C18, C19, C20, 12  
电容_C0603 106 cap C5 1  
电容_C1206 22uF cap C6 1  
电容_C0603 105 cap C9, C10, C11, C12, C16, C17 6  
电容_C0603 22pf cap C14, C15 2  
LED_0603 red LED D1 1  
二极管_SOD-323 1N4148 Diode D2, D3, D4, D5 4  
二极管_SOD-323 1N4007 Diode D6 1  
开关按键 SKRP SW-PB K1 1 体积 直插还是贴片
HDR1X4H Header 4 Header 4 P2 1 排针还是排母
接插件 Micro_SD Micro_SD P3 1 发图确认
接插件 MICRO USB MICRO USB P4 1 发图确认
MOS_SOT-23 AO3401 MOSFET-P Q1 1  
MOS_SOT-23 AON3400 MOSFET-N Q2 1  
MOS_SOT-23 AO3400 MOSFET-N Q3, Q4 2  
电阻_R0603 2K Res R1 1  
电阻_R0603 1K Res R2 1  
电阻_R0603 20K Res R3, R4, R5, R6 4  
电阻_R0603 10K Res R7, R8, R11, R13, R14, R15, R16 7  
电阻_R0603 100R Res R9, R10 2  
电阻_R0603 10R Res R12 1  
SOT23-5 MCP73831 MCP73831 U1 1  
SOT23-5 LP5907-3.3 LP5907 U2 1  
AT主控 AT32F403ACGU AT32F403CGU6 U3 1  
串口 CH340E CH340E U4 1  
GPS-HTZN HT1818Z3G5L HT1818Z3G5L U5 1  
LGA- LIS3MDL LIS3DMDL U6 1  
LGA- LSM6DSM LSM6DSM U7 1  
ZJY154T- IPS154-12 IPS154-12 U8 1 完整型号
SIQ-02FVS3 Rotary Encoder Rotary Encoder U9 1  
晶振_3215 32.768K XTAL_A Y1 1  
Total   67  

Hardware 文件夹里的 BOM pdf 里因为 Footfrint 的不同内容之间没有横线分割所以可能把一项当成两项了,比如那个蜂鸣器…不过还是问一下具体的吧

关于充电动画问题

大神您好 我现在用您提供的PCB以及V1.5的程序 制作了这个码表 使用起来很不错 但是 我发现我在充电的时候 屏幕并没有显示充电 在菜单栏里面依旧显示放电 但是电池电压会逐渐升高 充电指示灯也会点亮 但是没有充电动画 这个不知道是我焊接的问题 还是说程序里面没有这个充电检测 大概测量了一下 这个BAT_CHG_DET脚不充电时电压为0.0V 充电时大概为0.3V左右 大概问了一下 好像别人做出了也没有充电动画或者显示 您看看这个大概是什么问题 :D

地图偏移问题

想请问下大佬地图偏移的问题是怎么处理的呢, 我发现码表上的离线地图和导出的轨迹在gpxsee上结果不一致(gpxsee上是准确的)

Keil 编译报错

环境 win10 keil 5.30
AT32 DFP已经安装
然后报缺少库?

Error instantiating RTE components
Error #540: 'Keil::Device:Startup:1.0.1' component is not available for target 'X-Track'
Error #540: 'Keil::Device:StdPeriph Drivers:ADC:1.0.1' component is not available for target 'X-Track'
Error #540: 'Keil::Device:StdPeriph Drivers:BKPR:1.0.1' component is not available for target 'X-Track'
Error #540: 'Keil::Device:StdPeriph Drivers:DMA:1.0.1' component is not available for target 'X-Track'
Error #540: 'Keil::Device:StdPeriph Drivers:EXTI:1.0.1' component is not available for target 'X-Track'
Error #540: 'Keil::Device:StdPeriph Drivers:FMC:1.0.1' component is not available for target 'X-Track'
Error #540: 'Keil::Device:StdPeriph Drivers:Framework:1.0.1' component is not available for target 'X-Track'
Error #540: 'Keil::Device:StdPeriph Drivers:GPIO:1.0.1' component is not available for target 'X-Track'
Error #540: 'Keil::Device:StdPeriph Drivers:PWR:1.0.1' component is not available for target 'X-Track'
Error #540: 'Keil::Device:StdPeriph Drivers:RCC:1.0.1' component is not available for target 'X-Track'
Error #540: 'Keil::Device:StdPeriph Drivers:RTC:1.0.1' component is not available for target 'X-Track'
Error #540: 'Keil::Device:StdPeriph Drivers:SPI:1.0.1' component is not available for target 'X-Track'
Error #540: 'Keil::Device:StdPeriph Drivers:TIMER:1.0.1' component is not available for target 'X-Track'
Error #540: 'Keil::Device:StdPeriph Drivers:USART:1.0.1' component is not available for target 'X-Track'
Error #540: 'Keil::Device:System_AT32Fxx:1.0.1' component is not available for target 'X-Track'

Help to convert this snippet to LVGL v7

Hi,
Can anyone help me get this snippet converted to lvgl v7? I spent a lot of time trying to port it to v7 but I couldn't get the scrolling and animation working.

#define ITEM_HEIGHT_MIN   100
#define ITEM_PAD          ((LV_VER_RES - ITEM_HEIGHT_MIN) / 2)

void SystemInfosView::Create(lv_obj_t* root)
{
    lv_obj_remove_style_all(root);
    lv_obj_set_size(root, LV_HOR_RES, LV_VER_RES);
    lv_obj_set_style_bg_color(root, lv_color_black(), 0);
    lv_obj_set_style_bg_opa(root, LV_OPA_COVER, 0);
    lv_obj_set_style_pad_ver(root, ITEM_PAD, 0);

    lv_obj_set_flex_flow(root, LV_FLEX_FLOW_COLUMN);
    lv_obj_set_flex_align(
        root,
        LV_FLEX_ALIGN_START,
        LV_FLEX_ALIGN_START,
        LV_FLEX_ALIGN_CENTER
    );

    Style_Init();

    /* Item Sport */
    Item_Create(
        &ui.sport,
        root,
        "Sport",
        "bicycle",

        "Total trip\n"
        "Total time\n"
        "Max speed"
    );

    /* Item GPS */
    Item_Create(
        &ui.gps,
        root,
        "GPS",
        "map_location",

        "Latitude\n"
        "Longitude\n"
        "Altitude\n"
        "UTC Time\n\n"
        "Course\n"
        "Speed"
    );

    /* Item MAG */
    Item_Create(
        &ui.mag,
        root,
        "MAG",
        "compass",

        "Compass\n"
        "X\n"
        "Y\n"
        "Z"
    );

    /* Item IMU */
    Item_Create(
        &ui.imu,
        root,
        "IMU",
        "gyroscope",

        "Step\n"
        "Ax\n"
        "Ay\n"
        "Az\n"
        "Gx\n"
        "Gy\n"
        "Gz"
    );

    Group_Init();
}

void SystemInfosView::onFocus(lv_group_t* g)
{
    lv_obj_t* icon = lv_group_get_focused(g);
    lv_obj_t* cont = lv_obj_get_parent(icon);
    lv_coord_t y = lv_obj_get_y(cont);
    lv_obj_scroll_to_y(lv_obj_get_parent(cont), y, LV_ANIM_ON);
}

void SystemInfosView::Style_Init()
{
    lv_style_init(&style.icon);
    lv_style_set_width(&style.icon, 220);
    lv_style_set_bg_color(&style.icon, lv_color_black());
    lv_style_set_bg_opa(&style.icon, LV_OPA_COVER);
    lv_style_set_text_font(&style.icon, ResourcePool::GetFont("bahnschrift_17"));
    lv_style_set_text_color(&style.icon, lv_color_white());

    lv_style_init(&style.focus);
    lv_style_set_width(&style.focus, 70);
    lv_style_set_border_side(&style.focus, LV_BORDER_SIDE_RIGHT);
    lv_style_set_border_width(&style.focus, 2);
    lv_style_set_border_color(&style.focus, lv_color_hex(0xff931e));

    static const lv_style_prop_t style_prop[] =
    {
        LV_STYLE_WIDTH,
        LV_STYLE_PROP_INV
    };

    static lv_style_transition_dsc_t trans;
    lv_style_transition_dsc_init(
        &trans,
        style_prop,
        lv_anim_path_overshoot,
        200,
        0,
        nullptr
    );
    lv_style_set_transition(&style.focus, &trans);
    lv_style_set_transition(&style.icon, &trans);

    lv_style_init(&style.info);
    lv_style_set_text_font(&style.info, ResourcePool::GetFont("bahnschrift_13"));
    lv_style_set_text_color(&style.info, lv_color_hex(0x999999));

    lv_style_init(&style.data);
    lv_style_set_text_font(&style.data, ResourcePool::GetFont("bahnschrift_13"));
    lv_style_set_text_color(&style.data, lv_color_white());
}



void SystemInfosView::Item_Create(
    item_t* item,
    lv_obj_t* par,
    const char* name,
    const char* img_src,
    const char* infos
)
{
    lv_obj_t* cont = lv_obj_create(par);
    lv_obj_remove_style_all(cont);
    lv_obj_set_width(cont, 220);

    lv_obj_clear_flag(cont, LV_OBJ_FLAG_SCROLLABLE);
    item->cont = cont;

    /* icon */
    lv_obj_t* icon = lv_obj_create(cont);
    lv_obj_remove_style_all(icon);
    lv_obj_clear_flag(icon, LV_OBJ_FLAG_SCROLLABLE);

    lv_obj_add_style(icon, &style.icon, 0);
    lv_obj_add_style(icon, &style.focus, LV_STATE_FOCUSED);
    lv_obj_set_style_align(icon, LV_ALIGN_LEFT_MID, 0);

    lv_obj_set_flex_flow(icon, LV_FLEX_FLOW_COLUMN);
    lv_obj_set_flex_align(
        icon,
        LV_FLEX_ALIGN_SPACE_AROUND,
        LV_FLEX_ALIGN_CENTER,
        LV_FLEX_ALIGN_CENTER
    );

    lv_obj_t* img = lv_img_create(icon);
    lv_img_set_src(img, ResourcePool::GetImage(img_src));

    lv_obj_t* label = lv_label_create(icon);
    lv_label_set_text(label, name);
    item->icon = icon;

    /* infos */
    label = lv_label_create(cont);
    lv_label_set_text(label, infos);
    lv_obj_add_style(label, &style.info, 0);
    lv_obj_align(label, LV_ALIGN_LEFT_MID, 75, 0);
    item->labelInfo = label;

    /* datas */
    label = lv_label_create(cont);
    lv_label_set_text(label, "-");
    lv_obj_add_style(label, &style.data, 0);
    lv_obj_align(label, LV_ALIGN_CENTER, 60, 0);
    item->labelData = label;

    lv_obj_move_foreground(icon);

    /* get real max height */
    lv_obj_update_layout(item->labelInfo);
    lv_coord_t height = lv_obj_get_height(item->labelInfo);
    height = LV_MAX(height, ITEM_HEIGHT_MIN);
    lv_obj_set_height(cont, height);
    lv_obj_set_height(icon, height);
}

消息订阅发布框架使用中遇到的问题咨询

你好,我这边想参考IMU数据的传输流程新建一个sensor数据的传输。但是在仿真时遇到问题。

添加步骤描述如下:
我在HAL层增加了对sensor的HAL层操作,同时在HAL层添加了相关的update函数周期性的向Datacenter提交数据。
然后是在DataProc中参考IMU的添加了DP_sensor.cpp文件,也在HAL_Def.h中添加了Datacenter中sensor数据类型的结构定义。还有在DP_LIST.inc中添加了sensor的相关代码。
最后是界面获取Datacenter的数据,我在Init函数中创建了一个account,然后添加了一个订阅者。最后在需要获取数据的地方通过Pull操作获取相关数据。

当我在visual studio中进行仿真时,每次都会在DataCenter.cpp中的Find函数处报错。具体如下图:
捕获

下面是我做过的调试工作:
1 通过单步调试发现,程序是在进入到App_Init();后的while循环中的lv_timer_handler();后崩溃的。具体是下面箭头标出的这行代码:

            next = _lv_ll_get_next(&LV_GC_ROOT(_lv_timer_ll), LV_GC_ROOT(_lv_timer_act));

            if(lv_timer_exec(LV_GC_ROOT(_lv_timer_act))) {//<<<<<<<<<<<<<<<---------------------
                /*If a timer was created or deleted then this or the next item might be corrupted*/
                if(timer_created || timer_deleted) {

2 考虑到代码是在datacenter相关的代码中发生异常的,我尝试寻找调用了Find函数的代码。
发现在我注释掉界面中的Pull函数后,该异常会消失。通过查看代码发现,Pull函数中也的确有
调用Find函数。于是我尝试恢复调用Pull函数并加上断点,但是程序运行过程中没有停在该断点处,
最后还是发生了异常。

基于以上情况,我想了解下是否是我在添加代码的过程中有什么纰漏导致了这个错误。
热切期盼你们的回复。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.