yangjie
yangjie - 认证专家
This guy hasn't written anything yet

注册于 3 years ago

回答
387
文章
2
关注者
16

begin_addr 传入的是HEAP_BEGIN 。以ARM为例,HEAP_BEGIN 这样定义:

#define HEAP_BEGIN  ((void *)&Image$RW_IRAM1$ZI$Limit)

这个意思简单来说就是 RT-thread把将 ZI 段结尾处的地址作为用户 Heap 的起始地址。

链接器可以为映像文件中的每个执行区域生成Image$$符号。这是Image$$region_name$$ZI$$Limit 的解释




1550217065(1).jpg

Sun1421 发表于 2019-2-15 15:33
我用的银杏科技 icore3的板子,不是官方的开发板


源码中的这几个407这些可以给你做参考的。
另外你也可以使用STM32 BSP制作教程做一个你使用的板子的BSP,也就是移植了https://github.com/RT-Thread/rt-thread/blob/master/bsp/stm32/docs/STM32%E7%B3%BB%E5%88%97BSP%E5%88%B6%E4%BD%9C%E6%95%99%E7%A8%8B.md

是什么板子?源码中已经有STM32F407已经有了bsp的:atk-explorer、st-discovery

Strive 发表于 2019-2-14 14:05
谢谢 反复尝试,找不出问题的原因,出现这种情况原因一般都有哪些?


把你初始化的线程入口函数先改成空函数试试

这是其他地方对lwip有依赖造成的,可以在上图中help一下,看谁依赖了lwip
举例:A依赖B,打开A,B也就打开了。如果要使用A,那么B是不能关掉的。

独角戏 发表于 2019-1-30 22:37
小弟又发现一个问题,请大神们指教一下
在dfs_file.c中有这样一段程序,检查文件是否已经打开,如果打开就 ...


是这样,源码已经更新过了

0312221024 发表于 2019-1-24 15:42
我今天已经做了实验了,这个main.c文件里的这个
int main(void)
{


你这个while(1)啥也不干,运行main就是挂起main,完全可以把while(1)去掉啊,为啥一定要循环呢?

可以删除,关于线程删除 ,你可以看看文档中心的文档

    本帖最后由 yangjie 于 2019-1-24 13:37 编辑


0312221024 发表于 2019-1-24 12:01
我后来仔细看这个while(1),似乎明白了一点东西,这个while(1)实际上是占有CPU的全部资源,那么其它线程就没 ...

是呀,所有的线程都必须有让出cpu的动作。当然 你这里main线程里也可以是空函数 啥都不写

在这之前是否还有什么其他的线程在运行

    本帖最后由 yangjie 于 2019-1-23 13:41 编辑


suspend只能自己挂起自己,断言做异常判断,是否是挂起自己。使用一个线程挂起另一个线程当然会进断言啊。
另外,不建议使用suspend函数,要使线程挂起,可以使用delay、或者获取信号量等API进行线程挂起。
还有,线程里面的while(1)循环,循环里面一定要有让出CPU使用权的动作,也就是让自己挂起。

首先,看看引脚是否设置正确了,在drv_gpio.c中
其次,没必要初始化2遍:
led_init(); 与
rt_pin_mode(46,PIN_MODE_OUTPUT);
rt_pin_mode(19,PIN_MODE_OUTPUT);
rt_pin_mode(20,PIN_MODE_OUTPUT);

回到
顶部

发布
问题

投诉
建议