uC / OS硬件寄存器读取

时间:2016-09-14 09:21:28

标签: c embedded

我正在尝试使用飞思卡尔FRDM K64F上的低功耗定时器,IAR作为设计框架,uC / OS作为操作系统。我阅读了手册,发现定时器是通过一堆寄存器来控制的,但我在读写寄存器时遇到了麻烦。

首先,我只想尝试使用下面附带的代码读取寄存器。一旦达到读取线,代码就会卡住:终端上没有打印“读取后”行。通过调试器搜索,我发现引发了hardfault_handler异常。我不是软件专家,所以:有没有人知道这里的问题是什么?它应该是与操作系统相关的东西,但我无法理解。我说我不是软件专家,所以,如果我忘了告诉重要的事情,请告诉我。提前谢谢。

#include "fsl_interrupt_manager.h"

#include  <math.h>
#include  <lib_math.h>
#include  <cpu_core.h>

#include  <app_cfg.h>
#include  <os.h>

#include  <fsl_os_abstraction.h>
#include  <system_MK64F12.h>
#include  <board.h>

#include  <bsp_ser.h>


/*
*********************************************************************************************************
*                                            LOCAL DEFINES
*********************************************************************************************************
*/


/*
*********************************************************************************************************
*                                       LOCAL GLOBAL VARIABLES
*********************************************************************************************************
*/

static  OS_TCB       AppTaskStartTCB;
static  CPU_STK      AppTaskStartStk[APP_CFG_TASK_START_STK_SIZE];


/*
*********************************************************************************************************
*                                      LOCAL FUNCTION PROTOTYPES
*********************************************************************************************************
*/

static  void  AppTaskStart (void  *p_arg);




int  main (void)
{
    OS_ERR   err;

#if (CPU_CFG_NAME_EN == DEF_ENABLED)
    CPU_ERR  cpu_err;
#endif

    hardware_init();
    GPIO_DRV_Init(switchPins, ledPins);


#if (CPU_CFG_NAME_EN == DEF_ENABLED)
    CPU_NameSet((CPU_CHAR *)"MK64FN1M0VMD12",
                (CPU_ERR  *)&cpu_err);
#endif

    OSA_Init();                                                 /* Init uC/OS-III.                                      */

    OSTaskCreate(&AppTaskStartTCB,                              /* Create the start task                                */
                 "App Task Start",
                  AppTaskStart,
                  0u,
                  APP_CFG_TASK_START_PRIO,
                 &AppTaskStartStk[0u],
                 (APP_CFG_TASK_START_STK_SIZE / 10u),
                  APP_CFG_TASK_START_STK_SIZE,
                  0u,
                  0u,
                  0u,
                 (OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR | OS_OPT_TASK_SAVE_FP),
                 &err);

    OSA_Start();                                                /* Start multitasking (i.e. give control to uC/OS-III). */

    while (DEF_ON) {                                            /* Should Never Get Here                                */
        ;
    }
}





static  void  AppTaskStart (void *p_arg)
{
  OS_ERR    os_err;

  (void)p_arg;                                                /* See Note #1                                          */

  char string[800];

  CPU_Init();                                                 /* Initialize the uC/CPU Services.                      */
  Mem_Init();                                                 /* Initialize the Memory Management Module              */
  Math_Init();                                                /* Initialize the Mathematical Module                   */


  int * PSR = (int *) 0x42040004;

  BSP_Ser_Init(115200u);

  APP_TRACE_DBG(("Blinking RGB LED...\n\r"));


  int value;

  APP_TRACE_DBG(("Before read\n"));
  value=*PSR;
  APP_TRACE_DBG(("After read\n"));

  APP_TRACE_DBG(("Before sprintf\n"));       
  sprintf(string,"Value is %d\n",value);
  APP_TRACE_DBG(("After sprintf\n"));

}

0 个答案:

没有答案