富芮坤fr8008gp代码:堆栈设置;lv_timer_handler定时器研究和优化;广播数据中不用定义GAP_ADTVYPE_FLAGS;广播使用设备唯一地址

article/2025/5/16 6:04:44

堆栈设置

fr8008gp使用自定义的linker脚本:
在这里插入图片描述

;256k bytes, which is 2M ROM
;ROM 0x00000000  0x40000	0x30000
ROM 0x10000000  0x800000
{ER_TABLE +0{*(jump_table_0)*(jump_table_1)*(jump_table_2)*(jump_table_3)*(jump_table_4)}ER_RO 0x10002000 FIXED{*(+RO)}ER_BOOT 0x11000000{boot_vectors.o (RESET, +FIRST)}USER_RE_RAM 0x11000C40{*(ram_code)}
;	USER_EX_RAM 0x23000000 0x100000
;	{
;		.ANY (EXRAM)
;   }ER_RW +0{*(+RW)}ER_STACK +0{*(stack_section)}ER_ZI +0{*(+ZI)}HEAP_KE +0 {*(heap_ke)}
}

这里有一个特殊的字段ER_TABLE 用于应用程序代码和协议栈进行程序设置相关沟通,我们这里看jump_table_3有如下内容:

#define SYSTEM_STACK_SIZE           0x800  //栈内存分配2k
/** LOCAL VARIABLES*/
__attribute__ ( ( section ( "stack_section" ) ) ) static uint32_t system_stack[SYSTEM_STACK_SIZE / sizeof ( uint32_t )];const struct jump_table_version_t _jump_table_version __attribute__ ( ( section ( "jump_table_3" ) ) ) = {.stack_top_address = &system_stack[SYSTEM_STACK_SIZE / sizeof ( uint32_t )],.firmware_version = 0x00000000,
};const struct jump_table_image_t _jump_table_image __attribute__ ( ( section ( "jump_table_1" ) ) ) = {.image_type = IMAGE_TYPE_APP,.image_size = 0x80000,
};

可以看到应用程序通过SYSTEM_STACK_SIZE宏设置堆栈,默认为2K,在运行代码的时候查看使用到的堆栈已经超过了2K:
在这里插入图片描述
在这里插入图片描述

所以必须调大系统堆栈,这里可以设置为8K:
在这里插入图片描述

lv_timer_handler定时器研究和优化

本文摘录于:https://blog.csdn.net/m0_66557301/article/details/124776689只是做学习备份之用,绝无抄袭之意,有疑惑请联系本人!
原厂提供的demo是按照如下方式调用lv_timer_handler定时器的:

#define LV_TICK_COUNT               10
__attribute__ ( ( section ( "ram_code" ) ) ) void timer0_handler ( void )
{timer_int_clear ( Timer0 );lv_tick_inc ( LV_TICK_COUNT );//uart_putc_noint_no_wait(UART0_BASE, 'T');
}
__attribute__ ( ( section ( "ram_code" ) ) ) void timer1_handler ( void )
{gpio_write_pin(GPIO_C, GPIO_PIN_6, GPIO_PIN_SET);uint32_t tick;timer_int_clear ( Timer1 );timer_stop ( Timer1 );tick = lv_timer_handler();timer_init ( Timer1, system_get_clock_config() * 1000 * tick, TIMER_DIV_NONE );timer_start ( Timer1 );printf ( "tick:%d\r\n", tick);gpio_write_pin(GPIO_C, GPIO_PIN_6, GPIO_PIN_CLEAR);
}
void gui_main ( void )
{
.....................................................................................
timer_init ( Timer0, system_get_clock_config() * 1000 * LV_TICK_COUNT, TIMER_DIV_NONE );timer_start ( Timer0 );NVIC_SetPriority ( TIMER0_IRQn, 5 );NVIC_EnableIRQ ( TIMER0_IRQn );timer_init ( Timer1, system_get_clock_config() * 1000 * 100, TIMER_DIV_NONE );//100MStimer_start ( Timer1 );NVIC_SetPriority ( TIMER1_IRQn, 6 );NVIC_EnableIRQ ( TIMER1_IRQn );
}

我们看到定时器的间隔一般都是10,20,30ms(lvgl的切换率为10MS),按照这样的方式定义定时器最大的问题是TIMER1被频繁的开关,这个对定时器的精度和代码的效率有很大的影响:
在这里插入图片描述
按照LVGL的说法lv_timer_handler函数应该在main的while主循环调用:
在这里插入图片描述
所以这里打算修改timer定时器的机制,首先我们来看看定时器运行的时间:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
波形请从如下地址下载:https://download.csdn.net/download/cheng___yi/87378807
可以看到当lv_timer_handler函数返回0的时候lv_timer_handler运行的时间特别长,所以按照道理说lv_timer_handler函数不应该放到定时器中来运行,结合文章:https://blog.csdn.net/m0_66557301/article/details/124776689的说法,这里打算把lv_timer_handler函数拿到while主循环中运行!
这里建立lv_main_loop函数并且在main_loop中调用:

__attribute__ ( ( section ( "ram_code" ) ) ) void timer0_handler ( void )
{gpio_write_pin(GPIO_C, GPIO_PIN_7, GPIO_PIN_SET);timer_int_clear ( Timer0 );lv_tick_inc ( LV_TICK_COUNT );//uart_putc_noint_no_wait(UART0_BASE, 'T');if(lv_timer_tick>=LV_TICK_COUNT) lv_timer_tick-=LV_TICK_COUNT;gpio_write_pin(GPIO_C, GPIO_PIN_7, GPIO_PIN_CLEAR);
}
__attribute__ ( ( section ( "ram_code" ) ) ) void lv_main_loop ( void )
{if(lv_timer_tick<LV_TICK_COUNT){gpio_write_pin(GPIO_C, GPIO_PIN_6, GPIO_PIN_SET);lv_timer_tick = lv_timer_handler();printf ( "tick:%d\r\n", lv_timer_tick);gpio_write_pin(GPIO_C, GPIO_PIN_6, GPIO_PIN_CLEAR);}
}
extern void lv_main_loop ( void );
__attribute__ ( ( section ( "ram_code" ) ) ) void main_loop ( void )
{while ( 1 ) {lv_main_loop();if ( ble_stack_schedule_allow() ) {/*user code should be add here*//* schedule internal stack event */ble_stack_schedule();}GLOBAL_INT_DISABLE();switch ( ble_stack_sleep_check() ) {case 2: {ble_stack_enter_sleep();}break;default:break;}GLOBAL_INT_RESTORE();ble_stack_schedule_backward();}
}

可以看到打印非常的快:
在这里插入图片描述
逻辑分析仪上看到lv_timer_handler函数执行非常长的情况还是存在:
在这里插入图片描述
正常情况下lv_timer_handler消耗时间还是比较短的:
在这里插入图片描述
在这里插入图片描述
具体波形请看:https://download.csdn.net/download/cheng___yi/87378851

广播数据中不用定义GAP_ADTVYPE_FLAGS

如果在广播数据中定义了GAP_ADTVYPE_FLAGS,比如如下代码:
在这里插入图片描述
会发现广播结束数据会来得非常快,这其实是因为广播数据设置出错:
在这里插入图片描述
这是因为GAP_ADTVYPE_FLAGS字段底层协议栈会自动填充,不需要应用层指定!

广播使用设备唯一地址

user_main函数中使用如下方式定义蓝牙地址可以做到所有设备唯一一个地址,当然也可以自定义地址:

void user_main(void)
{/* initialize log module */log_init();/* initialize PMU module at the beginning of this program */pmu_sub_init();pmu_ioldosw_ctrl(true);/* enable gpio clock */__SYSTEM_GPIO_CLK_ENABLE();/* set system clock */system_set_clock(SYSTEM_CLOCK_SEL);/* set local BLE address */mac_addr_t mac_addr;
//    mac_addr.addr[0] = 0xbd;
//    mac_addr.addr[1] = 0xad;
//    mac_addr.addr[2] = 0x10;
//    mac_addr.addr[3] = 0x11;
//    mac_addr.addr[4] = 0x10;
//    mac_addr.addr[5] = 0x20;
//    gap_address_set(&mac_addr, BLE_ADDR_TYPE_PUBLIC);	//BLE_ADDR_TYPE_RANDOM_RESOVABLEsystem_get_unique_ID(mac_addr.addr);gap_address_set(&mac_addr, BLE_ADDR_TYPE_PUBLIC);

两台设备广播如下:
在这里插入图片描述
在这里插入图片描述


http://chatgpt.dhexx.cn/article/GVLYfOBD.shtml

相关文章

数坤科技上市遇阻?申请材料失效,融资“数据打架”,存数亿缺口

2022年3月21日&#xff0c;贝多财经了解到&#xff0c;数坤&#xff08;北京&#xff09;网络科技股份有限公司- B&#xff08;下称“数坤科技”&#xff09;在港交所的上市申请材料已“失效”&#xff0c;目前已经无法正常查看或下载。这代表着&#xff0c;数坤科技首次冲刺上…

《数据》杂志刊登坤前署名文章:金融信创构筑产业数字化转型之路

《数据》--《产业转型研究》专刊 《数据》杂志是由北京市统计局和北京日报报业集团战略合作&#xff0c;专注于数据领域报道&#xff0c;并在全国发行的经济资讯类新闻期刊。此次清华大学互联网产业研究院产业转型顾问委员会专刊&#xff0c;聚焦产业转型研究&#xff0c;理论和…

“聚力远谋,创赢未来”坤前全国巡展广州站圆满落幕

9月28日&#xff0c;“聚力远谋&#xff0c;创赢未来”2021坤前生态合作伙伴交流全国巡展首站在广州正式启幕&#xff0c;来自各行各业的核心客户及坤前生态合作伙伴齐聚一堂&#xff0c;共话信创产业发展。 飞腾信息技术有限公司华南区域总监李荣恩先生对会议主办方坤前表达了…

易经读书笔记02坤为地

地道柔刚 象曰 地势坤&#xff0c;君子以厚德载物。 坤&#xff1a;元&#xff0c;亨&#xff0c;利牝马之贞。 君子有攸往&#xff0c;先迷后得主&#xff0c;利&#xff1b;西南得朋&#xff0c;东北丧朋。 安贞&#xff0c;吉。 牝马指母马。为什么不用母牛&#xff1f;因为…

坤卦

坤卦 坤卦三偶六断&#xff0c;纯阴虚阙之象。“坤”字古文作“巛”&#xff0c;“顺”字偏旁及“川”字&#xff0c;亦“巛”之象形也&#xff0c;故《象传》曰“乃顺承天”&#xff0c;又曰“柔顺利贞”。《文言传》曰&#xff1a;“坤道其顺乎&#xff1f;”《系辞传》曰&am…

数坤科技:AI在医疗影像的应用和探索

机器之心编辑部 3 月 23 日&#xff0c;在机器之心 AI 科技年会上&#xff0c;数坤科技研发副总裁危夷晨发表了主题演讲《AI 在医疗影像的应用和探索》&#xff0c;对 AI 医疗影像行业进行了全面的介绍。 以下为危夷晨在机器之心 AI 科技年会上的演讲内容&#xff0c;机器之心…

周易卦爻解读笔记——大壮

第三十四卦大壮 雷天大壮 震上乾下 大壮卦为消息卦&#xff0c;象征阳盛阴衰。 大壮卦是遁卦的覆卦&#xff0c;序卦传【物不可以终遁&#xff0c;故受之以大壮】 首先说明壮这个字&#xff1a; 武士操戈而立&#xff0c;可以理解为强壮&#xff0c;更多的是要理解为打击&…

重庆大学计算机学院新生综合,重庆大学

随着如火如荼的军训落下帷幕&#xff0c;金秋十月天朗气清&#xff0c;重庆大学2016级本科新生同学正式开始了他们在重庆大学充实多彩的学习生活。2016年10月13日&#xff0c;重庆大学计算机学院领导老师与全体新生见面会在虎溪校区理科楼报告厅隆重召开。学院出席本次大会的主…

世坤投资大学:欲提供数据科学硕士学位的对冲基金

全文共1843字,预计学习时长6分钟 图源:unsplash 随着数据科学、人工智能和机器学习的普及,很多人开始对这一领域产生兴趣,与之相关的学习资源也同比例增长。这些资源来源广泛,既包括YouTube、Github和博客网站等多功能平台上的免费内容,亦包括慕课和在线纳米学位等相对…

周易卦爻解读笔记——坤卦

第二卦坤 坤为地 坤上坤下 坤&#xff1a;元&#xff0c;亨&#xff0c;利牝马之贞。君子有攸往&#xff0c;先迷后得主&#xff0c;利西南得朋&#xff0c;东北丧朋。安贞&#xff0c;吉。 坤卦&#xff0c;初始通达&#xff0c;利于向母马一样正固&#xff08;意为一直顺从…

官网平台类产品的设计挖掘

参考图例&#xff1a;架构图素材库 -图标库 ToB 产品的官网设计&#xff0c;业务开始综合考虑产品设计在内外各平台上的一致性、高价值运营转化模块的凸显&#xff0c;以及上线后的用户满意度等运营数据。信息传达模式、信息分层逻辑、业务对设计理念的理解成本&#xff0c;成为…

抖音上坤之大强之作是什么意思

抖音坤之大强之作什么意思?最近抖音频繁出现这个词&#xff0c;谢广坤是谁?有很多的网友们都想知道坤之大强之作什么意思&#xff0c;感兴趣的网友们&#xff0c;下面就跟着小编一起来看看吧。 坤之大强之作什么意思 看过电视剧《乡村爱情》的人都知道&#xff0c;谢广坤的…

SLM7.1SR1SP05 配置(configuration guide+ link help) - 03 initial configuration part3

3.8 配置SLD 添加如下一条记录&#xff0c;setup localSLD 使用SOLMAN_ADMIN&#xff08;<password>&#xff09;账户登陆 输入用户名的密码 请注意&#xff0c;在安装SLD之前&#xff0c;如果不是使用的001集团&#xff0c;而是新copy出一个client&#xff0c;请确保JAV…

下载SAP-Approval list中的补丁

1、用SOLMAN_ADMIN登录slm 100系统 2、dswp 3、随便选择解决方案:ZPI_CON 4 变更管理 》 维护优化器 5 选择产品版本 6、 &#xff0c;如果已添加进Approval list 中&#xff0c;可以直接跳入下一步。 7、会转到sap网站的下载篮里。 确认下载

SLM7.1SR1SP05 配置(configuration guide+ link help) - 03 initial configuration part1

根据system preparation界面上方的roadmap&#xff0c;按步来进行系统需求配置。如果roadmap显示为叉号&#xff0c;即此ActiveX插件不可用&#xff0c;那么打开IE的设置&#xff0c;将安全级别调低&#xff0c;允许ActiveX插件&#xff0c;刷新登陆即可。 3.1 创建用户 点击ro…

揭开SAP Solution Manager神秘面纱

在过去10年中&#xff0c;SAP Solution Manager----用以集中支持和系统管理的独特产品。不用说&#xff0c;跨国企业中的典型SAP系统景观一般包括了大量的SAP和非SAP系统。“复杂”的SAP环境&#xff08;或者也叫多种多样的IT景观&#xff09;常常由庞大的跨国企业在全球范围内…

SLM7.1SR1SP05 配置(configuration guide+ link help) - 04 Basic Configuration

4.1 创建solution 4.2 指定用户和连通数据 4.2.1 指定连通数据 指定SID和密码&#xff0c;maintainconnections 4.2.2 指定SAP BW System 我们用的是当前solman系统的900 client。按照configurationguide中的说明进行相关设置。 选择Use SAP BW inSeparate System or Separat…

No system information found in LMDB, can't find Technical system after RZ70

转自&#xff1a;https://archive.sap.com/discussions/thread/3549271 Hello dear Forum, Im facing a problem when register an ERP6.0 IDES system(ES8) to solman 7.1SP11(SMP). I run rz70 in the ERP system and then I find this technical system in SLD, as follows:…

SLM7.1SR1SP05 配置(configuration guide+ link help) - 03 initial configuration part2

3.5 implement note 1652693 根据solman_setup 提示&#xff0c;打note1652693 下载note 打开note 助手&#xff0c;或者直接在GUI中使用SNOTE 打note1652693&#xff0c;引出很多个notes需要implementation 将又依赖带出的note&#xff0c;也全部下载。 Note全部下载之后&am…

SLM7.1SR1SP05 配置(configuration guide+ link help) - 02 overview啥也没有不用看了

执行tcode&#xff1a;solman_setup 选择激活&#xff0c;系统弹出登陆界面&#xff0c;输入用户名admin01密码<password>登陆。如果无法登陆&#xff0c;自行解决&#xff08;下面部分有《局域网内异机访问solman》) *********************局域网内异机访问solman 开始…