工程目录:AiPi-Open-Kits[color=rgba(0, 0, 0, 0.4)][size=0.9em]/
Project_basic
文件目录:AiPi-Open-Kits[color=rgba(0, 0, 0, 0.4)][size=0.9em]/
Project_basic [color=rgba(0, 0, 0, 0.4)][size=0.9em]/
main
main 工程代码:
--------------------------------------------------
/**
* @file main.c
* @author your name (you@domain.com)
* @brief
* @version 0.1
* @date 2023-08-22
*
* @copyright Copyright (c) 2023
*
*/
#include <stdio.h> //导入各种头文件
#include <stdlib.h>
#include <string.h>
#include <FreeRTOS.h>
#include <task.h>
#include "board.h" //aithinker_Ai-M6X_SDK/ bsp / board / bl616dk / board.h
#include "log.h"
//#include<>和#include“”的区别
//1、#include<>:编译器直接从系统类库目录里查找头文件
//如果类库目录下查找失败,编译器会终止查找,直接报错:No such file or directory.
//2、#include"":默认从项目当前目录查找头文件,所谓项目当前目录,就是项目工程文件(*.vcxproj)所在的目录
//如果在项目当前目录下查找失败,再从项目配置的头文件引用目录查找头文件,所谓项目配置的引用目录,
//就是我们在项目工程中设置的头文件引用目录,Windows VS编译环境如下图所示。在Linux GCC编译环境下,
//则一般通过在Makefile文件中使用-L参数指定引用目录。
//1、#include<>一般用于包含系统头文件,诸如stdlib.h、stdio.h、iostream等;
//2、#include""一般用于包含自定义头文件,比如我们自定义的test.h、declare.h等。
#define DBG_TAG "MAIN" // 宏定义,将“MAIN" 定义为 DBG_TAG,
int main(void) // 定义 int 型(整形),函数main,函数参数为空,函数无参数
{
board_init(); // 初始化开发板
LOG_I("Hello world"); // 日志输出 hello world
}
-------------------------------------------------------
程序文件夹在VScode中可以通过F12 转到函数定义位置,产看函数具体代码内容。
void board_init(void)
{
int ret = -1;
uintptr_t flag;
size_t heap_len;
flag = bflb_irq_save();
ret = bflb_flash_init();
system_clock_init();
peripheral_clock_init();
bflb_irq_initialize();
console_init();
#ifdef CONFIG_PSRAM
board_psram_x8_init();
Tzc_Sec_PSRAMB_Access_Release();
heap_len = ((size_t)&__psram_limit - (size_t)&__psram_heap_base);
pmem_init((void *)&__psram_heap_base, heap_len);
#endif
heap_len = ((size_t)&__HeapLimit - (size_t)&__HeapBase);
kmem_init((void *)&__HeapBase, heap_len);
bl_show_log();
if (ret != 0) {
printf("flash init fail!!!\r\n");
}
bl_show_flashinfo();
#ifdef CONFIG_PSRAM
printf("dynamic memory init success, ocram heap size = %d Kbyte, psram heap size = %d Kbyte\r\n",
((size_t)&__HeapLimit - (size_t)&__HeapBase) / 1024,
((size_t)&__psram_limit - (size_t)&__psram_heap_base) / 1024);
#else
printf("dynamic memory init success, ocram heap size = %d Kbyte \r\n", ((size_t)&__HeapLimit - (size_t)&__HeapBase) / 1024);
#endif
printf("sig1:%08x\r\n", BL_RD_REG(GLB_BASE, GLB_UART_CFG1));
printf("sig2:%08x\r\n", BL_RD_REG(GLB_BASE, GLB_UART_CFG2));
printf("cgen1:%08x\r\n", getreg32(BFLB_GLB_CGEN1_BASE));
log_start();
#if (defined(CONFIG_LUA) || defined(CONFIG_BFLOG) || defined(CONFIG_FATFS))
rtc = bflb_device_get_by_name("rtc");
#endif
bflb_irq_restore(flag);
}
一个hello world 都需要用FreeRTOS,杀鸡用牛刀!
提示:要想学会用代码编程使用小安派,大家需要先对FreeRTOS有个入门才行!
|