1,616
社区成员
发帖
与我相关
我的任务
分享
//BootLoader主程序
//Test nRF51822
#include <stdint.h>
#include "bsp/led.h"
#include "main.h"
#include "buzzer.h"
typedef void (*application_main_t)(void);
void BSP_Init(void)
{
LED_Init();
BUZZER_Init();
//Flash Init
}
int main(void)
{
BSP_Init();
//注意:
//bootloader放在从0x00开始的Flash中容易被刷掉,
//如果放到Flash的最后边则只会在烧写进去的程序能覆盖到bootloader的时候才会被破坏。
//像目前将bootloader的存放段定在0x00 ~ 0x40000,烧写进去后并没有将Flash中0x0003C800的旧程序覆盖掉。
//Bootloader部分测试代码
//begin rom adr: 0x0003C800, size: 0x3800
BUZZER_On();
DelayMs(200);
BUZZER_Off();
LED_On();
DelayMs(3000);
LED_Off();
//end boolader test
//跳转到主程序
//application_main_t application_main = *(application_main_t *)(APPLICATION_BASE_ADDRESS+4);
application_main_t application_main = *(application_main_t *)(0x3C800+4); //跳到main()
//application_main_t application_main = *(application_main_t *)(0x3C800); //直接跳到APP的零地址(不行,APP不运行!这个地址可能不为函数)
application_main();
//程序已跳转,不会执行到这里来
while (1)
{
}
}
//APP主程序
//Test nRF51822
#include <stdint.h>
#include "bsp/led.h"
#include "main.h"
void BSP_Init()
{
LED_Init();
BUZZER_Init();
//Flash Init
}
int main(void)
{
BSP_Init();
//APP 部分测试代码
//begin rom adr: 0x00, size: 0x20000(注意:不要覆盖了bootloader)
int led_status = 0; //0.灭、1.亮
BUZZER_On();
DelayMs(200);
BUZZER_Off();
while (1)
{
if (led_status == 0)
{
led_status = 1;
LED_On();
}
else
{
led_status = 0;
LED_Off();
}
DelayMs(500);
}
}