打印
[DemoCode下载]

这个米你的例子怎么理解

[复制链接]
581|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jiekou001|  楼主 | 2018-10-26 23:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
TE, se, ni, TI, UART
/******************************************************************************
* [url=home.php?mod=space&uid=288409]@file[/url]     main.c
* [url=home.php?mod=space&uid=895143]@version[/url]  V1.00
* $Revision: 5 $
* $Date: 15/10/06 11:04a $
* [url=home.php?mod=space&uid=247401]@brief[/url]    Show hard fault information when hard fault happened
*
* @note
* Copyright (C) 2013 Nuvoton Technology Corp. All rights reserved.
*****************************************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
#include "Mini51Series.h"


/*---------------------------------------------------------------------------------------------------------*/
/* Global variables                                                                                        */
/*---------------------------------------------------------------------------------------------------------*/


/*---------------------------------------------------------------------------------------------------------*/
/* Define functions prototype                                                                              */
/*---------------------------------------------------------------------------------------------------------*/
int32_t main(void);


void SYS_Init(void)
{
    /*---------------------------------------------------------------------------------------------------------*/
    /* Init System Clock                                                                                       */
    /*---------------------------------------------------------------------------------------------------------*/
    /* Unlock protected registers */
    SYS_UnlockReg();

    /* Set P5 multi-function pins for XTAL1 and XTAL2 */
    SYS->P5_MFP &= ~(SYS_MFP_P50_Msk | SYS_MFP_P51_Msk);
    SYS->P5_MFP |= (SYS_MFP_P50_XTAL1 | SYS_MFP_P51_XTAL2);

    /* Enable External XTAL (4~24 MHz) */
    CLK->PWRCON &= ~CLK_PWRCON_XTLCLK_EN_Msk;
    CLK->PWRCON |= (0x1 << CLK_PWRCON_XTLCLK_EN_Pos); // XTAL12M (HXT) Enabled

    /* Waiting for 12MHz clock ready */
    CLK_WaitClockReady( CLK_CLKSTATUS_XTL_STB_Msk);

    /* Switch HCLK clock source to XTAL */
    CLK->CLKSEL0 &= ~CLK_CLKSEL0_HCLK_S_Msk;
    CLK->CLKSEL0 |= CLK_CLKSEL0_HCLK_S_XTAL;

    /* Enable IP clock */
    CLK->APBCLK |= CLK_APBCLK_UART_EN_Msk; // UART Clock Enable

    /* Select IP clock source */
    CLK->CLKSEL1 &= ~CLK_CLKSEL1_UART_S_Msk;
    CLK->CLKSEL1 |= (0x0 << CLK_CLKSEL1_UART_S_Pos);// Clock source from external 12 MHz or 32 KHz crystal clock

    /* Update System Core Clock */
    /* User can use SystemCoreClockUpdate() to calculate PllClock, SystemCoreClock and CycylesPerUs automatically. */
    SystemCoreClockUpdate();

    /*---------------------------------------------------------------------------------------------------------*/
    /* Init I/O Multi-function                                                                                 */
    /*---------------------------------------------------------------------------------------------------------*/
    /* Set P1 multi-function pins for UART RXD and TXD  */
    SYS->P0_MFP &= ~(SYS_MFP_P00_Msk | SYS_MFP_P01_Msk);
    SYS->P0_MFP = SYS_MFP_P00_TXD | SYS_MFP_P01_RXD;

    /* Lock protected registers */
    SYS_LockReg();

}

void UART_Init()
{
    /*---------------------------------------------------------------------------------------------------------*/
    /* Init UART                                                                                               */
    /*---------------------------------------------------------------------------------------------------------*/
    UART_Open(UART, 115200);
}

/*---------------------------------------------------------------------------------------------------------*/
/* MAIN function                                                                                           */
/*---------------------------------------------------------------------------------------------------------*/

int main(void)
{
    char *tmp = 0;

    /* Init System, IP clock and multi-function I/O */
    SYS_Init();
    /* Init UART for printf */
    UART_Init();

    strcpy(tmp,"HardFaultTest");

    while(1);

}






沙发
jiekou001|  楼主 | 2018-10-26 23:55 | 只看该作者
有朋友能看懂怎么回事吗

使用特权

评论回复
板凳
643757107| | 2018-10-27 00:02 | 只看该作者
将字符串拷贝到指定的地址,不懂。s

使用特权

评论回复
地板
mintspring| | 2018-10-27 00:07 | 只看该作者
字符串拷贝操作

使用特权

评论回复
5
huangcunxiake| | 2018-10-28 13:10 | 只看该作者
看头文件啊,C的标准库而已,拷贝字符串到指定地址。

使用特权

评论回复
6
huangcunxiake| | 2018-10-28 13:11 | 只看该作者
不过这个程序的主题,感觉跟这个对不上号,莫非是敲代码的不会,耍滑头了?

使用特权

评论回复
7
xinxianshi| | 2018-10-28 22:59 | 只看该作者
一个简单的操作。

使用特权

评论回复
8
jiekou001|  楼主 | 2018-11-15 10:35 | 只看该作者
还是不懂啊,一个拷贝的程序,怎么说是硬件错误测试

使用特权

评论回复
9
tuoxieshu| | 2018-11-19 21:57 | 只看该作者
strcpy 不检查拷贝前后的地址是否越界,这里定义了一个空指针没有为它申请内存,所以会导致未知错误。

使用特权

评论回复
10
huangcunxiake| | 2018-11-20 23:40 | 只看该作者
楼上高人啊,原来是指针为空,导致拷贝时候找不到真实地址,发生错误

使用特权

评论回复
11
huangcunxiake| | 2018-11-20 23:49 | 只看该作者
int add(int a , int b)
{
    return a + b;
}

int main(void)
{
    int num = 97;
    float score = 10.00F;
    int arr[3] = {1,2,3};

    //-----------------------

    int* p_num = &num;
    float* p_score = &score;
    int (*p_arr)[3] = &arr;           
    int (*fp_add)(int ,int )  = add;  //p_add是指向函数add的函数指针
    return 0;
}


指针的正确操作,那个本来要给个地址的,结果给的是个0,所以就后面出错了。

使用特权

评论回复
12
huangcunxiake| | 2018-11-20 23:50 | 只看该作者
而地址0,肯定会已经填充了重要内容,如果这个时候破坏肯定就发生错误了

使用特权

评论回复
13
tuoxieshu| | 2018-11-21 17:38 | 只看该作者
huangcunxiake 发表于 2018-11-20 23:50
而地址0,肯定会已经填充了重要内容,如果这个时候破坏肯定就发生错误了

对头☺️

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

135

主题

1370

帖子

2

粉丝