OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3810|回复: 8

有没有使用过cubeIDE生成freeRTOS代码+printf浮点数的朋友

[复制链接]

50

主题

385

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1126
金钱
1126
注册时间
2014-8-24
在线时间
146 小时
发表于 2020-7-20 07:20:36 | 显示全部楼层 |阅读模式
5金钱


这两天在实验 st的图形化IDE,cubeIDE。
使用下来感觉确实方便,勾勾画画,generate 一键生成代码。
主要是冲着很多协议栈不用再自己移植了去的。

没想到建立第一个工程就卡了一周,我是准备做一个最简单的   FreeRTOS + 串口的实验。

没想到线程里 printf 浮点数一直无法正常输出。

主要有两个问题:
1、使用了printf的线程必须给比较大的任务堆栈,默认的128word居然不够,否则进HardFault_Handler  ---------  为什么printf要用这么大空间?
2、在线程中的printf输出浮点始终有些异常,有时候不能输出完整  ---------- 已经做了重定向,已经勾选了系统菜单里的使用浮点

重定向是这么写的:
#if 1

#include "stdio.h"

#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif

PUTCHAR_PROTOTYPE
{
        HAL_UART_Transmit(&huart1, (uint8_t*)&ch,1,HAL_MAX_DELAY);
    return ch;
}
#endif

最佳答案

查看完整内容[请看2#楼]

爬了一周出坑,原来是官方的SDK有问题。 可以选择打一个第三方补丁。 详情看这个 http://www.nadler.com/embedded/newlibAndFreeRTOS.html cubeIDE,怎么说呢,挺有潜力的,就是需要打磨。
找一份喜欢的工作,这样每天工作的8个小时是快乐的。 找一个喜欢的人,这样每天工作之外的16个小时也是快乐的。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

50

主题

385

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1126
金钱
1126
注册时间
2014-8-24
在线时间
146 小时
 楼主| 发表于 2020-7-20 07:20:37 | 显示全部楼层
爬了一周出坑,原来是官方的SDK有问题。
可以选择打一个第三方补丁。

详情看这个
http://www.nadler.com/embedded/newlibAndFreeRTOS.html


cubeIDE,怎么说呢,挺有潜力的,就是需要打磨。
找一份喜欢的工作,这样每天工作的8个小时是快乐的。 找一个喜欢的人,这样每天工作之外的16个小时也是快乐的。
回复

使用道具 举报

6

主题

412

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
2718
金钱
2718
注册时间
2019-8-14
在线时间
415 小时
发表于 2020-7-20 15:10:08 | 显示全部楼层
帮顶~~
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2020-7-21 02:10:02 | 显示全部楼层
继续努力
回复

使用道具 举报

1

主题

39

帖子

0

精华

高级会员

Rank: 4

积分
812
金钱
812
注册时间
2019-1-31
在线时间
106 小时
发表于 2020-7-21 08:27:57 | 显示全部楼层
试了下ok,我的重定向是这么写:
  1. int fputc(int c, FILE *stream)    //重写fputc函数
  2. {
  3. /*
  4.     huart1是工具生成代码定义的UART1结构体,
  5.     如果以后要使用其他串口打印,只需要把这个结构体改成其他UART结构体。
  6. */
  7.     HAL_UART_Transmit(&huart1, (unsigned char *)&c, 1, 1000);   
  8.     return 1;
  9. }
复制代码
回复

使用道具 举报

50

主题

385

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1126
金钱
1126
注册时间
2014-8-24
在线时间
146 小时
 楼主| 发表于 2020-7-21 19:02:55 | 显示全部楼层
slf252 发表于 2020-7-21 08:27
试了下ok,我的重定向是这么写:

你应该不是在freeRTOS下跑的
找一份喜欢的工作,这样每天工作的8个小时是快乐的。 找一个喜欢的人,这样每天工作之外的16个小时也是快乐的。
回复

使用道具 举报

1

主题

39

帖子

0

精华

高级会员

Rank: 4

积分
812
金钱
812
注册时间
2019-1-31
在线时间
106 小时
发表于 2020-7-22 15:49:22 | 显示全部楼层
用freeRTOS的线程任务打印,堆栈128,还顺带ADC采集转换,跑了一下午也没出问题。硬件用的是C8T6的核心板
pr.png
回复

使用道具 举报

50

主题

385

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1126
金钱
1126
注册时间
2014-8-24
在线时间
146 小时
 楼主| 发表于 2020-7-23 07:28:25 | 显示全部楼层
slf252 发表于 2020-7-22 15:49
用freeRTOS的线程任务打印,堆栈128,还顺带ADC采集转换,跑了一下午也没出问题。硬件用的是C8T6的核心板

恩,谢谢兄弟。这个是KEIL的环境,我说的这个bug是基于ST的cubeIDE才会有的,因为cubeIDE的c库用的是newlib,这个newlib里的malloc等是没有线程保护的,ST生成的SDK代码也没有做保护,所以printf浮点时会出错。
找一份喜欢的工作,这样每天工作的8个小时是快乐的。 找一个喜欢的人,这样每天工作之外的16个小时也是快乐的。
回复

使用道具 举报

1

主题

39

帖子

0

精华

高级会员

Rank: 4

积分
812
金钱
812
注册时间
2019-1-31
在线时间
106 小时
发表于 2020-7-23 15:07:20 | 显示全部楼层
tao475824827 发表于 2020-7-23 07:28
恩,谢谢兄弟。这个是KEIL的环境,我说的这个bug是基于ST的cubeIDE才会有的,因为cubeIDE的c库用的是newl ...

我用的是CubeMX生成MDK代码,看来和cubeIDE生成还是不一样的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 17:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表