- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试将 printf 数据发送到我的 uart
设备。我已经适本地编写了 write_r() 函数。
我遇到的问题是,
printf("我叫山姆\n我很好");
printf("I am back ");
第一个问题:我只能看到“我的名字是Sam”,然后光标转到下一行并停在那里。
第二个问题:“我回来了”根本没有打印出来。
我尝试通过删除 \n
,仍然没有打印第二个 printf
。uart
没有问题。
看起来 \
已经到达,指针丢失了。
我的代码
int write(int file, char *ptr, int len) {
#if !defined( OUT_8 )
#define OUT_8(p,d) (*(volatile char *)(p) = (char)(d))
#endif
#if !defined( IN_8 )
#define IN_8(p) ((*(volatile char *)(p)))
#endif
OUT_8(DUART1_UMCR1, 0x02); //Informs external modem or peripheral that the UART is ready for sending data
OUT_8(DUART1_ULCR1, 0x03);
OUT_8(DUART1_UIER1, 0x0f);
OUT_8(DUART1_UFCR1, 0x8f);
OUT_8(DUART1_UTHR, '\n');
OUT_8(DUART1_UTHR, '\r');
while (ptr!=NULL)
{
if (*ptr=='\n') // JUST A TRY to avoid \n bug
{
OUT_8(DUART1_UTHR, '\n');
wait();
*ptr++;
*ptr++;
OUT_8(DUART1_UTHR, *ptr++); // \n & \r when given through printf isNot working
wait();
}
OUT_8(DUART1_UTHR, *ptr++); // \n & \r when given through printf is not working
wait(); // TODO:
if(len==0)
break;
else
len--;
}
OUT_8(DUART1_UMCR1, 0x00); // say that modem is not not ready. Connection over
OUT_8(DUART1_UFCR1, 0x87);
OUT_8(DUART1_ULCR1, 0x00); // Clear all the interrupts ! virtually shut the UART port
errno = ENOSYS;
return -1;
}
最佳答案
确信 OP 的 I/O 在某处被缓冲。
在发送 \r
和/或 \n
之前不会出现输出。
#if !defined( OUT_8 )
#define OUT_8(p,d) (*(volatile char *)(p) = (char)(d))
#endif
// make ptr a `const char *`
int write(int file, const char *ptr, int len) {
OUT_8(DUART1_UMCR1, 0x02); //Informs UART is ready for sending data
OUT_8(DUART1_ULCR1, 0x03);
OUT_8(DUART1_UIER1, 0x0f);
OUT_8(DUART1_UFCR1, 0x8f);
while (len-- > 0) {
OUT_8(DUART1_UTHR, *ptr++);
wait();
}
// Force an EOL at the _end_ of transmission.
OUT_8(DUART1_UTHR, '\n');
OUT_8(DUART1_UTHR, '\r');
wait();
OUT_8(DUART1_UMCR1, 0x00); // say that modem is not not ready. Connection over
OUT_8(DUART1_UFCR1, 0x87);
OUT_8(DUART1_ULCR1, 0x00); // Clear all interrupts! virtually shut UART port
errno = ENOSYS;
return -1;
}
我怀疑缓冲发生在接收 端,要么是 UART,要么更可能是在查看数据的终端。 OP说“诅咒者转到下一行”。 UART 中没有“光标”。
关于c - newlib printf 函数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18983039/
我从 https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads 下载了工具链“gcc-arm-none-eabi-6-2
**摘要:**本文介绍了LiteOS-M内核Newlib C的实现,特别是文件系统和内存分配释放部分,最后介绍了Newlib钩子函数。 本文分享自华为云社区《鸿蒙轻内核M核源码分析系列二十 Newli
我一直在将 newlib 移植到我的非常小的内核中,但我很困惑:每当我包含一个引用系统调用的函数时,我的程序将在执行时出现页面错误。如果我调用一个不引用系统调用的函数,比如 rand(),就不会出错。
我想使用预装的 mips 交叉编译器 (mips-linux-gnu-gcc) 构建 newlib 库。编译器默认链接 glibc。 $ mips-linux-gnu-gcc -v Using bui
我是一名使用 IA-32 类型处理器的嵌入式软件工程师。我们正在寻找一个编译器工具链 - 最好是免费的。 我们曾经使用 Mentor Graphics CodeBench Lite,但它不再可用。 我
我想编写自己的内核,但我一直坚持为我的交叉编译器移植 newlib。 newlib 是哪个版本我要下载吗? 系统调用stubs放在哪里?最少的实现就足够了吗?如果我决定稍后编辑系统调用,是否必须重建
我正在使用 this tutorial创建一个交叉编译器。 我跟着 gcc 交叉编译器教程去了 porting newlib .一切正常,直到我尝试通过发布来编译它 make all install
我正在使用 GCC 交叉编译器 (arm-none-eabi-) 开发一个用于 ARM 架构(裸机)的程序。为了保持较小的代码大小,我使用“--specs=nano.specs”链接器标志来链接 ne
我在使用 newlib 的 printf 函数时遇到一个奇怪的问题,它被重定向到 uart 端口。 这个问题可以用一个例子很好地说明。 printf(" hi "); ... ...//some ot
我正在使用 Eclipse 开发裸机应用程序。我链接到 newlib,所以我提供了我自己的 _sbrk() 实现。此功能通常包含在我的项目中,并且一切正常。 现在我尝试将这个函数移动到我在过去几个月开
我正在尝试将 printf 数据发送到我的 uart 设备。我已经适本地编写了 write_r() 函数。 我遇到的问题是, 当我说printf("我叫山姆\n我很好"); 下次我说 printf("
我正在尝试为我的操作系统移植 NewLib(我正在学习本教程:http://wiki.osdev.org/Porting_Newlib),但我有一些问题。 LibGloss 完成并编译后,我究竟什么时
我想使用 newlib 而不是 glibc 来编译小的静态二进制文件。 (我不打算交叉编译,因为二进制文件将被同一台计算机使用。)我相信我需要为此编译一个单独的 gcc 吗? 我编译了gcc: ./c
在尝试构建 newlib 1.20.0 时...我按照这个教程http://wiki.osdev.org/OS_Specific_Toolchain#newlib.2Flibc.2Fsys.2Fmyo
我正在使用 gcc-arm-none-eabi 4.9 2014q4 为 Cortex-M4 编写裸机应用程序。当应用程序加载时,对 _sbrk 的第一次调用似乎无效。 我已经实现了 _sbrk 如下
我正在使用 luaL_newlib(luaState, afbFunction),其中 afbFunction 是静态 luaL_Reg 数组。不幸的是,luaL_Reg 只支持两个字段:name 和
我正在尝试为我的爱好内核构建一个工具链,但在构建 Newlib 时遇到了问题。每当我尝试在 newlib/libc/sys/下的内核目录中运行 autoreconf 时,我都会收到错误消息: conf
这是我的第一篇文章,它涵盖了我已经尝试断断续续工作了大约一年的内容。 从本质上讲,它可以归结为以下内容:我有一份 newlib 的副本,我正试图在 LPC2388(来自 NXP 的 ARM7TDMI)
我正在使用 i686 机器作为构建平台为 ARM 设置交叉编译工具链。 我已经能够使用工具链编译基本的 C 程序并在目标 ARM 设备上运行它,但由于 Newlib 仅构建静态库,文件大小最终太大。
我将 arm-none-eabi 工具链与 newlib 结合使用,以使用 ARM Cortex-M0+(特别是工具链的 MCU-on-eclipse 版本)来定位自定义板。我正在使用 -nostar
我是一名优秀的程序员,十分优秀!