记录开发过程中的问题和功能。毕se代做,小家电开发。 收徒带做企业级项目,帮助毕业生和转行人员顺利找到工作。

LiSun

记录开发过程中的问题和功能。毕se代做,小家电开发。 收徒带做企业级项目,帮助毕业生和转行人员顺利找到工作。

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

boot

  1. 第一步:keil配置

在这里插入图片描述

  1. 第二步:生产bin文件

在这里插入图片描述

$K\ARM\ARMCC\bin\fromelf.exe --bin --output=.\out\bin@L.bin !L

  1. 第三步:优化代码
    在这里插入图片描述
  2. 第四步:编写跳转代码
/********************************************************************************
* @file    main.c
* @author  jianqiang.xue
* @Version V1.0.0
* @Date    2021-04-03
* @brief   
********************************************************************************/

#include <stdio.h>
#include "cx32l003_hal.h"

#include "bsp_system_clock.h"
#include "bsp_key.h"
#include "bsp_uart.h"

#include "business_gpio.h"

#define APP_TARGET_ADDR    (BS_FLASH_BOOT_SIZE + BS_FLASH_USER_INFO_SIZE)

typedef  void (*p_func)(void);

p_func jump_app;
uint32_t jump_addr;

void hardware_init(void)
{
    /* Configure the system clock to HIRC 24MHz*/
    bsp_system_clock_config();
    bsp_button_init();
    bsp_uart_init();
}

/*
 * main: initialize and start the system
 */
int main(void)
{
    hardware_init();
    printf("run\r\n");
    if (bsp_button_get_state(BSP_BUTTON_0) == 0)
    {
boot:
        printf("boot\r\n");
    }
    else
    {
        HAL_NVIC_DisableIRQ(UART0_IRQn);
        bsp_uart0_deinit();
        bsp_button_deinit(BSP_BUTTON_0);

        if (((*(__IO uint32_t*)APP_TARGET_ADDR) & 0x2FFE0000 ) == 0x20000000)
        {
          /* jump to user application */
          jump_addr = *(__IO uint32_t*) (APP_TARGET_ADDR + 4);
          jump_app = (p_func) jump_addr;
          /* initialize user application's stack pointer */
          __set_PSP(*(__IO uint32_t*) APP_TARGET_ADDR);
          __set_CONTROL(0);
          __set_MSP(*(__IO uint32_t*) APP_TARGET_ADDR);

          jump_app();
        }
        goto boot;
    }
    while(1);
}

APP

  1. 第一步:keil配置
    在这里插入图片描述
  2. 第二步:生产bin文件

在这里插入图片描述

$K\ARM\ARMCC\bin\fromelf.exe --bin --output=.\out\bin@L.bin !L

  1. 第三步:优化代码
    在这里插入图片描述

  2. 第四步:编写APP代码

/********************************************************************************
* @file    main.c
* @author  jianqiang.xue
* @Version V1.0.0
* @Date    2021-04-03
* @brief   
********************************************************************************/

#include <stdio.h>

#include "os_api.h"

#include "bsp_system_clock.h"
#include "bsp_led.h"
#include "bsp_key.h"
#include "bsp_adc.h"
#include "bsp_i2c.h"
#include "bsp_uart.h"

#include "app_key.h"

#include "business_function.h"

extern uint8_t app_main_init(void);

void hardware_init(void)
{
    /* Configure the system clock to HIRC 24MHz*/
    bsp_system_clock_config();
    bsp_led_init();
    bsp_button_init();
    bsp_adc0_init();
    bsp_i2c_init();
    bsp_uart_init();
}

/*
 * main: initialize and start the system
 */
int main(void)
{
    hardware_init();
    os_kernel_initialize();
    app_key_init();
    app_main_init();
    os_kernel_start();
}

  1. 第五步:重设置中断向量表
    利用keil全局搜索关键字"VECT_TAB_OFFSET"

原:

#define VECT_TAB_OFFSET (0)

改:

#define VECT_TAB_OFFSET (BS_FLASH_BOOT_SIZE + BS_FLASH_USER_INFO_SIZE)

posted on 2022-08-13 11:00  嵌入式单片机实验室  阅读(151)  评论(0)    收藏  举报
记录开发过程中的问题和功能。毕se代做,小家电开发。 收徒带做企业级项目,帮助毕业生和转行人员顺利找到工作。