最近工作很繁忙,没太多时间想博客的事情,但是今天还是亲不自禁要和大家分享我最新写的代码!!!!
linux下对main函数说明:”每个C语言程序都必须有一个称为main()的函数,作为程序启动的起点。当执行程序时,命令行参数(command-line argument)(由shell逐一解析)通过两个入参提供给main()函数。第一个参数int argc,表示命令行参数的个数。第二个参数char *argv[],是一个指向命令行参数的指针数组,每一参数又都是以空字符(null) 结尾的字符串。第一个字符串,亦即argv[0]指向的,(通常)是该程序的名称。argv中的指针列表以NULL指针结尾(即argv[argc]为NULL)”
通过argc, argv我们就可以实现很方便,操作当前线程,今天,我就把这个机制在ucos上实现。 先上干活
1. 手动给字符串指针赋值
/**
* 为了模拟main函数的参数传入, 我们手动把字符串写好,比如下面
* "shell start" 这样我们就调用sheel_main()函数,同时传递参数start,启动
* 线程
*/
char
*
sheel_argv_str[
5
]
=
{
"sheel"
,
"start"
};
arg_desc_t
sheel_argv
=
{
.
argc
=
2
,
.
argv
=
sheel_argv_str
};
2. main函数入口调用
// 传入上面赋值好的参数个数,字符串参数列表 "sheel start"
sheel_main
(sheel_argv.
argc
, sheel_argv.
argv
);
3. sheel_main的实现
下面代码才是让人窒息的思想, 完全模仿linux风格,如果是搞过px4的同学,就更新熟悉这种函数入口方式了!!
int
sheel_main
(
int
argc,
char
*
argv[])
{
if
(argc
<
2
) {
return
-
1
;
}
if
(
!
strcmp
(argv[
1
],
"start"
)) {
/* 调用ucos的任务创建函数OSTaskCreate 创建任务 */
OSTaskCreate
(UART_task, (
void
*
)
0
, (OS_STK
*
)
&
UART_TASK_STK[UART_STK_SIZE
-
1
], UART_TASK_PRIO);
return
0
;
}
if
(
!
strcmp
(argv[
1
],
"stop"
)) {
OSTaskDel
(UART_TASK_PRIO);
return
0
;
}
if
(
!
strcmp
(argv[
1
],
"info"
)) {
sheel_info
();
return
0
;
}
return
0
;
}
这样,我们就轻松在ucos上实现类似linux风格的main函数入口的思想,这个思想值得我们学习,小编,就讲到这里,下期再见