stm 32 sprintf问题

arm杀手 2017-02-24 04:46:16
stm32 使用sprintf函数


void name_creat_txt(char *name,u8 year,u8 mouth,u8 day,u8 hour,u8 min,u8 second )
{
sprintf (name, "0:\%04x%02x%02x%02x%02x%02x.txt", year,mouth,day,hour,min,second);
}

void main()
{
char *text_name;
ReadTime[7]={ox17,0x02,0x21,0x11,0x23,0x20,0x02};
text_name=(u8 *)mymalloc(SRAMEX,1024); //给指针分配外部地址
name_creat_txt( text_name,ReadTime[0],ReadTime[1],ReadTime[2],ReadTimep[3,ReadTime[4],ReadTime[5],ReadTime[6]);
myfree(SRAMEX,text_name);//释放内存

}

这样使用 指针的方式一直不对,当我把name和text_name改为数组格式以后,就可以了,不明白哪里有问题
...全文
758 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
arm杀手 2017-05-12
  • 打赏
  • 举报
回复
自己解决了 char *text_name 必须初始分配地址,要不乱了
Acuity. 2017-02-27
  • 打赏
  • 举报
回复
malloc是从堆上分配内存,如果是裸跑请检查startup_stm32f10x_hd.s启动文件的堆大小设置情况,默认是Heap_Size EQU 0x00000200 (512),这样分配1024内存肯定出错。如果带系统,请查看系统的内存管理设置。
uid123 2017-02-24
  • 打赏
  • 举报
回复
name在HEAD里面是不是有定义??打开前面引用的所有头文件,看看有没有定义的name。
STM32F407IGT6单片机 HC-SR501人体红外感应模块(串口屏显示)KEIL软件工程源码, int main(void) { uint8_t state; /* 复位所有外设,初始化Flash接口和系统滴答定时器 */ HAL_Init(); /* 配置系统时钟 */ SystemClock_Config(); /* 初始化串口并配置串口中断优先级 */ MX_DEBUG_USART_Init(); HMI_USARTx_Init(); /* 初始化LED */ LED_GPIO_Init(); HC_SR501_GPIO_Init(); /* 无限循环 */ while (1) { state=HC_SR501_StateRead(); switch(state) { case HC_SR501_LOW: HMI_string_setting("page1.t1.txt=\"无人\""); break; case HC_SR501_HIGH: HMI_string_setting("page1.t1.txt=\"有人\""); break; } } } /** * 函数功能: 向串口屏发送数据 * 输入参数: 无 * 返 回 值: 无 * 说 明: 无 */ void HMI_value_setting(const char *val_str,uint32_t value) { uint8_t tmp_str[30]={0}; uint8_t i; sprintf((char *)tmp_str,"%s=%d",val_str,value); for(i=0;iDR=tmp_str[i]; while(__HAL_UART_GET_FLAG(&husartx_HMI, UART_FLAG_TXE) == RESET); } HMI_USARTx->DR=0xFF; while(__HAL_UART_GET_FLAG(&husartx_HMI, UART_FLAG_TXE) == RESET); HMI_USARTx->DR=0xFF; while(__HAL_UART_GET_FLAG(&husartx_HMI, UART_FLAG_TXE) == RESET); HMI_USARTx->DR=0xFF; while(__HAL_UART_GET_FLAG(&husartx_HMI, UART_FLAG_TXE) == RESET); } /** * 函数功能: 向串口屏发送浮点数据 * 输入参数: 无 * 返 回 值: 无 * 说 明: 无 */ void HMI_string_setting(const char *val_str) { uint8_t tmp_str[50]={0}; uint8_t i; sprintf((char *)tmp_str,val_str); for(i=0;iDR=tmp_str[i]; while(__HAL_UART_GET_FLAG(&husartx_HMI, UART_FLAG_TXE) == RESET); } HMI_USARTx->DR=0xFF; while(__HAL_UART_GET_FLAG(&husartx_HMI, UART_FLAG_TXE) == RESET); HMI_USARTx->DR=0xFF; while(__HAL_UART_GET_FLAG(&husartx_HMI, UART_FLAG_TXE) == RESET); HMI_USARTx->DR=0xFF; while(__HAL_UART_GET_FLAG(&husartx_HMI, UART_FLAG_TXE) == RESET); }

27,373

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧