[DemoCode下载] M058S的硬件错误信息检测

[复制链接]
848|13
 楼主| 天灵灵地灵灵 发表于 2016-11-25 22:42 | 显示全部楼层 |阅读模式
  1. /******************************************************************************
  2. * [url=home.php?mod=space&uid=288409]@file[/url]     main.c
  3. * [url=home.php?mod=space&uid=895143]@version[/url]  V3.00
  4. * $Revision: 1 $
  5. * $Date: 15/02/06 1:43p $
  6. * [url=home.php?mod=space&uid=247401]@brief[/url]    Show hard fault information when hard fault happened.
  7. *
  8. * @note
  9. * Copyright (C) 2014 Nuvoton Technology Corp. All rights reserved.
  10. *****************************************************************************/
  11. #include <stdio.h>
  12. #include <string.h>
  13. #include "M058S.h"


  14. void SYS_Init(void)
  15. {

  16.     /* Enable UART0 clock */
  17.     CLK->APBCLK = CLK_APBCLK_UART0_EN_Msk;

  18.     /* Update System Core Clock */
  19.     /* User can use SystemCoreClockUpdate() to calculate SystemCoreClock and cyclesPerUs automatically. */
  20.     SystemCoreClockUpdate();

  21.     /* Set P3 multi-function pins for UART0 RXD and TXD  */
  22.     SYS->P3_MFP &= ~(SYS_MFP_P30_Msk | SYS_MFP_P31_Msk);
  23.     SYS->P3_MFP |= (SYS_MFP_P30_RXD | SYS_MFP_P31_TXD);

  24. }

  25. void UART0_Init()
  26. {
  27.     /*---------------------------------------------------------------------------------------------------------*/
  28.     /* Init UART                                                                                               */
  29.     /*---------------------------------------------------------------------------------------------------------*/
  30.     /* Reset UART0 */
  31.     SYS_ResetModule(UART0_RST);

  32.     /* Configure UART0 and set UART0 Baudrate */
  33.     UART_Open(UART0, 115200);
  34. }

  35. int main()
  36. {

  37.     char *tmp = 0;

  38.     /* Unlock protected registers */
  39.     SYS_UnlockReg();

  40.     /* Init System, peripheral clock and multi-function I/O */
  41.     SYS_Init();

  42.     /* Lock protected registers */
  43.     SYS_LockReg();

  44.     /* Init UART0 for printf */
  45.     UART0_Init();

  46.     strcpy(tmp, "HardFaultTest");

  47.     while(1);  

  48. }

  49. /*** (C) COPYRIGHT 2014 Nuvoton Technology Corp. ***/


huangcunxiake 发表于 2016-11-26 22:15 | 显示全部楼层
原型声明:char *strcpy(char* dest, const char *src);
头文件:#include <string.h> 和 #include <stdio.h>
功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间
说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
返回指向dest的指针。
只看出来用这个函数,把那个字符串拷贝到指定的地址了。
yiyigirl2014 发表于 2016-11-27 00:14 | 显示全部楼层
strcpy(tmp, "HardFaultTest");
dongnanxibei 发表于 2016-11-27 16:25 | 显示全部楼层
没看出来哪儿有错误了,就是简单的一个打印输出?
dongnanxibei 发表于 2016-11-27 16:26 | 显示全部楼层
仔细看了一下,连打印都没有啊,好奇怪,难打就是检测这种错误 ?
heisexingqisi 发表于 2016-11-27 18:45 | 显示全部楼层
从来没用过这个函数,回头试试看
598330983 发表于 2016-11-27 23:43 | 显示全部楼层
一个字符串拷贝的函数。
wahahaheihei 发表于 2016-11-28 10:33 | 显示全部楼层
应该是检测到了错误后,打印一条消息。
643757107 发表于 2016-11-28 23:19 | 显示全部楼层
1、内存溢出或者访问越界。这个需要自己写程序的时候规范代码,遇到了需要慢慢排查。

2、堆栈溢出。增加堆栈的大小。
 楼主| 天灵灵地灵灵 发表于 2016-11-29 21:10 | 显示全部楼层
这就是个例子,官方提供。
huangcunxiake 发表于 2016-12-4 15:31 | 显示全部楼层
留着备用,这个初始化用的很棒
玛尼玛尼哄 发表于 2016-12-5 16:40 | 显示全部楼层
又学会了一种打印错误的方式
heisexingqisi 发表于 2016-12-6 18:43 | 显示全部楼层
其实有很多种这种错误调试的方式,比如断言也可以。
dongnanxibei 发表于 2016-12-7 21:57 | 显示全部楼层
常见的 是用断言的中断形式。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

183

主题

3475

帖子

13

粉丝
快速回复 在线客服 返回列表 返回顶部