ThreadX内核移植中__RAM_segment_used_end__的作用
__RAM_segment_used_end__的含义就是当前已经使用RAM区的末尾地址。
Embedded Studio编译的时候会自动的生成这个东西:
__RAM_segment_used_end__ = ALIGN(__stack_end__ , 8) + SIZEOF(.stack_process);
__RAM_segment_used_size__ = __RAM_segment_used_end__ - __RAM_segment_start__;
IAR的移植是采用的ThreadX提供的案例,里面搞了个这种东东:
__tx_free_memory_start
MDK的话,可以直接使用MDK的启动文件里面定义好的__initial_sp。
我简单改造了下:
.global __initial_sp
__RAM_segment_used_end__ = __initial_sp
设置这个东西有什么用呢?
ThreadX为了让用户可以把这部分没有利用的RAM区也用起来,可以通过这种方式,将其传递到下面这个函数里面
voidtx_application_define(void *first_unused_memory)
这个形参first_unused_memory就是前面设置的值,用户可以在这个基础上做动态内存分配。
更新完毕。 eric2013 发表于 2020-6-6 10:13
更新完毕。
貌似比较深奥啊 hpdell 发表于 2020-6-6 10:43
貌似比较深奥啊
ThreadX就是整了个将闲置的RAM空间利用起来的功能,可以用来做动态内存分配什么的。 SEGGER Embedded Studio软件创建STM32F407工程时,默认使用的RAM:0x10000000, 0x10000,这个感觉是个BUG啊;应该把RAM和RAM2的对调一下才对 yklstudent 发表于 2020-6-6 11:03
SEGGER Embedded Studio软件创建STM32F407工程时,默认使用的RAM:0x10000000, 0x10000,这个感觉是个BUG啊 ...
是的,CCM区有坑,不支持DMA。 eric2013 发表于 2020-6-6 10:53
ThreadX就是整了个将闲置的RAM空间利用起来的功能,可以用来做动态内存分配什么的。
好哇,期待大神的作品啊, 另外请问下, mdk 的移植,是必须得 使用 mdk v5.30 及以上版本吗 ? hpdell 发表于 2020-6-6 11:45
好哇,期待大神的作品啊, 另外请问下, mdk 的移植,是必须得 使用 mdk v5.30 及以上版本吗 ?
对,必须得用V5.30及其以上。 eric2013 发表于 2020-6-6 14:27
对,必须得用V5.30及其以上。
我用MDK5.29弄了一个rt1052的工程,在sdram里面跑起来了,xip启动有点问题 爱喝柠檬水 发表于 2020-6-6 15:37
我用MDK5.29弄了一个rt1052的工程,在sdram里面跑起来了,xip启动有点问题
推荐用5.30,处理GCC更方便些。 eric2013 发表于 2020-6-6 15:43
推荐用5.30,处理GCC更方便些。
谢谢,硬汉老师是不是也会整一套rt系列的移植出来呢,学习学习!:lol eric2013 发表于 2020-6-6 14:27
对,必须得用V5.30及其以上。
原来如此啊,难怪我用 mdk v5.29 始终都没有成功,不是提示这个错误就是提示那个错误,搞得头晕,后来放弃
:lol 这两天研究了一下,沿着楼主的足迹走了一遍。感觉这东西还很粗糙,不像是微软的东西。 这两天沿着楼主的路走了一遍,遍布荆棘。ThreadX要走的路还很远。 migsoft 发表于 2020-6-23 00:08
这两天研究了一下,沿着楼主的足迹走了一遍。感觉这东西还很粗糙,不像是微软的东西。
port代码就是这个样子的,因为ThreadX之前走的是收费的定制路线。并不是供大家免费下载参观的port代码,并把各种奇葩问题都帮大家捋一遍。
等你体会到精髓了,就知道牛X了。 {:8:} IAR的例程中ICF文件应该改一下,以确保这个section是分配到最后的。当然如果thread的栈都是静态的,这也没啥意义。只是严谨。 我用MDK,移植threadx到stm32f407,遇到这个错误
.global __initial_sp
__RAM_segment_used_end__ = __initial_sp
..\OBJ\Template.axf: Error: L6218E: Undefined symbol __initial_sp (referred from tx_initialize_low_level.o).
Not enough information to list image symbols.
Not enough information to list load addresses in the image map.
Finished: 2 information, 0 warning and 1 error messages.
"..\OBJ\Template.axf" - 1 Error(s), 0 Warning(s). liujia21 发表于 2020-9-8 21:01
我用MDK,移植threadx到stm32f407,遇到这个错误
.global __initial_sp
__RAM_segment_used_end__ = ...
方便的话,看教程移植章节,M内核基本都是一样的
ThreadX内核教程更新记录帖,前7章已发布(2020-09-07)
http://www.armbbs.cn/forum.php?mod=viewthread&tid=99514&fromuid=58
(出处: 硬汉嵌入式论坛)
eric2013 发表于 2020-9-9 02:04
方便的话,看教程移植章节,M内核基本都是一样的
ThreadX内核教程更新记录帖,前7章已发布(2020-09-0 ...
楼主确认过SES生成的__RAM_segment_used_end__是否可以正常使用吗? yklstudent 发表于 2021-1-4 19:59
楼主确认过SES生成的__RAM_segment_used_end__是否可以正常使用吗?
可以使用的。 eric2013 发表于 2021-1-5 08:40
可以使用的。
我看KEIL下是可以正常使用的,但是SES下是不正常的,你V5和V7下都确认过了,也是有问题的,硬汉确认下呗 yklstudent 发表于 2021-1-5 23:15
我看KEIL下是可以正常使用的,但是SES下是不正常的,你V5和V7下都确认过了,也是有问题的,硬汉确认下呗
好的,今晚我就测试下。 使用这个__RAM_segment_used_end__作为first_unused_memory以后是不是还得调用tx_byte_pool_create(&tx_app_byte_pool, "Tx App memory pool", first_unused_memory, TX_APP_MEM_POOL_SIZE)函数新建一个内存池?有没有什么方法可以自动算出TX_APP_MEM_POOL_SIZE。 sl3340 发表于 2022-5-23 15:37
使用这个__RAM_segment_used_end__作为first_unused_memory以后是不是还得调用tx_byte_pool_create(&tx_app ...
如果你是静态使用,那么不需要创建内存池的。
这个就是_RAM_segment_used_size__ = __RAM_segment_used_end__ - __RAM_segment_start__; eric2013 发表于 2022-5-24 02:01
如果你是静态使用,那么不需要创建内存池的。
这个就是_RAM_segment_used_size__ = __RAM_segment_use ...
棒,这样就不用去设置具体的内存池的大小了,keil里面传递出来的first_unused_memory好像是|Image$$RW_IRAM1$$ZI$$Limit|,但是不知道这个对应的_RAM_segment_used_size__ 是啥 楼主帮忙看看咧 sl3340 发表于 2022-5-24 09:53
棒,这样就不用去设置具体的内存池的大小了,keil里面传递出来的first_unused_memory好像是|Image$$RW_IR ...
二楼
MDK获取未使用RAM空间首地址方法
https://www.armbbs.cn/forum.php?mod=viewthread&tid=111353&fromuid=58
(出处: 硬汉嵌入式论坛)
eric2013 发表于 2022-5-25 02:20
二楼
MDK获取未使用RAM空间首地址方法
感谢指导{:8:} 硬汉哥,看到你这个帖子,继续说我上一个回复的,cubemx生成的工程的启动文件并没有把Image$$RW_IRAM1$$ZI$$Limit替换为__initial_sp,Image$$RW_IRAM1$$ZI$$Limit本来就是剩下的RAM空间吧,不替换是不是也可以呢 鄢一安 发表于 2024-3-26 08:54
硬汉哥,看到你这个帖子,继续说我上一个回复的,cubemx生成的工程的启动文件并没有把Image$$RW_IRAM1$$ZI$ ...
这个的作用是把剩余RAM空间给ThreadX动态内存使用,如果你用不到,不用管
页:
[1]