gmfzk2008
gmfzk2008
This guy hasn't written anything yet

注册于 3 years ago

回答
4
文章
0
关注者
0

undefined reference to `_sbrk'

这个问题网上查了一下,说是一个GCC中一个函数没有实现。

inux下 ,如果程序包含 math.h ,在gcc时必须加入 lm 例如:gcc -o main.o main.c -lm
但是在eclipse下面 编译,项目回自动生成makefile ,无论如何手动修改makefile,在编译的时候也会被eclipse修改成原来的样子。
这个lm的设置方法如下:

选择"project">
"propertise">
"C/C++ Build">
C/C++ Build的下拉菜单"Settings"选项>
Settings的"Tool Settings"选项卡>
Tool Settings选项卡下的"GCC CLlinker"选项>
GCC C Linker选项下的"Libraries"选项

这时,只需要在“Libraries(-l)“里面添加一个”m“,这时eclipse就会在它自动生存的makefile里面生成gcc的-lm参数,这时make项目的时候 ,math.h库里面的数学函数就不回提示找不到了。
————————————————
版权声明:本文为CSDN博主「喵学长」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_35448976/article/details/73877926

谢谢,已解决!!!

我是按默认状态调试的,调试器参数没有动过,怎么会突然这样?特别是最后一句英文,当前的语言和框架不匹配。。这是什么状况?这个提示下面还有几段红色的路径提示,这些路径都是指向代码目录的。之前好好的,突然就这样了。调试器调试功能目前还算正常。

问题如上,很急,哪位高手知道哪里的问题。

调用memtrace的线程是那个就把那个的线程堆栈设大些

支持命令行调用,应该是finsh调用的,把finsh堆栈设置到4096还不行。

信息如下:

memtrace
total memory: 40696
used memory : 19168
maximum allocated memory: 19168

memory heap address:
heap_ptr: 0x200060e8
lfree   : 0x2000abc8
heap_end: 0x2000fff0

--memory item information --
[0x200060e8 -    56] NONE
[0x20006130 -   512] NONE
[0x20006340 -   148] NONE
[0x200063e4 -    2K] NONE
[0x20006bf4 -    48] main
[0x20006c34 -   148] main
[0x20006cd8 -    1K] main
[0x200070e8 -   148] main
[0x2000718c -    1K] main
[0x2000759c -    4K] main
[0x200085d8 -    2K] main
[0x20008df4 -   540] main
[0x20009020 -    2K] main
[0x2000983c -   684] main
[0x20009af8 -   148] main
[0x20009b9c -    2K] main
[0x2000a3ac -    2K] tshe
[0x2000abc8 - -19184]     
[0x200060e8 -    56] NONE
[0x20006130 -   512] NONE
[0x20006340 -   148] NONE
[0x200063e4 -    2K] NONE
[0x20006bf4 -    48] main
[0x20006c34 -   148] main
[0x20006cd8 -    1K] main
[0x200070e8 -   148] main
[0x2000718c -    1K] main
[0x2000759c -    4K] main
[0x200085d8 -    2K] main
[0x20008df4 -   540] main
[0x20009020 -    2K] main
[0x2000983c -   684] main
[0x20009af8 -   148] main
[0x20009b9c -    2K] main
[0x2000a3ac -    2K] tshe

每次循环都从0x2000abc8 这个地址开始,这是哪里出问题了?

多半是堆栈溢出问题,将相应线程堆栈设大些试试

程序运行没有问题,只是运行这两个命令会出问题。

LiY123123 发表于 2020-5-14 10:25
环形模式下为了防止数据溢出导致接收数据被覆盖,所以使用了接收半满中断,数据会分包
你发送的是定长数据 ...


谢谢,谢谢。

屏蔽了
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
/*
struct rt_serial_device *serial;
struct stm32_uart *uart;
rt_size_t recv_len;
rt_base_t level;

RT_ASSERT(huart != NULL);
uart = (struct stm32_uart *)huart;
serial = &uart->serial;

level = rt_hw_interrupt_disable();

recv_len = serial->config.bufsz - uart->dma.last_index;
uart->dma.last_index = 0;

rt_hw_interrupt_enable(level);
if (recv_len)
{
rt_hw_serial_isr(serial, RT_SERIAL_EVENT_RX_DMADONE | (recv_len << 8));
}
*/
}
暂时不会出现中途分包情况,但是会出现0包和满包情况。

回到
顶部

发布
问题

投诉
建议