Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
串口接收
5
RT-thread studio串口发送,接收只能最大长度3位
发布于 2021-11-21 22:19:23 浏览:1164
订阅该版
遇到奇怪的问题,固定输出123456可以正常接收显示,动态数值只能接收最多3位。 main.c代码 ![image.png](https://oss-club.rt-thread.org/uploads/20211121/7b2901d53a2bfa2a35049a747833fdce.png) cgg是int类型 如下为串口发送代码: ``` #include
#define SAMPLE_UART_NAME "uart2" /* 需要操作的设备 */ static rt_device_t serial; /* 设备句柄 */ //static char str[] = "123456\r\n"; /* 需要发送的数据 */ void uart_send(char *str) //void uart_send() { rt_err_t ret = RT_EOK; rt_size_t send_len = 0; /* 查找系统中的串口设备 */ serial = rt_device_find(SAMPLE_UART_NAME); if (!serial) { rt_kprintf("find %s failed!\n", SAMPLE_UART_NAME); } /* 以中断接收及轮询发送模式打开串口设备 */ ret = rt_device_open(serial, RT_DEVICE_FLAG_INT_RX); if (ret != RT_EOK) { rt_kprintf("open device failed\r\n"); } /* 发送字符串 */ send_len = rt_device_write(serial, 0, str, (sizeof(str) - 1)); if (send_len != sizeof(str) - 1) { rt_kprintf("send data failed\r\n"); } /* 关闭设备 */ ret = rt_device_close(serial); if (ret != RT_EOK) { rt_kprintf("close device failed\r\n"); } //rt_kprintf("serial device test successful\r\n"); } 固定发送123456,串口接收到的是正常的: ![image.png](https://oss-club.rt-thread.org/uploads/20211121/aaf6dc7b65ed6e66801853c8889ed027.png) ``` 动态传值过来,串口接收最多只能长度3位。 ![image.png](https://oss-club.rt-thread.org/uploads/20211121/1674ab3ca147a3e959ccf64eee628434.png)
查看更多
flashman2002
2021-11-22
这家伙很懒,什么也没写!
sizeof是获取变量类型的长度,你这里是需要获取字符串的长度,应该使用strlen函数才对。
5
个回答
默认排序
按发布时间排序
出出啊
2021-11-21
恃人不如自恃,人之为己者不如己之自为也
sizeof str -1
小小李sunny
2021-11-22
这家伙很懒,什么也没写!
sizeof是运算符,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。 由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小。实际上,用sizeof来返回类型以及静态分配的对象、结构或数组所占的空间,返回值跟对象、结构、数组所存储的内容没有关系。 具体而言,当参数分别如下时,sizeof返回的值表示的含义如下: 数组——编译时分配的数组空间大小; 指针——存储该指针所用的空间大小(存储该指针的地址的长度,是长整型,应该为4); 类型——该类型所占的空间大小; 对象——对象的实际占用空间大小; 函数——函数的返回类型所占的空间大小。函数的返回类型不能是void。 官方示例的str是char型数组,sizeof是获取的数组元素的字节数,而你的str是个指针,获取的是存储该指针所用空间大小,即为4。
nongxiaoming
2021-11-22
rt-thread大师兄
你代码的问题你sizeof一个指针在32位系统就是得4的,然后你sizeof -1就等于3啊,没毛病
123
认证专家
2021-11-22
这家伙很懒,什么也没写!
```c char str1[] = "1"; char *str2 = "1"; printf("%d\r\n", sizeof(str1)); printf("%d\r\n", sizeof(str2)); ``` 楼上说得对,兄弟把这个试试就知道了。
撰写答案
登录
注册新账号
关注者
0
被浏览
1.2k
关于作者
qiaowei361
学习中...
提问
13
回答
20
被采纳
1
关注TA
发私信
相关问题
1
STM32F103RCT6 串口接收数据不正确
2
串口怎样接收int类型数据?
3
串口缓存怎么清除????
4
STM32F407zgt6的串口
5
串口一边读数据,一边写数据
6
micropython库串口问题
7
串口接受不定长数据为什么只返回第一个字节?
8
Ymodem的msh命令ry希望添加能自定义保存路径选项
9
libmodbus主机接收数据概率性丢失前3个字节和最后一个字节
10
为什么rt_device_read()只能读取到两个字节数据
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
【1024】瑞萨 RA 系列 BSP 制作与适配最新版本的 Keil 、 RSC、固件,较新的 FSP
2
基于 RT-Thread 星火一号开发板的俄罗斯方块
3
RTThread studio 中添加 Micro_ROS 软件包有 Bug
4
【1024 RT-Thread与英飞凌(infineon)合作得板子PSOC 6 板子学习】
5
【1024】用HMI-Board 復刻 X-Track
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
ART-Pi
FinSH
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
rt-smart
FAL
ESP8266
I2C_IIC
WIZnet_W5500
ota在线升级
UART
cubemx
PWM
flash
packages_软件包
freemodbus
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
keil_MDK
SFUD
rt_mq_消息队列_msg_queue
C++_cpp
at_device
ulog
本月问答贡献
出出啊
1516
个答案
342
次被采纳
小小李sunny
1440
个答案
289
次被采纳
张世争
793
个答案
171
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
148
次被采纳
本月文章贡献
出出啊
1
篇文章
1
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
4
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部