STM32L476移植华为LiteOS系列教程---main.c 8
【摘要】 摘要:本篇帖子向大家讲述如何添加和修改一些函数到我们自己的main.c文件中,最终使LiteOS及其组件运行起来,也是本连载贴的完结篇吧!一、照葫芦画瓢---详解iot_link/targets/STM32L431_BearPi/Src/main.c文件1234567891011121314151617181920212223242526272829303132333435363738394...
摘要:本篇帖子向大家讲述如何添加和修改一些函数到我们自己的main.c文件中,最终使LiteOS及其组件运行起来,也是本连载贴的完结篇吧!
一、照葫芦画瓢---详解iot_link/targets/STM32L431_BearPi/Src/main.c文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
#include "main.h"
#include "sys_init.h"
#include "mem.h"
#include "los_base.h"
#include "los_task.ph"
#include "los_typedef.h"
#include "los_sys.h"
#if defined (__CC_ARM)
extern
char
Image$$RW_IRAM1$$ZI$$Limit [];
extern
char
Image$$ARM_LIB_STACKHEAP$$Base [];
#elif defined (__GNUC__)
/* 我们使用IoT Studio默认是GNUC编译环境,所以用该预处理项
* 该处引入了两个变量__los_heap_addr_start__和__los_heap_addr_end__,这两个变量定义在os.ld文件中,想知道详细定义的可以移步到
*“0x04使用IoT-Studio移植LiteOS到STM32L476(也可以是其他芯片)---修改链接脚本”
*/
extern
char
__los_heap_addr_start__ [];
extern
char
__los_heap_addr_end__ [];
#else
#error "fix me"
#endif
/* 以下代码就将一段物理内存开始地址和结束地址映射为一个名为system_phys_mem的结构体数组
* 这段内存将来给LiteOS分配使用
*/
const
struct
phys_mem system_phys_mem [] =
{
#if defined (__CC_ARM)
{ Image$$RW_IRAM1$$ZI$$Limit, Image$$ARM_LIB_STACKHEAP$$Base },
#elif defined (__GNUC__)
{(unsigned
long
) __los_heap_addr_start__,(unsigned
long
) __los_heap_addr_end__ },
#else
#error "fix me"
#endif
{ 0, 0 }
};
/* 该函数用于初始化开发板特有的外设,例如LCD显示器、温湿度采集器等等,移植时可以将你的开发板的特有外设的初始化函数在此替换
*
*/
VOID
HardWare_Init(
VOID
)
{
HAL_Init();
/* Configure the system clock */
SystemClock_Config();
MX_GPIO_Init();
MX_I2C1_Init();
MX_SPI2_Init();
dwt_delay_init(SystemCoreClock);
LCD_Init();
LCD_Clear(BLACK);
POINT_COLOR = GREEN;
LCD_ShowString(10, 50, 240, 24, 24,
"Welcome to BearPi!"
);
LCD_ShowString(20, 90, 240, 16, 16,
"BearPi-IoT Develop Board"
);
LCD_ShowString(20, 130, 240, 16, 16,
"Powerd by Huawei LiteOS!"
);
LCD_ShowString(30, 170, 240, 16, 16,
"Connecting NET......"
);
}
/* 导入Demo的函数link_main,该函数的定义在iot_link/link_main.c中
* 该函数中根据我们的条件编译宏来选择使能哪些组件(定时器、网络、各类Demo)最终调用standard_app_demo_main();启动特定Demo中的任务
* 大家可以进到Demo文件夹下,每个Demo中都有这个standard_app_demo_main();函数的定义,这就是统一接口接口化编程的实例
*/
extern
int
link_main(
void
*args);
/* 该函数用于初始化我们的第一个任务,也就是link_main,我们需要初始化自己的任务可以照着仿写
*
*/
static
int
link_test()
{
int
ret = -1;
UINT32
uwRet = LOS_OK;
UINT32
handle;
TSK_INIT_PARAM_S task_init_param;
//定义一个task_init_param结构体变量,用于传递任务参数
memset
(&task_init_param, 0,
sizeof
(TSK_INIT_PARAM_S));
task_init_param.uwArg = (unsigned
int
)NULL;
task_init_param.usTaskPrio = 2;
//设置任务优先级
task_init_param.pcName =(
char
*)
"link_main"
;
//设置任务名称
task_init_param.pfnTaskEntry = (TSK_ENTRY_FUNC)link_main;
//设置任务入口函数,这就是上面引入的那个函数
task_init_param.uwStackSize = 0x1000;
//设置任务栈大小,这个任务栈将在__los_heap_addr_start__到__los_heap_addr_end__之间的内存中分配
uwRet = LOS_TaskCreate(&handle, &task_init_param);
//创建任务
if
(LOS_OK == uwRet){
ret = 0;
}
return
ret;
}
int
main(
void
)
{
UINT32
uwRet = LOS_OK;
HardWare_Init();
uwRet = LOS_KernelInit();
//初始化内核
if
(uwRet != LOS_OK)
{
return
LOS_NOK;
}
extern
void
shell_uart_init(
int
baud);
//导入和初始化shell,你的开发板以上电就会自动启动shell,你可以用键盘输入一个help试试,别认为是程序坏了
shell_uart_init(115200);
//没有打印hello world
link_test();
(
void
)LOS_Start();
//开启操作系统调度
return
0;
//正常情况下永远不会运行到return 0
}
|
PS:大家在复制main.c到自己的工程中修改时,记得顺便将main.h也复制过去,然后就可以开始编译了,编译过程中应该会出现一些错误,大部分都是依赖文件导致的,你可以尝试将缺失的依赖文件找到,并复制到特定的文件夹中,知道解决文件,如果遇到无法解决的文件,欢迎大家给我留言和私信,留言尽量留到“汇总帖中”,便于后来的同学参考这些有价值的问题以及解决方案,感谢大家的支持!
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)