怎样给不同的柱子上添加不同的标准误差线(怎么给柱形图加误差线)
831
2022-05-29
摘要:本篇帖子向大家讲述如何添加和修改一些函数到我们自己的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也复制过去,然后就可以开始编译了,编译过程中应该会出现一些错误,大部分都是依赖文件导致的,你可以尝试将缺失的依赖文件找到,并复制到特定的文件夹中,知道解决文件,如果遇到无法解决的文件,欢迎大家给我留言和私信,留言尽量留到“汇总帖中”,便于后来的同学参考这些有价值的问题以及解决方案,感谢大家的支持!
轻量级操作系统 LiteOS
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。