hgxj_rt
hgxj_rt
这家伙很懒,什么也没写!

注册于 6年前

回答
15
文章
0
关注者
0

发布于1年前

微信截图_20231108171844.png

发布于4年前

  1. thread = pt->polling_thread;
  2. timeout = rt_tick_from_millisecond(msec);
  3. level = rt_hw_interrupt_disable();
  4. if (timeout != 0 && !pt->triggered)
  5. {
  6. rt_thread_suspend(thread);

。。。。。

追踪一步步看源码菜才明白,在poll里吧当前的polling_thread给suspend了,所以finsh是不能用的。那么问题来了,这个时候要用finsh咋办,还得再看看代码:)

发布于4年前

现在测试发现一个问题,就是在启动tcpip链接后,tshell线程就无法在进去了,推出tcpip线程后就可以再进tshell线程。tshell线程状态也是运行态,这个问题目前还没找出来,还是再tcpip链接后shell不能输入?

发布于5年前

基本调通了,还是vscode不熟,完后网络配置这块有常见问题说的现象,网卡共享重新开启下就ok了。

发布于5年前

[i=s] 本帖最后由 hgxj_rt 于 2019-12-27 18:37 编辑 [/i]

组件里在POSIX层与C标准库下 使能 Enable libc APIs from toolchain,编译还是报错

发布于5年前

都试过了:’(,换了台电脑,直接运行,天气预报的demo直接就可以跑,显示上海的天气预报,试了下lcd例子,直接在板子上就可以运行。之前用的那台电脑估计是有啥问题,vscode,python都重装了,win7 64位的系统,怎么弄lcd都不显示。目前感觉解决不了这个问题。:L[attach]12649[/attach]

发布于5年前

根据楼主的情况,其实只用 128k 的那块 ram 也并不会出错,只需要在 board.h 里面规定好所使用的那块 ram …


现在还有个问题,看我说清楚了没,
链接脚本如下:

  1. RW_IRAM2 0x10000000 0x00008000 { ; RW data
  2. .ANY (+RW +ZI)

我的理解就是链接脚本这么写后,就指定了系统的运行内存从0x10000000开始,那么这个在实际编译后是怎么实现的,没太明白。

发布于5年前

根据楼主的情况,其实只用 128k 的那块 ram 也并不会出错,只需要在 board.h 里面规定好所使用的那块 ram …


是的,我又重新看了下BSP制作教程 3.2.3 堆内存配置讲解说明了堆分配空间的问题。详细看了BSP中pandora例程,基本明白了,0x10000000 开始的 32k 内存用作系统的运行内存,所以堆分配可以直接用以下代码,

  1. #define STM32_SRAM1_SIZE (96)
  2. #define STM32_SRAM1_START (0x20000000)
  3. #define STM32_SRAM1_END (STM32_SRAM1_START + STM32_SRAM1_SIZE * 1024)
  4. #define HEAP_BEGIN STM32_SRAM1_START
  5. #define HEAP_END STM32_SRAM1_END

我直接复制这个代码到L451工程下,链接脚本没有改为

  1. RW_IRAM2 0x10000000 0x00008000 { ; RW data
  2. .ANY (+RW +ZI)

所以程序直接就跑飞了。
如果只用 128k ram,那么用

  1. #define STM32_SRAM1_SIZE (128)
  2. #define STM32_SRAM1_START (0x20000000)
  3. #define STM32_SRAM1_END (STM32_SRAM1_START + STM32_SRAM1_SIZE * 1024)
  4. #ifdef __CC_ARM
  5. extern int Image$RW_IRAM1$ZI$Limit;
  6. #define HEAP_BEGIN ((void *)&Image$RW_IRAM1$ZI$Limit)
  7. #elif __ICCARM__
  8. #pragma section="CSTACK"
  9. #define HEAP_BEGIN (__segment_end("CSTACK"))
  10. #else
  11. extern int __bss_end;
  12. #define HEAP_BEGIN ((void *)&__bss_end)
  13. #endif
  14. #define HEAP_END STM32_SRAM1_END

是完全可以的

发布于5年前

[i=s] 本帖最后由 hgxj_rt 于 2019-9-11 23:27 编辑 [/i]

问题找到了:lol

  1. #define STM32_FLASH_START_ADRESS ((uint32_t)0x08000000)
  2. #define STM32_FLASH_SIZE (512 * 1024)
  3. #define STM32_FLASH_END_ADDRESS ((uint32_t)(STM32_FLASH_START_ADRESS + STM32_FLASH_SIZE))
  4. #define STM32_SRAM1_SIZE (96)
  5. #define STM32_SRAM1_START (0x20000000)
  6. #define STM32_SRAM1_END (STM32_SRAM1_START + STM32_SRAM1_SIZE * 1024)
  7. #define HEAP_BEGIN STM32_SRAM1_START
  8. #define HEAP_END STM32_SRAM1_END

这个是bsp\stm32中board.h对HEAP_BEGIN的定义。

  1. #ifdef __CC_ARM
  2. extern int Image$RW_IRAM1$ZI$Limit;
  3. #define HEAP_BEGIN (&Image$RW_IRAM1$ZI$Limit)
  4. #elif __ICCARM__
  5. #pragma section="HEAP"
  6. #define HEAP_BEGIN (__segment_end("HEAP"))
  7. #else
  8. extern int __bss_end;
  9. #define HEAP_BEGIN (&__bss_end)
  10. #endif

这个是RT-Thread IoT例程对HEAP_BEGIN的定义。
实际仿真RT-Thread IoT例程中HEAP_BEGIN地址为0x20000FF0,rt_system_heap_init((void )HEAP_BEGIN, (void )HEAP_END);执行后。
在分配内存就OK了。

发布于5年前

目前问题暂时解决了,采用了bsp\stm32\stm32l475-atk-pandora\board\linker_scripts里的三个文件覆盖了从templates里考出的文件,然后按手册更改了配置文件,更改了board.h文件。实际再下载程序,可以正常运行了,但是查看了linker_scripts里的文件,理解的还是不太一样,link.sct 定义的是ram2,RW_IRAM2 0x10000000 0x00008000 { ; RW data.ANY (+RW +ZI)。按我的理解,可以改为RAM1 RW_IRAM1 0x20000000 0x00020000。修改后rt_application_init();继续跑飞。
按照BSP教程的说明,这个地方显得比较模糊,新手还是不好容易理解如何修改配置文件。

发布于5年前

除了根据教程中的进行设置之外,是否自己在工程中设置了什么东西


还在找问题,可能是设置了什么。和L475的例程做了对比,L475的例程直接下到板子可以正常运行,自己做的L451的串口显示version后就飞了,还是在初始任务创建后就挂了。我看重新再来一次。

发布于5年前

你的RAM可能是分多段的,可能有一部分是CCM DATA RAM,被你做BSP的时候囊括到整个RAM大小当中去了。做BSP的 …


看数据手册160K的ram分了两个区,一个128k,一个32k。配置的时候只配置了128k的ram区,编译后在分配内存的时候还是报错了。

发布于5年前

mark

发布于5年前

你要点击开始录制,才会启动程序啊 哇哇哇~


点击录制也没有启动,还在找原因

发布于5年前

是添加在 SystemView 工具安装目录下的 Description 目录下了吗


是的 我把bsp下的文件复制到安装文件夹下 了

回到
顶部

发布
问题

投诉
建议