修改api名字
This commit is contained in:
5
.vscode/settings.json
vendored
5
.vscode/settings.json
vendored
@@ -65,7 +65,10 @@
|
||||
"arch.h": "c",
|
||||
"list.h": "c",
|
||||
"typeindex": "c",
|
||||
"mm.h": "c"
|
||||
"mm.h": "c",
|
||||
"atomic.h": "c",
|
||||
"slist.h": "c",
|
||||
"exec.h": "c"
|
||||
},
|
||||
"cortex-debug.showRTOS": false
|
||||
}
|
||||
@@ -3,7 +3,7 @@
|
||||
#include <type.h>
|
||||
|
||||
/**
|
||||
* @breif ԭ<EFBFBD>Ӳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><EFBFBD><EFBFBD>
|
||||
* @breif 原子操作的变量
|
||||
*/
|
||||
typedef struct atomic {
|
||||
volatile int32_t counter;
|
||||
@@ -12,64 +12,64 @@ typedef struct atomic {
|
||||
#define ATOMIC_INIT(a) ((struct atomic){(a)})
|
||||
|
||||
/**
|
||||
* @breif ԭ<EFBFBD>ӱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD>
|
||||
* @breif 原子变量自加
|
||||
*/
|
||||
uint32_t atomic_inc(volatile atomic_t *val);
|
||||
/**
|
||||
* @breif ԭ<EFBFBD>ӱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD>
|
||||
* @breif 原子变量自减
|
||||
*/
|
||||
uint32_t atomic_dec(volatile atomic_t *val);
|
||||
/**
|
||||
* @breif <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD>ӱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
||||
* @breif 设置原子变量的值
|
||||
*/
|
||||
void atomic_set(volatile atomic_t *val, uint32_t i);
|
||||
/**
|
||||
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮ǰ<EFBFBD><EFBFBD>ֵ
|
||||
* 设置值,并返回之前的值
|
||||
*/
|
||||
uint32_t atomic_ret_set(volatile atomic_t *val, uint32_t i);
|
||||
/**
|
||||
* @breif <EFBFBD><EFBFBD>ȡԭ<EFBFBD>ӱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
||||
* @breif 读取原子变量的值
|
||||
*/
|
||||
uint32_t atomic_read(volatile atomic_t *val);
|
||||
/**
|
||||
* @breif <EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @breif 加上一个数
|
||||
*/
|
||||
void atomic_add(volatile atomic_t *a, uint32_t val);
|
||||
/**
|
||||
* @breif <EFBFBD><EFBFBD>ȥһ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @breif 减去一个数
|
||||
*/
|
||||
void AtomicSub(volatile atomic_t *a, uint32_t val);
|
||||
uint32_t atomic_test(volatile atomic_t *a, uint32_t val);
|
||||
/**
|
||||
* @breif <EFBFBD><EFBFBD><EFBFBD>Ե<EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>и<EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD><EFBFBD>ԵĽ<EFBFBD><EFBFBD><EFBFBD>
|
||||
* @return 1<EFBFBD><EFBFBD><EFBFBD><EFBFBD>0 <20><>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
|
||||
* @breif 测试等于0,则进行赋值,并返回测试的结果
|
||||
* @return 1等于0 ,0不等于0
|
||||
*/
|
||||
uint32_t atomic_test_set(volatile atomic_t *a, uint32_t val);
|
||||
/**
|
||||
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>val;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮ǰ<D6AE>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮ǰ<D6AE><C7B0>0<EFBFBD><30><EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
|
||||
* 设置val;并设置之前的结果,如果加之前是0,则返回1,否则返回0
|
||||
* @param a
|
||||
* @param val
|
||||
* @return
|
||||
*/
|
||||
uint32_t atomic_set_test(volatile atomic_t *a, uint32_t val);
|
||||
/**
|
||||
* <EFBFBD>Լ<EFBFBD>1<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD>֮ǰ<EFBFBD>Ľ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮ǰ<EFBFBD><EFBFBD>0<EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
|
||||
* 自加1。并返回加之前的结果,如果加之前是0,则返回1,否则返回0
|
||||
* @param a
|
||||
* @return
|
||||
*/
|
||||
uint32_t atomic_inc_test(volatile atomic_t *a);
|
||||
/**
|
||||
* @breif <EFBFBD><EFBFBD><EFBFBD>Ե<EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>+1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD><D8B2>ԵĽ<D4B5><C4BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>+1
|
||||
* @return 1<EFBFBD><EFBFBD><EFBFBD><EFBFBD>0 <20><>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
|
||||
* @breif 测试等于0,则进行+1,并返回测试的结果;否则,不+1
|
||||
* @return 1等于0 ,0不等于0
|
||||
*/
|
||||
uint32_t atomic_test_inc(volatile atomic_t *a);
|
||||
/**
|
||||
* @breif <EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1;<3B><>֮<EFBFBD><D6AE><EFBFBD><EFBFBD>;
|
||||
* @return 1<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0 <20><>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
|
||||
* @breif 测试大于0,则减1;反之不动;
|
||||
* @return 1:等于0 ,0:不等于0
|
||||
*/
|
||||
uint32_t atomic_test_dec_nq(volatile atomic_t *a);
|
||||
/**
|
||||
* @brief <EFBFBD>Ƚ<EFBFBD>a<EFBFBD><EFBFBD>b<EFBFBD>Ĵ<EFBFBD>С,<2C><><EFBFBD><EFBFBD>b<=a a+=1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>b<=a<><61><EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
|
||||
* @brief 比较a,b的大小,如果b<=a a+=1,并且b<=a返回1,否则0
|
||||
*
|
||||
* @param a
|
||||
* @param b
|
||||
@@ -78,7 +78,7 @@ uint32_t atomic_test_dec_nq(volatile atomic_t *a);
|
||||
uint32_t atomic_cmp_hi_inc(volatile atomic_t *a, volatile uint32_t b);
|
||||
|
||||
/**
|
||||
* @brief <EFBFBD>Ƚ<EFBFBD>a<EFBFBD><EFBFBD>b<EFBFBD>Ĵ<EFBFBD>С,<2C><><EFBFBD><EFBFBD>a<=b a+=1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>a<=b<><62><EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
|
||||
* @brief 比较a,b的大小,如果a<=b a+=1,并且a<=b返回1,否则0
|
||||
*
|
||||
* @param a
|
||||
* @param b
|
||||
|
||||
@@ -16,8 +16,8 @@
|
||||
#include <mkrtos/dlist.h>
|
||||
#include <mkrtos/slist.h>
|
||||
|
||||
#define NR_FILE 8
|
||||
#define THREAD_NAME_LEN 8
|
||||
#define NR_FILE 8 //!<最大文件描述符数量
|
||||
#define THREAD_NAME_LEN 8 //!<最大线程名长度
|
||||
|
||||
/**
|
||||
* @brief 任务的状态
|
||||
@@ -61,7 +61,7 @@ struct stack_info {
|
||||
|
||||
struct sys_task_base_links;
|
||||
struct sigaction;
|
||||
struct mem_struct;
|
||||
// struct mem_struct;
|
||||
//struct tty_struct;
|
||||
/**
|
||||
* @brief 任务控制块
|
||||
@@ -157,7 +157,7 @@ struct sys_tasks {
|
||||
struct task *current_task; //!< 当前工作的任务节点
|
||||
struct task *last_task; //!< 上次运行的线程
|
||||
atomic_t sche_lock; //!< 是否允许系统进行任务调度
|
||||
slist_head_t all_tk_list;// all_task; //!< 所有的任务链表
|
||||
slist_head_t all_tk_list; //!< 所有的任务链表
|
||||
atomic_t pid_temp; //!< 创建任务分配任务ID使用
|
||||
uint16_t tasks_count; //!< 系统任务数
|
||||
uint8_t is_first; //!< 是否首次,是为0,不是为1
|
||||
@@ -173,15 +173,23 @@ struct wait_queue {
|
||||
//sched.c
|
||||
extern struct sys_tasks sys_tasks_info;
|
||||
|
||||
//! 获取当前的进程
|
||||
#define CUR_TASK sys_tasks_info.current_task
|
||||
|
||||
/**
|
||||
* @brief 获取当前线程
|
||||
* @brief Get the current task object
|
||||
*
|
||||
* @return struct task*
|
||||
*/
|
||||
static inline struct task* get_current_task(void)
|
||||
{
|
||||
return sys_tasks_info.current_task;
|
||||
}
|
||||
/**
|
||||
* @brief Set the current task
|
||||
*
|
||||
* @param tk
|
||||
*/
|
||||
static inline void set_current_task(struct task* tk)
|
||||
{
|
||||
sys_tasks_info.current_task = tk;
|
||||
@@ -199,10 +207,9 @@ void task_run(void);
|
||||
void task_run_1(struct task *tk);
|
||||
void sche_lock(void);
|
||||
void sche_unlock(void);
|
||||
uint32_t get_sche_lock_cn(void);
|
||||
uint32_t sche_lock_cn_get(void);
|
||||
void task_sche(void);
|
||||
void task_update_cur(void);
|
||||
// void del_task(struct task **task_ls, struct task *del, int flag);
|
||||
int32_t add_task(struct task *p_task_block, uint32_t into_all_ls);
|
||||
void tasks_check(void);
|
||||
void set_helper(struct task *helper_task);
|
||||
|
||||
@@ -4,12 +4,10 @@
|
||||
#define __LIBRARY__
|
||||
#include <unistd.h>
|
||||
#include <arch/arch.h>
|
||||
//#include "stdlib.h"
|
||||
#include <mkrtos/sched.h>
|
||||
#include <knl_service.h>
|
||||
#include <mkrtos/fs.h>
|
||||
#include <mkrtos/exec.h>
|
||||
//#include <loader.h>
|
||||
|
||||
/**
|
||||
* @brief 在系统中删除当前执行的任务,该删除只是设置为僵尸进程
|
||||
|
||||
@@ -130,7 +130,7 @@ void sche_unlock(void) {
|
||||
/**
|
||||
* 获取调度器的锁计数
|
||||
*/
|
||||
uint32_t get_sche_lock_cn(void) {
|
||||
uint32_t sche_lock_cn_get(void) {
|
||||
return atomic_read(&(sys_tasks_info.sche_lock));
|
||||
}
|
||||
|
||||
|
||||
@@ -38,6 +38,7 @@ int test_mem(void)
|
||||
}
|
||||
MKRTOS_ASSERT(m_free_size == free_size());
|
||||
|
||||
|
||||
// void *user_malloc(uint32_t size,const char* name);
|
||||
// void user_free(void *mem);
|
||||
// void knl_mem_trace(void);
|
||||
|
||||
27
mkrtos_real/test/test_sched.c
Normal file
27
mkrtos_real/test/test_sched.c
Normal file
@@ -0,0 +1,27 @@
|
||||
#include <arch/atomic.h>
|
||||
#include <mkrtos/sched.h>
|
||||
#include "config.h"
|
||||
#include "knl_service.h"
|
||||
|
||||
static int test_sched(void)
|
||||
{
|
||||
kprint("=======start sched mem\n");
|
||||
sche_lock();
|
||||
MKRTOS_ASSERT(sche_lock_cn_get() == 1);
|
||||
sche_unlock();
|
||||
MKRTOS_ASSERT(sche_lock_cn_get() == 0);
|
||||
|
||||
for (int i = 0; i < 10; i++) {
|
||||
sche_lock();
|
||||
}
|
||||
MKRTOS_ASSERT(sche_lock_cn_get() == 10);
|
||||
for (int i = 0; i < 10; i++) {
|
||||
sche_unlock();
|
||||
}
|
||||
MKRTOS_ASSERT(sche_lock_cn_get() == 0);
|
||||
|
||||
kprint("=======end sched mem\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
INIT_REG(test_sched, INIT_TEST_LVL);
|
||||
Reference in New Issue
Block a user