printf死翘翘

本来想把我的单片机玩一下,寄给在大学搞研究的一个朋友,但竟然挂在printf里面,大概知道是什么位置出问题,但是还想不清楚什么原因。

我先是在stc51单片机里面搞了串口,然后我想用串口重定向到printf做调试,printf是一个库函数,这个函数会调用putchar函数,我这里就需要重新实现一下putchar,那我就可以完成pritnf的重定向了。

然后,我实际调试的时候,发现我putchar是正常的。

d87e85d846d94a683ecd84229c9f8ae4.png

但我调用printf的时候,我的单片机就不断的重启。

当然,我这里会想到printf的问题,然后我自己实现了一个字符串打印函数

fa2245b244581e2da32f179c1511ceaa.png

调用测试发现也在不断的重启。

之后我就修改了实现方式,怀疑操作的这个指针不是合法的,触发了什么东东。

把函数修改成这样再打印

1ff5f65e483f50cc5d49c92183519151.png

这样结果就正常了。

到现在我还没想明白是怎么回事,我只能猜测,这个字符串的指针不能瞎操作修改的,用一个变量接收它再做指针的运算是没问题。

所以是啥回事?

跟我朋友朱同学聊了下,他给了我比较好的思路

第一个方法修改

d6b3cbb2fbbaa0c3c17f0d390e2e4913.png

第二种方法修改

66b62c20f29d1282498132b28b532cfa.png

妥妥的C语言陷阱,字符串常量是有const的。

e0ed0531a8788f2dc052c389bbbbb478.jpeg

话说回来,C51的编译器,是不是有点太弱智了,还是说,对编程的要求更高一些呢?

晚些时候,我在测试看看SDCC的表现

代码在

https://github.com/weiqifa0/tiny51_os.git

记得切换到master分支

喜欢的自己捣鼓下,我觉得挺有意思的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/447714.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ai证件照怎么做?三款神器帮你轻松搞定!

ai证件照怎么做?在数字化时代,我们的生活已经离不开各种电子证件照。无论是求职、入学还是护照办理,都需要一张标准、正式的证件照。但是,到照相馆拍摄又贵又不方便,怎么办?别担心,现在有了AI生…

【Linux】进程通信——共享内存+消息队列+信号量

欢迎来到Cefler的博客😁 🕌博客主页:折纸花满衣 🏠个人专栏:题目解析 🌎推荐文章:【LeetCode】winter vacation training 目录 👉🏻共享内存👉🏻关…

开发桌面端应用,使用electron-vite构建项目真的是一绝!

技术栈:electron v28.2.1、react v18.2.0 构建工具:electron-vite v2.0.0 项目打包:electron-builder v24.9.1 本教程为项目工程的搭建,相关技术的知识请各自学习。 Vite在当下绝对是非常卓越的前端构建工具,很多项目…

YOLOv5独家改进:上采样算子 | 超轻量高效动态上采样DySample,效果秒杀CAFFE,助力小目标检测

💡💡💡本文独家改进:一种超轻量高效动态上采样DySample, 具有更少的参数、FLOPs,效果秒杀CAFFE和YOLOv5网络中的nn.Upsample 💡💡💡在多个数据集下验证能够涨点,尤其在小目标检测领域涨点显著。 收录 YOLOv5原创自研 https://blog.csdn.net/m0_63774211/cate…

TryHackMe-File Inclusion练习

本文相关的TryHackMe实验房间链接:TryHackMe | Why Subscribe 路径遍历(目录遍历) LocationDescription/etc/issue包含要在登录提示之前打印的消息或系统标识。/etc/profile控制系统范围的默认变量,例如导出(Export)变量、文件创…

虚拟机安装archlinux

1、创建虚拟机 2、安装系统4、为了方便,修改密码并使用dos窗口连接 5、磁盘分区 由于新建虚拟机时是8G,所以只建一个分区就行 6、格式化分区并挂载 7、更新镜像 rootarchiso ~ # pacman -Sy 8、 pacstrap -i /mnt base base-devel linux linux-f…

详解WebRTC rtc::Thread实现

rtc::Thread介绍 rtc::Thread类不仅仅实现了线程这个执行器(比如posix底层调用pthread相关接口创建线程,管理线程等),还包括消息队列(message_queue)的实现,rtc::Thread启动后就作为一个永不停止的event l…

【C++游戏开发-01】推箱子

C游戏开发 文章目录 C游戏开发[TOC](文章目录) 前言一、逻辑分析1.1地图实现1.2人物的移动1.2.1小人移动1.2.2其他移动 1.3墙壁的碰撞1.4箱子的推动1.4.1什么时候推箱子1.4.2什么情况可以推箱子 1.5胜利的判断1.6卡关的处理1.7关卡的切换 二、DEMO代码2.1游戏框架2.2各功能函数…

刨析数据结构(二)

🌈个人主页:小田爱学编程 🔥 系列专栏:数据结构————"带你无脑刨析" 🏆🏆关注博主,随时获取更多关于数据结构的优质内容!🏆🏆 😀欢迎…

【音视频 ffmpeg 】直播推流QT框架搭建

简介: 【音视频 ffmpeg 】直播推流QT框架搭建 3个线程 一个做视频解码一个做音频解码一个做复用推流 视频解码线程展示 #include "videodecodethread.h" VideodecodeThread::VideodecodeThread(QObject *parent):QThread(parent) {avdevice_register_a…

【前端web入门第三天】01 css定义和引入方式 四种标签选择器

文章目录: 1.css 定义 2.css引入方式 3.选择器 3.1 标签选择器 3.2 类选择器 3.3 id选择器 3.4 通配符选择器 4. 画盒子 1.css 定义 层叠样式表(Cascading Style Sheets,缩写为CSS),是一种样式表语言,用来描述HTML文档的呈现(美…

一键部署幻兽帕鲁服务器免费一年方案

一、背景介绍 简单讲一下历程,幻兽帕鲁从在1月19日上线,24小时内在线人数峰值便突破200万,作为2024年第一款现象级游戏,《幻兽帕鲁》上线后,由于人数太多,频现服务器过载导致游戏卡顿掉线的情况。为了能够…