• MDK4.7下的C编译器不支持sprintf浮点型数据显示?——迁移帖


    使用LPC1756使用sprintf(str,"%f",1.25);在str中一直无法显示1.25(整形数据可以显示),网上找了好久说是MAK4.7下的C编译器不支持sprintf的浮点型显示,然后在帮助文档中看到,
    The string-based function,such as sprintf() and sscanf(),do not depend on the stdio library.
    但还是不太相信这么新的编译器竟然不支持C99标准的函数.

    嗯,前面自己也不确定,就猜想以为MDK不支持呢。
    找到问题了,是任务堆栈字节对齐的问题,必须要8字节对齐,否则只输出0.000.
    AAPCS规则要求堆栈保持8字节对齐。如果不对齐,调用一般的函数也是没问题的。但是当调用需要严格遵守AAPCS规则的函数时可能会出错。
    例如调用sprintf输出一个浮点数时,栈必须是8字节对齐的,否则结果可能会出错。
    但初始化保证任务栈8字节对齐还不够。具体可参看http://www.cnblogs.com/sky1991/archive/2012/10/13/2722482.html

    六.总结 综上所述,为了能够安全的使用严格遵守AAPCS规则的函数(比如sprintf)需要做到以下几点:
    1.保证MSP在初始的时候是8字节对齐的
    2.如果用到OS的话需要保证给每个任务分配的栈是保持8字节对齐的
    3.如果用的是基于CM3内核的处理器需将NVIC配置控制寄存器的STKALIGN置位

  • 相关阅读:
    window.print()分页打印
    获取输入框中光标位置
    JavaScript数据结构与算法描述-队列
    .NET中获取IP地址
    记录一次排查C#使用UI Automation获取程序元素的bug
    虚拟机为win server 2012 添加新磁盘
    为halo博客添加ssl证书(配合nginx反向代理)
    初学nginx反向代理
    公告时间轴
    hackthebox-Archetype
  • 原文地址:https://www.cnblogs.com/mic-chen/p/13576859.html
Copyright © 2020-2023  润新知