Compare commits

...

90 Commits

Author SHA1 Message Date
openharmony_ci
c7da881469 !934 fix: 对外提供CONFIG_NFILE_DESCRIPTORS宏表示最大可打开fd数量
Merge pull request !934 from Hongjin Li/fs1
2022-12-06 12:10:31 +00:00
openharmony_ci
9cbddd412d !955 feat: 优化CPUP计算方式, 解耦系统调频
Merge pull request !955 from zhushengle/cpup
2022-12-06 07:11:08 +00:00
openharmony_ci
b50b5e7cba !953 对内核模块暴露OsMemNodeHead/OsMemPoolHead等结构体
Merge pull request !953 from Far/los_memory
2022-12-06 04:08:13 +00:00
zhushengle
974182d50c feat: 优化CPUP计算方式, 解耦系统调频
Close #I5R9XG

Signed-off-by: zhushengle <zhushengle@huawei.com>
Change-Id: I07cb388732b1190943374802f792d32bd666c06e
2022-12-06 10:41:20 +08:00
Hongjin Li
a3ce436841 fix: 提供CONFIG_NFILE_DESCRIPTORS宏标识最大可打开fd数量
提供CONFIG_NFILE_DESCRIPTORS宏,标识最大可打开fd数量。
提供FAT_MAX_OPEN_FILES宏,标识FAT文件系统中最大可打开fd数量。

如果只有FAT文件系统,那么CONFIG_NFILE_DESCRIPTORS等于FAT_MAX_OPEN_FILES。
如果有多个文件系统,比如fat+little+yaffs,那么CONFIG_NFILE_DESCRIPTORS应该定义为多个文件系统可打开fd数量之和。

BREAKING CHANGE:

对外提供的CONFIG_NFILE_DESCRIPTORS宏,用来标识最大可打开fd数量。

开发者可以在target_config.h中自定义CONFIG_NFILE_DESCRIPTORS和FAT_MAX_OPEN_FILES宏。

Close #I62WDU

Signed-off-by: Hongjin Li <lihongjin1@huawei.com>
2022-12-06 10:11:13 +08:00
openharmony_ci
588abc0645 !952 fix: 修复低功耗下时间更新缺陷
Merge pull request !952 from zhushengle/pm_timer
2022-12-05 13:02:02 +00:00
zhushengle
7657aadc20 feat: 修复低功耗下时间更新缺陷
1.注释说明低功耗框架中tickLock和tickUnlock两个钩子函数的要求
2.解决极端情况下OsTickTimerBaseReset断言失败的问题

BREAKING CHANGE:
修复低功耗下时间更新缺陷对外变更描述:

低功耗启用另一个低功耗timer时:

LosPmTickTimer 中tickLock函数的功能实现描述由原来的:暂停系统tick timer 修改为:关闭系统tick timer,并将timer的count值清零

LosPmTickTimer 中tickUnlock函数的功能实现描述由原来的:恢复系统tick timer 修改为:重新启动系统tick timer

Close #I5O80Z

Signed-off-by: zhushengle <zhushengle@huawei.com>
Change-Id: I2ee17518e4a388ff5a1f9e3d8d7c61c81aa3e569
2022-12-05 17:01:37 +08:00
Far
0d1c77c1e0 feat: 对内核模块暴露OsMemNodeHead/OsMemPoolHead
对内核其他模块暴露OsMemNodeHead/OsMemPoolHead等结构体,
以便于对堆内存管理的调测及管理。

fix #I64ONE

Signed-off-by: Far <yesiyuan2@huawei.com>
Change-Id: I2e47d90412368dfdc8d82e6b30c9196e1fdf42f1
2022-12-05 16:41:20 +08:00
openharmony_ci
795c2db917 !933 fs增加注册接口
Merge pull request !933 from wangchen/1124_m
2022-12-01 06:18:16 +00:00
wangchen
2f334bed21 feat: fs增加注册接口
方案描述:
增加注册机制, 并增加重复注册判断

BREAKING CHANGE:
fs增加注册接口
新增API:
int LOS_FsRegister(const char *fsType, const struct MountOps *fsMops,
                   const struct FileOps *fsFops, const struct FsManagement *fsMgt);

fix #I611L2
Signed-off-by: wangchen <wangchen240@huawei.com>
https://gitee.com/openharmony/kernel_liteos_m/issues/I611L2
2022-12-01 02:50:05 +00:00
openharmony_ci
9e4978f57f !947 fix: 使用LOSCFG_FS_FREE_HOOK释放内存
Merge pull request !947 from Hongjin Li/max_open_dirs
2022-12-01 02:50:03 +00:00
Hongjin Li
a859329f28 fix: 使用LOSCFG_FS_FREE_HOOK释放内存
文件系统中使用LOSCFG_FS_FREE_HOOK代替free()来释放内存。

close #I6412J

Signed-off-by: Hongjin Li <lihongjin1@huawei.com>
2022-12-01 09:33:32 +08:00
openharmony_ci
68b8deea89 !937 添加MAX_OPEN_DIRS宏,标识最大可打开dir数量
Merge pull request !937 from Hongjin Li/max_open_dirs
2022-11-29 11:38:36 +00:00
Hongjin Li
a288718c2c fix: 添加LOSCFG_MAX_OPEN_DIRS标识最大可打开dir数量
提供LOSCFG_MAX_OPEN_DIRS宏定义,标识最大可打开dir数量。新增g_dirNum静态变量,标识已打开的dir数量。
在opendir成功时g_dirNum++,在closedir成功时g_dirNum--。

BREAKING CHANGE:
新增LOSCFG_MAX_OPEN_DIRS宏定义,标识最大可打开dir数量。

fix: I62XEA

Signed-off-by: Hongjin Li <lihongjin1@huawei.com>
2022-11-29 19:05:00 +08:00
openharmony_ci
2e7b59b659 !944 feat: 回合liteos_m架构图
Merge pull request !944 from zhushengle/arch
2022-11-29 02:46:53 +00:00
zhushengle
0c577f3e7f feat: 回合liteos_m内核架构图
Close #I63MI5
Signed-off-by: zhushengle <zhushengle@huawei.com>
Change-Id: I69a978aee465662a9265426975f13e57b41972ab
2022-11-29 10:15:41 +08:00
openharmony_ci
019dab8db4 !941 文件系统提供动态内存分配器钩子
Merge pull request !941 from Far/LOS_FS_MALLOC
2022-11-28 14:36:29 +00:00
openharmony_ci
af6863f436 !940 vfs 分区格式化逻辑修改
Merge pull request !940 from wangchen/1128_m_part
2022-11-28 14:17:42 +00:00
Far
f190275664 feat: 文件系统提供动态内存分配器钩子
增加LOS_FS_MALLOC/LOS_FS_FREE宏以提供用户配置动态内存分配器的能力。
用户只需要在components/fs/vfs/los_fs.h中修改对应的函数即可。

BREAKING CHANGE:
文件系统提供动态内存分配器钩子
新增宏:
LOS_FS_MALLOC
LOS_FS_FREE

fix #I63IJW

Signed-off-by: Far <yesiyuan2@huawei.com>
Change-Id: I20cb41f621a2e22d74749583f546d550ba127b72
2022-11-28 20:02:20 +08:00
openharmony_ci
1bdee9f58e !939 feat: 更新PR模板, 添加对外变更
Merge pull request !939 from zhushengle/pr
2022-11-28 11:59:22 +00:00
wangchen
97a638bc1c fix: vfs 分区格式化逻辑修改
方案描述:
1,删除fat分区时调用的adddevice的动作
2,修改格式化的判断逻辑

fix #I63FDV
Signed-off-by: wangchen <wangchen240@huawei.com>
2022-11-28 03:53:54 +00:00
zhushengle
55238c805a feat: 更新PR模板, 添加对外变确认项
在PR模板中添加对外变更的确认选项

fix #I636LO

Signed-off-by: zhushengle <zhushengle@huawei.com>
Change-Id: I96025b27f771f86cc03c8e60d0e307a9a6c0e404
2022-11-26 17:17:02 +08:00
openharmony_ci
0841ece718 !930 Fix : 内核告警清理
Merge pull request !930 from yinjiaming/fix
2022-11-23 04:09:25 +00:00
yinjiaming
a4087a6537 Fix: 内核告警清理
消除了多余的空格

Signed-off-by: yinjiaming <yinjiaming@huawei.com>
Change-Id: Ibe90fcf8c46ef9a60c0a8f4dbba07d399e139b8c
2022-11-23 10:49:31 +08:00
openharmony_ci
9f19fd2e7a !918 Fix : POSIX 测试用例补充
Merge pull request !918 from yinjiaming/test-3
2022-11-22 06:58:12 +00:00
openharmony_ci
c10037d379 !877 更新liteos_m内核架构图
Merge pull request !877 from zhushengle/arch
2022-11-22 03:44:02 +00:00
yinjiaming
b483627ec7 fix: POSIX 测试用例后续补充
【背景】
kernel_litos_m 中需要补充 POSIX 相关的测试用例

【修改方案】
从 A 核中移植了一部分的POSIX 相关的测试用例
到 sample/posix/mqueue 目录下

【影响】
对现有的产品编译不会有影响

Signed-off-by: yinjiaming <yinjiaming@huawei.com>
Change-Id: I64efeb7d3ae3dbd966b716bf8e296a9eb0f5db06
2022-11-21 19:29:44 +08:00
openharmony_ci
d120f1e57a !921 其他分区已mount时会引起格式化失败
Merge pull request !921 from wangchen/1117_m
2022-11-18 09:34:41 +00:00
openharmony_ci
765add9660 !917 告警清理
Merge pull request !917 from 乔克叔叔/master
2022-11-18 09:15:46 +00:00
openharmony_ci
a650df0575 !916 修复用例告警
Merge pull request !916 from xuxinyu/1116
2022-11-18 09:14:03 +00:00
wangchen
08436dec9e fix: 其他分区已mount时会引起格式化失败
【背景】其他分区已mount时会引起格式化失败

【修改方案】
1, 格式化时判断方式修改为路径

【影响】
对现有的产品编译不会有影响。
re #I61P4K
Signed-off-by: wangchen <wangchen240@huawei.com>
2022-11-18 06:31:12 +00:00
openharmony_ci
0818b28aa7 !919 fix:逗号格式错误
Merge pull request !919 from Hongjin Li/warning
2022-11-17 12:57:15 +00:00
Hongjin Li
2dc3998956 fix: add space after comma
Signed-off-by: Hongjin Li <lihongjin1@huawei.com>
2022-11-17 20:15:53 +08:00
zhushengle
266a49fb88 feat: 更新liteos_m内核架构图
Close #I61OZZ

Signed-off-by: zhushengle <zhushengle@huawei.com>
Change-Id: I90afb1c83a9a34597e7b9699a784ad0fbff30f81
2022-11-17 18:41:40 +08:00
liuwenxin
fa6f0c393d fix:告警清理
Signed-off-by: liuwenxin <liuwenxin11@huawei.com>
2022-11-17 17:23:44 +08:00
openharmony_ci
3019311435 !910 Fix : POSIX 测试用例补充
Merge pull request !910 from yinjiaming/test-2
2022-11-16 09:50:31 +00:00
xuxinyu
b25148107b fix:修复用例告警
Signed-off-by: xuxinyu <xuxinyu6@huawei.com>
Change-Id: Ide6f04adcd3bb12ae296f981cab84f9d7ce867fc
2022-11-16 15:55:34 +08:00
openharmony_ci
aee957bb1f !909 修复mount接口对MS_REMOUNT的支持
Merge pull request !909 from Far/master
2022-11-15 14:17:19 +00:00
Far
64d15df9ea fix: fix the MS_REMOUNT support
The mount interface can't deal with MS_REMOUNT flag now, fix it.

Signed-off-by: Far <yesiyuan2@huawei.com>
Change-Id: Id0960c8d92ce767b8d8ef98b3ba2e1d1ab7db15d
2022-11-15 17:05:21 +08:00
yinjiaming
8e58b984ea fix: POSIX 测试用例后续补充
【背景】
kernel_litos_m 中需要补充 POSIX 相关的测试用例

【修改方案】
从 A 核中移植了一部分的POSIX 相关的测试用例
到 sample/posix/mqueue 目录下

【影响】
对现有的产品编译不会有影响

Signed-off-by: yinjiaming <yinjiaming@huawei.com>
Change-Id: I64efeb7d3ae3dbd966b716bf8e296a9eb0f5db06
2022-11-15 16:54:28 +08:00
openharmony_ci
be1267fafa !903 fix: 修复测试用例断言宏使用不规范的问题
Merge pull request !903 from Zhaotianyu/20221110test_fix_assert
2022-11-14 09:41:12 +00:00
openharmony_ci
6cb544b158 !892 m告警清理
Merge pull request !892 from 乔克叔叔/master
2022-11-14 08:50:22 +00:00
openharmony_ci
5e8225273f !904 Fix : 内核告警清理
Merge pull request !904 from yinjiaming/fix
2022-11-14 08:35:08 +00:00
openharmony_ci
aec7a45411 !894 Fix : POSIX 测试用例补充
Merge pull request !894 from yinjiaming/test-1
2022-11-14 08:34:29 +00:00
liuwenxin
2806c4af75 Fix:m核告警清理
Signed-off-by: liuwenxin <liuwenxin11@huawei.com>
2022-11-11 17:40:25 +08:00
yinjiaming
7e442ddd61 fix: POSIX 测试用例后续补充
【背景】
kernel_litos_m 中需要补充 POSIX 相关的测试用例

【修改方案】
从 A 核中移植了一部分的POSIX 相关的测试用例
到 sample/posix/mqueue 目录下

【影响】
对现有的产品编译不会有影响

Signed-off-by: yinjiaming <yinjiaming@huawei.com>
Change-Id: I64efeb7d3ae3dbd966b716bf8e296a9eb0f5db06
2022-11-11 11:56:13 +08:00
openharmony_ci
527cec6e27 !906 RISC-V架构解依赖平台soc.h
Merge pull request !906 from zhushengle/soc
2022-11-10 12:47:40 +00:00
zhushengle
d68b5f0ab3 task: RISC-V架构解依赖平台soc.h
Close #I5M7JE

Signed-off-by: zhushengle <zhushengle@huawei.com>
Change-Id: I98f9f2a5d69576540a270778bf37899594c527f2
2022-11-10 18:45:27 +08:00
openharmony_ci
1cd2ae7b4e !901 risc-v系统异常时无法输出异常信息
Merge pull request !901 from zhushengle/medeleg
2022-11-10 10:30:50 +00:00
arvinzzz
27ed27eb89 fix: 修复测试用例断言宏使用不规范的问题
Signed-off-by: arvinzzz <zhaotianyu9@huawei.com>
2022-11-10 17:45:43 +08:00
yinjiaming
098c5ea24d fix: 内核告警清理
Change-Id: Ic6d335964da545bc71edd40669c82b6f85e1bad6
Signed-off-by: yinjiaming <yinjiaming@huawei.com>
2022-11-10 17:32:52 +08:00
zhushengle
914913fab6 task: risc-v系统异常时取消对medeleg寄存器的保存
部分开源架构不支持该寄存器,且非常用寄存器

Close #I60IS5
Signed-off-by: zhushengle <zhushengle@huawei.com>
Change-Id: I8db31f84a24cc6143513c725691e4ba780ca99e9
2022-11-10 16:29:27 +08:00
openharmony_ci
2f08268983 !895 fix: buffersize paramter type error
Merge pull request !895 from Hongjin Li/fix
2022-11-09 09:29:57 +00:00
Hongjin Li
807c7e64cb fix: buffersize parameter type error
Signed-off-by: Hongjin Li <lihongjin1@huawei.com>
2022-11-09 16:49:59 +08:00
openharmony_ci
fc87e459d1 !891 在LOS_QueueReadCopy 和 LOS_QueueWriteCopy中增加hook函数
Merge pull request !891 from Hongjin Li/add_hook_call
2022-11-09 08:41:16 +00:00
lihongjin
c3d75f64b1 feat: add hook call in LOS_QueueReadCopy and LOS_QueueWriteCopy
Signed-off-by: lihongjin <lihongjin1@huawei.com>
Change-Id: I0c8ecb6e364d8e01b48f78847c25da6bc4cb961c
2022-11-08 18:32:41 +08:00
openharmony_ci
f447d15e78 !893 M核fs用例整改
Merge pull request !893 from wangchen/1108_test
2022-11-08 08:04:55 +00:00
wangchen
642d5ef709 fix: M核fs用例整改
【背景】M核fs用例整改

【修改方案】
1,增加部分判断,适配fatfs
2,增加部分接口

【影响】
对现有的产品编译不会有影响。
re #I5Z4DL
Signed-off-by: wangchen <wangchen240@huawei.com>
2022-11-08 07:26:06 +00:00
openharmony_ci
74bbfa4893 !853 fix:修复文档中失效链接
Merge pull request !853 from zhangdengyu/fix_links_1019
2022-11-08 03:31:18 +00:00
openharmony_ci
fe5a091ca2 !864 feat: 支持mutex trace
Merge pull request !864 from zhangdengyu/add_mutex_trace_1028
2022-11-08 03:07:54 +00:00
openharmony_ci
c83b98ecbf !868 告警清理
Merge pull request !868 from 乔克叔叔/master
2022-11-07 10:57:34 +00:00
openharmony_ci
c9a96bc4b3 !886 cortex-m4支持iar编译器的gn适配
Merge pull request !886 from yiweiniunan/master
2022-11-07 10:34:19 +00:00
yiweiniunan
62cd8fec46 cortex-m4支持iar编译器的gn适配
Signed-off-by: yiweiniunan <michael.likai@huawei.com>
2022-11-07 16:15:29 +08:00
liuwenxin
8b54493665 fix:告警清理
Signed-off-by: liuwenxin <liuwenxin11@huawei.com>
2022-11-07 14:58:48 +08:00
zhangdengyu
a940dda69a feat: 增加mutex trace功能
Close: #I5YJOZ

Signed-off-by: zhangdengyu <zhangdengyu2@huawei.com>
Change-Id: Id36ed4f4d23b9aa59ae9ee8cdb17c06d7e3c151b
2022-11-07 08:42:06 +08:00
openharmony_ci
1bc63d743b !881 feat: 提供死机场景下dump文件能力
Merge pull request !881 from Zhaotianyu/20221105vfs_lock
2022-11-07 00:41:11 +00:00
arvinzzz
474201593d feat: 提供死机场景下dump文件的能力
死机场景下,vfs层锁会放开,提供dump文件的能力

Signed-off-by: arvinzzz <zhaotianyu9@huawei.com>
Change-Id: Id8c9e63fbf011dbc6690b9b4557bd3370353bf21
2022-11-05 17:58:37 +08:00
openharmony_ci
3f54fdc898 !846 修复shell删除命令误删目录的问题
Merge pull request !846 from 方烨/master
2022-11-04 08:24:17 +00:00
openharmony_ci
8ac6771e0d !869 Fix : 给LOS_MuxDelete 函数前添加(VOID)
Merge pull request !869 from yinjiaming/fix
2022-11-04 08:23:38 +00:00
openharmony_ci
7101ddbeb8 !874 feat: pm idle添加到menuconfig中
Merge pull request !874 from zhushengle/pm_ilde
2022-11-03 14:10:34 +00:00
openharmony_ci
abbed4430e !847 解决部分平台ping失败
Merge pull request !847 from huohongpeng/ping_checksum
2022-11-03 14:05:50 +00:00
zhushengle
98d20e90ed feat: pm idle添加到menuconfig中
Close #I5ZD5L
Signed-off-by: zhushengle <zhushengle@huawei.com>
Change-Id: Ibdedff3043a0902aa3cd9539497ef97fb6a1ce6c
2022-11-03 21:32:45 +08:00
openharmony_ci
9767191392 !859 Fix : POSIX 测试用例补充
Merge pull request !859 from yinjiaming/test-4
2022-11-03 02:17:32 +00:00
openharmony_ci
e540254ed9 !862 feature:支持厂商自定义malloc替换系统默认实现
Merge pull request !862 from Zhaotianyu/20221028iar_malloc
2022-11-01 13:48:15 +00:00
yinjiaming
ad4ef11410 fix: POSIX 测试用例后续补充
【背景】
kernel_litos_m 中需要补充 POSIX 相关的测试用例

【修改方案】
从 A 核中移植了一部分的POSIX 相关的测试用例
到 sample/posix 目录下

【影响】
对现有的产品编译不会有影响

Signed-off-by: yinjiaming <yinjiaming@huawei.com>
Change-Id: I65adfd00faec185bcad3c1e38e305ce9e8cb9346
2022-11-01 16:26:56 +08:00
yinjiaming
20ffd89865 fix: 给函数LOS_MutexDelete 前添加(VOID)
Signed-off-by: yinjiaming <yinjiaming@huawei.com>
Change-Id: I49a7c305e955bccca78b80ddeea66330e8b03ac0
2022-11-01 15:43:18 +08:00
arvinzzz
ae8d4fd275 feature: 支持厂商定制malloc替换系统默认实现
malloc的相关支持可以通过make menuconfig配置

close: #I5YBPE

Signed-off-by: arvinzzz <zhaotianyu9@huawei.com>
Change-Id: Ic40968aa83f43f539f7551c1dcec05f4f9832983
2022-10-28 18:53:53 +08:00
openharmony_ci
972d765c6e !861 Test : POSIX 测试用例补充
Merge pull request !861 from vincent-zhang/myfeature
2022-10-28 02:09:45 +00:00
vincent
47f883c11a zhangadong@huawei.com
Signed-off-by: vincent <zhangadong@huawei.com>
2022-10-28 09:33:36 +08:00
openharmony_ci
478b41b457 !857 Fix : POSIX 测试用例补充
Merge pull request !857 from yinjiaming/test-2
2022-10-26 06:33:41 +00:00
yinjiaming
69d17d522c fix: POSIX 测试用例后续补充
【背景】
kernel_litos_m 中需要补充 POSIX 相关的测试用例

【修改方案】
从 A 核中移植了一部分的POSIX 相关的测试用例
到 sample/posix 目录下

【影响】
对现有的产品编译不会有影响

Signed-off-by: yinjiaming <yinjiaming@huawei.com>
Change-Id: Ib8ab772f9893e243ace9319cb7af1486a6bd2937
2022-10-25 15:45:33 +08:00
fangye
d4bfb577ef fix: 修复shell删除命令误删目录的问题
Signed-off-by: fangye <fangye@talkweb.com.cn>
Change-Id: Ia8f26ff4b250a6540f5644e2dd38fb22cd85d326
2022-10-25 12:19:46 +08:00
openharmony_ci
6e6cbe5de6 !855 Fix : POSIX 测试用例补充
Merge pull request !855 from yinjiaming/test-1
2022-10-24 11:11:57 +00:00
yinjiaming
383a1d23e9 fix: POSIX 测试用例补充
【背景】
kernel_litos_m 中需要补充 POSIX 相关的测试用例

【修改方案】
从 A 核中移植了一部分的POSIX 相关的测试用例
到 sample/posix 目录下

【影响】
对现有的产品编译不会有影响

Signed-off-by: yinjiaming <yinjiaming@huawei.com>
Change-Id: Ib8ab772f9893e243ace9319cb7af1486a6bd2937
2022-10-24 15:39:20 +08:00
openharmony_ci
b24353cf4b !854 Fix : 使用 newlibc 编译测试用例时报错
Merge pull request !854 from yinjiaming/master
2022-10-21 09:58:50 +00:00
openharmony_ci
f1ad086665 !842 cmsis测试用例补充
Merge pull request !842 from 乔克叔叔/branchname
2022-10-21 09:12:17 +00:00
yinjiaming
8fff50f59f fix: newlibc 编译错误修正
【背景】
使用newlibc 编译测试用例时会有编译错误

【修改方案】
删去了 newlibc 中没有的宏定义

【影响】
对现有的产品编译不会有影响。

Signed-off-by: yinjiaming <yinjiaming@huawei.com>
Change-Id: Id753640253e1b297654b3e523ddd5ca0abdca698
2022-10-20 19:52:32 +08:00
zhangdengyu
373d4f5649 fix: 修复文档中失效链接
Close: #I5WGWU

Signed-off-by: zhangdengyu <zhangdengyu2@huawei.com>
Change-Id: I8c37da09e85e823edd59ebf65a3e284596b7bef9
2022-10-19 10:21:05 +08:00
Hongpeng Huo
3c8d20a89e fix: icmp hardware checksum failed for dwc gmac ip core
Signed-off-by: Hongpeng Huo <hongpeng.huo@hpmicro.com>
2022-10-17 20:33:11 +08:00
wenxin-liu_admin
a502a0917c :cmsis 测试用例补充
Signed-off-by: wenxin-liu_admin <liuwenxin11@huawei.com>
Change-Id: Iaa133871c465e20170a3bf2204cb1c6ba40fda72
2022-09-30 15:53:58 +08:00
209 changed files with 11533 additions and 803 deletions

View File

@@ -10,6 +10,12 @@
### 测试用例(新增、改动、可能影响的功能) ### 测试用例(新增、改动、可能影响的功能)
### 是否涉及对外变更典型的如对外API规格变更、新增对外接口等等
必须选择一项在MarkDown模式下用[x]替换[ ]即可勾选对应选项):
- [ ] 是,涉及对外变更: 需要在commit message中按【[模板要求](https://gitee.com/openharmony/kernel_liteos_m/wikis/Commit%20message%E8%A7%84%E8%8C%83)】描述变更点
- [ ] 否,不涉及对外变更
### 是否需要同步至release3.0LTS ... )分支? ### 是否需要同步至release3.0LTS ... )分支?
必须选择一项在MarkDown模式下用[x]替换[ ]即可勾选对应选项): 必须选择一项在MarkDown模式下用[x]替换[ ]即可勾选对应选项):

465
CHANGELOG.md Normal file
View File

@@ -0,0 +1,465 @@
# (2022-03-30)
### Bug Fixes
* c-sky等芯片架构的BUILD.gn优化 ([3311d73](https://gitee.com/openharmony/kernel_liteos_m/commits/3311d73406b68d289b6f715a099e90f62c86abd1)), closes [#I4D129](https://gitee.com/openharmony/kernel_liteos_m/issues/I4D129)
* change the sensitive words ([8e2248c](https://gitee.com/openharmony/kernel_liteos_m/commits/8e2248c062aaca2444cc1001873fe8e8d8cdd3c6)), closes [#I4K7](https://gitee.com/openharmony/kernel_liteos_m/issues/I4K7)
* cortex-m55栈优化 ([59e9c6e](https://gitee.com/openharmony/kernel_liteos_m/commits/59e9c6ed73caeeed56081a768198eccc7448df6c)), closes [#I4](https://gitee.com/openharmony/kernel_liteos_m/issues/I4)
* csky等新增模块的HalTickStart函数定义和实现不一致 ([07ab6a5](https://gitee.com/openharmony/kernel_liteos_m/commits/07ab6a5b77c6955f6093beeab976bdc1b32d1db9)), closes [#I4D1](https://gitee.com/openharmony/kernel_liteos_m/issues/I4D1)
* FD_SETSIZE compatible newlibc ([82c6d5f](https://gitee.com/openharmony/kernel_liteos_m/commits/82c6d5f17478fb47ea5977a32fb76d783ee3e815))
* fix compile warning saying dereference void * pointer ([29126a9](https://gitee.com/openharmony/kernel_liteos_m/commits/29126a98fe7a8f75695910bdf8fa1ccc6ff67288))
* gcc编译testsuite编译问题修复 ([f7d26b8](https://gitee.com/openharmony/kernel_liteos_m/commits/f7d26b8e12fb1ba4bebe6c0fc9ca9e392537419f)), closes [#I4](https://gitee.com/openharmony/kernel_liteos_m/issues/I4)
* Kconfig中打开littlefs选项默认关联打开LOSCFG_SUPPORT_LITTLEFS宏 ([b2bcab3](https://gitee.com/openharmony/kernel_liteos_m/commits/b2bcab3a5bd794c86dd4d93b1b5aeca2d097289b)), closes [#I4ENQ1](https://gitee.com/openharmony/kernel_liteos_m/issues/I4ENQ1)
* kernel接口融合添加/修改kernel函数 ([cee9714](https://gitee.com/openharmony/kernel_liteos_m/commits/cee9714a90f2660a0b4455f4f5a2fc42870a6aa5))
* L0 pthread_cond_timedwait接口实现存在的几个问题 ([2219c32](https://gitee.com/openharmony/kernel_liteos_m/commits/2219c32784071b6c37ea57185382e3228ed4b0a7)), closes [#I4N9P8](https://gitee.com/openharmony/kernel_liteos_m/issues/I4N9P8)
* liteos_kernel_only=true编译内核报错 ([adc2105](https://gitee.com/openharmony/kernel_liteos_m/commits/adc21052b2b9b55de9fc493cf74645f470edf9b5)), closes [#I4O204](https://gitee.com/openharmony/kernel_liteos_m/issues/I4O204)
* los_exc.S中_ExcInMsp主栈中异常处理函数中异常返回类型错误 ([c51df7a](https://gitee.com/openharmony/kernel_liteos_m/commits/c51df7a94c1f21803db25f46a73a7fb291588eda)), closes [#I4EJI4](https://gitee.com/openharmony/kernel_liteos_m/issues/I4EJI4)
* los_interrupt.c存在未使用的参数编译出错 ([5af4c2e](https://gitee.com/openharmony/kernel_liteos_m/commits/5af4c2e2139cabe49049283f7a4280460bbf353a)), closes [#I4](https://gitee.com/openharmony/kernel_liteos_m/issues/I4)
* LOS_Panic接口中增加需要增加LOS_BackTrace(),方便定位主动异常位置 ([f51d675](https://gitee.com/openharmony/kernel_liteos_m/commits/f51d675fee217e0ad519f2fa79f70b033f313dce)), closes [#I4](https://gitee.com/openharmony/kernel_liteos_m/issues/I4)
* los_trace.h接口注释错误修正 ([693468e](https://gitee.com/openharmony/kernel_liteos_m/commits/693468e5274af310721f5962602a915d701a7bf0)), closes [#I4](https://gitee.com/openharmony/kernel_liteos_m/issues/I4)
* m4核在任务中异常时backtrace使用的是MSP所在的栈而不是PSP所在的栈 ([3e8aea2](https://gitee.com/openharmony/kernel_liteos_m/commits/3e8aea224e481322efef9397e4aafc3450a09d28)), closes [#I4D7](https://gitee.com/openharmony/kernel_liteos_m/issues/I4D7)
* M核posix接口fs模块用例完善 ([ee380fb](https://gitee.com/openharmony/kernel_liteos_m/commits/ee380fb9be45ef033979ec3b8875d980b7f13198)), closes [#I4L7](https://gitee.com/openharmony/kernel_liteos_m/issues/I4L7)
* optimize default configuration ([b2e3849](https://gitee.com/openharmony/kernel_liteos_m/commits/b2e3849bfbd470981602b0dc02f47bffb38bfe11)), closes [#I4FSC9](https://gitee.com/openharmony/kernel_liteos_m/issues/I4FSC9)
* OsGetAllTskInfo调用和异常时无任务回调函数地址 ([1c605a3](https://gitee.com/openharmony/kernel_liteos_m/commits/1c605a338ad2317aeb464bdac85df5b9a79c99fd)), closes [#I4MG2](https://gitee.com/openharmony/kernel_liteos_m/issues/I4MG2)
* pm codex告警清零 ([9666380](https://gitee.com/openharmony/kernel_liteos_m/commits/96663805ecfd3248e33b4deb877c8d55cc4e8eec)), closes [#I4](https://gitee.com/openharmony/kernel_liteos_m/issues/I4)
* pm模块解冻线程时存在删除空链表且时间片频繁唤醒系统 ([9f185b5](https://gitee.com/openharmony/kernel_liteos_m/commits/9f185b5b52ed9506a4913f233c9ddfe45452ec05)), closes [#I4](https://gitee.com/openharmony/kernel_liteos_m/issues/I4)
* **posix unittest:** posix unittest 融合 ([ad6f249](https://gitee.com/openharmony/kernel_liteos_m/commits/ad6f249d1ea878f06864d79bdbed772b21eeac49))
* **posix:** posix兼容回退 ([207efc1](https://gitee.com/openharmony/kernel_liteos_m/commits/207efc15b859fe18d8b1dac2a3da9d7a5831aa6e))
* **posix:** posix接口融合接口规范兼容性修改 ([e0b1275](https://gitee.com/openharmony/kernel_liteos_m/commits/e0b12758da4a25e42110ba32da25b6d18ebed8ef))
* **posix接口融合:** posix接口融合接口规范兼容性修改 ([4b607fd](https://gitee.com/openharmony/kernel_liteos_m/commits/4b607fd0740a5379cd373890482235845d782b62))
* posix线程和LOS_TaskCreate任务不兼容补齐接口防护防止访问野指针 ([60805e1](https://gitee.com/openharmony/kernel_liteos_m/commits/60805e1a7c3736db86695ed86cd03cfaab70a427))
* pr模板补充说明 ([7b86f69](https://gitee.com/openharmony/kernel_liteos_m/commits/7b86f69cc0ccd5512b69fd3a1181b3440747ddb2))
* ReadMe中无对动态加载模块待加载的共享库的限制说明。 ([f86b971](https://gitee.com/openharmony/kernel_liteos_m/commits/f86b97180f97903bb2def271b7b11fc1ae1bf9bb)), closes [#I4ICK8](https://gitee.com/openharmony/kernel_liteos_m/issues/I4ICK8)
* shell 输入不识别命令时内存泄漏 ([0245b1a](https://gitee.com/openharmony/kernel_liteos_m/commits/0245b1a7b24fd36d23f9602d0755b274581a84ce)), closes [#I4UR9](https://gitee.com/openharmony/kernel_liteos_m/issues/I4UR9)
* **shell:** cat针对大文件无法工作 ([d518bad](https://gitee.com/openharmony/kernel_liteos_m/commits/d518bad0dc7dd9e3fbb45423a7db5cb8c1c922dc)), closes [#I4J4](https://gitee.com/openharmony/kernel_liteos_m/issues/I4J4)
* shell模块task命令踩内存问题修改 ([6ffd55d](https://gitee.com/openharmony/kernel_liteos_m/commits/6ffd55dcd07ce17b693a97bb678668f763480e4d)), closes [#I4A70](https://gitee.com/openharmony/kernel_liteos_m/issues/I4A70)
* switch inet_addr to a function ([b30e913](https://gitee.com/openharmony/kernel_liteos_m/commits/b30e9139d5502acab8c36ae9a56d4cd640786c44)), closes [#I4G4I4](https://gitee.com/openharmony/kernel_liteos_m/issues/I4G4I4)
* **testsuites:** cpup和测试套解耦 ([692651f](https://gitee.com/openharmony/kernel_liteos_m/commits/692651fe40f668f19b479186e52fea34d092b458))
* tick timer时钟频率赋值修改为运行时赋值 ([ae02afc](https://gitee.com/openharmony/kernel_liteos_m/commits/ae02afc8504f64ff6bc09828f55e9602bcbcae56)), closes [#I4](https://gitee.com/openharmony/kernel_liteos_m/issues/I4)
* tick中断处理时无挂起任务时应更新当前运行任务的时间片, 并触发一次调度 ([ea12d40](https://gitee.com/openharmony/kernel_liteos_m/commits/ea12d40caf1301b4a7b6d60a2c599ceff4746c90)), closes [#I4](https://gitee.com/openharmony/kernel_liteos_m/issues/I4)
* **time_func_test_01.c:** 修复testTimes测试单板配置LOSCFG_BASE_CORE_TICK_PER_SECOND = 1000的问题 ([5c982f1](https://gitee.com/openharmony/kernel_liteos_m/commits/5c982f1087f95174f2836c72648eab58adf37fd7))
* 中断向量表对齐大小支持可配置 ([cf9c838](https://gitee.com/openharmony/kernel_liteos_m/commits/cf9c8387e3785d994aacf948b7c1b61324a3dd63)), closes [#I4M20](https://gitee.com/openharmony/kernel_liteos_m/issues/I4M20)
* 优化trace buffer初始化删除swtmr 桩中的无效参数 ([afbc9a5](https://gitee.com/openharmony/kernel_liteos_m/commits/afbc9a593b61461072556cb5531d90b30ce2e394)), closes [#I4DPR7](https://gitee.com/openharmony/kernel_liteos_m/issues/I4DPR7)
* 优化低功耗流程 ([c6600d9](https://gitee.com/openharmony/kernel_liteos_m/commits/c6600d9dddb666f397ba659d47d64f334691af6b)), closes [#I46](https://gitee.com/openharmony/kernel_liteos_m/issues/I46)
* 修复arch目录调整影响到的target目录下的文件 ([d5725b2](https://gitee.com/openharmony/kernel_liteos_m/commits/d5725b22644da8ab3e719169230303e44c7d8750)), closes [#I4JM7](https://gitee.com/openharmony/kernel_liteos_m/issues/I4JM7)
* 修复cortex-m系列系统提供的timer在低频下时间不准的问题 ([3e569ba](https://gitee.com/openharmony/kernel_liteos_m/commits/3e569bac587d90dcd21aff7d8ec53216dfbb8f1c)), closes [#I4](https://gitee.com/openharmony/kernel_liteos_m/issues/I4)
* 修复hook层LOS_HOOK_TYPE_SEM_PEND的runningTask入参可能为空 ([3fd22ac](https://gitee.com/openharmony/kernel_liteos_m/commits/3fd22ac2b0b4c690669a659246aba099fd4311ec)), closes [#I4BU4](https://gitee.com/openharmony/kernel_liteos_m/issues/I4BU4)
* 修复irqNum = HwiNumGet()编译错误的问题 ([16e87d7](https://gitee.com/openharmony/kernel_liteos_m/commits/16e87d78d89bec7d85c076fc738ed4ad0614b865)), closes [#I4S81](https://gitee.com/openharmony/kernel_liteos_m/issues/I4S81)
* 修复Kconfig信息错误 ([bb04582](https://gitee.com/openharmony/kernel_liteos_m/commits/bb045829104211522cd12a7273d5853400c1ea26)), closes [#I4MZ1](https://gitee.com/openharmony/kernel_liteos_m/issues/I4MZ1)
* 修复L0_Emulator 门禁高概率失败的问题 ([7ad2f62](https://gitee.com/openharmony/kernel_liteos_m/commits/7ad2f62a03481a3919fef1f1e46e4c9677b1e65c)), closes [#I4NB0](https://gitee.com/openharmony/kernel_liteos_m/issues/I4NB0)
* 修复liteos-m在iar环境下的编译问题 ([4c4784e](https://gitee.com/openharmony/kernel_liteos_m/commits/4c4784e33d7944e7850009be192375aaa6e2b125)), closes [#I4Q5Q5](https://gitee.com/openharmony/kernel_liteos_m/issues/I4Q5Q5)
* 修复los_interrupt.c文件中HalHwiInit函数里未使能未对齐异常问题 ([d32e25f](https://gitee.com/openharmony/kernel_liteos_m/commits/d32e25f3ae8e8e5ec24effa98dc8f0b3ba94d0c1)), closes [#I4](https://gitee.com/openharmony/kernel_liteos_m/issues/I4)
* 修复newlib缺省PTHREAD_KEYS_MAX 问题 ([65f04bf](https://gitee.com/openharmony/kernel_liteos_m/commits/65f04bf093376a478e9585dadfc1238158cc3641)), closes [#I4OX47](https://gitee.com/openharmony/kernel_liteos_m/issues/I4OX47)
* 修复OsQueueMailFree提早释放内存的问题 ([ec88d16](https://gitee.com/openharmony/kernel_liteos_m/commits/ec88d1628937b3def6dd613246116f6bfa4141eb))
* 修复pm编译告警导致内核编译失败 ([18b0524](https://gitee.com/openharmony/kernel_liteos_m/commits/18b052458e1cea113df7a6bb4798a6d5e1eb751e)), closes [#I49](https://gitee.com/openharmony/kernel_liteos_m/issues/I49)
* 修复pthread 编译告警 ([cc57f81](https://gitee.com/openharmony/kernel_liteos_m/commits/cc57f81ab85a5eb9bb4be9bd7d2863978996bcf3)), closes [#I4U16](https://gitee.com/openharmony/kernel_liteos_m/issues/I4U16)
* 修复pthread_create相关问题 ([cd949dd](https://gitee.com/openharmony/kernel_liteos_m/commits/cd949ddae0aa4e7291b0b7f6ba83c2034cdf1301)), closes [#I4P78](https://gitee.com/openharmony/kernel_liteos_m/issues/I4P78)
* 修复pthread_create行为与posix不一致问题 ([2b1e5a7](https://gitee.com/openharmony/kernel_liteos_m/commits/2b1e5a7a130fbca1b86a787b54f474e183541d6d)), closes [#I49W9](https://gitee.com/openharmony/kernel_liteos_m/issues/I49W9)
* 修复readme中文档链接错误 ([8ee70a0](https://gitee.com/openharmony/kernel_liteos_m/commits/8ee70a0f8f856da29139a36ba6f8589201cdb109)), closes [#I4FD5](https://gitee.com/openharmony/kernel_liteos_m/issues/I4FD5)
* 修复risc-v异常时异常信息混乱且backtrace无法输出的问题 ([0fb49d4](https://gitee.com/openharmony/kernel_liteos_m/commits/0fb49d4422245e83c2435468eb7f2690f2e2c6e4)), closes [#I4](https://gitee.com/openharmony/kernel_liteos_m/issues/I4)
* 修复shcmd.h需要用宏包起来的问题 ([a7a8a62](https://gitee.com/openharmony/kernel_liteos_m/commits/a7a8a62bcb7398b4194b37f62098da9cb1ce717e)), closes [#I45FU2](https://gitee.com/openharmony/kernel_liteos_m/issues/I45FU2)
* 修复shell 模块存在大量的编译告警及codeCheck。 ([e0d8b53](https://gitee.com/openharmony/kernel_liteos_m/commits/e0d8b5328f53dcef9427a34e8b0462250bb6a40f)), closes [#I48V2](https://gitee.com/openharmony/kernel_liteos_m/issues/I48V2)
* 修复任务栈对齐问题及补充posix和cmsis测试用例 ([ed863e9](https://gitee.com/openharmony/kernel_liteos_m/commits/ed863e90dd9aceb5d3b6d92b0a94703101b83f80))
* 修复公版gcc编译内核调用calloc崩溃 ([8d0ced2](https://gitee.com/openharmony/kernel_liteos_m/commits/8d0ced206951f35d5caab61969344b0ab259e5fb)), closes [#I4OFG6](https://gitee.com/openharmony/kernel_liteos_m/issues/I4OFG6)
* 修复未使用的参数和类型比较编译报错问题 ([21b46e8](https://gitee.com/openharmony/kernel_liteos_m/commits/21b46e82f31030703d052369701f4d6d736a4a86))
* 修复调度时间最大值不一致问题 ([9f393bc](https://gitee.com/openharmony/kernel_liteos_m/commits/9f393bcc6df592efb6940e9864ff93e932ae59ad))
* 修正liteos-m内核README不准确信息 ([0e067b2](https://gitee.com/openharmony/kernel_liteos_m/commits/0e067b239354c28e16b05489274b33051d002508)), closes [#I4](https://gitee.com/openharmony/kernel_liteos_m/issues/I4)
* 修正部分编码风格问题 ([91903a3](https://gitee.com/openharmony/kernel_liteos_m/commits/91903a37165ef364750916104be4f7dfd1d8f9a6)), closes [#I4K8M7](https://gitee.com/openharmony/kernel_liteos_m/issues/I4K8M7)
* 内核ERR打印线程信息不方便问题定位。 ([232fec2](https://gitee.com/openharmony/kernel_liteos_m/commits/232fec27ac8cd2f46b5a2f5cfbe4677d0e287314)), closes [#I4](https://gitee.com/openharmony/kernel_liteos_m/issues/I4)
* 内源检视问题修复 ([c24363b](https://gitee.com/openharmony/kernel_liteos_m/commits/c24363bc50364b0be1fba3b993a83c6936fc3d08))
* 删除C文件中无用的__cplusplus ([7fe3aad](https://gitee.com/openharmony/kernel_liteos_m/commits/7fe3aaddf56b300ffcb2b186ae01ed64bef1c069)), closes [#I4D0](https://gitee.com/openharmony/kernel_liteos_m/issues/I4D0)
* 删除OsMemboxExcInfoGetSub内存调测方法中多余的赋值语句。 ([94db0fe](https://gitee.com/openharmony/kernel_liteos_m/commits/94db0fe7a30edaa10786101f1ef662987a27734a)), closes [#I4](https://gitee.com/openharmony/kernel_liteos_m/issues/I4)
* 去掉没有使用的入参consoleid。 ([a627953](https://gitee.com/openharmony/kernel_liteos_m/commits/a62795304da31e13021ea2c675d124afd2594102)), closes [#I43](https://gitee.com/openharmony/kernel_liteos_m/issues/I43)
* 去掉编译选项-fno-short-enums ([b542aab](https://gitee.com/openharmony/kernel_liteos_m/commits/b542aab09dd92397f8c1305ac656ef14a012b5f8)), closes [#I4JY32](https://gitee.com/openharmony/kernel_liteos_m/issues/I4JY32)
* 取消cpu进入低功耗前开中断操作 ([bd39e9e](https://gitee.com/openharmony/kernel_liteos_m/commits/bd39e9e6d67310222c363e132141bb7fee1213f1)), closes [#I4KDP8](https://gitee.com/openharmony/kernel_liteos_m/issues/I4KDP8)
* 告警修复 ([7d2fd01](https://gitee.com/openharmony/kernel_liteos_m/commits/7d2fd01c2d7d6d4c653a307a1419bc094f5332f0))
* 告警修复 ([2d7bf3b](https://gitee.com/openharmony/kernel_liteos_m/commits/2d7bf3b7d8ea84961e802c366899aca891f38377))
* 在头文件中补充LOSCFG_MEM_FREE_BY_TASKID函数的声明 ([ad18026](https://gitee.com/openharmony/kernel_liteos_m/commits/ad18026a59fc2853c9580e040f959f9f42082640)), closes [#I4](https://gitee.com/openharmony/kernel_liteos_m/issues/I4)
* 将curl依赖的函数新增至newlib库 ([bd04d9f](https://gitee.com/openharmony/kernel_liteos_m/commits/bd04d9f29a0b77445a71378f88b01ffdae24554f)), closes [#I4RG71](https://gitee.com/openharmony/kernel_liteos_m/issues/I4RG71)
* 将未定义小写"true""false"改为"TRUE""FALSE"。 ([9819eb5](https://gitee.com/openharmony/kernel_liteos_m/commits/9819eb567636adf1774de9fd6039d274bee8f69b)), closes [#I43D20](https://gitee.com/openharmony/kernel_liteos_m/issues/I43D20)
* 当前仓代码编译告警的问题 ([194ac58](https://gitee.com/openharmony/kernel_liteos_m/commits/194ac5898d1e2ffaa17f6dca405614b73da6f8bb)), closes [#I4N50](https://gitee.com/openharmony/kernel_liteos_m/issues/I4N50)
* 支持硬浮点编译 ([988fd85](https://gitee.com/openharmony/kernel_liteos_m/commits/988fd85fae454a0d9fe01ef1c921b4f3667d5ac8)), closes [#I48](https://gitee.com/openharmony/kernel_liteos_m/issues/I48)
* 测试用例任务栈的宏定义重复定义导致在osTest.h中修改不生效 ([ce6cf68](https://gitee.com/openharmony/kernel_liteos_m/commits/ce6cf6879f4564393765a24c4d65448e0fddc3eb)), closes [#I4BA5](https://gitee.com/openharmony/kernel_liteos_m/issues/I4BA5)
* 添加L0 测试门禁 ([5c168fc](https://gitee.com/openharmony/kernel_liteos_m/commits/5c168fc3e0d08dd4a8924696e17a498eb444fa70)), closes [#I4C5R4](https://gitee.com/openharmony/kernel_liteos_m/issues/I4C5R4)
* 添加newlib对ipv6的支持 ([f7400fb](https://gitee.com/openharmony/kernel_liteos_m/commits/f7400fbcb275cbb3b75f1aef2af1459b794432de)), closes [#I4M1](https://gitee.com/openharmony/kernel_liteos_m/issues/I4M1)
* 添加文件版权头等信息 ([cf4e017](https://gitee.com/openharmony/kernel_liteos_m/commits/cf4e017970f8a3113bc8b6028d75775f747512c6)), closes [#I4](https://gitee.com/openharmony/kernel_liteos_m/issues/I4)
* 清除因g_tm变量没有使用引入的编译告警 ([9689522](https://gitee.com/openharmony/kernel_liteos_m/commits/9689522a8e08b79244ad339dc24074843b99d33b)), closes [#I4LW3](https://gitee.com/openharmony/kernel_liteos_m/issues/I4LW3)
* 移除los_arch_interrupt.h文件中冗余声明的函数VOID OsExcInit(VOID) ([136952f](https://gitee.com/openharmony/kernel_liteos_m/commits/136952f193fe97cfd6a88932e71811e12edfa7a5)), closes [#I4D9](https://gitee.com/openharmony/kernel_liteos_m/issues/I4D9)
* 补充net相关头文件 ([93f616b](https://gitee.com/openharmony/kernel_liteos_m/commits/93f616b64e961013be5c5267e50d58a40b5cc6c9))
* 解决gmtime和localtime接口由于g_tm全局变量导致的竞态问题 ([1454b76](https://gitee.com/openharmony/kernel_liteos_m/commits/1454b76482d42e78c1904028de55d82261e5ecaa)), closes [#I4LW3](https://gitee.com/openharmony/kernel_liteos_m/issues/I4LW3)
* 解决los_pm.c:743:19: warning 编译告警 ([0c72c8b](https://gitee.com/openharmony/kernel_liteos_m/commits/0c72c8bf94b053ff90bbf2019006c52adf1eb8df)), closes [#I4D4L8](https://gitee.com/openharmony/kernel_liteos_m/issues/I4D4L8)
* 解决定时器超时但还在队列中无法删除的问题 ([ecce17e](https://gitee.com/openharmony/kernel_liteos_m/commits/ecce17ea4878c7bdf7d7de9a6848e6bf871563de)), closes [#I4](https://gitee.com/openharmony/kernel_liteos_m/issues/I4)
* 解除net对cmsis的依赖net属于内核模块不应该依赖内核对外接口 ([9982624](https://gitee.com/openharmony/kernel_liteos_m/commits/99826240d979c3aa820ab2aace62e3338978e6d1))
* 调度中将pm相关的部分用LOSCFG_KERNEL_PM包含 ([d7c0059](https://gitee.com/openharmony/kernel_liteos_m/commits/d7c0059dc4fcca3f85d2cad1012353892ce28021)), closes [#I4L00](https://gitee.com/openharmony/kernel_liteos_m/issues/I4L00)
* 调用LOS_TaskDetach操作已退出的joinable的任务时未正确回收该任务 ([49c93b3](https://gitee.com/openharmony/kernel_liteos_m/commits/49c93b37c5e215612bbeb4619e73c809f9eb1cac)), closes [#I4DZL7](https://gitee.com/openharmony/kernel_liteos_m/issues/I4DZL7)
* 针对pr是否同步至release分支增加原因说明规则 ([1ee543d](https://gitee.com/openharmony/kernel_liteos_m/commits/1ee543d5d31524d543ffb297b121224dedf8602f))
* 队列相关的API实现中,参数的校验不完全,导致程序异常 ([eef7c80](https://gitee.com/openharmony/kernel_liteos_m/commits/eef7c80a725d68af254ae55091bd36f978cf4284))
### Features
* adapt net ([8594ee4](https://gitee.com/openharmony/kernel_liteos_m/commits/8594ee469ad2d40a363e5d77f94f292ab3cb8c21))
* add option for ioctl ([5e8ac4b](https://gitee.com/openharmony/kernel_liteos_m/commits/5e8ac4b8883f64bbffa5bb3f063a601112058396)), closes [#I4I3W5](https://gitee.com/openharmony/kernel_liteos_m/issues/I4I3W5)
* add option SIOCGIFBRDADDR for ioctl ([33ee492](https://gitee.com/openharmony/kernel_liteos_m/commits/33ee49295329e3c394d1cc7b16f77a23ac2255a8)), closes [#I4](https://gitee.com/openharmony/kernel_liteos_m/issues/I4)
* added assembly atomic interface ([1513f50](https://gitee.com/openharmony/kernel_liteos_m/commits/1513f50a474d1227a83fb655ad18c19cd792f235))
* backtrace for arm9 ([03de7f3](https://gitee.com/openharmony/kernel_liteos_m/commits/03de7f37450a8821ea05e60e94a5d1dd359c4f99)), closes [#I4](https://gitee.com/openharmony/kernel_liteos_m/issues/I4)
* Board 和 SoC分离编译适配 ([3f1c04d](https://gitee.com/openharmony/kernel_liteos_m/commits/3f1c04dd57bca0379ce37162d9d824801e7d880f))
* **build:** add module_group and comment out arch_cflags ([e5636f7](https://gitee.com/openharmony/kernel_liteos_m/commits/e5636f7acaf7e8b7d14dc07930b2a16c86e63c85))
* **build:** support Kconfig ([7e67343](https://gitee.com/openharmony/kernel_liteos_m/commits/7e673430dc42c55b3a0a6d955ba8fea21d6d58ea))
* **cmsis:** support max_count for osSemaphoreNew ([d478152](https://gitee.com/openharmony/kernel_liteos_m/commits/d478152762013975551e1af154df42987596c9a6))
* cortex-m55支持psplimit ([db7d641](https://gitee.com/openharmony/kernel_liteos_m/commits/db7d641c223db8ab25501d79c2a6331f743d830b)), closes [#I4T7R3](https://gitee.com/openharmony/kernel_liteos_m/issues/I4T7R3)
* littlefs最大打开文件个数修改为可通过menuconfig配置 ([9bc9f3a](https://gitee.com/openharmony/kernel_liteos_m/commits/9bc9f3aa53be7bf392d3da09adcb184dec8e3da2))
* newlib支持pthread_equal ([ce5357e](https://gitee.com/openharmony/kernel_liteos_m/commits/ce5357eee1daf1c1b3a3aa7bdeaef0cc5a8901bf)), closes [#I4](https://gitee.com/openharmony/kernel_liteos_m/issues/I4)
* provide read write for socket by #define ([d044eda](https://gitee.com/openharmony/kernel_liteos_m/commits/d044eda3c3640ae135ef528739d0c9609f40c822)), closes [#I4H8](https://gitee.com/openharmony/kernel_liteos_m/issues/I4H8)
* synchronizing arch api ([04bf3a6](https://gitee.com/openharmony/kernel_liteos_m/commits/04bf3a682f149482d8ebdbb9ff96d6889edb487a)), closes [#I4N7](https://gitee.com/openharmony/kernel_liteos_m/issues/I4N7)
* synchronous los_hwicreate interface ([6c68ada](https://gitee.com/openharmony/kernel_liteos_m/commits/6c68adad4db7f6112990764eafe6a3bd5f8759a5))
* 低内存资源回收low memory killer ([ab886d8](https://gitee.com/openharmony/kernel_liteos_m/commits/ab886d848ab809942c11d0e408b8ff76c41b92b2)), closes [#I4ID0](https://gitee.com/openharmony/kernel_liteos_m/issues/I4ID0)
* 低功耗支持冻结线程等需求 ([9b5739a](https://gitee.com/openharmony/kernel_liteos_m/commits/9b5739ab11ae7a89d35ba6f54fc62137ddc6d897)), closes [#I49](https://gitee.com/openharmony/kernel_liteos_m/issues/I49)
* 内核提供Interrupt框架支持多架构多平台通用化 ([e8538d0](https://gitee.com/openharmony/kernel_liteos_m/commits/e8538d041a93817cea4ae3914afcfdc6182483e7))
* 内核提供tick timer框架支持多架构多平台通用化 ([f635450](https://gitee.com/openharmony/kernel_liteos_m/commits/f635450d7cf7f674de3803b5eb9d759b6e4d005b)), closes [#I4N7](https://gitee.com/openharmony/kernel_liteos_m/issues/I4N7)
* 同步调度部分优化至liteos_m ([fb11ab1](https://gitee.com/openharmony/kernel_liteos_m/commits/fb11ab181e69289f7a2edfd5857595b89f1d5d67))
* 支持cortex-m55 ([6e17805](https://gitee.com/openharmony/kernel_liteos_m/commits/6e1780546c173365262c7a50b81896f5b3c46389)), closes [#I4Q9](https://gitee.com/openharmony/kernel_liteos_m/issues/I4Q9)
* 支持Lms ([7b838e8](https://gitee.com/openharmony/kernel_liteos_m/commits/7b838e8a7b8e9f7fb34ca495e5cb46d70d12722b)), closes [#I4](https://gitee.com/openharmony/kernel_liteos_m/issues/I4)
* 支持posix 和 cmsis join能力 ([ecfdf7f](https://gitee.com/openharmony/kernel_liteos_m/commits/ecfdf7ff9bf1adf06835968dc6f06b7c45e04862)), closes [#I44V26](https://gitee.com/openharmony/kernel_liteos_m/issues/I44V26)
* 支持posix线程私有数据能力 ([a856303](https://gitee.com/openharmony/kernel_liteos_m/commits/a856303b9cdadcfade33de0d3a335db0332f5761)), closes [#I4](https://gitee.com/openharmony/kernel_liteos_m/issues/I4)
* 支持pthread_condattr_setclock ([68dad2c](https://gitee.com/openharmony/kernel_liteos_m/commits/68dad2ccc9856dc2c1ac112bc8f30a703c1af5d9)), closes [#I4](https://gitee.com/openharmony/kernel_liteos_m/issues/I4)
* 支持pthread_mutex属性相关接口 ([d2be4d7](https://gitee.com/openharmony/kernel_liteos_m/commits/d2be4d7a460365844a7732df8a3eb59e6bb64897)), closes [#I4G4](https://gitee.com/openharmony/kernel_liteos_m/issues/I4G4)
* 支持select.h的FD_SETSIZE宏配置 ([05642f0](https://gitee.com/openharmony/kernel_liteos_m/commits/05642f05ae6b220df977f4402bc31f396bf08603)), closes [#I4RYK4](https://gitee.com/openharmony/kernel_liteos_m/issues/I4RYK4)
* 支持任务栈可配置 ([96cc92d](https://gitee.com/openharmony/kernel_liteos_m/commits/96cc92d03561e1a9f1030c71916068584b349626))
* 调度、任务及pm解耦 ([cc8a794](https://gitee.com/openharmony/kernel_liteos_m/commits/cc8a794229f4236a1611183fd482740b3badbcd7)), closes [#I4JTN6](https://gitee.com/openharmony/kernel_liteos_m/issues/I4JTN6)
* 适配三方库FatFs升级至r0.14a版本 ([92ea355](https://gitee.com/openharmony/kernel_liteos_m/commits/92ea355756ebd92b8809ecb638ffb5355d89c5e9))
### BREAKING CHANGES
* pthread_create 支持任务栈设置
osThreadNew 支持任务栈设置
TSK_INIT_PARAM_S 结构体添加stackAddr 字段
* 涉及接口修改:
LOS_HwiCreate LOS_HwiDelete
改动内容:
中断处理函数参数类型由HWI_ARG_T统一改为HwiIrqParam封装原有arg参数及riscv部分实际使用变量pDevId, 这样一方面统一LiteOS接口也统一了中断处理函数的arg参数
同步LOS_HwiDelete接口入参新增HWI_IRQ_PARAM_S *irqParam参数为后续共享中断功能的添加预留
* 新增接口:
LOS_TaskResRecycle
LOS_CurrNanosec
LOS_MDelay
接口修改:
LOS_QueueCreate第一个入参添加const修饰并增加一种异常情况处理
los_memory.c中 OS_ERROR 修改为LOS_NOK重定义LOS_NOK为UINT32-1。
接口位置转移:
LOS_UDelay 由los_task.h/.c转移到los_tick.h/.c
宏修改:
LOS_ERRNO_MUX_PEND_INTERR 改名为 LOS_ERRNO_MUX_IN_INTERR
* **posix接口融合:**
接口修改:
calloc
pthread_mutex_init
mq_unlink
pthread_join
pthread_exit
pthread_attr_init
pthread_attr_destroy
pthread_condattr_destroy
pthread_cond_timedwait
pthread_mutexattr_init
pthread_mutexattr_settype
pthread_mutex_destroy
pthread_mutex_timedlock
pthread_mutex_trylockk
pthread_mutex_unlock
sem_getvalue
sem_timedwait
pthread_cond_timedwait
nanosleep
timer_create
timer_settime
timer_gettime
testStdlibStrtoull005
testStdlibStrtol011
testStdlibStrtoul007
testPthread004
新增接口:
CheckForCancel
pthread_setcancelstate
pthread_setcanceltype
pthread_once
pthread_setschedprio
pthread_attr_setstack
pthread_attr_getstack
pthread_condattr_getpshared
pthread_condattr_setpshared
pthread_condattr_getclock
pthread_mutexattr_gettype
CheckMutexAttr
OsMuxPreCheck
sem_trywait
MuxPendForPosix
MuxPostForPosix
增加overrun功能
接口变化:
mq_getsetattr 改为内部接口MqGetSetAttr
GetTickTimeFromNow->OsGetTickTimeFromNow
接口位置转移:
pthread_equal接口由newlib下转移到kal/posix/src/pthread.c中
* **posix:** 接口修改:
calloc
pthread_mutex_init
mq_unlink
pthread_join
pthread_exit
pthread_attr_init
pthread_attr_destroy
pthread_condattr_destroy
pthread_cond_timedwait
pthread_mutexattr_init
pthread_mutexattr_settype
pthread_mutex_destroy
pthread_mutex_timedlock
pthread_mutex_trylockk
pthread_mutex_unlock
sem_getvalue
新增接口:
CheckForCancel
pthread_setcancelstate
pthread_setcanceltype
pthread_once
pthread_setschedprio
pthread_attr_setstack
pthread_attr_getstack
pthread_condattr_getpshared
pthread_condattr_setpshared
pthread_condattr_getclock
pthread_mutexattr_gettype
CheckMutexAttr
OsMuxPreCheck
sem_trywait
接口变化:
mq_getsetattr 改为内部接口OsMqGetSetAttr
接口位置转移:
pthread_equal接口由newlib下转移到kal/posix/src/pthread.c中
* 新增接口:
LOS_HwiTrigger ArchIntTrigger
LOS_HwiEnable ArchIntEnable
LOS_HwiDisable ArchIntDisable
LOS_HwiClear ArchIntClear
LOS_HwiSetPriority ArchIntSetPriority
* Assembly implementation:
ArchAtomicRead
ArchAtomicSet
ArchAtomicAdd
ArchAtomicSub
ArchAtomicInc
ArchAtomicIncRet
ArchAtomicDec
ArchAtomicDecRet
* 原来版本中每个架构下提供的tick timer相关操作函数为弱函数
WEAK UINT32 HalTickStart(OS_TICK_HANDLER handler);
WEAK VOID HalSysTickReload(UINT64 nextResponseTime);
WEAK UINT64 HalGetTickCycle(UINT32 *period);
WEAK VOID HalTickLock(VOID);
WEAK VOID HalTickUnlock(VOID);
用户如果需要启用自己的tick timer需要自己实现相关接口(强属性),在 "内核初始化之前" 通过调用:
LOS_TickTimerRegister 接口替换系统默认提供的tick timer相关接口。
无论用户提供的tick timer 还是系统默认提供的,均在内核初始化时启动。
* int pthread_key_create(pthread_key_t *k, void (*dtor)(void *))
int pthread_key_delete(pthread_key_t k)
int pthread_setspecific(pthread_key_t k, const void *x)
void *pthread_getspecific(pthread_key_t k)
* 1.修改arch/include下接口以ArchXX命名函数
2.提取公共函数声明:ArchAtomicXchg32bits、ArchAtomicDecRet、ArchAtomicCmpXchg32bits
3.新增部分原子操作c内联实现
* 增加低内存资源回收注册相关接口LOS_LmkOpsNodeRegister、LOS_LmkOpsNodeUnregister和内存资源释放和任务恢复接口LOS_LmkTasksKill和LOS_LmkTasksRestore.
* SwtmrHandlerItem结构体新增swtmrID字段用于标识超时队列中软件定时器id
* 新增支持API:
LOS_LmsCheckPoolAdd使能检测指定内存池
LOS_LmsCheckPoolDel不检测指定内存池
LOS_LmsAddrProtect为指定内存段上锁不允许访问
LOS_LmsAddrDisableProtect去能指定内存段的访问保护
# (2021-09-30)
### Bug Fixes
* M核代码告警清零 ([cb5f862](https://gitee.com/openharmony/kernel_liteos_m/commits/cb5f862eafd91675bf53d0320616cc8f707a6e5a)), closes [#I4386](https://gitee.com/openharmony/kernel_liteos_m/issues/I4386)
* M核告警消除 ([5a9d53b](https://gitee.com/openharmony/kernel_liteos_m/commits/5a9d53b6444a3bbe084f575ef079f0da36c27c2a)), closes [#I46](https://gitee.com/openharmony/kernel_liteos_m/issues/I46)
* M核编译配置修改 ([deff7c9](https://gitee.com/openharmony/kernel_liteos_m/commits/deff7c921f606ed85663f91d21c12163c15aa7f8)), closes [#I46](https://gitee.com/openharmony/kernel_liteos_m/issues/I46)
* shell模块task命令踩内存问题修改 ([b5e84d5](https://gitee.com/openharmony/kernel_liteos_m/commits/b5e84d5516b599257151f88b5a830d6fe9e0e188)), closes [#II4](https://gitee.com/openharmony/kernel_liteos_m/issues/II4)
* trustzone 中断适配 ([15a2c17](https://gitee.com/openharmony/kernel_liteos_m/commits/15a2c17f791b7d6703863718d92fa35402c41067)), closes [#I42](https://gitee.com/openharmony/kernel_liteos_m/issues/I42)
* add API LOS_HwiCreate and LOS_HwDelete ([eb668eb](https://gitee.com/openharmony/kernel_liteos_m/commits/eb668eb9e0021961230858f9bfa1599646da9a8f)), closes [#I3R75](https://gitee.com/openharmony/kernel_liteos_m/issues/I3R75)
* add liteos_m vfs ([5479dd6](https://gitee.com/openharmony/kernel_liteos_m/commits/5479dd66d7ec96d2206a9890586fe5f07d50fbb9)), closes [#I3R493](https://gitee.com/openharmony/kernel_liteos_m/issues/I3R493)
* backtrace代码段判断函数定义成弱函数如果有多个代码段那么可根据实际情况重定义 ([8692ed3](https://gitee.com/openharmony/kernel_liteos_m/commits/8692ed33a3b975bac7aa5b6ce3c40a84e281f6c5)), closes [#I420](https://gitee.com/openharmony/kernel_liteos_m/issues/I420)
* change cpup retval range ([d00a35b](https://gitee.com/openharmony/kernel_liteos_m/commits/d00a35ba9288047e9eaba06a8ed1d15806bfca40))
* change description according to review ([a38365e](https://gitee.com/openharmony/kernel_liteos_m/commits/a38365ed097fb398f922a5d1a72305933ae3e7b3))
* change queuePosion to queuePosition ([e772ccb](https://gitee.com/openharmony/kernel_liteos_m/commits/e772ccb3ccd3b31269066fa59a434a23af98ce51))
* change to OpenHarmony LiteOS-M ([259fb54](https://gitee.com/openharmony/kernel_liteos_m/commits/259fb54b3c1a208c5672f1f6551ba0424505e4b2))
* comment error ([a37b73d](https://gitee.com/openharmony/kernel_liteos_m/commits/a37b73d7599a62a728dbf564de9d9927f995ec1b))
* compile warning fix ([8dea15c](https://gitee.com/openharmony/kernel_liteos_m/commits/8dea15c4fcaff2957c60351781180f964c0a882d)), closes [#I4330](https://gitee.com/openharmony/kernel_liteos_m/issues/I4330)
* compile warnings ([75f6187](https://gitee.com/openharmony/kernel_liteos_m/commits/75f61870a002e238385bc9a7632d42b0b2488c9a)), closes [#I3Y57](https://gitee.com/openharmony/kernel_liteos_m/issues/I3Y57)
* correct ECB in comment ([e2aeb1f](https://gitee.com/openharmony/kernel_liteos_m/commits/e2aeb1ff1d4cd54a752c9f6ef976ee8e353da620))
* correct spelling ([dd5cefb](https://gitee.com/openharmony/kernel_liteos_m/commits/dd5cefb0dace4b7a7276c880e45d5520950e9844))
* correct spelling ([e7ea50f](https://gitee.com/openharmony/kernel_liteos_m/commits/e7ea50f13142e34a9860e75be051538fe91e234e))
* correct the counter of exception type ([bff6587](https://gitee.com/openharmony/kernel_liteos_m/commits/bff65877a281ac1cdcbefd325dcd3ad4933edac9))
* correct typo ([3ceface](https://gitee.com/openharmony/kernel_liteos_m/commits/3ceface13e1c15d107bc3c8460c17b9dd4c95e26))
* cpup funciton repair ([c842251](https://gitee.com/openharmony/kernel_liteos_m/commits/c842251bab7ea6365f2bee8ae880e6efb60f0c73))
* delete unused symbols for default config ([7ad3a22](https://gitee.com/openharmony/kernel_liteos_m/commits/7ad3a22b4d62c8b00876ff338c4ce8d1e3f3cbe2)), closes [#I45HN3](https://gitee.com/openharmony/kernel_liteos_m/issues/I45HN3)
* fix __cplusplus typo ([c3eb3e5](https://gitee.com/openharmony/kernel_liteos_m/commits/c3eb3e59e692371f67a4e21e4b38004195ce5e10))
* fix backtrace check issue ([b6664e6](https://gitee.com/openharmony/kernel_liteos_m/commits/b6664e66f14d432b02101c883a53cb333dc4c195))
* fix bad params def in HalTickStart ([4443b74](https://gitee.com/openharmony/kernel_liteos_m/commits/4443b74ea63d2e458af69723a7198bbbaeb856ea)), closes [#I48](https://gitee.com/openharmony/kernel_liteos_m/issues/I48)
* fix comment typo issue ([0c2a675](https://gitee.com/openharmony/kernel_liteos_m/commits/0c2a675e2d163eaf05aff7df226404888d78ca37))
* fix destroy typo ([4ba6259](https://gitee.com/openharmony/kernel_liteos_m/commits/4ba6259e94bd677764922b0470fddc2590f6efa5))
* fix function name ([f7d50d0](https://gitee.com/openharmony/kernel_liteos_m/commits/f7d50d0fbf53cdd352e94a387cf707083f1641bb))
* fix length typo ([98d6580](https://gitee.com/openharmony/kernel_liteos_m/commits/98d65801de9e37199b5df9c8734ebcb6ff5d853d))
* fix LOS_MEMBOX_ALIGNED macro name ([fced899](https://gitee.com/openharmony/kernel_liteos_m/commits/fced8992cf4fbc26c9722d528d642a7afe479170))
* fix LOS_TaskNameGet comment ([c70b28b](https://gitee.com/openharmony/kernel_liteos_m/commits/c70b28bf785da12fd60ecc92a5a63fb54e52c22a))
* fix macro typo ([1600360](https://gitee.com/openharmony/kernel_liteos_m/commits/16003604a948d081151ca4fcf0cfeea91c9e1960))
* fix misspell in comments ([4572814](https://gitee.com/openharmony/kernel_liteos_m/commits/457281427ba286e24386d7916c4bc81f112f1c60))
* fix NULL UNUSED redefined issue ([765bd55](https://gitee.com/openharmony/kernel_liteos_m/commits/765bd551990e906f457ec1145aea4f2bf5856547))
* fix OS_TASK_STACK_PROTECT_SIZE undeclared error ([2a5a515](https://gitee.com/openharmony/kernel_liteos_m/commits/2a5a515f50a0f344d416218046bf0880facfb97c)), closes [#I4C5](https://gitee.com/openharmony/kernel_liteos_m/issues/I4C5)
* fix print format compilation warning ([ef12c89](https://gitee.com/openharmony/kernel_liteos_m/commits/ef12c89c7a79791665125a0b7391f9e533a06a0f))
* fix readme link issue ([9e332c6](https://gitee.com/openharmony/kernel_liteos_m/commits/9e332c69a5813027575786424b78f0ae2f9a4c5a))
* fix some typo issues ([f6b8cab](https://gitee.com/openharmony/kernel_liteos_m/commits/f6b8cab2539e4d1ee9e47ab8e3eb12f1630f7393))
* fix typo in comment ([811d3fa](https://gitee.com/openharmony/kernel_liteos_m/commits/811d3fae8a39686a1c66dfd61c897b7fd3fac2ac))
* fix typos ([191644e](https://gitee.com/openharmony/kernel_liteos_m/commits/191644e4412fccb7142cfcd34316ad8e2d24fcdf))
* Fixed a spelling error in FS_LOCK_TIMEOUT_SEC. ([42dc308](https://gitee.com/openharmony/kernel_liteos_m/commits/42dc3083693be13c5fa8f2ad8213245465e28adf)), closes [#I3TL66](https://gitee.com/openharmony/kernel_liteos_m/issues/I3TL66)
* include file log_config.h in los_mpu.c ([1932d71](https://gitee.com/openharmony/kernel_liteos_m/commits/1932d714a589c9e87258d7c8ed647b6110bde543))
* L0 GN compilation problem ([2f9bfcc](https://gitee.com/openharmony/kernel_liteos_m/commits/2f9bfcc6ee436ee3568d0c8158a8e43c9ef02623)), closes [#I3](https://gitee.com/openharmony/kernel_liteos_m/issues/I3)
* l0 shell adapt new master ([fd2227e](https://gitee.com/openharmony/kernel_liteos_m/commits/fd2227e5c858c840f63629c27e559580e1cbdf2f))
* littlefs inappropriate return value and errno ([452f364](https://gitee.com/openharmony/kernel_liteos_m/commits/452f36403dd4376572d8b52352d0d8129a4617e4)), closes [#I3](https://gitee.com/openharmony/kernel_liteos_m/issues/I3)
* littlefs三方源码采用GN编译修改上库 ([bdb614b](https://gitee.com/openharmony/kernel_liteos_m/commits/bdb614bc2b82011d77c7c8ffb95e415d2640d19d))
* LOS_QueueInfoGet函数统计等待读写任务有误 ([215a1f6](https://gitee.com/openharmony/kernel_liteos_m/commits/215a1f6dc06cf2348c5875f7b05193b26ec17dde)), closes [#I4C6P2](https://gitee.com/openharmony/kernel_liteos_m/issues/I4C6P2)
* los_swtmr.h不满足自包含要求对los_config.h存在依赖但未包含los_config.h ([ad8e96a](https://gitee.com/openharmony/kernel_liteos_m/commits/ad8e96a00f2fcaebe57feae4e3f23f99d7f1d066)), closes [#I40](https://gitee.com/openharmony/kernel_liteos_m/issues/I40)
* **mbedtls:** mbedtls l0 support ([761b860](https://gitee.com/openharmony/kernel_liteos_m/commits/761b86096c3cf5642c95e556c11a45a3d5f413e4)), closes [#I3](https://gitee.com/openharmony/kernel_liteos_m/issues/I3)
* misspell ([30578a6](https://gitee.com/openharmony/kernel_liteos_m/commits/30578a6a68a0d3a203b9a00e7bd1a946356d13d2))
* modify event API description ([9481f1d](https://gitee.com/openharmony/kernel_liteos_m/commits/9481f1d8406960b8b859cc5a84b3831eadaf040c))
* modify the return type of LOS_IntLock from UINTPTR to UINT32. ([bcc34e2](https://gitee.com/openharmony/kernel_liteos_m/commits/bcc34e22ede5aeccea63aba9f9ce3cb9aa92cbeb))
* modify type INLNIE ([294a6d2](https://gitee.com/openharmony/kernel_liteos_m/commits/294a6d246b6a1f7cba8ce1bc4eeb9ae11f17a003))
* Mutex锁释放后无任务持有的情况下owner未清空 ([c136cfd](https://gitee.com/openharmony/kernel_liteos_m/commits/c136cfdf973ae0068154606afa3a23858822c347)), closes [#I40OC8](https://gitee.com/openharmony/kernel_liteos_m/issues/I40OC8)
* M核littlefs当文件open失败时需要回收fd否则会有fd泄露 ([b458e12](https://gitee.com/openharmony/kernel_liteos_m/commits/b458e12ed54905db6667f9d5db1410f94a3d6c71)), closes [#I3XU6](https://gitee.com/openharmony/kernel_liteos_m/issues/I3XU6)
* m核上littlefs新增错误码功能 ([a062378](https://gitee.com/openharmony/kernel_liteos_m/commits/a06237863121816fa6421aed233446a3fa4e2665)), closes [#I3](https://gitee.com/openharmony/kernel_liteos_m/issues/I3)
* net compile fix ([299813c](https://gitee.com/openharmony/kernel_liteos_m/commits/299813cdb43ae1e24200f0a6b006e04e4d4fcb05))
* open shell & fix qemu compile ([911a767](https://gitee.com/openharmony/kernel_liteos_m/commits/911a767992ee540a96ee9f67e0b87195656c3eab))
* ping cmd compile fail ([ae05de3](https://gitee.com/openharmony/kernel_liteos_m/commits/ae05de3ffda86d312d33b2e38f237dd76daf4949))
* protect from accssing NULL pointer, access g_handle after fslock ([bc7a914](https://gitee.com/openharmony/kernel_liteos_m/commits/bc7a914bce1b227a4f57265d5ecc3f82d78533e7)), closes [#I3UCX3](https://gitee.com/openharmony/kernel_liteos_m/issues/I3UCX3)
* remove changelog in README ([37ef8ca](https://gitee.com/openharmony/kernel_liteos_m/commits/37ef8ca7ae73bf78f56dfef36c48bcd790afb6ff)), closes [#I3](https://gitee.com/openharmony/kernel_liteos_m/issues/I3)
* remove libsec_kernel ([1144b75](https://gitee.com/openharmony/kernel_liteos_m/commits/1144b75f3ff9ce9e8fa114cf614d3deade8ac7c2))
* remove project files ([4ad01ce](https://gitee.com/openharmony/kernel_liteos_m/commits/4ad01ced93684e5c7ba144ca267f8fcc2fe03105))
* remove targets project files ([f39da5a](https://gitee.com/openharmony/kernel_liteos_m/commits/f39da5a6da59a3b1291c6b9ef7c50e6185df5ea1))
* risc-v 锁中断在调度后失效 ([70f3aa1](https://gitee.com/openharmony/kernel_liteos_m/commits/70f3aa1c112e949d9af8e0245af5879140adefba)), closes [#I42](https://gitee.com/openharmony/kernel_liteos_m/issues/I42)
* riscv_nuclei 编译失败 ([d3fb23c](https://gitee.com/openharmony/kernel_liteos_m/commits/d3fb23cca06580b6e447a9476a9c16643c4ea8fe)), closes [#I41](https://gitee.com/openharmony/kernel_liteos_m/issues/I41)
* rollback resources when opendir failed ([82fad6c](https://gitee.com/openharmony/kernel_liteos_m/commits/82fad6c36f183de93d936dd2007b899c2932bcee)), closes [#I3Y577](https://gitee.com/openharmony/kernel_liteos_m/issues/I3Y577)
* Scheduling module code to join GN compilation. ([8bf166b](https://gitee.com/openharmony/kernel_liteos_m/commits/8bf166b418ce1a6c027dc304d45fc9431923764c)), closes [#I3OA95](https://gitee.com/openharmony/kernel_liteos_m/issues/I3OA95)
* The hook module fails to compile under the c99 compilation standard. ([a078c30](https://gitee.com/openharmony/kernel_liteos_m/commits/a078c3086fa47e05e3ffdc4e94ca202284a1487b)), closes [#I3S4](https://gitee.com/openharmony/kernel_liteos_m/issues/I3S4)
* tick 动态化计算优化,减小中断执行时间对系统总体时间的影响,保证软件定时器的响应精度。 ([2118c84](https://gitee.com/openharmony/kernel_liteos_m/commits/2118c84616cce5b5d4569d5a82a4d5de02af1e1c)), closes [#I3YGP1](https://gitee.com/openharmony/kernel_liteos_m/issues/I3YGP1)
* timer qemu 头文件缺失 ([12fed74](https://gitee.com/openharmony/kernel_liteos_m/commits/12fed747226c377c656b8acb8346154627845b6f))
* update according to review comments ([4dc0d31](https://gitee.com/openharmony/kernel_liteos_m/commits/4dc0d313d1b4a39ebb62156d0bb6429ebb8b996d))
* update arch_spec.md ([cf43988](https://gitee.com/openharmony/kernel_liteos_m/commits/cf439885234e0955bab09834b3b876d627c81605))
* update doc usage ([5c19fd4](https://gitee.com/openharmony/kernel_liteos_m/commits/5c19fd4beca15a8b7faad847a13943a9abfe3c8c))
* update document description ([954c2fc](https://gitee.com/openharmony/kernel_liteos_m/commits/954c2fcfb531d0da1dcc6354a0c0b14335566ed7))
* update macro to config item ([be57ece](https://gitee.com/openharmony/kernel_liteos_m/commits/be57ece9ce6200c8868164bc0bb2f26e3062cd37))
* 以g_sysSchedStartTime是否为0判断时间轴是否生效存在极限场景导致调度时间不生效 ([509cf59](https://gitee.com/openharmony/kernel_liteos_m/commits/509cf59befb40839a376be31958d615f066c66fd)), closes [#I45HP5](https://gitee.com/openharmony/kernel_liteos_m/issues/I45HP5)
* 修复littlefs的多分区挂载时对pathname的处理逻辑异常 ([b55cfc1](https://gitee.com/openharmony/kernel_liteos_m/commits/b55cfc1ba7fc470b876c555ac7d3be0aa1d3d363)), closes [#I3](https://gitee.com/openharmony/kernel_liteos_m/issues/I3)
* 修复littlefs编译fs.c缺少头文件件依赖配置+若干musl库的缺失问题+多分区规格宏配置问题 ([7259289](https://gitee.com/openharmony/kernel_liteos_m/commits/7259289bd98a743f596060bc607f77ab8f149129)), closes [#I3VT11](https://gitee.com/openharmony/kernel_liteos_m/issues/I3VT11)
* 修复M核littlefs GN编译的若干错误 ([d77828e](https://gitee.com/openharmony/kernel_liteos_m/commits/d77828e206f3324424c3b1372332828a0afb84c2))
* 修复M核上musl库缺失strdup,c的问题 ([139f83a](https://gitee.com/openharmony/kernel_liteos_m/commits/139f83af391a4f5e64ab0fccbd783dd651b87e6a)), closes [#I3](https://gitee.com/openharmony/kernel_liteos_m/issues/I3)
* 修复QUEUE_INFO_S中waitReadTask无法保存大于32的任务编号 ([704cca9](https://gitee.com/openharmony/kernel_liteos_m/commits/704cca97b17972d1640fd33b1fa0b5917bb92b19)), closes [#I41N78](https://gitee.com/openharmony/kernel_liteos_m/issues/I41N78)
* 修复task命令格式错误增加copyright ([ad15bbd](https://gitee.com/openharmony/kernel_liteos_m/commits/ad15bbd6a4d298aabc05b26d7838de6425dbc5c5))
* 修复timer_settime只设置第一次到期时间时到期时间不准的缺陷 ([a5f4e37](https://gitee.com/openharmony/kernel_liteos_m/commits/a5f4e37e535bff39a333c469e2f1bf1817216fe8)), closes [#I3](https://gitee.com/openharmony/kernel_liteos_m/issues/I3)
* 修复timer_settime只设置第一次到期时间时到期时间不准的缺陷 ([e4b5d4e](https://gitee.com/openharmony/kernel_liteos_m/commits/e4b5d4ebe9677d49d490fe74e5ac33c4a29435a2)), closes [#I3](https://gitee.com/openharmony/kernel_liteos_m/issues/I3)
* 修复不规范的copyright ([2d9bbd2](https://gitee.com/openharmony/kernel_liteos_m/commits/2d9bbd2769e71e7b464bd22fc335999dd8000682)), closes [#I3SPJ1](https://gitee.com/openharmony/kernel_liteos_m/issues/I3SPJ1)
* 修复中断操作接口头文件位置变更,导致的编译错误 ([013a953](https://gitee.com/openharmony/kernel_liteos_m/commits/013a953926ca7cefd8a2f7c74d23c36c49765b59)), closes [#I4665](https://gitee.com/openharmony/kernel_liteos_m/issues/I4665)
* 修复文档链接失效问题 ([5d53c84](https://gitee.com/openharmony/kernel_liteos_m/commits/5d53c848124319a95f509b56ba001357c6dd8b05)), closes [#I4529](https://gitee.com/openharmony/kernel_liteos_m/issues/I4529)
* 内核模块编译增加-Werror编译选项且清除内核编译告警 ([3798091](https://gitee.com/openharmony/kernel_liteos_m/commits/3798091d87441ea445ec642de57e036dbbc8370e)), closes [#I46E6](https://gitee.com/openharmony/kernel_liteos_m/issues/I46E6)
* 删除MQ内冗余的重复宏定义 ([6d72916](https://gitee.com/openharmony/kernel_liteos_m/commits/6d7291660ad04682f05850876f81dfd0cba8ea6b)), closes [#I3U5](https://gitee.com/openharmony/kernel_liteos_m/issues/I3U5)
* 删除延时节点后,存在时间无法有效刷新的场景 ([0a87c04](https://gitee.com/openharmony/kernel_liteos_m/commits/0a87c04d58d11da2082470698de0760d72259533)), closes [#I45I9](https://gitee.com/openharmony/kernel_liteos_m/issues/I45I9)
* 在内核初始化前期启动tick timer ([b3841ed](https://gitee.com/openharmony/kernel_liteos_m/commits/b3841ed1ddbfb3359c7a0ceca04fc0f645d440c3)), closes [#I410F0](https://gitee.com/openharmony/kernel_liteos_m/issues/I410F0)
* 增加MPU功能的开关宏默认关闭 ([9709d29](https://gitee.com/openharmony/kernel_liteos_m/commits/9709d29b87a3888412ffda586e16eba86adccfe7)), closes [#I3WE0](https://gitee.com/openharmony/kernel_liteos_m/issues/I3WE0)
* 宏LOSCFG_SUPPORT_FATFS在fs.c中存在使用问题导致无fatfs的情况下编译出错 ([c1614ce](https://gitee.com/openharmony/kernel_liteos_m/commits/c1614ce2b4d4dfcda9532cbeeff25ad7a6558196)), closes [#I44](https://gitee.com/openharmony/kernel_liteos_m/issues/I44)
* 延时队列为NULL时返回的响应时间为64位最大值导致无法更新tick timer的响应周期 ([bcec32e](https://gitee.com/openharmony/kernel_liteos_m/commits/bcec32e389634097102a203ee7e937ed3193c984)), closes [#I3W1](https://gitee.com/openharmony/kernel_liteos_m/issues/I3W1)
* 支持smoke 测试用例 ([3ad5942](https://gitee.com/openharmony/kernel_liteos_m/commits/3ad5942301a1094a2c6b6ffee280cf09cfdb2a88)), closes [#I424](https://gitee.com/openharmony/kernel_liteos_m/issues/I424)
* 新增函数regcomp,regfree和regexec支持 ([86d5544](https://gitee.com/openharmony/kernel_liteos_m/commits/86d5544a3fd5f41f7f2abe3b143e9f1dc9b430f8)), closes [#I3U9](https://gitee.com/openharmony/kernel_liteos_m/issues/I3U9)
* 清理残留无效的trace代码 ([3c48951](https://gitee.com/openharmony/kernel_liteos_m/commits/3c489518576583ab6bf0d581810ef0a02b6ccd51)), closes [#I3ZMB4](https://gitee.com/openharmony/kernel_liteos_m/issues/I3ZMB4)
* 解决arm9编译冲突问题 ([c1a6245](https://gitee.com/openharmony/kernel_liteos_m/commits/c1a624536887fef44fed37134638bf40191b9aae)), closes [#I420](https://gitee.com/openharmony/kernel_liteos_m/issues/I420)
* 调度过程低概率触发OsSchedTaskEnQueue断言导致系统异常 ([e5e9289](https://gitee.com/openharmony/kernel_liteos_m/commits/e5e9289a08cf1db71c09647b71a864f5a1f8a4a2)), closes [#I3VX9](https://gitee.com/openharmony/kernel_liteos_m/issues/I3VX9)
* 调整hook类型和位置方便调试 ([369320d](https://gitee.com/openharmony/kernel_liteos_m/commits/369320de3710486f252c55c522e8c06e19541b77)), closes [#I3](https://gitee.com/openharmony/kernel_liteos_m/issues/I3)
### Features
* add cmsis ThreadFlags support ([cea551e](https://gitee.com/openharmony/kernel_liteos_m/commits/cea551e99ea0da8eefbaa826de2f68813252fb83))
* add deps to musl and securec ([bfa25fc](https://gitee.com/openharmony/kernel_liteos_m/commits/bfa25fcaa355c28a6139f683c4453f677e23abd7))
* add file type support for LfsStat ([ceaed2d](https://gitee.com/openharmony/kernel_liteos_m/commits/ceaed2dc86de2ed242aab4dd02c1f34e064583b3)), closes [#I3](https://gitee.com/openharmony/kernel_liteos_m/issues/I3)
* add interface of dhcp_is_bound ([84a180d](https://gitee.com/openharmony/kernel_liteos_m/commits/84a180d585686cda693bf8c6ed6b86f7c5dd5eee)), closes [#I46W08](https://gitee.com/openharmony/kernel_liteos_m/issues/I46W08)
* add L0 shell function ([97283b7](https://gitee.com/openharmony/kernel_liteos_m/commits/97283b7c5dd44b266e94fcf0f5d21e63ee1ec7e0))
* add LOS_ListHeadInsert function ([430b186](https://gitee.com/openharmony/kernel_liteos_m/commits/430b186be7ec1554a29a6d509188eb877d796a7e)), closes [#I3](https://gitee.com/openharmony/kernel_liteos_m/issues/I3)
* **kernel:** 补充获取最高、最低优先级接口 ([c24c38b](https://gitee.com/openharmony/kernel_liteos_m/commits/c24c38b084c13a2cdc5616f88bb5f63153600c28)), closes [#I42HM7](https://gitee.com/openharmony/kernel_liteos_m/issues/I42HM7)
* L0 armquem 剥离工具链 ([67d7455](https://gitee.com/openharmony/kernel_liteos_m/commits/67d74559d1bb3820bd51da2e2bf43e41e1224314))
* L0 支持Trace ([56c93a6](https://gitee.com/openharmony/kernel_liteos_m/commits/56c93a641b3c7a3d1ef9293ee3c95cccb559191f)), closes [#I41Y9](https://gitee.com/openharmony/kernel_liteos_m/issues/I41Y9)
* L0 支持低功耗框架 ([558ce14](https://gitee.com/openharmony/kernel_liteos_m/commits/558ce14becab05102497afca90a43d89abaf5531)), closes [#I3](https://gitee.com/openharmony/kernel_liteos_m/issues/I3)
* L0 测试用例支持risc-v qemu 编译运行 ([2dd6c08](https://gitee.com/openharmony/kernel_liteos_m/commits/2dd6c080daab52eaf61e5eefe7b581190670e8a7)), closes [#I3](https://gitee.com/openharmony/kernel_liteos_m/issues/I3)
* **liteos_m:** support backtrace for riscv ([ca1792a](https://gitee.com/openharmony/kernel_liteos_m/commits/ca1792aa4b5a85ca4ea6e41b265858c6b24a6897)), closes [#I3](https://gitee.com/openharmony/kernel_liteos_m/issues/I3)
* los_memory.c代码重复率处理 ([475db62](https://gitee.com/openharmony/kernel_liteos_m/commits/475db62db1ac285fc6cab91f09af618870269580)), closes [#I44](https://gitee.com/openharmony/kernel_liteos_m/issues/I44)
* M33平台支持GCC环境的Trustzone ([d469da2](https://gitee.com/openharmony/kernel_liteos_m/commits/d469da29c6d316640eaa7865f98ad8d6e2eb6d44)), closes [#I3Y85](https://gitee.com/openharmony/kernel_liteos_m/issues/I3Y85)
* provide getifaddrs for liteos_m ([948501a](https://gitee.com/openharmony/kernel_liteos_m/commits/948501ac73e7887f4585eca156ad760acc2a3b1f)), closes [#I400S5](https://gitee.com/openharmony/kernel_liteos_m/issues/I400S5)
* risc-v gn 编译框架添加汇编编译选项 ([76dc343](https://gitee.com/openharmony/kernel_liteos_m/commits/76dc343c888ec4e65eba43feb49921111b144640)), closes [#I3YS5](https://gitee.com/openharmony/kernel_liteos_m/issues/I3YS5)
* Support arm9 ([6d7c9df](https://gitee.com/openharmony/kernel_liteos_m/commits/6d7c9dfe597affb260e8bd74fa606b6d68c2b49a)), closes [#I3](https://gitee.com/openharmony/kernel_liteos_m/issues/I3)
* Support arm9 fiq swi mode and using system mode. ([97b5b08](https://gitee.com/openharmony/kernel_liteos_m/commits/97b5b0837be4b8df1381af29a6f650f243322840)), closes [#I3](https://gitee.com/openharmony/kernel_liteos_m/issues/I3)
* support non-continuous memory regions ([0facb0c](https://gitee.com/openharmony/kernel_liteos_m/commits/0facb0c0179f29a08b037655bbe691c98384dc84)), closes [#I43](https://gitee.com/openharmony/kernel_liteos_m/issues/I43)
* 完善m核qemu串口驱动支持shell输入 ([c4dc5ab](https://gitee.com/openharmony/kernel_liteos_m/commits/c4dc5ab0f8b5caae55efdbedf59ab07f5006f6c2)), closes [#I46N7](https://gitee.com/openharmony/kernel_liteos_m/issues/I46N7)
* 按任务统计已经alloc的内存大小 ([53117f9](https://gitee.com/openharmony/kernel_liteos_m/commits/53117f9f47a8dd3023e83dc0cc0de224eab9719f)), closes [#I44](https://gitee.com/openharmony/kernel_liteos_m/issues/I44)
* 支持native动态加载组件 ([d753834](https://gitee.com/openharmony/kernel_liteos_m/commits/d75383400efe5d9ca0ae4093e4f2e65fee03024b)), closes [#I418](https://gitee.com/openharmony/kernel_liteos_m/issues/I418)
* 新增LOSCFG_BASE_CORE_TSK_SWITCH_HOOK 宏定义配置 ([39efd6f](https://gitee.com/openharmony/kernel_liteos_m/commits/39efd6fb30ee7dc9159811f5d37dffcdfe81bae0)), closes [#I40Q9](https://gitee.com/openharmony/kernel_liteos_m/issues/I40Q9)
* 新增ROM/RAM分析工具 ([ee3403d](https://gitee.com/openharmony/kernel_liteos_m/commits/ee3403deaf24dc612b51354f31f795fb0b9a49b5))
* 补充fs相关函数用例 ([2a95af5](https://gitee.com/openharmony/kernel_liteos_m/commits/2a95af5bf1b412de27b4518d0abf7c335366d4d7)), closes [#I3UQ4](https://gitee.com/openharmony/kernel_liteos_m/issues/I3UQ4)
* 解决fclose等函数工具链重定义问题 ([b244ad4](https://gitee.com/openharmony/kernel_liteos_m/commits/b244ad4ad0da8d151b69071fdd6db808c91f85a5)), closes [#I3UG6](https://gitee.com/openharmony/kernel_liteos_m/issues/I3UG6)
### BREAKING CHANGES
* 新增4个对外接口声明在los_dynlink.h文件中分别为
(1) LOS_DynlinkInit: 动态加载模块初始化。
(2) LOS_SoLoad: 加载指定路径的共享库。
(3) LOS_FindSym: 根据共享库句柄查找指定符号。
(4) LOS_SoUnload: 卸载共享库。
* 1.新增一系列trace的对外API位于los_trace.h中.
LOS_TRACE_EASY简易插桩
LOS_TRACE标准插桩
LOS_TraceInit配置Trace缓冲区的地址和大小
LOS_TraceStart开启事件记录
LOS_TraceStop停止事件记录
LOS_TraceRecordDump输出Trace缓冲区数据
LOS_TraceRecordGet获取Trace缓冲区的首地址
LOS_TraceReset清除Trace缓冲区中的事件
LOS_TraceEventMaskSet设置事件掩码仅记录某些模块的事件
LOS_TraceHwiFilterHookReg注册过滤特定中断号事件的钩子函数
* 1.原调度中基于tick timer的低功耗扩展和当前的pm模块合并删除原对外接口LOS_SchedSleepInit,
 变为pm模块统一提供的LOS_PmRegistered接口.
2.原来在arch los_timer.h下提供的低功耗模式为枚举LOS_SysSleepEnum其中OS_SYS_NORMAL_SLEEP
和OS_SYS_DEEP_SLEEP不符合对外定义统一修改为LOS_SYS_NORMAL_SLEEP和LOS_SYS_DEEP_SLEEP,
并移至los_pm.h中.
3.VOID HalEnterSleep(LOS_SysSleepEnum sleep) 变更为UINT32 HalEnterSleep(VOID).

16
Kconfig
View File

@@ -335,6 +335,14 @@ config KERNEL_PM
Configuration item for low power frame tailoring. Configuration item for low power frame tailoring.
If you wish to build LiteOS with support for power management. If you wish to build LiteOS with support for power management.
config KERNEL_PM_IDLE
bool "Enable Power Management Idle"
default n
depends on KERNEL_PM
help
Configuration item for low power frame tailoring.
If you wish to build LiteOS with support for power management idle.
config KERNEL_PM_TASK_PTIORITY config KERNEL_PM_TASK_PTIORITY
int "Power Management Task Priority" int "Power Management Task Priority"
default 1 default 1
@@ -513,6 +521,14 @@ config DEBUG_QUEUE
help help
Answer Y to enable debug queue. Answer Y to enable debug queue.
config MUTEX_CREATE_TRACE
bool "Enable Mutex Trace Debugging"
default n
depends on ARCH_ARM
depends on DEBUG_KERNEL
help
Answer Y to enable debug mutex trace.
config DEBUG_DEADLOCK config DEBUG_DEADLOCK
bool "Enable Mutex Deadlock Debugging" bool "Enable Mutex Deadlock Debugging"
default n default n

View File

@@ -77,7 +77,7 @@ LiteOS-M内核的编译构建系统是一个基于gn和ninja的组件化构建
### 搭建系统基础环境 ### 搭建系统基础环境
在搭建各个开发板环境前需要完成OpenHarmony系统基础环境搭建。系统基础环境主要是指OpenHarmony的编译环境和开发环境详细介绍请参考官方站点[开发环境准备](https://gitee.com/openharmony/docs/blob/HEAD/zh-cn/device-dev/quick-start/quickstart-lite-env-setup.md)。开发者需要根据环境搭建文档完成环境搭建。 在搭建各个开发板环境前需要完成OpenHarmony系统基础环境搭建。系统基础环境主要是指OpenHarmony的编译环境和开发环境详细介绍请参考官方站点[开发环境准备](https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/quick-start/Readme-CN.md)。开发者需要根据环境搭建文档完成环境搭建。
### 获取OpenHarmony源码 ### 获取OpenHarmony源码

View File

@@ -0,0 +1,47 @@
# Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
# Copyright (c) 2020-2022 Huawei Device Co., Ltd. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice, this list of
# conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright notice, this list
# of conditions and the following disclaimer in the documentation and/or other materials
# provided with the distribution.
#
# 3. Neither the name of the copyright holder nor the names of its contributors may be used
# to endorse or promote products derived from this software without specific prior written
# permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
import("//kernel/liteos_m/liteos.gni")
module_name = "arch"
kernel_module(module_name) {
sources = [
"los_context.c",
"los_dispatch.S",
"los_exc.S",
"los_interrupt.c",
"los_mpu.c",
"los_timer.c",
]
configs += [ "$LITEOSTOPDIR:warn_config" ]
}
config("public") {
include_dirs = [ "." ]
}

View File

@@ -62,6 +62,13 @@ STATIC INLINE UINTPTR ArchMspGet(VOID)
__asm("mrs %0, msp" : "=r" (msp)); __asm("mrs %0, msp" : "=r" (msp));
return msp; return msp;
} }
STATIC INLINE UINTPTR ArchLRGet(VOID)
{
UINTPTR lr;
__asm("mov %0, lr" : "=r" (lr));
return lr;
}
#elif defined(__CLANG_ARM) || defined(__GNUC__) #elif defined(__CLANG_ARM) || defined(__GNUC__)
STATIC INLINE UINTPTR ArchSpGet(VOID) STATIC INLINE UINTPTR ArchSpGet(VOID)
{ {
@@ -83,6 +90,13 @@ STATIC INLINE UINTPTR ArchMspGet(VOID)
__asm volatile("mrs %0, msp" : "=r" (msp)); __asm volatile("mrs %0, msp" : "=r" (msp));
return msp; return msp;
} }
STATIC INLINE UINTPTR ArchLRGet(VOID)
{
UINTPTR lr;
__asm volatile("mov %0, lr" : "=r" (lr));
return lr;
}
#else #else
/* Other platforms to be improved */ /* Other platforms to be improved */
#endif #endif

View File

@@ -1,6 +1,6 @@
/* /*
* Copyright (c) 2013-2020, Huawei Technologies Co., Ltd. All rights reserved. * Copyright (c) 2013-2020, Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved. * Copyright (c) 2020-2022 Huawei Device Co., Ltd. All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without modification, * Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met: * are permitted provided that the following conditions are met:
@@ -63,6 +63,9 @@
#define RISCV_MIE_MEIE 0x000000800 #define RISCV_MIE_MEIE 0x000000800
/************************** mcause ***********************/ /************************** mcause ***********************/
#ifndef MCAUSE_INT_ID_MASK
#define MCAUSE_INT_ID_MASK 0x7FFFFFF
#endif
#define RISCV_MCAUSE_ECALL_U 8 #define RISCV_MCAUSE_ECALL_U 8
#define RISCV_USER_SOFT_IRQ 0 #define RISCV_USER_SOFT_IRQ 0
@@ -72,7 +75,6 @@
#define RISCV_USER_EXT_IRQ 8 #define RISCV_USER_EXT_IRQ 8
#define RISCV_MACH_EXT_IRQ 11 #define RISCV_MACH_EXT_IRQ 11
#define READ_CSR(reg) ({ \ #define READ_CSR(reg) ({ \
UINT32 _tmp; \ UINT32 _tmp; \
__asm__ volatile("csrr %0, " #reg : "=r"(_tmp) : : "memory"); \ __asm__ volatile("csrr %0, " #reg : "=r"(_tmp) : : "memory"); \

View File

@@ -1,6 +1,6 @@
/* /*
* Copyright (c) 2013-2020, Huawei Technologies Co., Ltd. All rights reserved. * Copyright (c) 2013-2020, Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved. * Copyright (c) 2020-2022 Huawei Device Co., Ltd. All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without modification, * Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met: * are permitted provided that the following conditions are met:
@@ -35,7 +35,7 @@
#include "los_task.h" #include "los_task.h"
#include "los_sched.h" #include "los_sched.h"
#include "los_memory.h" #include "los_memory.h"
#include "soc.h" #include "soc_common.h"
STATIC UINT32 g_sysNeedSched = FALSE; STATIC UINT32 g_sysNeedSched = FALSE;

View File

@@ -1,6 +1,6 @@
/* /*
* Copyright (c) 2013-2020, Huawei Technologies Co., Ltd. All rights reserved. * Copyright (c) 2013-2020, Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved. * Copyright (c) 2020-2022 Huawei Device Co., Ltd. All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without modification, * Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met: * are permitted provided that the following conditions are met:
@@ -29,7 +29,7 @@
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
#include "soc.h" #include "soc_common.h"
.global HalEnableIRQ .global HalEnableIRQ
.global HalDisableIRQ .global HalDisableIRQ

View File

@@ -1,6 +1,6 @@
/* /*
* Copyright (c) 2013-2020, Huawei Technologies Co., Ltd. All rights reserved. * Copyright (c) 2013-2020, Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved. * Copyright (c) 2020-2022 Huawei Device Co., Ltd. All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without modification, * Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met: * are permitted provided that the following conditions are met:
@@ -31,7 +31,7 @@
#ifndef _LOS_EXC_S #ifndef _LOS_EXC_S
#define _LOS_EXC_S #define _LOS_EXC_S
#include "soc.h" #include "soc_common.h"
.macro PUSH_CALLER_REG .macro PUSH_CALLER_REG
addi sp, sp, -(32 * REGBYTES) addi sp, sp, -(32 * REGBYTES)
@@ -139,8 +139,7 @@ HalTrapEntry:
sw a0, 0 * REGBYTES(sp) sw a0, 0 * REGBYTES(sp)
csrr t0, mtval csrr t0, mtval
sw t0, 1 * REGBYTES(sp) sw t0, 1 * REGBYTES(sp)
csrr t0, medeleg sw zero, 2 * REGBYTES(sp)
sw t0, 2 * REGBYTES(sp)
sw gp, 3 * REGBYTES(sp) sw gp, 3 * REGBYTES(sp)
mv a0, sp mv a0, sp
csrw mscratch, sp csrw mscratch, sp

View File

@@ -58,6 +58,9 @@
#define OS_CPUP_RECORD_PERIOD (g_sysClock) #define OS_CPUP_RECORD_PERIOD (g_sysClock)
#define OS_SYS_CYCLE_TO_US(cycle) ((cycle) / (g_sysClock)) * OS_SYS_US_PER_SECOND + \
((cycle) % (g_sysClock) * OS_SYS_US_PER_SECOND / (g_sysClock))
LITE_OS_SEC_BSS UINT16 g_cpupInitFlg = 0; LITE_OS_SEC_BSS UINT16 g_cpupInitFlg = 0;
LITE_OS_SEC_BSS OsCpupCB *g_cpup = NULL; LITE_OS_SEC_BSS OsCpupCB *g_cpup = NULL;
LITE_OS_SEC_BSS UINT64 g_lastRecordTime; LITE_OS_SEC_BSS UINT64 g_lastRecordTime;
@@ -167,6 +170,15 @@ LITE_OS_SEC_TEXT_INIT UINT32 OsCpupInit()
return LOS_OK; return LOS_OK;
} }
/* The calculation time unit is changed to us to decouple the influence of
* system frequency modulation on CPUP
*/
STATIC UINT64 CpupTimeUsGet(VOID)
{
UINT64 time = LOS_SysCycleGet();
return OS_SYS_CYCLE_TO_US(time);
}
/***************************************************************************** /*****************************************************************************
Function : OsTskCycleStart Function : OsTskCycleStart
Description: start task to get cycles count in current task beginning Description: start task to get cycles count in current task beginning
@@ -183,10 +195,11 @@ LITE_OS_SEC_TEXT_MINOR VOID OsTskCycleStart(VOID)
taskID = g_losTask.newTask->taskID; taskID = g_losTask.newTask->taskID;
g_cpup[taskID].cpupID = taskID; g_cpup[taskID].cpupID = taskID;
g_cpup[taskID].startTime = LOS_SysCycleGet(); g_cpup[taskID].startTime = CpupTimeUsGet();
return; return;
} }
/***************************************************************************** /*****************************************************************************
Function : OsTskCycleEnd Function : OsTskCycleEnd
Description: quit task and get cycle count Description: quit task and get cycle count
@@ -196,7 +209,7 @@ Return : None
LITE_OS_SEC_TEXT_MINOR VOID OsTskCycleEnd(VOID) LITE_OS_SEC_TEXT_MINOR VOID OsTskCycleEnd(VOID)
{ {
UINT32 taskID; UINT32 taskID;
UINT64 cpuCycle; UINT64 cpuTime;
if (g_cpupInitFlg == 0) { if (g_cpupInitFlg == 0) {
return; return;
@@ -208,16 +221,17 @@ LITE_OS_SEC_TEXT_MINOR VOID OsTskCycleEnd(VOID)
return; return;
} }
cpuCycle = LOS_SysCycleGet(); cpuTime = CpupTimeUsGet();
if (cpuCycle < g_cpup[taskID].startTime) { if (cpuTime < g_cpup[taskID].startTime) {
cpuCycle += g_cyclesPerTick; cpuTime += OS_US_PER_TICK;
} }
g_cpup[taskID].allTime += (cpuCycle - g_cpup[taskID].startTime); g_cpup[taskID].allTime += (cpuTime - g_cpup[taskID].startTime);
g_cpup[taskID].startTime = 0; g_cpup[taskID].startTime = 0;
return; return;
} }
/***************************************************************************** /*****************************************************************************
Function : OsTskCycleEndStart Function : OsTskCycleEndStart
Description: start task to get cycles count in current task ending Description: start task to get cycles count in current task ending
@@ -227,7 +241,7 @@ Return : None
LITE_OS_SEC_TEXT_MINOR VOID OsTskCycleEndStart(VOID) LITE_OS_SEC_TEXT_MINOR VOID OsTskCycleEndStart(VOID)
{ {
UINT32 taskID; UINT32 taskID;
UINT64 cpuCycle; UINT64 cpuTime;
UINT16 loopNum; UINT16 loopNum;
if (g_cpupInitFlg == 0) { if (g_cpupInitFlg == 0) {
@@ -235,23 +249,23 @@ LITE_OS_SEC_TEXT_MINOR VOID OsTskCycleEndStart(VOID)
} }
taskID = g_losTask.runTask->taskID; taskID = g_losTask.runTask->taskID;
cpuCycle = LOS_SysCycleGet(); cpuTime = CpupTimeUsGet();
if (g_cpup[taskID].startTime != 0) { if (g_cpup[taskID].startTime != 0) {
if (cpuCycle < g_cpup[taskID].startTime) { if (cpuTime < g_cpup[taskID].startTime) {
cpuCycle += g_cyclesPerTick; cpuTime += OS_US_PER_TICK;
} }
g_cpup[taskID].allTime += (cpuCycle - g_cpup[taskID].startTime); g_cpup[taskID].allTime += (cpuTime - g_cpup[taskID].startTime);
g_cpup[taskID].startTime = 0; g_cpup[taskID].startTime = 0;
} }
taskID = g_losTask.newTask->taskID; taskID = g_losTask.newTask->taskID;
g_cpup[taskID].cpupID = taskID; g_cpup[taskID].cpupID = taskID;
g_cpup[taskID].startTime = cpuCycle; g_cpup[taskID].startTime = cpuTime;
if ((cpuCycle - g_lastRecordTime) > OS_CPUP_RECORD_PERIOD) { if ((cpuTime - g_lastRecordTime) > OS_CPUP_RECORD_PERIOD) {
g_lastRecordTime = cpuCycle; g_lastRecordTime = cpuTime;
for (loopNum = 0; loopNum < g_taskMaxNum; loopNum++) { for (loopNum = 0; loopNum < g_taskMaxNum; loopNum++) {
g_cpup[loopNum].historyTime[g_hisPos] = g_cpup[loopNum].allTime; g_cpup[loopNum].historyTime[g_hisPos] = g_cpup[loopNum].allTime;
@@ -267,12 +281,12 @@ LITE_OS_SEC_TEXT_MINOR VOID OsTskCycleEndStart(VOID)
return; return;
} }
LITE_OS_SEC_TEXT_MINOR static inline UINT16 OsGetPrePos(UINT16 curPos) LITE_OS_SEC_TEXT_MINOR STATIC INLINE UINT16 OsGetPrePos(UINT16 curPos)
{ {
return (curPos == 0) ? (OS_CPUP_HISTORY_RECORD_NUM - 1) : (curPos - 1); return (curPos == 0) ? (OS_CPUP_HISTORY_RECORD_NUM - 1) : (curPos - 1);
} }
LITE_OS_SEC_TEXT_MINOR static VOID OsGetPositions(UINT16 mode, UINT16* curPosAddr, UINT16* prePosAddr) LITE_OS_SEC_TEXT_MINOR STATIC VOID OsGetPositions(UINT16 mode, UINT16* curPosAddr, UINT16* prePosAddr)
{ {
UINT16 curPos; UINT16 curPos;
UINT16 prePos = 0; UINT16 prePos = 0;
@@ -298,7 +312,7 @@ Return : cpupRet:current CPU usage
*****************************************************************************/ *****************************************************************************/
LITE_OS_SEC_TEXT_MINOR UINT32 LOS_SysCpuUsage(VOID) LITE_OS_SEC_TEXT_MINOR UINT32 LOS_SysCpuUsage(VOID)
{ {
UINT64 cpuCycleAll = 0; UINT64 cpuTimeAll = 0;
UINT32 cpupRet = 0; UINT32 cpupRet = 0;
UINT16 loopNum; UINT16 loopNum;
UINT32 intSave; UINT32 intSave;
@@ -312,12 +326,12 @@ LITE_OS_SEC_TEXT_MINOR UINT32 LOS_SysCpuUsage(VOID)
OsTskCycleEnd(); OsTskCycleEnd();
for (loopNum = 0; loopNum < g_taskMaxNum; loopNum++) { for (loopNum = 0; loopNum < g_taskMaxNum; loopNum++) {
cpuCycleAll += g_cpup[loopNum].allTime; cpuTimeAll += g_cpup[loopNum].allTime;
} }
if (cpuCycleAll) { if (cpuTimeAll) {
cpupRet = LOS_CPUP_PRECISION - (UINT32)((LOS_CPUP_PRECISION * cpupRet = LOS_CPUP_PRECISION - (UINT32)((LOS_CPUP_PRECISION *
g_cpup[g_idleTaskID].allTime) / cpuCycleAll); g_cpup[g_idleTaskID].allTime) / cpuTimeAll);
} }
OsTskCycleStart(); OsTskCycleStart();
@@ -334,7 +348,7 @@ Return : cpupRet:CPU usage history
*****************************************************************************/ *****************************************************************************/
LITE_OS_SEC_TEXT_MINOR UINT32 LOS_HistorySysCpuUsage(UINT16 mode) LITE_OS_SEC_TEXT_MINOR UINT32 LOS_HistorySysCpuUsage(UINT16 mode)
{ {
UINT64 cpuCycleAll = 0; UINT64 cpuTimeAll = 0;
UINT64 idleCycleAll = 0; UINT64 idleCycleAll = 0;
UINT32 cpupRet = 0; UINT32 cpupRet = 0;
UINT16 loopNum; UINT16 loopNum;
@@ -354,9 +368,9 @@ LITE_OS_SEC_TEXT_MINOR UINT32 LOS_HistorySysCpuUsage(UINT16 mode)
for (loopNum = 0; loopNum < g_taskMaxNum; loopNum++) { for (loopNum = 0; loopNum < g_taskMaxNum; loopNum++) {
if (mode == CPUP_IN_1S) { if (mode == CPUP_IN_1S) {
cpuCycleAll += g_cpup[loopNum].historyTime[curPos] - g_cpup[loopNum].historyTime[prePos]; cpuTimeAll += g_cpup[loopNum].historyTime[curPos] - g_cpup[loopNum].historyTime[prePos];
} else { } else {
cpuCycleAll += g_cpup[loopNum].allTime - g_cpup[loopNum].historyTime[curPos]; cpuTimeAll += g_cpup[loopNum].allTime - g_cpup[loopNum].historyTime[curPos];
} }
} }
@@ -367,8 +381,8 @@ LITE_OS_SEC_TEXT_MINOR UINT32 LOS_HistorySysCpuUsage(UINT16 mode)
idleCycleAll += g_cpup[g_idleTaskID].allTime - g_cpup[g_idleTaskID].historyTime[curPos]; idleCycleAll += g_cpup[g_idleTaskID].allTime - g_cpup[g_idleTaskID].historyTime[curPos];
} }
if (cpuCycleAll) { if (cpuTimeAll) {
cpupRet = (LOS_CPUP_PRECISION - (UINT32)((LOS_CPUP_PRECISION * idleCycleAll) / cpuCycleAll)); cpupRet = (LOS_CPUP_PRECISION - (UINT32)((LOS_CPUP_PRECISION * idleCycleAll) / cpuTimeAll));
} }
OsTskCycleStart(); OsTskCycleStart();
@@ -385,7 +399,7 @@ Return : cpupRet:CPU usage of certain task
*****************************************************************************/ *****************************************************************************/
LITE_OS_SEC_TEXT_MINOR UINT32 LOS_TaskCpuUsage(UINT32 taskID) LITE_OS_SEC_TEXT_MINOR UINT32 LOS_TaskCpuUsage(UINT32 taskID)
{ {
UINT64 cpuCycleAll = 0; UINT64 cpuTimeAll = 0;
UINT16 loopNum; UINT16 loopNum;
UINT32 intSave; UINT32 intSave;
UINT32 cpupRet = 0; UINT32 cpupRet = 0;
@@ -410,11 +424,11 @@ LITE_OS_SEC_TEXT_MINOR UINT32 LOS_TaskCpuUsage(UINT32 taskID)
if ((g_cpup[loopNum].status & OS_TASK_STATUS_UNUSED) || (g_cpup[loopNum].status == 0)) { if ((g_cpup[loopNum].status & OS_TASK_STATUS_UNUSED) || (g_cpup[loopNum].status == 0)) {
continue; continue;
} }
cpuCycleAll += g_cpup[loopNum].allTime; cpuTimeAll += g_cpup[loopNum].allTime;
} }
if (cpuCycleAll) { if (cpuTimeAll) {
cpupRet = (UINT32)((LOS_CPUP_PRECISION * g_cpup[taskID].allTime) / cpuCycleAll); cpupRet = (UINT32)((LOS_CPUP_PRECISION * g_cpup[taskID].allTime) / cpuTimeAll);
} }
OsTskCycleStart(); OsTskCycleStart();
@@ -432,8 +446,8 @@ Return : cpupRet:CPU usage history of task
*****************************************************************************/ *****************************************************************************/
LITE_OS_SEC_TEXT_MINOR UINT32 LOS_HistoryTaskCpuUsage(UINT32 taskID, UINT16 mode) LITE_OS_SEC_TEXT_MINOR UINT32 LOS_HistoryTaskCpuUsage(UINT32 taskID, UINT16 mode)
{ {
UINT64 cpuCycleAll = 0; UINT64 cpuTimeAll = 0;
UINT64 cpuCycleCurTsk = 0; UINT64 cpuTimeCurTsk = 0;
UINT16 loopNum, curPos; UINT16 loopNum, curPos;
UINT16 prePos = 0; UINT16 prePos = 0;
UINT32 intSave; UINT32 intSave;
@@ -463,19 +477,19 @@ LITE_OS_SEC_TEXT_MINOR UINT32 LOS_HistoryTaskCpuUsage(UINT32 taskID, UINT16 mode
} }
if (mode == CPUP_IN_1S) { if (mode == CPUP_IN_1S) {
cpuCycleAll += g_cpup[loopNum].historyTime[curPos] - g_cpup[loopNum].historyTime[prePos]; cpuTimeAll += g_cpup[loopNum].historyTime[curPos] - g_cpup[loopNum].historyTime[prePos];
} else { } else {
cpuCycleAll += g_cpup[loopNum].allTime - g_cpup[loopNum].historyTime[curPos]; cpuTimeAll += g_cpup[loopNum].allTime - g_cpup[loopNum].historyTime[curPos];
} }
} }
if (mode == CPUP_IN_1S) { if (mode == CPUP_IN_1S) {
cpuCycleCurTsk += g_cpup[taskID].historyTime[curPos] - g_cpup[taskID].historyTime[prePos]; cpuTimeCurTsk += g_cpup[taskID].historyTime[curPos] - g_cpup[taskID].historyTime[prePos];
} else { } else {
cpuCycleCurTsk += g_cpup[taskID].allTime - g_cpup[taskID].historyTime[curPos]; cpuTimeCurTsk += g_cpup[taskID].allTime - g_cpup[taskID].historyTime[curPos];
} }
if (cpuCycleAll) { if (cpuTimeAll) {
cpupRet = (UINT32)((LOS_CPUP_PRECISION * cpuCycleCurTsk) / cpuCycleAll); cpupRet = (UINT32)((LOS_CPUP_PRECISION * cpuTimeCurTsk) / cpuTimeAll);
} }
OsTskCycleStart(); OsTskCycleStart();
@@ -490,8 +504,8 @@ LITE_OS_SEC_TEXT_MINOR UINT32 LOS_AllTaskCpuUsage(CPUP_INFO_S *cpupInfo, UINT16
UINT16 curPos; UINT16 curPos;
UINT16 prePos = 0; UINT16 prePos = 0;
UINT32 intSave; UINT32 intSave;
UINT64 cpuCycleAll = 0; UINT64 cpuTimeAll = 0;
UINT64 cpuCycleCurTsk = 0; UINT64 cpuTimeCurTsk = 0;
if (g_cpupInitFlg == 0) { if (g_cpupInitFlg == 0) {
return LOS_ERRNO_CPUP_NO_INIT; return LOS_ERRNO_CPUP_NO_INIT;
@@ -513,9 +527,9 @@ LITE_OS_SEC_TEXT_MINOR UINT32 LOS_AllTaskCpuUsage(CPUP_INFO_S *cpupInfo, UINT16
} }
if (mode == CPUP_IN_1S) { if (mode == CPUP_IN_1S) {
cpuCycleAll += g_cpup[loopNum].historyTime[curPos] - g_cpup[loopNum].historyTime[prePos]; cpuTimeAll += g_cpup[loopNum].historyTime[curPos] - g_cpup[loopNum].historyTime[prePos];
} else { } else {
cpuCycleAll += g_cpup[loopNum].allTime - g_cpup[loopNum].historyTime[curPos]; cpuTimeAll += g_cpup[loopNum].allTime - g_cpup[loopNum].historyTime[curPos];
} }
} }
@@ -526,16 +540,16 @@ LITE_OS_SEC_TEXT_MINOR UINT32 LOS_AllTaskCpuUsage(CPUP_INFO_S *cpupInfo, UINT16
} }
if (mode == CPUP_IN_1S) { if (mode == CPUP_IN_1S) {
cpuCycleCurTsk += g_cpup[loopNum].historyTime[curPos] - g_cpup[loopNum].historyTime[prePos]; cpuTimeCurTsk += g_cpup[loopNum].historyTime[curPos] - g_cpup[loopNum].historyTime[prePos];
} else { } else {
cpuCycleCurTsk += g_cpup[loopNum].allTime - g_cpup[loopNum].historyTime[curPos]; cpuTimeCurTsk += g_cpup[loopNum].allTime - g_cpup[loopNum].historyTime[curPos];
} }
cpupInfo[loopNum].usStatus = g_cpup[loopNum].status; cpupInfo[loopNum].usStatus = g_cpup[loopNum].status;
if (cpuCycleAll) { if (cpuTimeAll) {
cpupInfo[loopNum].uwUsage = (UINT32)((LOS_CPUP_PRECISION * cpuCycleCurTsk) / cpuCycleAll); cpupInfo[loopNum].uwUsage = (UINT32)((LOS_CPUP_PRECISION * cpuTimeCurTsk) / cpuTimeAll);
} }
cpuCycleCurTsk = 0; cpuTimeCurTsk = 0;
} }
OsTskCycleStart(); OsTskCycleStart();
@@ -606,13 +620,13 @@ LITE_OS_SEC_TEXT_MINOR VOID OsCpupIrqStart(UINT32 intNum)
return; return;
} }
g_irqCpup[intNum].startTime = LOS_SysCycleGet(); g_irqCpup[intNum].startTime = CpupTimeUsGet();
return; return;
} }
LITE_OS_SEC_TEXT_MINOR VOID OsCpupIrqEnd(UINT32 intNum) LITE_OS_SEC_TEXT_MINOR VOID OsCpupIrqEnd(UINT32 intNum)
{ {
UINT64 cpuCycle; UINT64 cpuTime;
UINT64 usedTime; UINT64 usedTime;
if (g_irqCpupInitFlg == 0) { if (g_irqCpupInitFlg == 0) {
@@ -623,14 +637,14 @@ LITE_OS_SEC_TEXT_MINOR VOID OsCpupIrqEnd(UINT32 intNum)
return; return;
} }
cpuCycle = LOS_SysCycleGet(); cpuTime = CpupTimeUsGet();
if (cpuCycle < g_irqCpup[intNum].startTime) { if (cpuTime < g_irqCpup[intNum].startTime) {
cpuCycle += g_cyclesPerTick; cpuTime += OS_US_PER_TICK;
} }
g_irqCpup[intNum].cpupID = intNum; g_irqCpup[intNum].cpupID = intNum;
g_irqCpup[intNum].status = OS_CPUP_USED; g_irqCpup[intNum].status = OS_CPUP_USED;
usedTime = cpuCycle - g_irqCpup[intNum].startTime; usedTime = cpuTime - g_irqCpup[intNum].startTime;
if (g_irqCpup[intNum].count <= 1000) { /* 1000, Take 1000 samples */ if (g_irqCpup[intNum].count <= 1000) { /* 1000, Take 1000 samples */
g_irqCpup[intNum].allTime += usedTime; g_irqCpup[intNum].allTime += usedTime;
@@ -672,12 +686,12 @@ LITE_OS_SEC_TEXT_MINOR STATIC VOID OsGetIrqPositions(UINT16 mode, UINT16* curPos
LITE_OS_SEC_TEXT_MINOR STATIC UINT64 OsGetIrqAllTime(VOID) LITE_OS_SEC_TEXT_MINOR STATIC UINT64 OsGetIrqAllTime(VOID)
{ {
INT32 i; INT32 i;
UINT64 cpuCycleAll = 0; UINT64 cpuTimeAll = 0;
for (i = 0; i < OS_CPUP_HISTORY_RECORD_NUM; i++) { for (i = 0; i < OS_CPUP_HISTORY_RECORD_NUM; i++) {
cpuCycleAll += g_cpuHistoryTime[i]; cpuTimeAll += g_cpuHistoryTime[i];
} }
return cpuCycleAll; return cpuTimeAll;
} }
LITE_OS_SEC_TEXT_MINOR STATIC UINT64 OsGetIrqAllHisTime(UINT32 num) LITE_OS_SEC_TEXT_MINOR STATIC UINT64 OsGetIrqAllHisTime(UINT32 num)
@@ -697,8 +711,8 @@ LITE_OS_SEC_TEXT_MINOR UINT32 LOS_GetAllIrqCpuUsage(UINT16 mode, CPUP_INFO_S *cp
UINT16 curPos; UINT16 curPos;
UINT16 prePos = 0; UINT16 prePos = 0;
UINT32 intSave; UINT32 intSave;
UINT64 cpuCycleAll; UINT64 cpuTimeAll;
UINT64 cpuCycleCurIrq; UINT64 cpuTimeCurIrq;
if (g_irqCpupInitFlg == 0) { if (g_irqCpupInitFlg == 0) {
return LOS_ERRNO_CPUP_NO_INIT; return LOS_ERRNO_CPUP_NO_INIT;
@@ -712,9 +726,9 @@ LITE_OS_SEC_TEXT_MINOR UINT32 LOS_GetAllIrqCpuUsage(UINT16 mode, CPUP_INFO_S *cp
OsGetIrqPositions(mode, &curPos, &prePos); OsGetIrqPositions(mode, &curPos, &prePos);
if (mode == CPUP_IN_10S) { if (mode == CPUP_IN_10S) {
cpuCycleAll = OsGetIrqAllTime(); cpuTimeAll = OsGetIrqAllTime();
} else { } else {
cpuCycleAll = g_cpuHistoryTime[curPos] - g_cpuHistoryTime[prePos]; cpuTimeAll = g_cpuHistoryTime[curPos] - g_cpuHistoryTime[prePos];
} }
for (loopNum = 0; loopNum < LOSCFG_PLATFORM_HWI_LIMIT; loopNum++) { for (loopNum = 0; loopNum < LOSCFG_PLATFORM_HWI_LIMIT; loopNum++) {
@@ -725,13 +739,13 @@ LITE_OS_SEC_TEXT_MINOR UINT32 LOS_GetAllIrqCpuUsage(UINT16 mode, CPUP_INFO_S *cp
cpupInfo[loopNum].usStatus = g_irqCpup[loopNum].status; cpupInfo[loopNum].usStatus = g_irqCpup[loopNum].status;
if (mode == CPUP_IN_10S) { if (mode == CPUP_IN_10S) {
cpuCycleCurIrq = OsGetIrqAllHisTime(loopNum); cpuTimeCurIrq = OsGetIrqAllHisTime(loopNum);
} else { } else {
cpuCycleCurIrq = g_irqCpup[loopNum].historyTime[curPos] - g_irqCpup[loopNum].historyTime[prePos]; cpuTimeCurIrq = g_irqCpup[loopNum].historyTime[curPos] - g_irqCpup[loopNum].historyTime[prePos];
} }
if (cpuCycleAll != 0) { if (cpuTimeAll != 0) {
cpupInfo[loopNum].uwUsage = (UINT32)((LOS_CPUP_PRECISION * cpuCycleCurIrq) / cpuCycleAll); cpupInfo[loopNum].uwUsage = (UINT32)((LOS_CPUP_PRECISION * cpuTimeCurIrq) / cpuTimeAll);
} }
} }

View File

@@ -40,12 +40,13 @@
#include "securec.h" #include "securec.h"
#include "los_compiler.h" #include "los_compiler.h"
#include "los_debug.h" #include "los_debug.h"
#include "cmsis_os2.h" #include "los_sched.h"
#include "vfs_files.h" #include "vfs_files.h"
#include "vfs_operations.h" #include "vfs_operations.h"
#include "vfs_partition.h" #include "vfs_partition.h"
#include "vfs_maps.h" #include "vfs_maps.h"
#include "vfs_mount.h" #include "vfs_mount.h"
#include "los_fs.h"
/* the max name length of different parts should not bigger than 32 */ /* the max name length of different parts should not bigger than 32 */
#define FS_DRIVE_NAME_MAX_LEN 32 #define FS_DRIVE_NAME_MAX_LEN 32
@@ -73,7 +74,7 @@ static int FsLock(void)
{ {
int ret = 0; int ret = 0;
struct timespec absTimeout = {0}; struct timespec absTimeout = {0};
if (osKernelGetState() != osKernelRunning) { if (!OsCheckKernelRunning()) {
return ret; return ret;
} }
ret = clock_gettime(CLOCK_REALTIME, &absTimeout); ret = clock_gettime(CLOCK_REALTIME, &absTimeout);
@@ -88,7 +89,7 @@ static int FsLock(void)
static void FsUnlock(void) static void FsUnlock(void)
{ {
if (osKernelGetState() != osKernelRunning) { if (!OsCheckKernelRunning()) {
return; return;
} }
(void)pthread_mutex_unlock(&g_fatfsMutex); (void)pthread_mutex_unlock(&g_fatfsMutex);
@@ -244,7 +245,7 @@ char * GetLdPath(const char *source)
} }
char *volPath = g_volPath[partId]; char *volPath = g_volPath[partId];
char *ldPath = (char *)malloc(strlen(volPath) + LDPATH_PAD); char *ldPath = (char *)LOSCFG_FS_MALLOC_HOOK(strlen(volPath) + LDPATH_PAD);
if (ldPath == NULL) { if (ldPath == NULL) {
return NULL; return NULL;
} }
@@ -255,7 +256,7 @@ char * GetLdPath(const char *source)
*ldPath = '/'; *ldPath = '/';
ret = strcpy_s(ldPath + 1, strlen(volPath)+1, volPath); ret = strcpy_s(ldPath + 1, strlen(volPath)+1, volPath);
if (ret != EOK) { if (ret != EOK) {
free(ldPath); LOSCFG_FS_FREE_HOOK(ldPath);
return NULL; return NULL;
} }
@@ -265,7 +266,7 @@ char * GetLdPath(const char *source)
void PutLdPath(const char *ldPath) void PutLdPath(const char *ldPath)
{ {
if (ldPath != NULL) { if (ldPath != NULL) {
free((void *)ldPath); LOSCFG_FS_FREE_HOOK((void *)ldPath);
} }
} }
@@ -282,6 +283,12 @@ int FatfsMount(struct MountPoint *mp, unsigned long mountflags,
return (int)LOS_NOK; return (int)LOS_NOK;
} }
if (mountflags & MS_REMOUNT) {
ret = Remount(mp, mountflags);
FsUnlock();
return ret;
}
char *ldPath = GetLdPath(mp->mDev); char *ldPath = GetLdPath(mp->mDev);
if (ldPath == NULL) { if (ldPath == NULL) {
errno = EFAULT; errno = EFAULT;
@@ -289,12 +296,7 @@ int FatfsMount(struct MountPoint *mp, unsigned long mountflags,
goto ERROUT; goto ERROUT;
} }
if (mountflags & MS_REMOUNT) { fs = (FATFS *)LOSCFG_FS_MALLOC_HOOK(sizeof(FATFS));
ret = Remount(mp, mountflags);
goto ERROUT;
}
fs = (FATFS *)malloc(sizeof(FATFS));
if (fs == NULL) { if (fs == NULL) {
errno = ENOMEM; errno = ENOMEM;
ret = (int)LOS_NOK; ret = (int)LOS_NOK;
@@ -315,7 +317,7 @@ int FatfsMount(struct MountPoint *mp, unsigned long mountflags,
return (int)LOS_OK; return (int)LOS_OK;
ERROUT: ERROUT:
free(fs); LOSCFG_FS_FREE_HOOK(fs);
mp->mData = NULL; mp->mData = NULL;
PutLdPath(ldPath); PutLdPath(ldPath);
FsUnlock(); FsUnlock();
@@ -368,7 +370,7 @@ int FatfsUmount(struct MountPoint *mp)
ff_memfree(fatfs->win); ff_memfree(fatfs->win);
} }
free(mp->mData); LOSCFG_FS_FREE_HOOK(mp->mData);
mp->mData = NULL; mp->mData = NULL;
ret = (int)LOS_OK; ret = (int)LOS_OK;
@@ -423,7 +425,7 @@ int FatfsUmount2(struct MountPoint *mp, int flag)
ff_memfree(fatfs->win); ff_memfree(fatfs->win);
} }
free(mp->mData); LOSCFG_FS_FREE_HOOK(mp->mData);
mp->mData = NULL; mp->mData = NULL;
ret = (int)LOS_OK; ret = (int)LOS_OK;
@@ -448,7 +450,7 @@ int FatfsOpen(struct File *file, const char *path, int oflag)
fmode = FatFsGetMode(oflag); fmode = FatFsGetMode(oflag);
fp = (FIL *)malloc(sizeof(FIL)); fp = (FIL *)LOSCFG_FS_MALLOC_HOOK(sizeof(FIL));
if (fp == NULL) { if (fp == NULL) {
errno = ENOMEM; errno = ENOMEM;
return (int)LOS_NOK; return (int)LOS_NOK;
@@ -457,7 +459,7 @@ int FatfsOpen(struct File *file, const char *path, int oflag)
ret = FsLock(); ret = FsLock();
if (ret != 0) { if (ret != 0) {
errno = ret; errno = ret;
free(fp); LOSCFG_FS_FREE_HOOK(fp);
return (int)LOS_NOK; return (int)LOS_NOK;
} }
@@ -466,14 +468,14 @@ int FatfsOpen(struct File *file, const char *path, int oflag)
PRINT_ERR("FAT open ChangeDrive err 0x%x!\r\n", ret); PRINT_ERR("FAT open ChangeDrive err 0x%x!\r\n", ret);
errno = ENOENT; errno = ENOENT;
ret = (int)LOS_NOK; ret = (int)LOS_NOK;
free(fp); LOSCFG_FS_FREE_HOOK(fp);
goto OUT; goto OUT;
} }
res = f_open(fp, path, fmode); res = f_open(fp, path, fmode);
if (res != FR_OK) { if (res != FR_OK) {
PRINT_ERR("FAT open err 0x%x!\r\n", res); PRINT_ERR("FAT open err 0x%x!\r\n", res);
free(fp); LOSCFG_FS_FREE_HOOK(fp);
errno = FatfsErrno(res); errno = FatfsErrno(res);
ret = (int)LOS_NOK; ret = (int)LOS_NOK;
goto OUT; goto OUT;
@@ -517,7 +519,7 @@ int FatfsClose(struct File *file)
(void)ff_memfree(fp->buf); (void)ff_memfree(fp->buf);
} }
#endif #endif
free(file->fData); LOSCFG_FS_FREE_HOOK(file->fData);
file->fData = NULL; file->fData = NULL;
FsUnlock(); FsUnlock();
@@ -832,7 +834,7 @@ int FatfsOpendir(struct Dir *dir, const char *dirName)
goto ERROUT; goto ERROUT;
} }
dp = (DIR *)malloc(sizeof(DIR)); dp = (DIR *)LOSCFG_FS_MALLOC_HOOK(sizeof(DIR));
if (dp == NULL) { if (dp == NULL) {
errno = ENOENT; errno = ENOENT;
goto ERROUT; goto ERROUT;
@@ -866,7 +868,7 @@ int FatfsOpendir(struct Dir *dir, const char *dirName)
ERROUT: ERROUT:
if (dp != NULL) { if (dp != NULL) {
free(dp); LOSCFG_FS_FREE_HOOK(dp);
} }
FsUnlock(); FsUnlock();
return (int)LOS_NOK; return (int)LOS_NOK;
@@ -938,7 +940,7 @@ int FatfsClosedir(struct Dir *dir)
return (int)LOS_NOK; return (int)LOS_NOK;
} }
free(dir->dData); LOSCFG_FS_FREE_HOOK(dir->dData);
dir->dData = NULL; dir->dData = NULL;
FsUnlock(); FsUnlock();

View File

@@ -39,6 +39,7 @@
#include "vfs_maps.h" #include "vfs_maps.h"
#include "vfs_mount.h" #include "vfs_mount.h"
#include "securec.h" #include "securec.h"
#include "los_fs.h"
static pthread_mutex_t g_fsLocalMutex = PTHREAD_MUTEX_INITIALIZER; static pthread_mutex_t g_fsLocalMutex = PTHREAD_MUTEX_INITIALIZER;
@@ -184,7 +185,13 @@ int LfsMount(struct MountPoint *mp, unsigned long mountflags, const void *data)
goto errout; goto errout;
} }
mountHdl = (lfs_t *)malloc(sizeof(lfs_t) + sizeof(struct lfs_config)); if (mountflags & MS_REMOUNT) {
errno = ENOSYS;
ret = (int)LOS_NOK;
goto errout;
}
mountHdl = (lfs_t *)LOSCFG_FS_MALLOC_HOOK(sizeof(lfs_t) + sizeof(struct lfs_config));
if (mountHdl == NULL) { if (mountHdl == NULL) {
errno = ENODEV; errno = ENODEV;
ret = (int)LOS_NOK; ret = (int)LOS_NOK;
@@ -204,7 +211,7 @@ int LfsMount(struct MountPoint *mp, unsigned long mountflags, const void *data)
} }
} }
if (ret != 0) { if (ret != 0) {
free(mountHdl); LOSCFG_FS_FREE_HOOK(mountHdl);
errno = LittlefsErrno(ret); errno = LittlefsErrno(ret);
ret = (int)LOS_NOK; ret = (int)LOS_NOK;
} }
@@ -233,7 +240,7 @@ int LfsUmount(struct MountPoint *mp)
ret = (int)LOS_NOK; ret = (int)LOS_NOK;
} }
free(mp->mData); LOSCFG_FS_FREE_HOOK(mp->mData);
mp->mData = NULL; mp->mData = NULL;
return ret; return ret;
} }
@@ -327,7 +334,7 @@ int LfsOpendir(struct Dir *dir, const char *dirName)
} }
lfs_t *lfs = (lfs_t *)dir->dMp->mData; lfs_t *lfs = (lfs_t *)dir->dMp->mData;
lfs_dir_t *dirInfo = (lfs_dir_t *)malloc(sizeof(lfs_dir_t)); lfs_dir_t *dirInfo = (lfs_dir_t *)LOSCFG_FS_MALLOC_HOOK(sizeof(lfs_dir_t));
if (dirInfo == NULL) { if (dirInfo == NULL) {
errno = ENOMEM; errno = ENOMEM;
return (int)LOS_NOK; return (int)LOS_NOK;
@@ -336,7 +343,7 @@ int LfsOpendir(struct Dir *dir, const char *dirName)
(void)memset_s(dirInfo, sizeof(lfs_dir_t), 0, sizeof(lfs_dir_t)); (void)memset_s(dirInfo, sizeof(lfs_dir_t), 0, sizeof(lfs_dir_t));
ret = lfs_dir_open(lfs, dirInfo, dirName); ret = lfs_dir_open(lfs, dirInfo, dirName);
if (ret != 0) { if (ret != 0) {
free(dirInfo); LOSCFG_FS_FREE_HOOK(dirInfo);
errno = LittlefsErrno(ret); errno = LittlefsErrno(ret);
goto errout; goto errout;
} }
@@ -415,7 +422,7 @@ int LfsClosedir(struct Dir *dir)
ret = (int)LOS_NOK; ret = (int)LOS_NOK;
} }
free(dirInfo); LOSCFG_FS_FREE_HOOK(dirInfo);
dir->dData = NULL; dir->dData = NULL;
return ret; return ret;
@@ -432,7 +439,7 @@ int LfsOpen(struct File *file, const char *pathName, int openFlag)
return (int)LOS_NOK; return (int)LOS_NOK;
} }
lfsHandle = (lfs_file_t *)malloc(sizeof(lfs_file_t)); lfsHandle = (lfs_file_t *)LOSCFG_FS_MALLOC_HOOK(sizeof(lfs_file_t));
if (lfsHandle == NULL) { if (lfsHandle == NULL) {
errno = ENOMEM; errno = ENOMEM;
return (int)LOS_NOK; return (int)LOS_NOK;
@@ -441,7 +448,7 @@ int LfsOpen(struct File *file, const char *pathName, int openFlag)
int lfsOpenFlag = ConvertFlagToLfsOpenFlag(openFlag); int lfsOpenFlag = ConvertFlagToLfsOpenFlag(openFlag);
ret = lfs_file_open((lfs_t *)file->fMp->mData, lfsHandle, pathName, lfsOpenFlag); ret = lfs_file_open((lfs_t *)file->fMp->mData, lfsHandle, pathName, lfsOpenFlag);
if (ret != 0) { if (ret != 0) {
free(lfsHandle); LOSCFG_FS_FREE_HOOK(lfsHandle);
errno = LittlefsErrno(ret); errno = LittlefsErrno(ret);
goto errout; goto errout;
} }
@@ -569,7 +576,7 @@ int LfsClose(struct File *file)
ret = (int)LOS_NOK; ret = (int)LOS_NOK;
} }
free(file->fData); LOSCFG_FS_FREE_HOOK(file->fData);
file->fData = NULL; file->fData = NULL;
return ret; return ret;
} }

View File

@@ -38,6 +38,7 @@
#define _LOS_FS_H_ #define _LOS_FS_H_
#include "los_config.h" #include "los_config.h"
#include "los_memory.h"
#include "dirent.h" #include "dirent.h"
#include "sys/mount.h" #include "sys/mount.h"
#include "sys/statfs.h" #include "sys/statfs.h"
@@ -45,6 +46,7 @@
#include "sys/uio.h" #include "sys/uio.h"
#include "unistd.h" #include "unistd.h"
#include <stdarg.h> #include <stdarg.h>
#include "vfs_maps.h"
#ifdef __cplusplus #ifdef __cplusplus
#if __cplusplus #if __cplusplus
@@ -52,6 +54,14 @@ extern "C" {
#endif /* __cplusplus */ #endif /* __cplusplus */
#endif /* __cplusplus */ #endif /* __cplusplus */
#ifndef LOSCFG_FS_MALLOC_HOOK
#define LOSCFG_FS_MALLOC_HOOK(size) LOS_MemAlloc((VOID *)OS_SYS_MEM_ADDR, size)
#endif
#ifndef LOSCFG_FS_FREE_HOOK
#define LOSCFG_FS_FREE_HOOK(ptr) LOS_MemFree((VOID *)OS_SYS_MEM_ADDR, ptr)
#endif
int LOS_Open(const char *path, int flags, ...); int LOS_Open(const char *path, int flags, ...);
int LOS_Close(int fd); int LOS_Close(int fd);
ssize_t LOS_Read(int fd, void *buff, size_t bytes); ssize_t LOS_Read(int fd, void *buff, size_t bytes);
@@ -143,6 +153,28 @@ int LOS_DiskPartition(const char *dev, const char *fsType, int *lengthArray, int
*/ */
int LOS_PartitionFormat(const char *partName, char *fsType, void *data); int LOS_PartitionFormat(const char *partName, char *fsType, void *data);
/*
* @brief new file system callbacks register.
* These callback functions are the adaptation layer implemented by the developer,
* used to interconnect the vfs with the new file system.
*
* LOS_FsRegister must be called after kernel initialization is complete.
*
* @param fsType file system type, don't register the same type fs more than once.
* @param fsMops mount operation of the fs.
* @param fsFops file operation of the fs.
* @param fsMgt management operation of the fs.
*
* @return Return LOS_OK if success.
* Return LOS_NOK if error.
* errno EINVAL: input errors, such as null pointers.
* errno ENOMEM: memory may malloc failed.
*
*/
int LOS_FsRegister(const char *fsType, const struct MountOps *fsMops,
const struct FileOps *fsFops, const struct FsManagement *fsMgt);
#ifdef __cplusplus #ifdef __cplusplus
#if __cplusplus #if __cplusplus
extern "C" { extern "C" {

View File

@@ -49,19 +49,15 @@
#ifdef LOSCFG_FS_FAT #ifdef LOSCFG_FS_FAT
#include "fatfs_conf.h" #include "fatfs_conf.h"
#define __FAT_NFILE FAT_MAX_OPEN_FILES
#else
#define __FAT_NFILE 0
#endif #endif
#ifdef LOSCFG_FS_LITTLEFS #ifdef LOSCFG_FS_LITTLEFS
#include "lfs_conf.h" #include "lfs_conf.h"
#define __LFS_NFILE LOSCFG_LFS_MAX_OPEN_FILES
#else
#define __LFS_NFILE 0
#endif #endif
#define CONFIG_NFILE_DESCRIPTORS (__FAT_NFILE + __LFS_NFILE) #ifndef CONFIG_NFILE_DESCRIPTORS
#define CONFIG_NFILE_DESCRIPTORS 256
#endif
#define NR_OPEN_DEFAULT CONFIG_NFILE_DESCRIPTORS #define NR_OPEN_DEFAULT CONFIG_NFILE_DESCRIPTORS
@@ -88,4 +84,9 @@
#define MAX_DIRENT_NUM 14 // 14 means 4096 length buffer can store 14 dirent, see struct DIR #define MAX_DIRENT_NUM 14 // 14 means 4096 length buffer can store 14 dirent, see struct DIR
/* max number of open directories */
#ifndef LOSCFG_MAX_OPEN_DIRS
#define LOSCFG_MAX_OPEN_DIRS 10
#endif
#endif #endif

View File

@@ -40,6 +40,7 @@
#include "fcntl.h" #include "fcntl.h"
#include "los_mux.h" #include "los_mux.h"
#include "los_debug.h" #include "los_debug.h"
#include "los_sched.h"
#include "limits.h" #include "limits.h"
#include "securec.h" #include "securec.h"
#include "vfs_config.h" #include "vfs_config.h"
@@ -56,10 +57,6 @@
#define CONFIG_NSOCKET_DESCRIPTORS 0 #define CONFIG_NSOCKET_DESCRIPTORS 0
#endif #endif
#ifndef CONFIG_NFILE_DESCRIPTORS
#define CONFIG_NFILE_DESCRIPTORS 256
#endif
#ifdef LOSCFG_RANDOM_DEV #ifdef LOSCFG_RANDOM_DEV
#include "hks_client.h" #include "hks_client.h"
#define RANDOM_DEV_FD CONFIG_NFILE_DESCRIPTORS + CONFIG_NSOCKET_DESCRIPTORS #define RANDOM_DEV_FD CONFIG_NFILE_DESCRIPTORS + CONFIG_NSOCKET_DESCRIPTORS
@@ -85,7 +82,7 @@ int PollQueryFd(int fd, struct PollTable *table)
#endif #endif
#define FREE_AND_SET_NULL(ptr) do { \ #define FREE_AND_SET_NULL(ptr) do { \
free(ptr); \ LOSCFG_FS_FREE_HOOK(ptr); \
ptr = NULL; \ ptr = NULL; \
} while (0) } while (0)
@@ -93,9 +90,13 @@ int PollQueryFd(int fd, struct PollTable *table)
#define IOV_MAX_CNT 4 #define IOV_MAX_CNT 4
UINT32 g_fsMutex; UINT32 g_fsMutex;
static UINT32 g_dirNum = 0;
int VfsLock(void) int VfsLock(void)
{ {
if (!OsCheckKernelRunning()) {
return LOS_OK;
}
if (LOS_MuxPend(g_fsMutex, LOS_WAIT_FOREVER) != LOS_OK) { if (LOS_MuxPend(g_fsMutex, LOS_WAIT_FOREVER) != LOS_OK) {
PRINT_ERR("VfsLock failed!"); PRINT_ERR("VfsLock failed!");
return (int)LOS_NOK; return (int)LOS_NOK;
@@ -106,6 +107,9 @@ int VfsLock(void)
void VfsUnlock(void) void VfsUnlock(void)
{ {
if (!OsCheckKernelRunning()) {
return;
}
(void)LOS_MuxPost(g_fsMutex); (void)LOS_MuxPost(g_fsMutex);
} }
@@ -136,13 +140,13 @@ static size_t GetCanonicalPath(const char *cwd, const char *path, char *buf, siz
offset = strlen("///") + 1; // three '/' and one '\0' offset = strlen("///") + 1; // three '/' and one '\0'
size_t tmpLen = strlen(cwd) + strlen(path) + offset; size_t tmpLen = strlen(cwd) + strlen(path) + offset;
char *tmpBuf = (char *)malloc(tmpLen); char *tmpBuf = (char *)LOSCFG_FS_MALLOC_HOOK(tmpLen);
if (tmpBuf == NULL) { if (tmpBuf == NULL) {
return LOS_OK; return LOS_OK;
} }
if (-1 == sprintf_s(tmpBuf, tmpLen, "/%s/%s/", cwd, path)) { if (-1 == sprintf_s(tmpBuf, tmpLen, "/%s/%s/", cwd, path)) {
free(tmpBuf); LOSCFG_FS_FREE_HOOK(tmpBuf);
return LOS_OK; return LOS_OK;
} }
@@ -151,7 +155,7 @@ static size_t GetCanonicalPath(const char *cwd, const char *path, char *buf, siz
offset = strlen("/./") - 1; offset = strlen("/./") - 1;
while ((p = strstr(tmpBuf, "/./")) != NULL) { while ((p = strstr(tmpBuf, "/./")) != NULL) {
if (EOK != memmove_s(p, tmpLen - (p - tmpBuf), p + offset, tmpLen - (p - tmpBuf) - offset)) { if (EOK != memmove_s(p, tmpLen - (p - tmpBuf), p + offset, tmpLen - (p - tmpBuf) - offset)) {
free(tmpBuf); LOSCFG_FS_FREE_HOOK(tmpBuf);
return LOS_OK; return LOS_OK;
} }
} }
@@ -159,7 +163,7 @@ static size_t GetCanonicalPath(const char *cwd, const char *path, char *buf, siz
/* replace // to / */ /* replace // to / */
while ((p = strstr(tmpBuf, "//")) != NULL) { while ((p = strstr(tmpBuf, "//")) != NULL) {
if (EOK != memmove_s(p, tmpLen - (p - tmpBuf), p + 1, tmpLen - (p - tmpBuf) - 1)) { if (EOK != memmove_s(p, tmpLen - (p - tmpBuf), p + 1, tmpLen - (p - tmpBuf) - 1)) {
free(tmpBuf); LOSCFG_FS_FREE_HOOK(tmpBuf);
return LOS_OK; return LOS_OK;
} }
} }
@@ -172,7 +176,7 @@ static size_t GetCanonicalPath(const char *cwd, const char *path, char *buf, siz
--start; --start;
} }
if (EOK != memmove_s(start, tmpLen - (start - tmpBuf), p + offset, tmpLen - (p - tmpBuf) - offset)) { if (EOK != memmove_s(start, tmpLen - (start - tmpBuf), p + offset, tmpLen - (p - tmpBuf) - offset)) {
free(tmpBuf); LOSCFG_FS_FREE_HOOK(tmpBuf);
return LOS_OK; return LOS_OK;
} }
} }
@@ -184,23 +188,24 @@ static size_t GetCanonicalPath(const char *cwd, const char *path, char *buf, siz
} }
if ((!buf) || (bufSize == 0)) { if ((!buf) || (bufSize == 0)) {
free(tmpBuf); LOSCFG_FS_FREE_HOOK(tmpBuf);
return totalLen; return totalLen;
} }
if (EOK != memcpy_s(buf, bufSize, tmpBuf, (((totalLen + 1) > bufSize) ? bufSize : (totalLen + 1)))) { if (EOK != memcpy_s(buf, bufSize, tmpBuf, (((totalLen + 1) > bufSize) ? bufSize : (totalLen + 1)))) {
free(tmpBuf); LOSCFG_FS_FREE_HOOK(tmpBuf);
return LOS_OK; return LOS_OK;
} }
buf[bufSize - 1] = 0; buf[bufSize - 1] = 0;
free(tmpBuf); LOSCFG_FS_FREE_HOOK(tmpBuf);
return totalLen; return totalLen;
} }
#endif #endif
static int VfsOpen(const char *path, int flags) static int VfsOpen(const char *path, int flags)
{ {
size_t len;
struct File *file = NULL; struct File *file = NULL;
int fd = -1; int fd = -1;
const char *pathInMp = NULL; const char *pathInMp = NULL;
@@ -240,13 +245,15 @@ static int VfsOpen(const char *path, int flags)
return fd; return fd;
} }
file->fullPath = strdup(path); len = strlen(path) + 1;
file->fullPath = LOSCFG_FS_MALLOC_HOOK(len);
if (file->fullPath == NULL) { if (file->fullPath == NULL) {
VFS_ERRNO_SET(ENOMEM); VFS_ERRNO_SET(ENOMEM);
VfsFilePut(file); VfsFilePut(file);
VfsUnlock(); VfsUnlock();
return (int)LOS_NOK; return (int)LOS_NOK;
} }
(void)strcpy_s((char *)file->fullPath, len, path);
file->fFlags = (UINT32)flags; file->fFlags = (UINT32)flags;
file->fOffset = 0; file->fOffset = 0;
@@ -337,7 +344,7 @@ static int VfsClose(int fd)
} }
if (file->fullPath != NULL) { if (file->fullPath != NULL) {
free((void *)file->fullPath); LOSCFG_FS_FREE_HOOK((void *)file->fullPath);
} }
VfsDetachFile(file); VfsDetachFile(file);
@@ -644,7 +651,7 @@ static DIR *VfsOpendir(const char *path)
return NULL; return NULL;
} }
dir = (struct Dir *)malloc(sizeof(struct Dir)); dir = (struct Dir *)LOSCFG_FS_MALLOC_HOOK(sizeof(struct Dir));
if (dir == NULL) { if (dir == NULL) {
VFS_ERRNO_SET(ENOMEM); VFS_ERRNO_SET(ENOMEM);
return NULL; return NULL;
@@ -652,7 +659,14 @@ static DIR *VfsOpendir(const char *path)
if (VfsLock() != LOS_OK) { if (VfsLock() != LOS_OK) {
VFS_ERRNO_SET(EAGAIN); VFS_ERRNO_SET(EAGAIN);
free(dir); LOSCFG_FS_FREE_HOOK(dir);
return NULL;
}
if (g_dirNum >= LOSCFG_MAX_OPEN_DIRS) {
VFS_ERRNO_SET(ENFILE);
VfsUnlock();
LOSCFG_FS_FREE_HOOK(dir);
return NULL; return NULL;
} }
@@ -660,14 +674,14 @@ static DIR *VfsOpendir(const char *path)
if ((mp == NULL) || (pathInMp == NULL)) { if ((mp == NULL) || (pathInMp == NULL)) {
VFS_ERRNO_SET(ENOENT); VFS_ERRNO_SET(ENOENT);
VfsUnlock(); VfsUnlock();
free(dir); LOSCFG_FS_FREE_HOOK(dir);
return NULL; return NULL;
} }
if (mp->mFs->fsFops->opendir == NULL) { if (mp->mFs->fsFops->opendir == NULL) {
VFS_ERRNO_SET(ENOTSUP); VFS_ERRNO_SET(ENOTSUP);
VfsUnlock(); VfsUnlock();
free(dir); LOSCFG_FS_FREE_HOOK(dir);
return NULL; return NULL;
} }
@@ -677,8 +691,9 @@ static DIR *VfsOpendir(const char *path)
ret = (UINT32)mp->mFs->fsFops->opendir(dir, pathInMp); ret = (UINT32)mp->mFs->fsFops->opendir(dir, pathInMp);
if (ret == 0) { if (ret == 0) {
mp->mRefs++; mp->mRefs++;
g_dirNum++;
} else { } else {
free(dir); LOSCFG_FS_FREE_HOOK(dir);
dir = NULL; dir = NULL;
} }
@@ -742,12 +757,13 @@ static int VfsClosedir(DIR *d)
if (ret == 0) { if (ret == 0) {
mp->mRefs--; mp->mRefs--;
g_dirNum--;
} else { } else {
VFS_ERRNO_SET(EBADF); VFS_ERRNO_SET(EBADF);
} }
VfsUnlock(); VfsUnlock();
free(dir); LOSCFG_FS_FREE_HOOK(dir);
dir = NULL; dir = NULL;
return ret; return ret;
} }
@@ -920,7 +936,7 @@ int LOS_Open(const char *path, int flags, ...)
return (int)LOS_NOK; return (int)LOS_NOK;
} }
char *canonicalPath = (char *)malloc(pathLen); char *canonicalPath = (char *)LOSCFG_FS_MALLOC_HOOK(pathLen);
if (!canonicalPath) { if (!canonicalPath) {
errno = ENOMEM; errno = ENOMEM;
return (int)LOS_NOK; return (int)LOS_NOK;
@@ -1235,7 +1251,7 @@ ssize_t LOS_Readv(int fd, const struct iovec *iovBuf, int iovcnt)
return (ssize_t)LOS_NOK; return (ssize_t)LOS_NOK;
} }
totalLen = bufLen * sizeof(char); totalLen = bufLen * sizeof(char);
buf = (char *)malloc(totalLen); buf = (char *)LOSCFG_FS_MALLOC_HOOK(totalLen);
if (buf == NULL) { if (buf == NULL) {
return (ssize_t)LOS_NOK; return (ssize_t)LOS_NOK;
} }
@@ -1252,7 +1268,7 @@ ssize_t LOS_Readv(int fd, const struct iovec *iovBuf, int iovcnt)
size_t lenToRead = totalLen < bytesToRead ? totalLen : bytesToRead; size_t lenToRead = totalLen < bytesToRead ? totalLen : bytesToRead;
ret = memcpy_s(readBuf, bytesToRead, curBuf, lenToRead); ret = memcpy_s(readBuf, bytesToRead, curBuf, lenToRead);
if (ret != EOK) { if (ret != EOK) {
free(buf); LOSCFG_FS_FREE_HOOK(buf);
return (ssize_t)LOS_NOK; return (ssize_t)LOS_NOK;
} }
if (totalLen < (size_t)bytesToRead) { if (totalLen < (size_t)bytesToRead) {
@@ -1261,7 +1277,7 @@ ssize_t LOS_Readv(int fd, const struct iovec *iovBuf, int iovcnt)
curBuf += bytesToRead; curBuf += bytesToRead;
totalLen -= bytesToRead; totalLen -= bytesToRead;
} }
free(buf); LOSCFG_FS_FREE_HOOK(buf);
return totalBytesRead; return totalBytesRead;
} }
@@ -1293,7 +1309,7 @@ ssize_t LOS_Writev(int fd, const struct iovec *iovBuf, int iovcnt)
return (ssize_t)LOS_NOK; return (ssize_t)LOS_NOK;
} }
totalLen = bufLen * sizeof(char); totalLen = bufLen * sizeof(char);
buf = (char *)malloc(totalLen); buf = (char *)LOSCFG_FS_MALLOC_HOOK(totalLen);
if (buf == NULL) { if (buf == NULL) {
return (ssize_t)LOS_NOK; return (ssize_t)LOS_NOK;
} }
@@ -1306,7 +1322,7 @@ ssize_t LOS_Writev(int fd, const struct iovec *iovBuf, int iovcnt)
} }
ret = memcpy_s(curBuf, totalLen, writeBuf, bytesToWrite); ret = memcpy_s(curBuf, totalLen, writeBuf, bytesToWrite);
if (ret != EOK) { if (ret != EOK) {
free(buf); LOSCFG_FS_FREE_HOOK(buf);
return (ssize_t)LOS_NOK; return (ssize_t)LOS_NOK;
} }
curBuf += bytesToWrite; curBuf += bytesToWrite;
@@ -1314,7 +1330,7 @@ ssize_t LOS_Writev(int fd, const struct iovec *iovBuf, int iovcnt)
} }
totalBytesWritten = write(fd, buf, bufLen); totalBytesWritten = write(fd, buf, bufLen);
free(buf); LOSCFG_FS_FREE_HOOK(buf);
return totalBytesWritten; return totalBytesWritten;
} }

View File

@@ -33,6 +33,7 @@
#include "securec.h" #include "securec.h"
#include "los_debug.h" #include "los_debug.h"
#include "los_compiler.h" #include "los_compiler.h"
#include "los_fs.h"
struct FsMap *g_fsMap = NULL; struct FsMap *g_fsMap = NULL;
@@ -54,25 +55,31 @@ struct FsMap *VfsFsMapGet(const char *fsType)
return NULL; return NULL;
} }
int OsFsRegister(const char *fsType, struct MountOps *fsMops, int OsFsRegister(const char *fsType, const struct MountOps *fsMops,
struct FileOps *fsFops, struct FsManagement *fsMgt) const struct FileOps *fsFops, const struct FsManagement *fsMgt)
{ {
size_t len;
if ((fsMops == NULL) || (fsFops == NULL)) { if ((fsMops == NULL) || (fsFops == NULL)) {
VFS_ERRNO_SET(EINVAL);
return (int)LOS_NOK; return (int)LOS_NOK;
} }
struct FsMap *newfs = (struct FsMap *)malloc(sizeof(struct FsMap)); struct FsMap *newfs = (struct FsMap *)LOSCFG_FS_MALLOC_HOOK(sizeof(struct FsMap));
if (newfs == NULL) { if (newfs == NULL) {
PRINT_ERR("Fs register malloc failed, fsType %s.\n", fsType); PRINT_ERR("Fs register malloc failed, fsType %s.\n", fsType);
VFS_ERRNO_SET(ENOMEM);
return (int)LOS_NOK; return (int)LOS_NOK;
} }
(void)memset_s(newfs, sizeof(struct FsMap), 0, sizeof(struct FsMap)); (void)memset_s(newfs, sizeof(struct FsMap), 0, sizeof(struct FsMap));
newfs->fsType = strdup(fsType); len = strlen(fsType) + 1;
newfs->fsType = LOSCFG_FS_MALLOC_HOOK(len);
if (newfs->fsType == NULL) { if (newfs->fsType == NULL) {
free(newfs); LOSCFG_FS_FREE_HOOK(newfs);
VFS_ERRNO_SET(ENOMEM);
return (int)LOS_NOK; return (int)LOS_NOK;
} }
(void)strcpy_s((char *)newfs->fsType, len, fsType);
newfs->fsMops = fsMops; newfs->fsMops = fsMops;
newfs->fsFops = fsFops; newfs->fsFops = fsFops;
@@ -86,3 +93,15 @@ int OsFsRegister(const char *fsType, struct MountOps *fsMops,
VfsUnlock(); VfsUnlock();
return LOS_OK; return LOS_OK;
} }
int LOS_FsRegister(const char *fsType, const struct MountOps *fsMops,
const struct FileOps *fsFops, const struct FsManagement *fsMgt)
{
if (VfsFsMapGet(fsType) != NULL) {
PRINT_ERR("fsType has been registered or fsType error\n");
VFS_ERRNO_SET(EINVAL);
return (int)LOS_NOK;
}
return OsFsRegister(fsType, fsMops, fsFops, fsMgt);
}

View File

@@ -56,8 +56,8 @@ struct FsMap {
struct FsMap *next; struct FsMap *next;
}; };
int OsFsRegister(const char *fsType, struct MountOps *fsMops, int OsFsRegister(const char *fsType, const struct MountOps *fsMops,
struct FileOps *fsFops, struct FsManagement *fsMgt); const struct FileOps *fsFops, const struct FsManagement *fsMgt);
struct FsMap *VfsFsMapGet(const char *fsType); struct FsMap *VfsFsMapGet(const char *fsType);
#ifdef __cplusplus #ifdef __cplusplus

View File

@@ -33,6 +33,8 @@
#include "vfs_config.h" #include "vfs_config.h"
#include "stdlib.h" #include "stdlib.h"
#include "string.h" #include "string.h"
#include "errno.h"
#include "securec.h"
#include "vfs_operations.h" #include "vfs_operations.h"
#include "los_compiler.h" #include "los_compiler.h"
#include "los_debug.h" #include "los_debug.h"
@@ -122,7 +124,7 @@ struct MountPoint *VfsMpFind(const char *path, const char **pathInMp)
return bestMp; return bestMp;
} }
STATIC struct MountPoint *MountPointInit(const char *target, const char *fsType, unsigned long mountflags) STATIC struct MountPoint *VfsMountPointInit(const char *target, const char *fsType, unsigned long mountflags)
{ {
struct MountPoint *mp = NULL; struct MountPoint *mp = NULL;
const char *pathInMp = NULL; const char *pathInMp = NULL;
@@ -140,7 +142,7 @@ STATIC struct MountPoint *MountPointInit(const char *target, const char *fsType,
return NULL; return NULL;
} }
mp = (struct MountPoint *)malloc(sizeof(struct MountPoint)); mp = (struct MountPoint *)LOSCFG_FS_MALLOC_HOOK(sizeof(struct MountPoint));
if (mp == NULL) { if (mp == NULL) {
return NULL; return NULL;
} }
@@ -155,10 +157,32 @@ STATIC struct MountPoint *MountPointInit(const char *target, const char *fsType,
return mp; return mp;
} }
STATIC int VfsRemount(const char *source, const char *target,
const char *fsType, unsigned long mountflags,
const void *data)
{
(VOID)source;
(VOID)fsType;
struct MountPoint *mp;
mp = VfsMpFind(target, NULL);
if (mp == NULL) {
errno = EINVAL;
return (int)LOS_NOK;
}
LOS_ASSERT(mp->mFs != NULL);
LOS_ASSERT(mp->mFs->fsMops != NULL);
LOS_ASSERT(mp->mFs->fsMops->mount != NULL);
return mp->mFs->fsMops->mount(mp, mountflags, data);
}
int LOS_FsMount(const char *source, const char *target, int LOS_FsMount(const char *source, const char *target,
const char *fsType, unsigned long mountflags, const char *fsType, unsigned long mountflags,
const void *data) const void *data)
{ {
size_t len;
int ret; int ret;
struct MountPoint *mp = NULL; struct MountPoint *mp = NULL;
@@ -169,25 +193,35 @@ int LOS_FsMount(const char *source, const char *target,
(void)VfsLock(); (void)VfsLock();
mp = MountPointInit(target, fsType, mountflags); if (mountflags & MS_REMOUNT) {
ret = VfsRemount(source, target, fsType, mountflags, data);
VfsUnlock();
return ret;
}
mp = VfsMountPointInit(target, fsType, mountflags);
if (mp == NULL) { if (mp == NULL) {
VfsUnlock(); VfsUnlock();
return (int)LOS_NOK; return (int)LOS_NOK;
} }
if (source != NULL) { if (source != NULL) {
mp->mDev = strdup(source); len = strlen(source) + 1;
mp->mDev = LOSCFG_FS_MALLOC_HOOK(len);
if (mp->mDev == NULL) { if (mp->mDev == NULL) {
free(mp); LOSCFG_FS_FREE_HOOK(mp);
VfsUnlock(); VfsUnlock();
return (int)LOS_NOK; return (int)LOS_NOK;
} }
(void)strcpy_s((char *)mp->mDev, len, source);
} }
mp->mPath = strdup(target); len = strlen(target) + 1;
mp->mPath = LOSCFG_FS_MALLOC_HOOK(len);
if (mp->mPath == NULL) { if (mp->mPath == NULL) {
goto errout; goto errout;
} }
(void)strcpy_s((char *)mp->mPath, len, target);
ret = mp->mFs->fsMops->mount(mp, mountflags, data); ret = mp->mFs->fsMops->mount(mp, mountflags, data);
if (ret != 0) { if (ret != 0) {
@@ -201,9 +235,9 @@ int LOS_FsMount(const char *source, const char *target,
return LOS_OK; return LOS_OK;
errout: errout:
free((void *)mp->mPath); LOSCFG_FS_FREE_HOOK((void *)mp->mPath);
free((void *)mp->mDev); LOSCFG_FS_FREE_HOOK((void *)mp->mDev);
free(mp); LOSCFG_FS_FREE_HOOK(mp);
VfsUnlock(); VfsUnlock();
return (int)LOS_NOK; return (int)LOS_NOK;
} }
@@ -238,9 +272,9 @@ int LOS_FsUmount(const char *target)
/* delete mp from mount list */ /* delete mp from mount list */
MpDeleteFromList(mp); MpDeleteFromList(mp);
mp->mFs->fsRefs--; mp->mFs->fsRefs--;
free((void *)mp->mPath); LOSCFG_FS_FREE_HOOK((void *)mp->mPath);
free((void *)mp->mDev); LOSCFG_FS_FREE_HOOK((void *)mp->mDev);
free(mp); LOSCFG_FS_FREE_HOOK(mp);
VfsUnlock(); VfsUnlock();
return LOS_OK; return LOS_OK;
@@ -298,9 +332,9 @@ int LOS_FsUmount2(const char *target, int flag)
/* delete mp from mount list */ /* delete mp from mount list */
MpDeleteFromList(mp); MpDeleteFromList(mp);
mp->mFs->fsRefs--; mp->mFs->fsRefs--;
free((void *)mp->mPath); LOSCFG_FS_FREE_HOOK((void *)mp->mPath);
free((void *)mp->mDev); LOSCFG_FS_FREE_HOOK((void *)mp->mDev);
free(mp); LOSCFG_FS_FREE_HOOK(mp);
VfsUnlock(); VfsUnlock();
return LOS_OK; return LOS_OK;

View File

@@ -77,6 +77,7 @@ struct DeviceDesc *getDeviceList(VOID)
static int AddDevice(const char *dev, const char *fsType, int *lengthArray, int *addrArray, static int AddDevice(const char *dev, const char *fsType, int *lengthArray, int *addrArray,
int partNum) int partNum)
{ {
size_t len;
struct DeviceDesc *prev = NULL; struct DeviceDesc *prev = NULL;
for (prev = g_deviceList; prev != NULL; prev = prev->dNext) { for (prev = g_deviceList; prev != NULL; prev = prev->dNext) {
if (strcmp(prev->dDev, dev) == 0) { if (strcmp(prev->dDev, dev) == 0) {
@@ -90,21 +91,25 @@ static int AddDevice(const char *dev, const char *fsType, int *lengthArray, int
return (int)LOS_NOK; return (int)LOS_NOK;
} }
prev = (struct DeviceDesc *)malloc(sizeof(struct DeviceDesc)); prev = (struct DeviceDesc *)LOSCFG_FS_MALLOC_HOOK(sizeof(struct DeviceDesc));
if (prev == NULL) { if (prev == NULL) {
errno = -ENOMEM; errno = -ENOMEM;
return (int)LOS_NOK; return (int)LOS_NOK;
} }
prev->dDev = strdup(dev); len = strlen(dev) + 1;
prev->dFsType = strdup(fsType); prev->dDev = LOSCFG_FS_MALLOC_HOOK(len);
prev->dAddrArray = (int *)malloc(partNum * sizeof(int)); len = strlen(fsType) + 1;
prev->dFsType = LOSCFG_FS_MALLOC_HOOK(len);
prev->dAddrArray = (int *)LOSCFG_FS_MALLOC_HOOK(partNum * sizeof(int));
if (prev->dDev == NULL || prev->dFsType == NULL || prev->dAddrArray == NULL) { if (prev->dDev == NULL || prev->dFsType == NULL || prev->dAddrArray == NULL) {
goto errout; goto errout;
} }
(void)strcpy_s((char *)prev->dDev, len, dev);
(void)strcpy_s((char *)prev->dFsType, len, fsType);
(void)memcpy_s(prev->dAddrArray, partNum * sizeof(int), addrArray, partNum * sizeof(int)); (void)memcpy_s(prev->dAddrArray, partNum * sizeof(int), addrArray, partNum * sizeof(int));
if (lengthArray != NULL) { if (lengthArray != NULL) {
prev->dLengthArray = (int *)malloc(partNum * sizeof(int)); prev->dLengthArray = (int *)LOSCFG_FS_MALLOC_HOOK(partNum * sizeof(int));
if (prev->dLengthArray == NULL) { if (prev->dLengthArray == NULL) {
goto errout; goto errout;
} }
@@ -117,19 +122,19 @@ static int AddDevice(const char *dev, const char *fsType, int *lengthArray, int
return LOS_OK; return LOS_OK;
errout: errout:
if (prev->dDev != NULL) { if (prev->dDev != NULL) {
free((void *)prev->dDev); LOSCFG_FS_FREE_HOOK((void *)prev->dDev);
} }
if (prev->dFsType != NULL) { if (prev->dFsType != NULL) {
free((void *)prev->dFsType); LOSCFG_FS_FREE_HOOK((void *)prev->dFsType);
} }
if (prev->dAddrArray != NULL) { if (prev->dAddrArray != NULL) {
free((void *)prev->dAddrArray); LOSCFG_FS_FREE_HOOK((void *)prev->dAddrArray);
} }
if (prev->dLengthArray != NULL) { if (prev->dLengthArray != NULL) {
free((void *)prev->dLengthArray); LOSCFG_FS_FREE_HOOK((void *)prev->dLengthArray);
} }
free(prev); LOSCFG_FS_FREE_HOOK(prev);
errno = -ENOMEM; errno = -ENOMEM;
return (int)LOS_NOK; return (int)LOS_NOK;
} }
@@ -143,9 +148,7 @@ int LOS_DiskPartition(const char *dev, const char *fsType, int *lengthArray, int
if ((fMap != NULL) && (fMap->fsMgt != NULL) && if ((fMap != NULL) && (fMap->fsMgt != NULL) &&
(fMap->fsMgt->fdisk != NULL)) { (fMap->fsMgt->fdisk != NULL)) {
ret = fMap->fsMgt->fdisk(dev, lengthArray, partNum); ret = fMap->fsMgt->fdisk(dev, lengthArray, partNum);
if (ret == (int)LOS_NOK) { return ret;
return ret;
}
} }
ret = AddDevice(dev, fsType, lengthArray, addrArray, partNum); ret = AddDevice(dev, fsType, lengthArray, addrArray, partNum);
@@ -160,8 +163,7 @@ int LOS_PartitionFormat(const char *partName, char *fsType, void *data)
format is not allowed when the device has been mounted. */ format is not allowed when the device has been mounted. */
struct MountPoint *iter = NULL; struct MountPoint *iter = NULL;
LOS_MP_FOR_EACH_ENTRY(iter) { LOS_MP_FOR_EACH_ENTRY(iter) {
if ((iter->mFs != NULL) && (iter->mFs->fsType != NULL) && if ((iter->mPath != NULL) && (strcmp(iter->mPath, partName) == 0)) {
strcmp(iter->mFs->fsType, fsType) == 0) {
errno = EBUSY; errno = EBUSY;
return (int)LOS_NOK; return (int)LOS_NOK;
} }

View File

@@ -373,7 +373,10 @@ LWIP_STATIC int OsPingFunc(u32_t *parg)
while (!ping_kill && (forever || (i < cnt))) { while (!ping_kill && (forever || (i < cnt))) {
iecho->seqno = htons((u16_t)i); iecho->seqno = htons((u16_t)i);
iecho->chksum = 0; iecho->chksum = 0;
#if (CHECKSUM_GEN_ICMP > 0)
iecho->chksum = inet_chksum((void *)iecho, iecho_len); iecho->chksum = inet_chksum((void *)iecho, iecho_len);
#endif
ret = sendto(sfd, iecho, iecho_len, 0, (struct sockaddr *)&to, (socklen_t)sizeof(to)); ret = sendto(sfd, iecho, iecho_len, 0, (struct sockaddr *)&to, (socklen_t)sizeof(to));
if (ret < 0) { if (ret < 0) {

View File

@@ -101,21 +101,27 @@ STATIC VOID OsPmTickTimerStart(LosPmCB *pm)
} }
#if (LOSCFG_BASE_CORE_TICK_WTIMER == 0) #if (LOSCFG_BASE_CORE_TICK_WTIMER == 0)
if ((tickTimer->timerStop != NULL) && (pm->enterSleepTime != 0)) { if (tickTimer->timerStop != NULL) {
/* Restore the main CPU frequency */ if (pm->enterSleepTime != 0) {
sleepTime = tickTimer->timerCycleGet(); /* Restore the main CPU frequency */
tickTimer->timerStop(); sleepTime = tickTimer->timerCycleGet();
tickTimer->timerStop();
realSleepTime = OS_SYS_CYCLE_TO_NS(sleepTime, tickTimer->freq); realSleepTime = OS_SYS_CYCLE_TO_NS(sleepTime, tickTimer->freq);
realSleepTime = OS_SYS_NS_TO_CYCLE(realSleepTime, g_sysClock); realSleepTime = OS_SYS_NS_TO_CYCLE(realSleepTime, g_sysClock);
currTime = pm->enterSleepTime + realSleepTime; currTime = pm->enterSleepTime + realSleepTime;
pm->enterSleepTime = 0; pm->enterSleepTime = 0;
OsTickTimerBaseReset(currTime); OsTickTimerBaseReset(currTime);
OsSchedResetSchedResponseTime(0); OsSchedResetSchedResponseTime(0);
/* Restart the system tick timer */
tickTimer->tickUnlock();
}
return;
} }
#endif #endif
/* Restore the system tick timer */
tickTimer->tickUnlock(); tickTimer->tickUnlock();
return; return;
} }
@@ -142,14 +148,21 @@ STATIC BOOL OsPmTickTimerStop(LosPmCB *pm)
sleepCycle = OS_SYS_CYCLE_TO_NS(realSleepTime, g_sysClock); sleepCycle = OS_SYS_CYCLE_TO_NS(realSleepTime, g_sysClock);
sleepCycle = OS_SYS_NS_TO_CYCLE(sleepCycle, tickTimer->freq); sleepCycle = OS_SYS_NS_TO_CYCLE(sleepCycle, tickTimer->freq);
if (sleepCycle == 0) {
pm->sysMode = LOS_SYS_NORMAL_SLEEP;
return FALSE;
}
/* The main CPU reduces the frequency */ /* The main CPU reduces the frequency */
pm->enterSleepTime = LOS_SysCycleGet(); pm->enterSleepTime = LOS_SysCycleGet();
/* Turn off the system tick timer and clear the count value to zero */
tickTimer->tickLock(); tickTimer->tickLock();
tickTimer->timerStart(sleepCycle); tickTimer->timerStart(sleepCycle);
return TRUE; return TRUE;
} }
#endif #endif
/* Pause the system tick timer */
tickTimer->tickLock(); tickTimer->tickLock();
return TRUE; return TRUE;
} }
@@ -167,7 +180,7 @@ STATIC VOID OsPmCpuResume(LosPmCB *pm)
STATIC VOID OsPmCpuSuspend(LosPmCB *pm) STATIC VOID OsPmCpuSuspend(LosPmCB *pm)
{ {
/* cpu enter low power mode */ /* cpu enter low-power mode */
if (pm->sysMode == LOS_SYS_NORMAL_SLEEP) { if (pm->sysMode == LOS_SYS_NORMAL_SLEEP) {
pm->sysctrl->normalSuspend(); pm->sysctrl->normalSuspend();

View File

@@ -39,7 +39,7 @@
/** /**
* @ingroup los_pm * @ingroup los_pm
* Pm error code: Invalid low power mode. * Pm error code: Invalid low-power mode.
* *
* Value: 0x02002001 * Value: 0x02002001
* *
@@ -141,21 +141,33 @@ typedef enum {
} LOS_PmNodeType; } LOS_PmNodeType;
typedef struct { typedef struct {
UINT32 (*suspend)(UINT32 mode); /* The device enters low power consumption, Unlocked task scheduling. */ UINT32 (*suspend)(UINT32 mode); /* The device enters low-power consumption, Unlocked task scheduling. */
VOID (*resume)(UINT32 mode); /* The device exits from low power consumption, Unlocked task scheduling. */ VOID (*resume)(UINT32 mode); /* The device exits from low-power consumption, Unlocked task scheduling. */
} LosPmDevice; } LosPmDevice;
typedef struct { typedef struct {
UINT32 freq; /* The frequency of the low power timer */ /* Low-power timer related implementation functions.
VOID (*timerStart)(UINT64); /* Start the low power timer */ * The function is not NULL, the low-power timer is enabled.
VOID (*timerStop)(VOID); /* Stop the low power timer */ */
UINT64 (*timerCycleGet)(VOID); /* Gets the running time of the low power timer in unit cycle */ UINT32 freq; /* The frequency of the low-power timer */
VOID (*tickLock)(VOID); /* Pause the system tick timer */ VOID (*timerStart)(UINT64); /* Start the low-power timer and set the response period */
VOID (*tickUnlock)(VOID); /* Restore the system tick timer */ VOID (*timerStop)(VOID); /* Turn off the low-power timer */
UINT64 (*timerCycleGet)(VOID); /* Gets the time the system sleeps */
/* When the low-power timer is enabled, the function of tickLock is to turn off the system tick timer and
* clear the timer's count value to zero.
* When the low-power timer is disabled, the function of tickLock is to pause the system timer.
*/
VOID (*tickLock)(VOID);
/* When the low-power timer is enabled, the function of tickUnlock is to restart the system tick timer.
* When the low-power timer is disabled, the function of tickUnlock is to restore the system tick timer.
*/
VOID (*tickUnlock)(VOID);
} LosPmTickTimer; } LosPmTickTimer;
typedef struct { typedef struct {
/* Preparations before the CPU enters low power consumption. /* Preparations before the CPU enters low-power consumption.
* All modes except normal mode are invoked. * All modes except normal mode are invoked.
* Unlocked task scheduling. * Unlocked task scheduling.
*/ */
@@ -203,10 +215,10 @@ typedef struct {
/** /**
* @ingroup los_pm * @ingroup los_pm
* @brief Initialize system low power frame. * @brief Initialize system low-power frame.
* *
* @par Description: * @par Description:
* This API is used to initialize the system low power frame. * This API is used to initialize the system low-power frame.
* *
* @attention None. * @attention None.
* *
@@ -221,10 +233,10 @@ UINT32 OsPmInit(VOID);
/** /**
* @ingroup los_pm * @ingroup los_pm
* @brief Whether the low power consumption condition is met. * @brief Whether the low-power consumption condition is met.
* *
* @par Description: * @par Description:
* This API is used to check whether low power consumption is met. * This API is used to check whether low-power consumption is met.
* *
* @attention None. * @attention None.
* *
@@ -302,10 +314,10 @@ VOID LOS_PmWakeSet(VOID);
/** /**
* @ingroup los_pm * @ingroup los_pm
* @brief Get the low power mode of the current system. * @brief Get the low-power mode of the current system.
* *
* @par Description: * @par Description:
* This API is used to get the low power mode of the current system. * This API is used to get the low-power mode of the current system.
* *
* @attention None. * @attention None.
* *
@@ -320,14 +332,14 @@ LOS_SysSleepEnum LOS_PmModeGet(VOID);
/** /**
* @ingroup los_pm * @ingroup los_pm
* @brief Set low power mode. * @brief Set low-power mode.
* *
* @par Description: * @par Description:
* This API is used to set low power mode. * This API is used to set low-power mode.
* *
* @attention None. * @attention None.
* *
* @param mode [IN] low power mode. * @param mode [IN] low-power mode.
* *
* @retval error code, LOS_OK means success. * @retval error code, LOS_OK means success.
* @par Dependency: * @par Dependency:

View File

@@ -625,6 +625,24 @@ STATIC INT32 OsIsContainersWildcard(const CHAR *filename)
return 0; return 0;
} }
/* Delete a non directory file */
STATIC INT32 OsRmFileOnly(const CHAR *fullpath)
{
struct stat statInfo = {0};
INT32 ret = stat(fullpath, &statInfo);
if (ret == 0) {
if (!S_ISDIR(statInfo.st_mode)) {
ret = unlink(fullpath);
} else {
ret = 0;
PRINTK("rm: cannot remove '%s': Is a directory\n", fullpath);
}
} else {
PRINTK("stat: get '%s' statInfo fail!\n", fullpath);
}
return ret;
}
/* Delete a matching file or directory */ /* Delete a matching file or directory */
STATIC INT32 OsWildcardDeleteFileOrDir(const CHAR *fullpath, wildcard_type mark) STATIC INT32 OsWildcardDeleteFileOrDir(const CHAR *fullpath, wildcard_type mark)
@@ -636,7 +654,7 @@ STATIC INT32 OsWildcardDeleteFileOrDir(const CHAR *fullpath, wildcard_type mark)
ret = OsShellCmdDoRmdir(fullpath); ret = OsShellCmdDoRmdir(fullpath);
break; break;
case RM_FILE: case RM_FILE:
ret = unlink(fullpath); ret = OsRmFileOnly(fullpath);
break; break;
case RM_DIR: case RM_DIR:
ret = rmdir(fullpath); ret = rmdir(fullpath);
@@ -649,8 +667,6 @@ STATIC INT32 OsWildcardDeleteFileOrDir(const CHAR *fullpath, wildcard_type mark)
perror("rm/rmdir error!"); perror("rm/rmdir error!");
return ret; return ret;
} }
PRINTK("%s match successful!delete!\n", fullpath);
return 0; return 0;
} }
@@ -728,6 +744,10 @@ STATIC INT32 OsWildcardExtractDirectory(CHAR *fullpath, VOID *dst, wildcard_type
break; break;
} }
if (!strcmp(dirent->d_name, ".") || !strcmp(dirent->d_name, "..")) {
continue;
}
ret = strcpy_s(src, PATH_MAX, f); ret = strcpy_s(src, PATH_MAX, f);
if (ret != EOK) { if (ret != EOK) {
goto closedir_out; goto closedir_out;
@@ -910,7 +930,7 @@ INT32 OsShellCmdRm(INT32 argc, const CHAR **argv)
if (OsIsContainersWildcard(fullpath)) { if (OsIsContainersWildcard(fullpath)) {
ret = OsWildcardExtractDirectory(fullpath, NULL, RM_FILE); ret = OsWildcardExtractDirectory(fullpath, NULL, RM_FILE);
} else { } else {
ret = unlink(fullpath); ret = OsRmFileOnly(fullpath);
} }
} }
if (ret == -1) { if (ret == -1) {

View File

@@ -235,7 +235,9 @@ VOID OsTraceCnvInit(VOID)
LOS_HookReg(LOS_HOOK_TYPE_QUEUE_CREATE, LOS_TraceQueueCreate); LOS_HookReg(LOS_HOOK_TYPE_QUEUE_CREATE, LOS_TraceQueueCreate);
LOS_HookReg(LOS_HOOK_TYPE_QUEUE_DELETE, LOS_TraceQueueDelete); LOS_HookReg(LOS_HOOK_TYPE_QUEUE_DELETE, LOS_TraceQueueDelete);
LOS_HookReg(LOS_HOOK_TYPE_QUEUE_READ, LOS_TraceQueueRW); LOS_HookReg(LOS_HOOK_TYPE_QUEUE_READ, LOS_TraceQueueRW);
LOS_HookReg(LOS_HOOK_TYPE_QUEUE_READ_COPY, LOS_TraceQueueRW);
LOS_HookReg(LOS_HOOK_TYPE_QUEUE_WRITE, LOS_TraceQueueRW); LOS_HookReg(LOS_HOOK_TYPE_QUEUE_WRITE, LOS_TraceQueueRW);
LOS_HookReg(LOS_HOOK_TYPE_QUEUE_WRITE_COPY, LOS_TraceQueueRW);
LOS_HookReg(LOS_HOOK_TYPE_SEM_CREATE, LOS_TraceSemCreate); LOS_HookReg(LOS_HOOK_TYPE_SEM_CREATE, LOS_TraceSemCreate);
LOS_HookReg(LOS_HOOK_TYPE_SEM_DELETE, LOS_TraceSemDelete); LOS_HookReg(LOS_HOOK_TYPE_SEM_DELETE, LOS_TraceSemDelete);
LOS_HookReg(LOS_HOOK_TYPE_SEM_POST, LOS_TraceSemPost); LOS_HookReg(LOS_HOOK_TYPE_SEM_POST, LOS_TraceSemPost);

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 97 KiB

View File

@@ -42,6 +42,9 @@
#include "los_task.h" #include "los_task.h"
#include "los_timer.h" #include "los_timer.h"
#include "los_debug.h" #include "los_debug.h"
#if (LOSCFG_MUTEX_CREATE_TRACE == 1)
#include "los_arch.h"
#endif
#include "string.h" #include "string.h"
#include "securec.h" #include "securec.h"
@@ -1002,6 +1005,10 @@ osMutexId_t osMutexNew(const osMutexAttr_t *attr)
UINT32 ret; UINT32 ret;
UINT32 muxId; UINT32 muxId;
#if (LOSCFG_MUTEX_CREATE_TRACE == 1)
UINTPTR regLR = ArchLRGet();
#endif
UNUSED(attr); UNUSED(attr);
if (OS_INT_ACTIVE) { if (OS_INT_ACTIVE) {
@@ -1010,6 +1017,9 @@ osMutexId_t osMutexNew(const osMutexAttr_t *attr)
ret = LOS_MuxCreate(&muxId); ret = LOS_MuxCreate(&muxId);
if (ret == LOS_OK) { if (ret == LOS_OK) {
#if (LOSCFG_MUTEX_CREATE_TRACE == 1)
OsSetMutexCreateInfo(GET_MUX(muxId), regLR);
#endif
return (osMutexId_t)(GET_MUX(muxId)); return (osMutexId_t)(GET_MUX(muxId));
} else { } else {
return (osMutexId_t)NULL; return (osMutexId_t)NULL;

View File

@@ -43,6 +43,7 @@ rsource "newlib/Kconfig"
config LIBC_ICCARM config LIBC_ICCARM
bool "iar libc" bool "iar libc"
depends on COMPILER_ICCARM
rsource "iccarm/Kconfig" rsource "iccarm/Kconfig"
endchoice endchoice

View File

@@ -35,4 +35,10 @@ config LIBC_ICCARM_FS
help help
This enables POSIX style file system related APIs. This enables POSIX style file system related APIs.
config LIBC_ICCARM_MALLOC
bool "Enable POSIX malloc/free API support"
default y
help
This enables POSIX malloc/free related APIs.
endif # LIBC_ICCARM endif # LIBC_ICCARM

View File

@@ -36,4 +36,10 @@ config LIBC_NEWLIB_FS
help help
This enables POSIX style file system related APIs. This enables POSIX style file system related APIs.
config LIBC_NEWLIB_MALLOC
bool "Enable POSIX malloc/free API support"
default y
help
This enables POSIX malloc/free related APIs.
endif # LIBC_NEWLIB endif # LIBC_NEWLIB

View File

@@ -34,6 +34,7 @@
#include "los_memory.h" #include "los_memory.h"
#include <malloc.h> #include <malloc.h>
#ifdef LOSCFG_LIBC_NEWLIB_MALLOC
void *zalloc(size_t size) void *zalloc(size_t size)
{ {
void *ptr = NULL; void *ptr = NULL;
@@ -111,3 +112,4 @@ void *__wrap__calloc_r(struct _reent *reent, size_t nitems, size_t size)
} }
return ptr; return ptr;
} }
#endif

View File

@@ -694,7 +694,7 @@ UINT32 OsPipeInit(VOID)
ret = LOS_MuxCreate(&g_devFdMutex); ret = LOS_MuxCreate(&g_devFdMutex);
if (ret != LOS_OK) { if (ret != LOS_OK) {
LOS_MuxDelete(g_devListMutex); (VOID)LOS_MuxDelete(g_devListMutex);
return ret; return ret;
} }

View File

@@ -38,6 +38,9 @@
#include "los_debug.h" #include "los_debug.h"
#include "los_hook.h" #include "los_hook.h"
#include "los_sched.h" #include "los_sched.h"
#if (LOSCFG_MUTEX_CREATE_TRACE == 1)
#include "los_arch.h"
#endif
#define MUTEXATTR_TYPE_MASK 0x0FU #define MUTEXATTR_TYPE_MASK 0x0FU
#define OS_SYS_NS_PER_MSECOND 1000000 #define OS_SYS_NS_PER_MSECOND 1000000
@@ -130,6 +133,10 @@ int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *mutexA
UINT32 muxHandle; UINT32 muxHandle;
UINT32 ret; UINT32 ret;
#if (LOSCFG_MUTEX_CREATE_TRACE == 1)
UINTPTR regLR = ArchLRGet();
#endif
if (mutex == NULL) { if (mutex == NULL) {
return EINVAL; return EINVAL;
} }
@@ -148,6 +155,9 @@ int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *mutexA
mutex->stAttr = useAttr; mutex->stAttr = useAttr;
mutex->magic = _MUX_MAGIC; mutex->magic = _MUX_MAGIC;
mutex->handle = muxHandle; mutex->handle = muxHandle;
#if (LOSCFG_MUTEX_CREATE_TRACE == 1)
OsSetMutexCreateInfo(GET_MUX(mutex->handle), regLR);
#endif
return 0; return 0;
} }
@@ -324,6 +334,10 @@ int pthread_mutex_timedlock(pthread_mutex_t *mutex, const struct timespec *absTi
struct timespec curTime = {0}; struct timespec curTime = {0};
LosMuxCB *muxPended = NULL; LosMuxCB *muxPended = NULL;
#if (LOSCFG_MUTEX_CREATE_TRACE == 1)
UINTPTR regLR = ArchLRGet();
#endif
ret = MuxPreCheck(mutex, OS_TCB_FROM_TID(LOS_CurTaskIDGet())); ret = MuxPreCheck(mutex, OS_TCB_FROM_TID(LOS_CurTaskIDGet()));
if (ret != 0) { if (ret != 0) {
return (INT32)ret; return (INT32)ret;
@@ -337,6 +351,9 @@ int pthread_mutex_timedlock(pthread_mutex_t *mutex, const struct timespec *absTi
if (ret != LOS_OK) { if (ret != LOS_OK) {
return MapError(ret); return MapError(ret);
} }
#if (LOSCFG_MUTEX_CREATE_TRACE == 1)
OsSetMutexCreateInfo(GET_MUX(mutex->handle), regLR);
#endif
} else { } else {
muxPended = GET_MUX(mutex->handle); muxPended = GET_MUX(mutex->handle);
if ((mutex->stAttr.type == PTHREAD_MUTEX_ERRORCHECK) && if ((mutex->stAttr.type == PTHREAD_MUTEX_ERRORCHECK) &&
@@ -364,6 +381,11 @@ int pthread_mutex_lock(pthread_mutex_t *mutex)
{ {
UINT32 ret; UINT32 ret;
LosMuxCB *muxPended = NULL; LosMuxCB *muxPended = NULL;
#if (LOSCFG_MUTEX_CREATE_TRACE == 1)
UINTPTR regLR = ArchLRGet();
#endif
LosTaskCB *runTask = OS_TCB_FROM_TID(LOS_CurTaskIDGet()); LosTaskCB *runTask = OS_TCB_FROM_TID(LOS_CurTaskIDGet());
ret = MuxPreCheck(mutex, runTask); ret = MuxPreCheck(mutex, runTask);
@@ -376,6 +398,9 @@ int pthread_mutex_lock(pthread_mutex_t *mutex)
if (ret != LOS_OK) { if (ret != LOS_OK) {
return MapError(ret); return MapError(ret);
} }
#if (LOSCFG_MUTEX_CREATE_TRACE == 1)
OsSetMutexCreateInfo(GET_MUX(mutex->handle), regLR);
#endif
} else { } else {
muxPended = GET_MUX(mutex->handle); muxPended = GET_MUX(mutex->handle);
if ((mutex->stAttr.type == PTHREAD_MUTEX_ERRORCHECK) && if ((mutex->stAttr.type == PTHREAD_MUTEX_ERRORCHECK) &&
@@ -394,6 +419,10 @@ int pthread_mutex_trylock(pthread_mutex_t *mutex)
UINT32 ret; UINT32 ret;
LosMuxCB *muxPended = NULL; LosMuxCB *muxPended = NULL;
#if (LOSCFG_MUTEX_CREATE_TRACE == 1)
UINTPTR regLR = ArchLRGet();
#endif
ret = MuxPreCheck(mutex, OS_TCB_FROM_TID(LOS_CurTaskIDGet())); ret = MuxPreCheck(mutex, OS_TCB_FROM_TID(LOS_CurTaskIDGet()));
if (ret != 0) { if (ret != 0) {
return (INT32)ret; return (INT32)ret;
@@ -404,6 +433,9 @@ int pthread_mutex_trylock(pthread_mutex_t *mutex)
if (ret != LOS_OK) { if (ret != LOS_OK) {
return MapError(ret); return MapError(ret);
} }
#if (LOSCFG_MUTEX_CREATE_TRACE == 1)
OsSetMutexCreateInfo(GET_MUX(mutex->handle), regLR);
#endif
} else { } else {
muxPended = GET_MUX(mutex->handle); muxPended = GET_MUX(mutex->handle);
if ((mutex->stAttr.type != PTHREAD_MUTEX_RECURSIVE) && (muxPended->muxCount != 0)) { if ((mutex->stAttr.type != PTHREAD_MUTEX_RECURSIVE) && (muxPended->muxCount != 0)) {

View File

@@ -490,6 +490,72 @@ extern UINT32 LOS_MemIntegrityCheck(const VOID *pool);
* </ul> * </ul>
* @see None. * @see None.
*/ */
/* Supposing a Second Level Index: SLI = 3. */
#define OS_MEM_SLI 3
/* Giving 1 free list for each small bucket: 4, 8, 12, up to 124. */
#define OS_MEM_SMALL_BUCKET_COUNT 31
#define OS_MEM_SMALL_BUCKET_MAX_SIZE 128
/* Giving 2^OS_MEM_SLI free lists for each large bucket. */
#define OS_MEM_LARGE_BUCKET_COUNT 24
/* OS_MEM_SMALL_BUCKET_MAX_SIZE to the power of 2 is 7. */
#define OS_MEM_LARGE_START_BUCKET 7
/* The count of free list. */
#define OS_MEM_FREE_LIST_COUNT (OS_MEM_SMALL_BUCKET_COUNT + (OS_MEM_LARGE_BUCKET_COUNT << OS_MEM_SLI))
/* The bitmap is used to indicate whether the free list is empty, 1: not empty, 0: empty. */
#define OS_MEM_BITMAP_WORDS ((OS_MEM_FREE_LIST_COUNT >> 5) + 1)
struct OsMemNodeHead {
#if (LOSCFG_BASE_MEM_NODE_INTEGRITY_CHECK == 1)
UINT32 magic;
#endif
#if (LOSCFG_MEM_LEAKCHECK == 1)
UINTPTR linkReg[LOSCFG_MEM_RECORD_LR_CNT];
#endif
union {
struct OsMemNodeHead *prev; /* The prev is used for current node points to the previous node */
struct OsMemNodeHead *next; /* The next is used for sentinel node points to the expand node */
} ptr;
#if (LOSCFG_TASK_MEM_USED == 1)
UINT32 taskID;
UINT32 sizeAndFlag;
#elif (LOSCFG_MEM_FREE_BY_TASKID == 1)
UINT32 taskID : 6;
UINT32 sizeAndFlag : 26;
#else
UINT32 sizeAndFlag;
#endif
};
struct OsMemFreeNodeHead {
struct OsMemNodeHead header;
struct OsMemFreeNodeHead *prev;
struct OsMemFreeNodeHead *next;
};
struct OsMemPoolInfo {
VOID *pool;
UINT32 totalSize;
UINT32 attr;
#if (LOSCFG_MEM_WATERLINE == 1)
UINT32 waterLine; /* Maximum usage size in a memory pool */
UINT32 curUsedSize; /* Current usage size in a memory pool */
#endif
#if (LOSCFG_MEM_MUL_REGIONS == 1)
UINT32 totalGapSize;
#endif
};
struct OsMemPoolHead {
struct OsMemPoolInfo info;
UINT32 freeListBitmap[OS_MEM_BITMAP_WORDS];
struct OsMemFreeNodeHead *freeList[OS_MEM_FREE_LIST_COUNT];
#if (LOSCFG_MEM_MUL_POOL == 1)
VOID *nextPool;
#endif
};
extern VOID LOS_MemUnlockEnable(VOID *pool); extern VOID LOS_MemUnlockEnable(VOID *pool);
extern UINT32 OsMemSystemInit(VOID); extern UINT32 OsMemSystemInit(VOID);

View File

@@ -39,7 +39,6 @@
#include "los_task.h" #include "los_task.h"
#ifdef __cplusplus #ifdef __cplusplus
#if __cplusplus #if __cplusplus
extern "C" { extern "C" {
@@ -302,6 +301,9 @@ typedef struct {
UINT32 muxID; /**< Handle ID */ UINT32 muxID; /**< Handle ID */
LOS_DL_LIST muxList; /**< Mutex linked list */ LOS_DL_LIST muxList; /**< Mutex linked list */
LosTaskCB *owner; /**< The current thread that is locking a mutex */ LosTaskCB *owner; /**< The current thread that is locking a mutex */
#if (LOSCFG_MUTEX_CREATE_TRACE == 1)
UINTPTR createInfo; /**< Return address of the caller */
#endif
UINT16 priority; /**< Priority of the thread that is locking a mutex */ UINT16 priority; /**< Priority of the thread that is locking a mutex */
} LosMuxCB; } LosMuxCB;
@@ -351,6 +353,13 @@ extern UINT32 OsMuxInit(VOID);
*/ */
#define GET_MUX_LIST(ptr) LOS_DL_LIST_ENTRY(ptr, LosMuxCB, muxList) #define GET_MUX_LIST(ptr) LOS_DL_LIST_ENTRY(ptr, LosMuxCB, muxList)
#if (LOSCFG_MUTEX_CREATE_TRACE == 1)
STATIC INLINE VOID OsSetMutexCreateInfo(LosMuxCB *mux, UINTPTR val)
{
mux->createInfo = val;
}
#endif /* LOSCFG_MUTEX_CREATE_TRACE == 1 */
#ifdef __cplusplus #ifdef __cplusplus
#if __cplusplus #if __cplusplus
} }

View File

@@ -96,6 +96,11 @@ STATIC INLINE UINT64 OsGetCurrSchedTimeCycle(VOID)
return LOS_SysCycleGet(); return LOS_SysCycleGet();
} }
STATIC INLINE BOOL OsCheckKernelRunning(VOID)
{
return (g_taskScheduled && LOS_CHECK_SCHEDULE);
}
/** /**
* @ingroup los_sched * @ingroup los_sched
* @brief Get the time, in nanoseconds, remaining before the next tick interrupt response. * @brief Get the time, in nanoseconds, remaining before the next tick interrupt response.

View File

@@ -120,21 +120,6 @@ LITE_OS_SEC_TEXT_INIT VOID LOS_Panic(const CHAR *fmt, ...)
ArchSysExit(); ArchSysExit();
} }
/*****************************************************************************
Function : OsRegister
Description : Configuring the maximum number of tasks
Input : None
Output : None
Return : None
*****************************************************************************/
LITE_OS_SEC_TEXT_INIT static VOID OsRegister(VOID)
{
g_taskMaxNum = LOSCFG_BASE_CORE_TSK_LIMIT + 1; /* Reserved 1 for IDLE */
return;
}
LITE_OS_SEC_TEXT_INIT UINT32 LOS_Start(VOID) LITE_OS_SEC_TEXT_INIT UINT32 LOS_Start(VOID)
{ {
return ArchStartSchedule(); return ArchStartSchedule();
@@ -156,8 +141,6 @@ LITE_OS_SEC_TEXT_INIT UINT32 LOS_KernelInit(VOID)
OsBackTraceInit(); OsBackTraceInit();
#endif #endif
OsRegister();
#ifdef LOSCFG_KERNEL_LMS #ifdef LOSCFG_KERNEL_LMS
OsLmsInit(); OsLmsInit();
#endif #endif

View File

@@ -37,7 +37,6 @@
#include "los_memory.h" #include "los_memory.h"
#include "los_sched.h" #include "los_sched.h"
#if (LOSCFG_BASE_IPC_MUX == 1) #if (LOSCFG_BASE_IPC_MUX == 1)
LITE_OS_SEC_BSS LosMuxCB* g_allMux = NULL; LITE_OS_SEC_BSS LosMuxCB* g_allMux = NULL;
@@ -71,6 +70,9 @@ LITE_OS_SEC_TEXT_INIT UINT32 OsMuxInit(VOID)
muxNode->muxID = index; muxNode->muxID = index;
muxNode->owner = (LosTaskCB *)NULL; muxNode->owner = (LosTaskCB *)NULL;
muxNode->muxStat = OS_MUX_UNUSED; muxNode->muxStat = OS_MUX_UNUSED;
#if (LOSCFG_MUTEX_CREATE_TRACE == 1)
muxNode->createInfo = 0;
#endif
LOS_ListTailInsert(&g_unusedMuxList, &muxNode->muxList); LOS_ListTailInsert(&g_unusedMuxList, &muxNode->muxList);
} }
return LOS_OK; return LOS_OK;
@@ -149,7 +151,9 @@ LITE_OS_SEC_TEXT_INIT UINT32 LOS_MuxDelete(UINT32 muxHandle)
LOS_ListAdd(&g_unusedMuxList, &muxDeleted->muxList); LOS_ListAdd(&g_unusedMuxList, &muxDeleted->muxList);
muxDeleted->muxStat = OS_MUX_UNUSED; muxDeleted->muxStat = OS_MUX_UNUSED;
#if (LOSCFG_MUTEX_CREATE_TRACE == 1)
muxDeleted->createInfo = 0;
#endif
LOS_IntRestore(intSave); LOS_IntRestore(intSave);
OsHookCall(LOS_HOOK_TYPE_MUX_DELETE, muxDeleted); OsHookCall(LOS_HOOK_TYPE_MUX_DELETE, muxDeleted);
@@ -320,5 +324,5 @@ LITE_OS_SEC_TEXT UINT32 LOS_MuxPost(UINT32 muxHandle)
return LOS_OK; return LOS_OK;
} }
#endif /* (LOSCFG_BASE_IPC_MUX == 1) */
#endif /* (LOSCFG_BASE_IPC_MUX == 1) */

View File

@@ -451,6 +451,10 @@ LITE_OS_SEC_TEXT UINT32 LOS_QueueReadCopy(UINT32 queueID,
} }
operateType = OS_QUEUE_OPERATE_TYPE(OS_QUEUE_READ, OS_QUEUE_HEAD, OS_QUEUE_NOT_POINT); operateType = OS_QUEUE_OPERATE_TYPE(OS_QUEUE_READ, OS_QUEUE_HEAD, OS_QUEUE_NOT_POINT);
OsHookCall(LOS_HOOK_TYPE_QUEUE_READ_COPY, (LosQueueCB *)GET_QUEUE_HANDLE(queueID),
operateType, *bufferSize, timeOut);
return OsQueueOperate(queueID, operateType, bufferAddr, bufferSize, timeOut); return OsQueueOperate(queueID, operateType, bufferAddr, bufferSize, timeOut);
} }
@@ -485,6 +489,10 @@ LITE_OS_SEC_TEXT UINT32 LOS_QueueWriteCopy(UINT32 queueID,
} }
operateType = OS_QUEUE_OPERATE_TYPE(OS_QUEUE_WRITE, OS_QUEUE_TAIL, OS_QUEUE_NOT_POINT); operateType = OS_QUEUE_OPERATE_TYPE(OS_QUEUE_WRITE, OS_QUEUE_TAIL, OS_QUEUE_NOT_POINT);
OsHookCall(LOS_HOOK_TYPE_QUEUE_WRITE_COPY, (LosQueueCB *)GET_QUEUE_HANDLE(queueID),
operateType, bufferSize, timeOut);
return OsQueueOperate(queueID, operateType, bufferAddr, &bufferSize, timeOut); return OsQueueOperate(queueID, operateType, bufferAddr, &bufferSize, timeOut);
} }

View File

@@ -618,7 +618,7 @@ VOID LOS_SchedTickHandler(VOID)
VOID LOS_Schedule(VOID) VOID LOS_Schedule(VOID)
{ {
if (g_taskScheduled && LOS_CHECK_SCHEDULE) { if (OsCheckKernelRunning()) {
ArchTaskSchedule(); ArchTaskSchedule();
} }
} }

View File

@@ -75,7 +75,7 @@
* @ingroup los_task * @ingroup los_task
* @brief check task id's validation * @brief check task id's validation
*/ */
#define OS_TASK_ID_CHECK(taskID) LOS_ASSERT_COND(OS_TSK_GET_INDEX(taskID) < g_taskMaxNum) #define OS_TASK_ID_CHECK(taskID) (OS_TSK_GET_INDEX(taskID) < g_taskMaxNum)
/** /**
* @ingroup los_task * @ingroup los_task
@@ -409,6 +409,7 @@ LITE_OS_SEC_TEXT_INIT UINT32 OsTaskInit(VOID)
UINT32 size; UINT32 size;
UINT32 index; UINT32 index;
g_taskMaxNum = LOSCFG_BASE_CORE_TSK_LIMIT + 1; /* Reserved 1 for IDLE */
size = (g_taskMaxNum + 1) * sizeof(LosTaskCB); size = (g_taskMaxNum + 1) * sizeof(LosTaskCB);
g_taskCBArray = (LosTaskCB *)LOS_MemAlloc(m_aucSysMem0, size); g_taskCBArray = (LosTaskCB *)LOS_MemAlloc(m_aucSysMem0, size);
if (g_taskCBArray == NULL) { if (g_taskCBArray == NULL) {
@@ -856,7 +857,7 @@ LITE_OS_SEC_TEXT_INIT UINT32 LOS_TaskResume(UINT32 taskID)
UINT32 retErr = OS_ERROR; UINT32 retErr = OS_ERROR;
BOOL needSched = FALSE; BOOL needSched = FALSE;
if (taskID > LOSCFG_BASE_CORE_TSK_LIMIT) { if (!OS_TASK_ID_CHECK(taskID)) {
return LOS_ERRNO_TSK_ID_INVALID; return LOS_ERRNO_TSK_ID_INVALID;
} }

View File

@@ -64,7 +64,7 @@ LITE_OS_SEC_TEXT STATIC VOID OsUpdateSysTimeBase(VOID)
LITE_OS_SEC_TEXT VOID OsTickTimerBaseReset(UINT64 currTime) LITE_OS_SEC_TEXT VOID OsTickTimerBaseReset(UINT64 currTime)
{ {
LOS_ASSERT(currTime > g_tickTimerBase); LOS_ASSERT(currTime >= g_tickTimerBase);
g_tickTimerBase = currTime; g_tickTimerBase = currTime;
} }

View File

@@ -59,21 +59,6 @@ VOID *g_poolHead = NULL;
/* The following is the macro definition and interface implementation related to the TLSF. */ /* The following is the macro definition and interface implementation related to the TLSF. */
/* Supposing a Second Level Index: SLI = 3. */
#define OS_MEM_SLI 3
/* Giving 1 free list for each small bucket: 4, 8, 12, up to 124. */
#define OS_MEM_SMALL_BUCKET_COUNT 31
#define OS_MEM_SMALL_BUCKET_MAX_SIZE 128
/* Giving 2^OS_MEM_SLI free lists for each large bucket. */
#define OS_MEM_LARGE_BUCKET_COUNT 24
/* OS_MEM_SMALL_BUCKET_MAX_SIZE to the power of 2 is 7. */
#define OS_MEM_LARGE_START_BUCKET 7
/* The count of free list. */
#define OS_MEM_FREE_LIST_COUNT (OS_MEM_SMALL_BUCKET_COUNT + (OS_MEM_LARGE_BUCKET_COUNT << OS_MEM_SLI))
/* The bitmap is used to indicate whether the free list is empty, 1: not empty, 0: empty. */
#define OS_MEM_BITMAP_WORDS ((OS_MEM_FREE_LIST_COUNT >> 5) + 1)
#define OS_MEM_BITMAP_MASK 0x1FU #define OS_MEM_BITMAP_MASK 0x1FU
/* Used to find the first bit of 1 in bitmap. */ /* Used to find the first bit of 1 in bitmap. */
@@ -120,60 +105,10 @@ STATIC INLINE UINT32 OsMemSlGet(UINT32 size, UINT32 fl)
#error "When enter here, LOSCFG_BASE_CORE_TSK_LIMIT larger than 63 is not support" #error "When enter here, LOSCFG_BASE_CORE_TSK_LIMIT larger than 63 is not support"
#endif #endif
struct OsMemNodeHead {
#if (LOSCFG_BASE_MEM_NODE_INTEGRITY_CHECK == 1)
UINT32 magic;
#endif
#if (LOSCFG_MEM_LEAKCHECK == 1)
UINTPTR linkReg[LOSCFG_MEM_RECORD_LR_CNT];
#endif
union {
struct OsMemNodeHead *prev; /* The prev is used for current node points to the previous node */
struct OsMemNodeHead *next; /* The next is used for sentinel node points to the expand node */
} ptr;
#if (LOSCFG_TASK_MEM_USED == 1)
UINT32 taskID;
UINT32 sizeAndFlag;
#elif (LOSCFG_MEM_FREE_BY_TASKID == 1)
UINT32 taskID : 6;
UINT32 sizeAndFlag : 26;
#else
UINT32 sizeAndFlag;
#endif
};
struct OsMemUsedNodeHead { struct OsMemUsedNodeHead {
struct OsMemNodeHead header; struct OsMemNodeHead header;
}; };
struct OsMemFreeNodeHead {
struct OsMemNodeHead header;
struct OsMemFreeNodeHead *prev;
struct OsMemFreeNodeHead *next;
};
struct OsMemPoolInfo {
VOID *pool;
UINT32 totalSize;
UINT32 attr;
#if (LOSCFG_MEM_WATERLINE == 1)
UINT32 waterLine; /* Maximum usage size in a memory pool */
UINT32 curUsedSize; /* Current usage size in a memory pool */
#endif
#if (LOSCFG_MEM_MUL_REGIONS == 1)
UINT32 totalGapSize;
#endif
};
struct OsMemPoolHead {
struct OsMemPoolInfo info;
UINT32 freeListBitmap[OS_MEM_BITMAP_WORDS];
struct OsMemFreeNodeHead *freeList[OS_MEM_FREE_LIST_COUNT];
#if (LOSCFG_MEM_MUL_POOL == 1)
VOID *nextPool;
#endif
};
/* The memory pool support expand. */ /* The memory pool support expand. */
#define OS_MEM_POOL_EXPAND_ENABLE 0x01 #define OS_MEM_POOL_EXPAND_ENABLE 0x01
/* The memory pool support no lock. */ /* The memory pool support no lock. */

View File

@@ -91,7 +91,6 @@ LITE_TEST_CASE(CmsisFuncTestSuite, TestCmsis007, Function | MediumTest | Level1)
{ {
osMessageQueueId_t msgQueueId; osMessageQueueId_t msgQueueId;
osMessageQueueAttr_t attr = {0}; osMessageQueueAttr_t attr = {0};
CHAR staticBuff[STATCI_BUFF_SIZE] = {0};
CHAR strbuff[] = "hello world"; CHAR strbuff[] = "hello world";
CHAR *name = NULL; CHAR *name = NULL;
INT32 ret; INT32 ret;
@@ -112,19 +111,20 @@ LITE_TEST_CASE(CmsisFuncTestSuite, TestCmsis007, Function | MediumTest | Level1)
ICUNIT_ASSERT_EQUAL(name, NULL, name); ICUNIT_ASSERT_EQUAL(name, NULL, name);
#if (LOSCFG_BASE_IPC_QUEUE_STATIC == 1) #if (LOSCFG_BASE_IPC_QUEUE_STATIC == 1)
CHAR staticBuff[STATCI_BUFF_SIZE] = {0};
attr.mq_mem = staticBuff; attr.mq_mem = staticBuff;
attr.mq_size = STATCI_BUFF_SIZE; attr.mq_size = STATCI_BUFF_SIZE;
msgQueueId = osMessageQueueNew(1, STATCI_BUFF_SIZE, &attr); msgQueueId = osMessageQueueNew(1, STATCI_BUFF_SIZE, &attr);
ICUNIT_ASSERT_NOT_EQUAL(msgQueueId, NULL, msgQueueId); ICUNIT_ASSERT_NOT_EQUAL(msgQueueId, NULL, msgQueueId);
name = osMessageQueueGetName(msgQueueId); name = (CHAR *)osMessageQueueGetName(msgQueueId);
ret = strcmp(name, "q1"); ret = strcmp(name, "q1");
ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT); ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT);
ret = osMessageQueueDelete(msgQueueId); ret = osMessageQueueDelete(msgQueueId);
ICUNIT_ASSERT_EQUAL(ret, osOK, ret); ICUNIT_ASSERT_EQUAL(ret, osOK, ret);
name = osMessageQueueGetName(msgQueueId); name = (CHAR *)osMessageQueueGetName(msgQueueId);
ICUNIT_ASSERT_EQUAL(name, NULL, name); ICUNIT_ASSERT_EQUAL(name, NULL, name);
#endif #endif
@@ -155,13 +155,13 @@ static VOID CmsisQueueTestThread1(VOID)
osStatus_t status; osStatus_t status;
ret = osMessageQueuePut(g_msgQueueId1, &g_strbuff1, 0U, 0U); ret = osMessageQueuePut(g_msgQueueId1, &g_strbuff1, 0U, 0U);
ICUNIT_ASSERT_EQUAL(ret, osOK, ret); ICUNIT_ASSERT_EQUAL_VOID(ret, osOK, ret);
status = osMessageQueueGet(g_msgQueueId2, &data, NULL, QUEUE_WAIT_TIMEOUT); status = osMessageQueueGet(g_msgQueueId2, &data, NULL, QUEUE_WAIT_TIMEOUT);
ICUNIT_ASSERT_EQUAL(status, osOK, status); ICUNIT_ASSERT_EQUAL_VOID(status, osOK, status);
ret = strcmp(data, "world"); ret = strcmp(data, "world");
ICUNIT_ASSERT_EQUAL(ret, 0, ret); ICUNIT_ASSERT_EQUAL_VOID(ret, 0, ret);
} }
static VOID CmsisQueueTestThread2(VOID) static VOID CmsisQueueTestThread2(VOID)
@@ -171,13 +171,13 @@ static VOID CmsisQueueTestThread2(VOID)
osStatus_t status; osStatus_t status;
status = osMessageQueueGet(g_msgQueueId1, &data, NULL, QUEUE_WAIT_TIMEOUT); status = osMessageQueueGet(g_msgQueueId1, &data, NULL, QUEUE_WAIT_TIMEOUT);
ICUNIT_ASSERT_EQUAL(status, osOK, status); ICUNIT_ASSERT_EQUAL_VOID(status, osOK, status);
ret = strcmp(data, "hello"); ret = strcmp(data, "hello");
ICUNIT_ASSERT_EQUAL(ret, 0, ret); ICUNIT_ASSERT_EQUAL_VOID(ret, 0, ret);
ret = osMessageQueuePut(g_msgQueueId2, &g_strbuff2, 0U, 0U); ret = osMessageQueuePut(g_msgQueueId2, &g_strbuff2, 0U, 0U);
ICUNIT_ASSERT_EQUAL(ret, osOK, ret); ICUNIT_ASSERT_EQUAL_VOID(ret, osOK, ret);
} }
static INT32 ThreadReadWriteTest(VOID) static INT32 ThreadReadWriteTest(VOID)
@@ -193,10 +193,10 @@ static INT32 ThreadReadWriteTest(VOID)
g_msgQueueId2 = osMessageQueueNew(1, strlen(g_strbuff2), &attr); g_msgQueueId2 = osMessageQueueNew(1, strlen(g_strbuff2), &attr);
ICUNIT_ASSERT_NOT_EQUAL(g_msgQueueId2, NULL, g_msgQueueId2); ICUNIT_ASSERT_NOT_EQUAL(g_msgQueueId2, NULL, g_msgQueueId2);
threadId1 = osThreadNew(CmsisQueueTestThread1, NULL, NULL); threadId1 = osThreadNew((osThreadFunc_t)CmsisQueueTestThread1, NULL, NULL);
ICUNIT_ASSERT_NOT_EQUAL(threadId1, NULL, threadId1); ICUNIT_ASSERT_NOT_EQUAL(threadId1, NULL, threadId1);
threadId2 = osThreadNew(CmsisQueueTestThread2, NULL, NULL); threadId2 = osThreadNew((osThreadFunc_t)CmsisQueueTestThread2, NULL, NULL);
ICUNIT_ASSERT_NOT_EQUAL(threadId2, NULL, threadId2); ICUNIT_ASSERT_NOT_EQUAL(threadId2, NULL, threadId2);
osThreadJoin(threadId1); osThreadJoin(threadId1);
@@ -239,8 +239,6 @@ LITE_TEST_CASE(CmsisFuncTestSuite, TestCmsis006, Function | MediumTest | Level1)
LITE_TEST_CASE(CmsisFuncTestSuite, TestCmsis005, Function | MediumTest | Level1) LITE_TEST_CASE(CmsisFuncTestSuite, TestCmsis005, Function | MediumTest | Level1)
{ {
osMessageQueueId_t msgQueueId; osMessageQueueId_t msgQueueId;
osMessageQueueAttr_t attr = {0};
CHAR staticBuff[STATCI_BUFF_SIZE] = {0};
CHAR strbuff[] = "hello world"; CHAR strbuff[] = "hello world";
CHAR data[STATCI_BUFF_SIZE] = {0}; CHAR data[STATCI_BUFF_SIZE] = {0};
INT32 ret; INT32 ret;
@@ -272,6 +270,8 @@ LITE_TEST_CASE(CmsisFuncTestSuite, TestCmsis005, Function | MediumTest | Level1)
#if (LOSCFG_BASE_IPC_QUEUE_STATIC == 1) #if (LOSCFG_BASE_IPC_QUEUE_STATIC == 1)
/* static test */ /* static test */
osMessageQueueAttr_t attr = {0};
CHAR staticBuff[STATCI_BUFF_SIZE] = {0};
attr.mq_mem = staticBuff; attr.mq_mem = staticBuff;
attr.mq_size = STATCI_BUFF_SIZE; attr.mq_size = STATCI_BUFF_SIZE;
msgQueueId = osMessageQueueNew(1, STATCI_BUFF_SIZE, &attr); msgQueueId = osMessageQueueNew(1, STATCI_BUFF_SIZE, &attr);
@@ -311,8 +311,6 @@ EXIT:
LITE_TEST_CASE(CmsisFuncTestSuite, TestCmsis004, Function | MediumTest | Level1) LITE_TEST_CASE(CmsisFuncTestSuite, TestCmsis004, Function | MediumTest | Level1)
{ {
osMessageQueueId_t msgQueueId; osMessageQueueId_t msgQueueId;
osMessageQueueAttr_t attr = {0};
CHAR staticBuff[STATCI_BUFF_SIZE] = {0};
CHAR strbuff[] = "hello world"; CHAR strbuff[] = "hello world";
CHAR data[STATCI_BUFF_SIZE] = {0}; CHAR data[STATCI_BUFF_SIZE] = {0};
INT32 ret; INT32 ret;
@@ -335,6 +333,8 @@ LITE_TEST_CASE(CmsisFuncTestSuite, TestCmsis004, Function | MediumTest | Level1)
#if (LOSCFG_BASE_IPC_QUEUE_STATIC == 1) #if (LOSCFG_BASE_IPC_QUEUE_STATIC == 1)
/* static test */ /* static test */
osMessageQueueAttr_t attr = {0};
CHAR staticBuff[STATCI_BUFF_SIZE] = {0};
attr.mq_mem = staticBuff; attr.mq_mem = staticBuff;
attr.mq_size = strlen(strbuff) + 1; attr.mq_size = strlen(strbuff) + 1;
msgQueueId = osMessageQueueNew(1, strlen(strbuff), &attr); msgQueueId = osMessageQueueNew(1, strlen(strbuff), &attr);
@@ -373,8 +373,6 @@ EXIT:
LITE_TEST_CASE(CmsisFuncTestSuite, TestCmsis003, Function | MediumTest | Level1) LITE_TEST_CASE(CmsisFuncTestSuite, TestCmsis003, Function | MediumTest | Level1)
{ {
osMessageQueueId_t msgQueueId; osMessageQueueId_t msgQueueId;
osMessageQueueAttr_t attr = {0};
CHAR staticBuff[STATCI_BUFF_SIZE] = {0};
CHAR strbuff[] = "hello world"; CHAR strbuff[] = "hello world";
/* dynmic test */ /* dynmic test */
@@ -386,6 +384,8 @@ LITE_TEST_CASE(CmsisFuncTestSuite, TestCmsis003, Function | MediumTest | Level1)
#if (LOSCFG_BASE_IPC_QUEUE_STATIC == 1) #if (LOSCFG_BASE_IPC_QUEUE_STATIC == 1)
/* static test */ /* static test */
osMessageQueueAttr_t attr = {0};
CHAR staticBuff[STATCI_BUFF_SIZE] = {0};
attr.mq_mem = staticBuff; attr.mq_mem = staticBuff;
attr.mq_size = STATCI_BUFF_SIZE; attr.mq_size = STATCI_BUFF_SIZE;
msgQueueId = osMessageQueueNew(0, strlen(strbuff), &attr); msgQueueId = osMessageQueueNew(0, strlen(strbuff), &attr);
@@ -417,8 +417,6 @@ LITE_TEST_CASE(CmsisFuncTestSuite, TestCmsis003, Function | MediumTest | Level1)
LITE_TEST_CASE(CmsisFuncTestSuite, TestCmsis002, Function | MediumTest | Level1) LITE_TEST_CASE(CmsisFuncTestSuite, TestCmsis002, Function | MediumTest | Level1)
{ {
osMessageQueueId_t msgQueueId; osMessageQueueId_t msgQueueId;
osMessageQueueAttr_t attr = {0};
CHAR staticBuff[STATCI_BUFF_SIZE] = {0};
CHAR strbuff[] = "hello world"; CHAR strbuff[] = "hello world";
INT32 ret; INT32 ret;
@@ -434,6 +432,8 @@ LITE_TEST_CASE(CmsisFuncTestSuite, TestCmsis002, Function | MediumTest | Level1)
#if (LOSCFG_BASE_IPC_QUEUE_STATIC == 1) #if (LOSCFG_BASE_IPC_QUEUE_STATIC == 1)
/* static test */ /* static test */
osMessageQueueAttr_t attr = {0};
CHAR staticBuff[STATCI_BUFF_SIZE] = {0};
attr.mq_mem = staticBuff; attr.mq_mem = staticBuff;
attr.mq_size = STATCI_BUFF_SIZE; attr.mq_size = STATCI_BUFF_SIZE;
msgQueueId = osMessageQueueNew(1, STATCI_BUFF_SIZE, &attr); msgQueueId = osMessageQueueNew(1, STATCI_BUFF_SIZE, &attr);
@@ -449,6 +449,53 @@ LITE_TEST_CASE(CmsisFuncTestSuite, TestCmsis002, Function | MediumTest | Level1)
return LOS_OK; return LOS_OK;
}; };
static VOID timerCallback(void *arg)
{
return;
}
/**
* @tc.name: TestCmsisTimer001
* @tc.desc: Timer Management test
* @tc.type: FUNC
* @tc.require: issueI5TQ0T
*/
LITE_TEST_CASE(CmsisFuncTestSuite, TestCmsisTimer001, Function | MediumTest | Level1)
{
osTimerId_t time_id;
const char *timerGetName = NULL;
osStatus_t ret;
time_id = osTimerNew(timerCallback, osTimerOnce, NULL, NULL);
ICUNIT_ASSERT_NOT_EQUAL(time_id, NULL, time_id);
ret = osTimerStart(time_id, 100U); // 100, just for test
ICUNIT_ASSERT_EQUAL(ret, osOK, ret);
timerGetName = osTimerGetName(time_id);
ICUNIT_GOTO_EQUAL(timerGetName, NULL, timerGetName, EXIT1);
ret = osTimerIsRunning(time_id);
ICUNIT_GOTO_EQUAL(ret, 1, ret, EXIT1);
ret = osTimerStop(time_id);
ICUNIT_GOTO_EQUAL(ret, osOK, ret, EXIT1);
ret = osTimerIsRunning(time_id);
ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT1);
ret = osTimerDelete(time_id);
ICUNIT_ASSERT_EQUAL(ret, osOK, ret);
return LOS_OK;
EXIT1:
ret = osTimerDelete(time_id);
ICUNIT_ASSERT_EQUAL(ret, osOK, ret);
return LOS_OK;
};
void CmsisFuncTestSuite(void) void CmsisFuncTestSuite(void)
{ {
@@ -465,5 +512,7 @@ void CmsisFuncTestSuite(void)
#endif #endif
ADD_TEST_CASE(TestCmsis007); ADD_TEST_CASE(TestCmsis007);
ADD_TEST_CASE(TestCmsisTimer001);
} }

View File

@@ -62,9 +62,9 @@ static UINT32 TestCase(VOID)
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret); ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
LOS_TaskDelay(20); // delay 20 ticks. LOS_TaskDelay(20); // delay 20 ticks.
ICUNIT_GOTO_EQUAL(g_testCount, 1, g_testCount, EXIT); ICUNIT_ASSERT_EQUAL(g_testCount, 1, g_testCount);
ICUNIT_GOTO_EQUAL(g_testAtomicID05, TEST_LOOP, g_testAtomicID05, EXIT); ICUNIT_ASSERT_EQUAL(g_testAtomicID05, TEST_LOOP, g_testAtomicID05);
EXIT:
return LOS_OK; return LOS_OK;
} }

View File

@@ -232,8 +232,8 @@ static UINT32 TestCase(VOID)
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret); ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
LOS_TaskDelay(20); // delay 20 ticks. LOS_TaskDelay(20); // delay 20 ticks.
ICUNIT_GOTO_EQUAL(g_testCount, 1, g_testCount, EXIT); ICUNIT_ASSERT_EQUAL(g_testCount, 1, g_testCount);
EXIT:
return LOS_OK; return LOS_OK;
} }

View File

@@ -36,7 +36,6 @@ STATIC UINT32 TestCase(VOID)
VOID *handle = NULL; VOID *handle = NULL;
CHAR *dsoNeedOthers = DSO_FULL_PATH("Align4_dynamic_need_others.so"); CHAR *dsoNeedOthers = DSO_FULL_PATH("Align4_dynamic_need_others.so");
CHAR *dsoWithoutPIC = DSO_FULL_PATH("Align4_dynamic_nopic.so"); CHAR *dsoWithoutPIC = DSO_FULL_PATH("Align4_dynamic_nopic.so");
INT32 ret;
handle = (VOID *)LOS_SoLoad(dsoNeedOthers, NULL); handle = (VOID *)LOS_SoLoad(dsoNeedOthers, NULL);
ICUNIT_ASSERT_EQUAL(handle, NULL, handle); ICUNIT_ASSERT_EQUAL(handle, NULL, handle);

View File

@@ -36,7 +36,6 @@ STATIC UINT32 TestCase(VOID)
VOID *handle = NULL; VOID *handle = NULL;
VOID (*func)(INT32, INT32) = NULL; VOID (*func)(INT32, INT32) = NULL;
CHAR *dsoName = DSO_FULL_PATH("Align4_dynamic_stdlib.so"); CHAR *dsoName = DSO_FULL_PATH("Align4_dynamic_stdlib.so");
INT32 ret;
handle = (VOID *)LOS_SoLoad(dsoName, NULL); handle = (VOID *)LOS_SoLoad(dsoName, NULL);
ICUNIT_ASSERT_EQUAL(handle, NULL, handle); ICUNIT_ASSERT_EQUAL(handle, NULL, handle);

View File

@@ -74,7 +74,7 @@ static UINT32 Testcase(VOID)
LOS_EventInit(&g_pevent); LOS_EventInit(&g_pevent);
ret = LOS_TaskCreate(&g_testTaskID01, &task1); ret = LOS_TaskCreate(&g_testTaskID01, &task1);
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT); ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
ICUNIT_GOTO_EQUAL(g_testCount, 3, g_testCount, EXIT); // 3, Here, assert that g_testCount is equal to 3. ICUNIT_GOTO_EQUAL(g_testCount, 3, g_testCount, EXIT); // 3, Here, assert that g_testCount is equal to 3.
g_testCount++; g_testCount++;
@@ -84,7 +84,6 @@ static UINT32 Testcase(VOID)
ICUNIT_GOTO_EQUAL(g_testCount, 4, g_testCount, EXIT1); // 4, Here, assert that g_testCount is equal to 4. ICUNIT_GOTO_EQUAL(g_testCount, 4, g_testCount, EXIT1); // 4, Here, assert that g_testCount is equal to 4.
EXIT1: EXIT1:
ret = LOS_EventClear(&g_pevent, 0); ret = LOS_EventClear(&g_pevent, 0);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret); ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);

View File

@@ -84,7 +84,7 @@ static UINT32 Testcase(VOID)
LOS_EventInit(&g_pevent); LOS_EventInit(&g_pevent);
ret = LOS_TaskCreate(&g_testTaskID01, &task1); ret = LOS_TaskCreate(&g_testTaskID01, &task1);
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT); ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
ICUNIT_GOTO_EQUAL(g_testCount, 1, g_testCount, EXIT); ICUNIT_GOTO_EQUAL(g_testCount, 1, g_testCount, EXIT);
g_testCount++; g_testCount++;

View File

@@ -87,7 +87,7 @@ static UINT32 Testcase(VOID)
ret = LOS_EventWrite(&g_pevent, 0x11); ret = LOS_EventWrite(&g_pevent, 0x11);
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT1); ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT1);
ret = LOS_TaskResume(g_testTaskID01); (VOID)LOS_TaskResume(g_testTaskID01);
ICUNIT_GOTO_EQUAL(g_testCount, 5, g_testCount, EXIT1); // 5, Here, assert that g_testCount is equal to 5. ICUNIT_GOTO_EQUAL(g_testCount, 5, g_testCount, EXIT1); // 5, Here, assert that g_testCount is equal to 5.
EXIT1: EXIT1:

View File

@@ -90,7 +90,7 @@ static UINT32 Testcase(VOID)
LOS_EventInit(&g_pevent); LOS_EventInit(&g_pevent);
ret = LOS_TaskCreate(&g_testTaskID01, &task1); ret = LOS_TaskCreate(&g_testTaskID01, &task1);
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT); ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
ICUNIT_ASSERT_EQUAL(g_testCount, 1, g_testCount); ICUNIT_ASSERT_EQUAL(g_testCount, 1, g_testCount);
g_testCount++; g_testCount++;
@@ -111,7 +111,6 @@ static UINT32 Testcase(VOID)
EXIT1: EXIT1:
LOS_TaskDelete(g_testTaskID02); LOS_TaskDelete(g_testTaskID02);
EXIT:
LOS_TaskDelete(g_testTaskID01); LOS_TaskDelete(g_testTaskID01);
return LOS_OK; return LOS_OK;

View File

@@ -88,7 +88,7 @@ static UINT32 Testcase(VOID)
LOS_EventInit(&g_pevent); LOS_EventInit(&g_pevent);
ret = LOS_TaskCreate(&g_testTaskID01, &task1); ret = LOS_TaskCreate(&g_testTaskID01, &task1);
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT); ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
ICUNIT_ASSERT_EQUAL(g_testCount, 1, g_testCount); ICUNIT_ASSERT_EQUAL(g_testCount, 1, g_testCount);
g_testCount++; g_testCount++;
@@ -106,7 +106,6 @@ static UINT32 Testcase(VOID)
EXIT1: EXIT1:
LOS_TaskDelete(g_testTaskID02); LOS_TaskDelete(g_testTaskID02);
EXIT:
LOS_TaskDelete(g_testTaskID01); LOS_TaskDelete(g_testTaskID01);
return LOS_OK; return LOS_OK;

View File

@@ -85,13 +85,10 @@ static UINT32 Testcase(VOID)
LOS_EventInit(&g_pevent); LOS_EventInit(&g_pevent);
ret = LOS_TaskCreate(&g_testTaskID01, &task1); ret = LOS_TaskCreate(&g_testTaskID01, &task1);
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT); ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
ICUNIT_ASSERT_EQUAL(g_testCount, 5, g_testCount); // 5, Here, assert that g_testCount is equal to 5. ICUNIT_ASSERT_EQUAL(g_testCount, 5, g_testCount); // 5, Here, assert that g_testCount is equal to 5.
return LOS_OK;
EXIT:
LOS_TaskDelete(g_testTaskID01); LOS_TaskDelete(g_testTaskID01);
return LOS_OK; return LOS_OK;

View File

@@ -129,14 +129,13 @@ static UINT32 Testcase(VOID)
ICUNIT_GOTO_EQUAL(g_testCount, 3, g_testCount, EXIT2); // 3, Here, assert that g_testCount is equal to 3. ICUNIT_GOTO_EQUAL(g_testCount, 3, g_testCount, EXIT2); // 3, Here, assert that g_testCount is equal to 3.
ret = LOS_EventWrite(&g_pevent, 0xF); (VOID)LOS_EventWrite(&g_pevent, 0xF);
LOS_TaskDelay(1); LOS_TaskDelay(1);
ICUNIT_GOTO_EQUAL(g_testCount, 6, g_testCount, EXIT3); // 6, Here, assert that g_testCount is equal to 6. ICUNIT_ASSERT_EQUAL(g_testCount, 6, g_testCount); // 6, Here, assert that g_testCount is equal to 6.
EXIT3: (VOID)LOS_EventClear(&g_pevent, 0);
ret = LOS_EventClear(&g_pevent, 0);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret); ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
ret = LOS_EventDestroy(&g_pevent); ret = LOS_EventDestroy(&g_pevent);

View File

@@ -77,10 +77,9 @@ static UINT32 Testcase(VOID)
LOS_EventClear(&g_pevent, (~(0x11))); LOS_EventClear(&g_pevent, (~(0x11)));
ret = LOS_TaskResume(g_testTaskID01); (VOID)LOS_TaskResume(g_testTaskID01);
ICUNIT_GOTO_EQUAL(g_testCount, 4, g_testCount, EXIT1); // 4, Here, assert that g_testCount is equal to 4. ICUNIT_ASSERT_EQUAL(g_testCount, 4, g_testCount); // 4, Here, assert that g_testCount is equal to 4.
EXIT1:
ret = LOS_EventClear(&g_pevent, 0); ret = LOS_EventClear(&g_pevent, 0);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret); ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);

View File

@@ -37,7 +37,7 @@ static VOID TaskF01(VOID)
{ {
} }
VOID ItHwiM3B001F001() static VOID ItHwiM3B001F001(VOID)
{ {
return; return;
} }

View File

@@ -52,7 +52,7 @@ static UINT32 TestCase(VOID)
ICUNIT_ASSERT_NOT_EQUAL(buf, NULL, buf); ICUNIT_ASSERT_NOT_EQUAL(buf, NULL, buf);
buf[7] = '\0'; /* end index 7 */ buf[7] = '\0'; /* end index 7 */
PRINTK("%d\n", __LINE__); PRINTK("%d\n", __LINE__);
ret = strcpy_s(buf, 100, src); /* Check LMS detection information when the strcpy_s dest max set 100 overflows. */ (VOID)strcpy_s(buf, 100, src); /* Check LMS detection information when the strcpy_s dest max set 100 overflows. */
PRINTK("%d\n", __LINE__); PRINTK("%d\n", __LINE__);
ret = LOS_MemFree(g_testLmsPool, buf); ret = LOS_MemFree(g_testLmsPool, buf);

View File

@@ -59,7 +59,7 @@ static UINT32 Testcase(VOID)
task.uwStackSize = LOSCFG_BASE_CORE_TSK_DEFAULT_STACK_SIZE; task.uwStackSize = LOSCFG_BASE_CORE_TSK_DEFAULT_STACK_SIZE;
task.uwResved = 0; task.uwResved = 0;
ret = LOS_TaskCreate(&g_testTaskID01, &task); (VOID)LOS_TaskCreate(&g_testTaskID01, &task);
ICUNIT_ASSERT_EQUAL(g_testCount, 1, g_testCount); // 1, Here, assert that g_testCount is equal to 1. ICUNIT_ASSERT_EQUAL(g_testCount, 1, g_testCount); // 1, Here, assert that g_testCount is equal to 1.
ret = LOS_MuxDelete(g_mutexTest); ret = LOS_MuxDelete(g_mutexTest);

View File

@@ -68,7 +68,7 @@ static UINT32 Testcase(VOID)
task.uwStackSize = LOSCFG_BASE_CORE_TSK_DEFAULT_STACK_SIZE; task.uwStackSize = LOSCFG_BASE_CORE_TSK_DEFAULT_STACK_SIZE;
task.uwResved = 0; task.uwResved = 0;
ret = LOS_TaskCreate(&g_testTaskID01, &task); (VOID)LOS_TaskCreate(&g_testTaskID01, &task);
ICUNIT_ASSERT_EQUAL(g_testCount, 1, g_testCount); // 1, Here, assert that g_testCount is equal to 1. ICUNIT_ASSERT_EQUAL(g_testCount, 1, g_testCount); // 1, Here, assert that g_testCount is equal to 1.

View File

@@ -70,7 +70,7 @@ static UINT32 Testcase(VOID)
task.uwStackSize = LOSCFG_BASE_CORE_TSK_DEFAULT_STACK_SIZE; task.uwStackSize = LOSCFG_BASE_CORE_TSK_DEFAULT_STACK_SIZE;
task.uwResved = 0; task.uwResved = 0;
ret = LOS_TaskCreate(&g_testTaskID01, &task); (VOID)LOS_TaskCreate(&g_testTaskID01, &task);
task2.pfnTaskEntry = (TSK_ENTRY_FUNC)TaskF01; task2.pfnTaskEntry = (TSK_ENTRY_FUNC)TaskF01;
task2.usTaskPrio = (TASK_PRIO_TEST - 2); // 2, set new task priority, it is higher than the current task. task2.usTaskPrio = (TASK_PRIO_TEST - 2); // 2, set new task priority, it is higher than the current task.

View File

@@ -35,17 +35,19 @@
static UINT32 Testcase(VOID) static UINT32 Testcase(VOID)
{ {
UINT32 ret; UINT32 ret;
UINT32 msgSize = (UINT32)QUEUE_BASE_MSGSIZE;
CHAR buff1[QUEUE_SHORT_BUFFER_LENGTH] = "UniDSP"; CHAR buff1[QUEUE_SHORT_BUFFER_LENGTH] = "UniDSP";
CHAR buff2[QUEUE_SHORT_BUFFER_LENGTH] = {0}; CHAR buff2[QUEUE_SHORT_BUFFER_LENGTH] = {0};
CHAR buff3[QUEUE_SHORT_BUFFER_LENGTH] = {0}; CHAR buff3[QUEUE_SHORT_BUFFER_LENGTH] = {0};
ret = LOS_QueueCreateStatic("Q1", QUEUE_BASE_NUM, &g_testQueueID01, buff3, 0, QUEUE_BASE_MSGSIZE); ret = LOS_QueueCreateStatic("Q1", QUEUE_BASE_NUM, &g_testQueueID01, (UINT8 *)buff3, 0, QUEUE_BASE_MSGSIZE);
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT); ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
ret = LOS_QueueWriteCopy(g_testQueueID01, &buff1, QUEUE_BASE_MSGSIZE, 0); ret = LOS_QueueWriteCopy(g_testQueueID01, &buff1, (UINT32)QUEUE_BASE_MSGSIZE, 0);
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT); ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
ret = LOS_QueueReadCopy(g_testQueueID01, &buff2, QUEUE_BASE_MSGSIZE, 0); ret = LOS_QueueReadCopy(g_testQueueID01, &buff2, &msgSize, 0);
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT); ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
ret = strcmp((CHAR *)buff2, (CHAR *)buff3); ret = strcmp((CHAR *)buff2, (CHAR *)buff3);

View File

@@ -68,7 +68,7 @@ static UINT32 Testcase(VOID)
ICUNIT_GOTO_EQUAL(g_testCount, 2, g_testCount, EXIT); // 2, Here, assert that g_testCount is equal to 2. ICUNIT_GOTO_EQUAL(g_testCount, 2, g_testCount, EXIT); // 2, Here, assert that g_testCount is equal to 2.
EXIT: EXIT:
ret = LOS_TaskDelete(g_testTaskID01); (VOID)LOS_TaskDelete(g_testTaskID01);
EXIT2: EXIT2:
ret = LOS_SemDelete(g_usSemID); ret = LOS_SemDelete(g_usSemID);

View File

@@ -69,7 +69,7 @@ static UINT32 g_uwsTick2;
static UINT32 g_uwsTick3; static UINT32 g_uwsTick3;
extern VOID LOS_GetCpuTick(UINT32 *puwCntHi, UINT32 *puwCntLo); extern VOID LOS_GetCpuTick(UINT32 *puwCntHi, UINT32 *puwCntLo);
extern VOID ItSuiteLosSwtmr(); extern VOID ItSuiteLosSwtmr(VOID);
extern VOID ItLosSwtmr001(VOID); extern VOID ItLosSwtmr001(VOID);
extern VOID ItLosSwtmr002(VOID); extern VOID ItLosSwtmr002(VOID);
extern VOID ItLosSwtmr003(VOID); extern VOID ItLosSwtmr003(VOID);

View File

@@ -39,7 +39,7 @@ static VOID Case1(UINT32 arg)
g_testCount++; g_testCount++;
} }
static VOID Case2() static VOID Case2(VOID)
{ {
g_testCount++; g_testCount++;
} }

View File

@@ -44,12 +44,12 @@ static VOID Case1(UINT32 arg)
g_testCount++; g_testCount++;
} }
static VOID Case2() static VOID Case2(VOID)
{ {
g_testCount++; g_testCount++;
} }
static VOID Case3() static VOID Case3(VOID)
{ {
g_testCount++; g_testCount++;
} }

View File

@@ -34,7 +34,7 @@
static UINT32 g_testCount1 = 0; static UINT32 g_testCount1 = 0;
static VOID Case1() static VOID Case1(VOID)
{ {
UINT32 ret; UINT32 ret;

View File

@@ -35,7 +35,7 @@
static UINT32 g_testCount1 = 0; static UINT32 g_testCount1 = 0;
static VOID Case1() static VOID Case1(VOID)
{ {
UINT32 ret; UINT32 ret;

View File

@@ -44,7 +44,7 @@ static VOID Case1(UINT32 arg)
return; return;
} }
static VOID Case2() static VOID Case2(VOID)
{ {
UINT32 ret; UINT32 ret;
UINT32 tick; UINT32 tick;

View File

@@ -61,7 +61,7 @@ static UINT32 Testcase(VOID)
ret = LOS_SwtmrStart(swTmrID); ret = LOS_SwtmrStart(swTmrID);
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT); ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
ret = LOS_TaskDelay(10); // 10, set delay time. (VOID)LOS_TaskDelay(10); // 10, set delay time.
ICUNIT_GOTO_EQUAL(g_testCount, 1, g_testCount, EXIT); ICUNIT_GOTO_EQUAL(g_testCount, 1, g_testCount, EXIT);

View File

@@ -88,7 +88,7 @@ static UINT32 Testcase(VOID)
ret = LOS_SwtmrStart(g_swTmrID2); ret = LOS_SwtmrStart(g_swTmrID2);
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT); ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
ret = LOS_TaskDelay(10); // 10, set delay time. (VOID)LOS_TaskDelay(10); // 10, set delay time.
ICUNIT_GOTO_EQUAL(g_testCount, 1, g_testCount, EXIT); ICUNIT_GOTO_EQUAL(g_testCount, 1, g_testCount, EXIT);
return LOS_OK; return LOS_OK;

View File

@@ -49,8 +49,6 @@ static UINT32 Testcase(VOID)
{ {
UINT32 ret; UINT32 ret;
g_testCount1 = 0; g_testCount1 = 0;
UINT64 tickRecord;
UINT64 tickUpdate;
UINT64 deltaTicks; UINT64 deltaTicks;
// 4, Timeout interval of a periodic software timer. // 4, Timeout interval of a periodic software timer.

View File

@@ -50,7 +50,6 @@ static UINT32 TestCase(VOID)
task1.pfnTaskEntry = (TSK_ENTRY_FUNC)TaskF01; task1.pfnTaskEntry = (TSK_ENTRY_FUNC)TaskF01;
task1.uwStackSize = LOSCFG_BASE_CORE_TSK_MIN_STACK_SIZE; task1.uwStackSize = LOSCFG_BASE_CORE_TSK_MIN_STACK_SIZE;
task1.usTaskPrio = TASK_PRIO_TEST + 1;
g_testCount = 0; g_testCount = 0;
LOS_TaskLock(); LOS_TaskLock();
@@ -64,7 +63,6 @@ static UINT32 TestCase(VOID)
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT); ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
} }
task1.usTaskPrio = index % OS_TASK_PRIORITY_LOWEST;
task1.pcName = "TskA"; task1.pcName = "TskA";
task1.uwResved = LOS_TASK_STATUS_DETACHED; task1.uwResved = LOS_TASK_STATUS_DETACHED;
ret = LOS_TaskCreate(&testTaskID[index], &task1); ret = LOS_TaskCreate(&testTaskID[index], &task1);

View File

@@ -46,10 +46,8 @@ static VOID TaskF01(UINT32 arg)
static UINT32 TestCase(VOID) static UINT32 TestCase(VOID)
{ {
UINT32 freeMem; UINT32 freeMem;
UINT32 freeMem1;
UINT32 freeMem2; UINT32 freeMem2;
UINT32 freeMem3; UINT32 freeMem3;
UINT32 freeMem4;
UINT32 ret; UINT32 ret;
TSK_INIT_PARAM_S task1 = { 0 }; TSK_INIT_PARAM_S task1 = { 0 };
@@ -66,7 +64,7 @@ static UINT32 TestCase(VOID)
ICUNIT_ASSERT_EQUAL(g_testCount, 1, g_testCount); ICUNIT_ASSERT_EQUAL(g_testCount, 1, g_testCount);
freeMem1 = GetfreeMemSize(m_aucSysMem0); (VOID)GetfreeMemSize(m_aucSysMem0);
LOS_TaskDelay(10); // 10, task delay times. LOS_TaskDelay(10); // 10, task delay times.

View File

@@ -32,9 +32,6 @@
#include "osTest.h" #include "osTest.h"
#include "It_los_task.h" #include "It_los_task.h"
static UINT32 g_freeMem1 = 0;
static UINT32 g_freeMem2 = 0;
static UINT32 GetfreeMemSize(void *pool) static UINT32 GetfreeMemSize(void *pool)
{ {
return LOS_MemPoolSizeGet(pool) - LOS_MemTotalUsedGet(pool); return LOS_MemPoolSizeGet(pool) - LOS_MemTotalUsedGet(pool);
@@ -55,7 +52,6 @@ static VOID TaskF01(VOID)
static UINT32 TestCase(VOID) static UINT32 TestCase(VOID)
{ {
UINT32 freeMem; UINT32 freeMem;
UINT32 freeMem1;
UINT32 freeMem2; UINT32 freeMem2;
UINT32 ret; UINT32 ret;
TSK_INIT_PARAM_S task1 = { 0 }; TSK_INIT_PARAM_S task1 = { 0 };

View File

@@ -28,6 +28,109 @@
static_library("test_posix") { static_library("test_posix") {
sources = [ sources = [
"mqueue/It_posix_queue.c",
"mqueue/It_posix_queue_001.c",
"mqueue/It_posix_queue_002.c",
"mqueue/It_posix_queue_003.c",
"mqueue/It_posix_queue_004.c",
"mqueue/It_posix_queue_005.c",
"mqueue/It_posix_queue_006.c",
"mqueue/It_posix_queue_007.c",
"mqueue/It_posix_queue_008.c",
"mqueue/It_posix_queue_009.c",
"mqueue/It_posix_queue_010.c",
"mqueue/It_posix_queue_011.c",
"mqueue/It_posix_queue_012.c",
"mqueue/It_posix_queue_013.c",
"mqueue/It_posix_queue_014.c",
"mqueue/It_posix_queue_015.c",
"mqueue/It_posix_queue_016.c",
"mqueue/It_posix_queue_017.c",
"mqueue/It_posix_queue_018.c",
"mqueue/It_posix_queue_019.c",
"mqueue/It_posix_queue_020.c",
"mqueue/It_posix_queue_021.c",
"mqueue/It_posix_queue_022.c",
"mqueue/It_posix_queue_023.c",
"mqueue/It_posix_queue_024.c",
"mqueue/It_posix_queue_025.c",
"mqueue/It_posix_queue_026.c",
"mqueue/It_posix_queue_027.c",
"mqueue/It_posix_queue_028.c",
"mqueue/It_posix_queue_029.c",
"mqueue/It_posix_queue_030.c",
"mqueue/It_posix_queue_031.c",
"mqueue/It_posix_queue_032.c",
"mqueue/It_posix_queue_033.c",
"mqueue/It_posix_queue_034.c",
"mqueue/It_posix_queue_035.c",
"mqueue/It_posix_queue_036.c",
"mqueue/It_posix_queue_037.c",
"mqueue/It_posix_queue_038.c",
"mqueue/It_posix_queue_039.c",
"mqueue/It_posix_queue_040.c",
"mqueue/It_posix_queue_041.c",
"mqueue/It_posix_queue_042.c",
"mqueue/It_posix_queue_043.c",
"mqueue/It_posix_queue_044.c",
"mqueue/It_posix_queue_045.c",
"mqueue/It_posix_queue_046.c",
"mqueue/It_posix_queue_047.c",
"mqueue/It_posix_queue_048.c",
"mqueue/It_posix_queue_049.c",
"mqueue/It_posix_queue_050.c",
"mqueue/It_posix_queue_051.c",
"mqueue/It_posix_queue_052.c",
"mutex/It_posix_mutex.c",
"mutex/It_posix_mutex_001.c",
"mutex/It_posix_mutex_002.c",
"mutex/It_posix_mutex_003.c",
"mutex/It_posix_mutex_004.c",
"mutex/It_posix_mutex_005.c",
"mutex/It_posix_mutex_006.c",
"mutex/It_posix_mutex_007.c",
"mutex/It_posix_mutex_008.c",
"mutex/It_posix_mutex_009.c",
"mutex/It_posix_mutex_010.c",
"mutex/It_posix_mutex_011.c",
"mutex/It_posix_mutex_012.c",
"mutex/It_posix_mutex_013.c",
"mutex/It_posix_mutex_014.c",
"mutex/It_posix_mutex_015.c",
"mutex/It_posix_mutex_016.c",
"mutex/It_posix_mutex_017.c",
"mutex/It_posix_mutex_018.c",
"mutex/It_posix_mutex_019.c",
"mutex/It_posix_mutex_020.c",
"mutex/It_posix_mutex_021.c",
"mutex/It_posix_mutex_022.c",
"mutex/It_posix_mutex_023.c",
"mutex/It_posix_mutex_024.c",
"mutex/It_posix_mutex_025.c",
"mutex/It_posix_mutex_026.c",
"mutex/It_posix_mutex_027.c",
"mutex/It_posix_mutex_028.c",
"mutex/It_posix_mutex_029.c",
"mutex/It_posix_mutex_030.c",
"mutex/It_posix_mutex_031.c",
"mutex/It_posix_mutex_032.c",
"mutex/It_posix_mutex_033.c",
"mutex/It_posix_mutex_034.c",
"mutex/It_posix_mutex_035.c",
"mutex/It_posix_mutex_036.c",
"mutex/It_posix_mutex_037.c",
"mutex/It_posix_mutex_038.c",
"mutex/It_posix_mutex_039.c",
"mutex/It_posix_mutex_040.c",
"mutex/It_posix_mutex_041.c",
"mutex/It_posix_mutex_042.c",
"mutex/It_posix_mutex_043.c",
"mutex/It_posix_mutex_044.c",
"mutex/It_posix_mutex_045.c",
"mutex/It_posix_mutex_046.c",
"mutex/It_posix_mutex_047.c",
"mutex/It_posix_mutex_048.c",
"mutex/It_posix_mutex_049.c",
"pthread/It_posix_pthread.c", "pthread/It_posix_pthread.c",
"pthread/It_posix_pthread_001.c", "pthread/It_posix_pthread_001.c",
"pthread/It_posix_pthread_002.c", "pthread/It_posix_pthread_002.c",

View File

@@ -0,0 +1,107 @@
/*
* Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "stdio.h"
#include "It_posix_queue.h"
CHAR *g_mqueueMsessage[MQUEUE_SHORT_ARRAY_LENGTH] = {"0123456789", "1234567890", "2345678901",
"3456789012", "4567890123", "5678901234",
"6789012345", "7890123456", "lalalalala",
"hahahahaha"};
CHAR g_gqname[MQUEUE_STANDARD_NAME_LENGTH];
CHAR g_mqueueName[LOSCFG_BASE_IPC_QUEUE_CONFIG + 1][MQUEUE_STANDARD_NAME_LENGTH];
mqd_t g_mqueueId[LOSCFG_BASE_IPC_QUEUE_CONFIG + 1];
SEM_HANDLE_T g_mqueueSem;
mqd_t g_messageQId;
mqd_t g_gqueue;
VOID TestAssertWaitDelay(UINT32 *testCount, UINT32 flag)
{
while (*testCount != flag) {
usleep(1);
}
}
VOID ItSuitePosixMqueue(void)
{
printf("*********** BEGIN SAMPLE POSIX MQUEUE TEST ************\n");
ItPosixQueue001();
ItPosixQueue002();
ItPosixQueue003();
ItPosixQueue004();
ItPosixQueue005();
ItPosixQueue006();
ItPosixQueue007();
ItPosixQueue008();
ItPosixQueue009();
ItPosixQueue010();
ItPosixQueue011();
ItPosixQueue012();
ItPosixQueue013();
ItPosixQueue014();
ItPosixQueue015();
ItPosixQueue016();
ItPosixQueue017();
ItPosixQueue018();
ItPosixQueue019();
ItPosixQueue020();
ItPosixQueue021();
ItPosixQueue022();
ItPosixQueue023();
ItPosixQueue024();
ItPosixQueue025();
ItPosixQueue026();
ItPosixQueue027();
ItPosixQueue028();
ItPosixQueue029();
ItPosixQueue030();
ItPosixQueue031();
ItPosixQueue032();
ItPosixQueue033();
ItPosixQueue034();
ItPosixQueue035();
ItPosixQueue036();
ItPosixQueue037();
ItPosixQueue038();
ItPosixQueue039();
ItPosixQueue040();
ItPosixQueue041();
ItPosixQueue042();
ItPosixQueue043();
ItPosixQueue044();
ItPosixQueue045();
ItPosixQueue046();
ItPosixQueue047();
ItPosixQueue048();
ItPosixQueue049();
ItPosixQueue050();
ItPosixQueue051();
ItPosixQueue052();
}

View File

@@ -0,0 +1,160 @@
/*
* Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef IT_POSIX_QUEUE_H
#define IT_POSIX_QUEUE_H
#include <stdlib.h>
#include <mqueue.h>
#include <fcntl.h>
#include <errno.h>
#include <limits.h>
#include <sched.h>
#include <signal.h>
#include <osTest.h>
#include "pthread.h"
#define MAXMSG5 5
#define MSGLEN 10
#define MAXMSG 10
#define MQUEUE_SEND_STRING_TEST "0123456789"
#define MQUEUE_SHORT_ARRAY_LENGTH 10 // 10: strlen(MQUEUE_SEND_STRING_TEST)
#define MQUEUE_STANDARD_NAME_LENGTH 50
#define MQUEUE_PTHREAD_PRIORITY_TEST1 3
#define MQUEUE_PTHREAD_PRIORITY_TEST2 4
#define MQUEUE_PATH_MAX_TEST PATH_MAX
#define MQUEUE_NAME_MAX_TEST NAME_MAX
#define MQUEUE_PTHREAD_NUM_TEST 5
#define MQUEUE_PRIORITY_TEST 0
#define MQUEUE_TIMEOUT_TEST 7
#define MQUEUE_PRIORITY_NUM_TEST 3
#define MQUEUE_MAX_NUM_TEST (LOSCFG_BASE_IPC_QUEUE_CONFIG - QUEUE_EXISTED_NUM)
#define MQ_MAX_MSG_NUM 16
#define MQ_MAX_MSG_LEN 64
#define HWI_NUM_TEST 1
#define HWI_NUM_TEST1 2
#if (LOSCFG_LIBC_NEWLIB == 1)
#define MQ_PRIO_MAX 1
#endif
#define LOSCFG_BASE_IPC_QUEUE_CONFIG 1024
#define LOS_AtomicInc(a) (++*(a))
#define MqueueTaskDelay(tick) (usleep((tick) * 10000))
#ifdef __LP64__
#define PER_ADDED_VALUE 8
#else
#define PER_ADDED_VALUE 4
#endif
#define ICUNIT_GOTO_WITHIN_EQUAL(param, value1, value2, retcode, label) \
do { \
if ((param) < (value1) || (param) > (value2)) { \
ICunitSaveErr(__LINE__, (iiUINT32)retcode); \
goto label; \
} \
} while (0)
typedef UINT32 TSK_HANDLE_T;
typedef UINT32 SEM_HANDLE_T ;
extern SEM_HANDLE_T g_mqueueSem;
static TSK_HANDLE_T g_mqueueTaskPID;
extern CHAR g_gqname[MQUEUE_STANDARD_NAME_LENGTH];
extern CHAR g_mqueueName[LOSCFG_BASE_IPC_QUEUE_CONFIG + 1][MQUEUE_STANDARD_NAME_LENGTH];
extern mqd_t g_mqueueId[LOSCFG_BASE_IPC_QUEUE_CONFIG + 1];
extern CHAR *g_mqueueMsessage[MQUEUE_SHORT_ARRAY_LENGTH];
extern mqd_t g_messageQId;
extern mqd_t g_gqueue;
extern VOID ItSuitePosixMqueue(VOID);
extern UINT32 PosixPthreadInit(pthread_attr_t *attr, int pri);
extern UINT32 PosixPthreadDestroy(pthread_attr_t *attr, pthread_t thread);
extern VOID TestAssertWaitDelay(UINT32 *testCount, UINT32 flag);
VOID ItPosixQueue001(VOID);
VOID ItPosixQueue002(VOID);
VOID ItPosixQueue003(VOID);
VOID ItPosixQueue004(VOID);
VOID ItPosixQueue005(VOID);
VOID ItPosixQueue006(VOID);
VOID ItPosixQueue007(VOID);
VOID ItPosixQueue008(VOID);
VOID ItPosixQueue009(VOID);
VOID ItPosixQueue010(VOID);
VOID ItPosixQueue011(VOID);
VOID ItPosixQueue012(VOID);
VOID ItPosixQueue013(VOID);
VOID ItPosixQueue014(VOID);
VOID ItPosixQueue015(VOID);
VOID ItPosixQueue016(VOID);
VOID ItPosixQueue017(VOID);
VOID ItPosixQueue018(VOID);
VOID ItPosixQueue019(VOID);
VOID ItPosixQueue020(VOID);
VOID ItPosixQueue021(VOID);
VOID ItPosixQueue022(VOID);
VOID ItPosixQueue023(VOID);
VOID ItPosixQueue024(VOID);
VOID ItPosixQueue025(VOID);
VOID ItPosixQueue026(VOID);
VOID ItPosixQueue027(VOID);
VOID ItPosixQueue028(VOID);
VOID ItPosixQueue029(VOID);
VOID ItPosixQueue030(VOID);
VOID ItPosixQueue031(VOID);
VOID ItPosixQueue032(VOID);
VOID ItPosixQueue033(VOID);
VOID ItPosixQueue034(VOID);
VOID ItPosixQueue035(VOID);
VOID ItPosixQueue036(VOID);
VOID ItPosixQueue037(VOID);
VOID ItPosixQueue038(VOID);
VOID ItPosixQueue039(VOID);
VOID ItPosixQueue040(VOID);
VOID ItPosixQueue041(VOID);
VOID ItPosixQueue042(VOID);
VOID ItPosixQueue043(VOID);
VOID ItPosixQueue044(VOID);
VOID ItPosixQueue045(VOID);
VOID ItPosixQueue046(VOID);
VOID ItPosixQueue047(VOID);
VOID ItPosixQueue048(VOID);
VOID ItPosixQueue049(VOID);
VOID ItPosixQueue050(VOID);
VOID ItPosixQueue051(VOID);
VOID ItPosixQueue052(VOID);
#endif

View File

@@ -0,0 +1,76 @@
/*
* Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_posix_queue.h"
static UINT32 Testcase(VOID)
{
INT32 ret;
CHAR mqname[MQUEUE_STANDARD_NAME_LENGTH] = "";
CHAR msgrcd[MQUEUE_STANDARD_NAME_LENGTH] = {0};
const CHAR *msgptr = MQUEUE_SEND_STRING_TEST;
struct mq_attr attr = {0};
mqd_t mqueue;
attr.mq_msgsize = MQUEUE_STANDARD_NAME_LENGTH;
attr.mq_maxmsg = 0;
(void)snprintf_s(mqname, MQUEUE_STANDARD_NAME_LENGTH - 1, MQUEUE_STANDARD_NAME_LENGTH, "/mq001_%d",
LOS_CurTaskIDGet());
mqueue = mq_open(mqname, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR, &attr);
ICUNIT_GOTO_EQUAL(mqueue, (mqd_t)-1, mqueue, EXIT1);
ret = mq_send(mqueue, msgptr, strlen(msgptr), 0);
ICUNIT_GOTO_EQUAL(ret, -1, ret, EXIT1);
ret = mq_receive(mqueue, msgrcd, MQUEUE_STANDARD_NAME_LENGTH, NULL);
ICUNIT_GOTO_EQUAL(ret, -1, ret, EXIT1);
return LOS_OK;
EXIT1:
mq_close(mqueue);
EXIT:
mq_unlink(mqname);
return LOS_OK;
}
/**
* @tc.name: ItPosixQueue001
* @tc.desc: Test interface mq_open
* @tc.type: FUNC
* @tc.require: issueI603SR6
*/
VOID ItPosixQueue001(VOID)
{
TEST_ADD_CASE("ItPosixQueue001", Testcase, TEST_POSIX, TEST_QUE, TEST_LEVEL0, TEST_FUNCTION);
}

View File

@@ -0,0 +1,84 @@
/*
* Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_posix_queue.h"
static UINT32 Testcase(VOID)
{
INT32 ret;
CHAR msgrcd[MQUEUE_STANDARD_NAME_LENGTH] = {0};
CHAR mqname[MQUEUE_STANDARD_NAME_LENGTH] = "";
const CHAR *msgptr = MQUEUE_SEND_STRING_TEST;
struct mq_attr attr = {0};
mqd_t mqueue;
attr.mq_msgsize = MQUEUE_STANDARD_NAME_LENGTH;
attr.mq_maxmsg = 1;
ret = snprintf_s(mqname, MQUEUE_STANDARD_NAME_LENGTH, MQUEUE_STANDARD_NAME_LENGTH - 1,
"/mq002_%d", LOS_CurTaskIDGet());
ICUNIT_GOTO_NOT_EQUAL(ret, -1, ret, EXIT2);
mqueue = mq_open(mqname, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR, &attr);
ICUNIT_GOTO_NOT_EQUAL(mqueue, (mqd_t)-1, mqueue, EXIT1);
ret = mq_send(mqueue, msgptr, strlen(msgptr), 0);
ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT1);
ret = mq_receive(mqueue, msgrcd, MQUEUE_STANDARD_NAME_LENGTH, NULL);
ICUNIT_GOTO_EQUAL(ret, MQUEUE_SHORT_ARRAY_LENGTH, ret, EXIT1);
ICUNIT_GOTO_STRING_EQUAL(msgrcd, MQUEUE_SEND_STRING_TEST, msgrcd, EXIT1);
ret = mq_close(mqueue);
ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT1);
ret = mq_unlink(mqname);
ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT);
return LOS_OK;
EXIT1:
mq_close(mqueue);
EXIT:
mq_unlink(mqname);
EXIT2:
return LOS_OK;
}
/**
* @tc.name: ItPosixQueue002
* @tc.desc: Test interface mq_send
* @tc.type: FUNC
* @tc.require: issueI603SR6
*/
VOID ItPosixQueue002(VOID)
{
TEST_ADD_CASE("ItPosixQueue002", Testcase, TEST_POSIX, TEST_QUE, TEST_LEVEL2, TEST_FUNCTION);
}

View File

@@ -0,0 +1,80 @@
/*
* Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_posix_queue.h"
static UINT32 Testcase(VOID)
{
CHAR mqname[MQUEUE_STANDARD_NAME_LENGTH] = {0};
CHAR msgrv1[MQUEUE_STANDARD_NAME_LENGTH] = {0};
struct mq_attr attr = {0};
INT32 ret = 0;
INT32 i;
pthread_t pthread1;
pthread_t pthread2;
mqd_t mqueue1;
mqd_t mqueue2;
struct timespec ts;
ret = snprintf_s(mqname, MQUEUE_STANDARD_NAME_LENGTH, MQUEUE_STANDARD_NAME_LENGTH - 1, \
"/mq003_%d", LOS_CurTaskIDGet());
ICUNIT_GOTO_NOT_EQUAL(ret, -1, ret, EXIT1);
attr.mq_msgsize = MQUEUE_STANDARD_NAME_LENGTH;
attr.mq_maxmsg = MQUEUE_STANDARD_NAME_LENGTH;
mqueue1 = mq_open(mqname, O_CREAT | O_RDWR | O_NONBLOCK, S_IRUSR | S_IWUSR, &attr);
ICUNIT_ASSERT_NOT_EQUAL(mqueue1, (mqd_t)-1, mqueue1);
mqueue2 = mq_open(mqname, O_RDWR | O_EXCL, S_IRUSR | S_IWUSR, &attr);
ICUNIT_ASSERT_NOT_EQUAL(mqueue2, (mqd_t)-1, mqueue2);
ts.tv_sec = 1;
ts.tv_nsec = 1;
ret = mq_timedreceive(mqueue1, msgrv1, MQUEUE_STANDARD_NAME_LENGTH, NULL, &ts);
ICUNIT_ASSERT_EQUAL(ret, -1, ret);
EXIT:
mq_close(mqueue1);
mq_close(mqueue2);
mq_unlink(mqname);
EXIT1:
return LOS_OK;
}
/**
* @tc.name: ItPosixQueue003
* @tc.desc: Test interface mq_timedreceive
* @tc.type: FUNC
* @tc.require: issueI603SR6
*/
VOID ItPosixQueue003(VOID)
{
TEST_ADD_CASE("ItPosixQueue003", Testcase, TEST_POSIX, TEST_QUE, TEST_LEVEL2, TEST_FUNCTION);
}

View File

@@ -0,0 +1,64 @@
/*
* Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_posix_queue.h"
static UINT32 Testcase(VOID)
{
INT32 ret;
CHAR mqname[MQUEUE_STANDARD_NAME_LENGTH] = "";
mqd_t mqueue;
ret = snprintf_s(mqname, MQUEUE_STANDARD_NAME_LENGTH, MQUEUE_STANDARD_NAME_LENGTH - 1,
"/mq004_%d", LOS_CurTaskIDGet());
ICUNIT_GOTO_NOT_EQUAL(ret, -1, ret, EXIT1);
mqueue = mq_open(mqname, O_RDWR, S_IRUSR | S_IWUSR, NULL);
ICUNIT_GOTO_EQUAL(mqueue, (mqd_t)-1, mqueue, EXIT);
ICUNIT_ASSERT_EQUAL(errno, ENOENT, errno);
return LOS_OK;
EXIT:
mq_close(mqueue);
mq_unlink(mqname);
EXIT1:
return LOS_OK;
}
/**
* @tc.name: ItPosixQueue004
* @tc.desc: Test interface mq_open
* @tc.type: FUNC
* @tc.require: issueI603SR6
*/
VOID ItPosixQueue004(VOID)
{
TEST_ADD_CASE("ItPosixQueue004", Testcase, TEST_POSIX, TEST_QUE, TEST_LEVEL2, TEST_FUNCTION);
}

View File

@@ -0,0 +1,78 @@
/*
* Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_posix_queue.h"
static UINT32 Testcase(VOID)
{
INT32 ret;
CHAR mqname[MQUEUE_STANDARD_NAME_LENGTH] = "";
mqd_t roqueue;
mqd_t roqueue2;
ret = snprintf_s(mqname, MQUEUE_STANDARD_NAME_LENGTH, MQUEUE_STANDARD_NAME_LENGTH - 1,
"/mq005_%d", LOS_CurTaskIDGet());
ICUNIT_GOTO_NOT_EQUAL(ret, -1, ret, EXIT2);
roqueue = mq_open(mqname, O_CREAT | O_RDONLY, S_IRUSR | S_IWUSR, NULL);
ICUNIT_GOTO_NOT_EQUAL(roqueue, (mqd_t)-1, roqueue, EXIT);
roqueue2 = mq_open(mqname, O_RDONLY, S_IRUSR | S_IWUSR, NULL);
ICUNIT_GOTO_NOT_EQUAL(roqueue2, (mqd_t)-1, roqueue2, EXIT1);
ret = mq_close(roqueue);
ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT1);
ret = mq_close(roqueue2);
ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT1);
ret = mq_unlink(mqname);
ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT);
return LOS_OK;
EXIT1:
mq_close(roqueue2);
EXIT:
mq_close(roqueue);
mq_unlink(mqname);
EXIT2:
return LOS_OK;
}
/**
* @tc.name: ItPosixQueue005
* @tc.desc: Test interface mq_close
* @tc.type: FUNC
* @tc.require: issueI603SR6
*/
VOID ItPosixQueue005(VOID)
{
TEST_ADD_CASE("ItPosixQueue005", Testcase, TEST_POSIX, TEST_QUE, TEST_LEVEL2, TEST_FUNCTION);
}

View File

@@ -0,0 +1,96 @@
/*
* Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_posix_queue.h"
static UINT32 Testcase(VOID)
{
INT32 ret;
CHAR mqname[MQUEUE_STANDARD_NAME_LENGTH] = {0};
CHAR msgrcd[MQUEUE_STANDARD_NAME_LENGTH] = {0};
CHAR msgrcd2[MQUEUE_STANDARD_NAME_LENGTH] = {0};
const CHAR *msgptr = MQUEUE_SEND_STRING_TEST;
mqd_t rdwrqueue;
mqd_t rdwrqueue2;
struct mq_attr attr = {0};
ret = snprintf_s(mqname, MQUEUE_STANDARD_NAME_LENGTH, MQUEUE_STANDARD_NAME_LENGTH - 1,
"/mq006_%d", LOS_CurTaskIDGet());
ICUNIT_GOTO_NOT_EQUAL(ret, -1, ret, EXIT2);
attr.mq_msgsize = MQUEUE_STANDARD_NAME_LENGTH;
attr.mq_maxmsg = MQUEUE_STANDARD_NAME_LENGTH;
rdwrqueue = mq_open(mqname, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR, &attr);
ICUNIT_GOTO_NOT_EQUAL(rdwrqueue, (mqd_t)-1, rdwrqueue, EXIT);
ret = mq_send(rdwrqueue, msgptr, strlen(msgptr), 0);
ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT);
ret = mq_receive(rdwrqueue, msgrcd, MQUEUE_STANDARD_NAME_LENGTH, NULL);
ICUNIT_GOTO_EQUAL(ret, strlen(msgptr), ret, EXIT);
rdwrqueue2 = mq_open(mqname, O_RDWR, S_IRUSR | S_IWUSR, &attr);
ICUNIT_GOTO_NOT_EQUAL(rdwrqueue2, (mqd_t)-1, rdwrqueue2, EXIT1);
ret = mq_send(rdwrqueue2, msgptr, strlen(msgptr), 0);
ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT1);
ret = mq_receive(rdwrqueue2, msgrcd2, MQUEUE_STANDARD_NAME_LENGTH, NULL);
ICUNIT_GOTO_EQUAL(ret, strlen(msgptr), ret, EXIT1);
ret = mq_close(rdwrqueue2);
ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT1);
ret = mq_close(rdwrqueue);
ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT);
ret = mq_unlink(mqname);
ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT);
return LOS_OK;
EXIT1:
mq_close(rdwrqueue2);
EXIT:
mq_close(rdwrqueue);
mq_unlink(mqname);
EXIT2:
return LOS_OK;
}
/**
* @tc.name: ItPosixQueue006
* @tc.desc: Test interface mq_receive
* @tc.type: FUNC
* @tc.require: issueI603SR6
*/
VOID ItPosixQueue006(VOID)
{
TEST_ADD_CASE("ItPosixQueue006", Testcase, TEST_POSIX, TEST_QUE, TEST_LEVEL2, TEST_FUNCTION);
}

View File

@@ -0,0 +1,86 @@
/*
* Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_posix_queue.h"
static UINT32 Testcase(VOID)
{
INT32 ret = 0;
CHAR mqname[MQUEUE_STANDARD_NAME_LENGTH] = "";
const CHAR *msgptr = MQUEUE_SEND_STRING_TEST;
mqd_t mqueue1;
mqd_t mqueue2;
ret = snprintf_s(mqname, MQUEUE_STANDARD_NAME_LENGTH, MQUEUE_STANDARD_NAME_LENGTH - 1,
"/mq007_%d", LOS_CurTaskIDGet());
ICUNIT_GOTO_NOT_EQUAL(ret, -1, ret, EXIT3);
mqueue1 = mq_open(mqname, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR, NULL);
ICUNIT_GOTO_NOT_EQUAL(mqueue1, (mqd_t)-1, mqueue1, EXIT1);
ret = mq_send(mqueue1, msgptr, strlen(msgptr), 0);
ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT1);
mqueue2 = mq_open(mqname, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR, NULL);
ICUNIT_GOTO_NOT_EQUAL(mqueue2, (mqd_t)-1, mqueue2, EXIT2);
ret = mq_send(mqueue2, msgptr, strlen(msgptr), 0);
ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT2);
ret = mq_close(mqueue1);
ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT2);
ret = mq_close(mqueue2);
ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT1);
ret = mq_unlink(mqname);
ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT);
return LOS_OK;
EXIT2:
mq_close(mqueue2);
EXIT1:
mq_close(mqueue1);
EXIT:
mq_unlink(mqname);
EXIT3:
return LOS_OK;
}
/**
* @tc.name: ItPosixQueue007
* @tc.desc: Test interface mq_close
* @tc.type: FUNC
* @tc.require: issueI603SR6
*/
VOID ItPosixQueue007(VOID)
{
TEST_ADD_CASE("ItPosixQueue007", Testcase, TEST_POSIX, TEST_QUE, TEST_LEVEL2, TEST_FUNCTION);
}

View File

@@ -0,0 +1,78 @@
/*
* Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_posix_queue.h"
static UINT32 Testcase(VOID)
{
INT32 ret;
CHAR mqname[MQUEUE_STANDARD_NAME_LENGTH] = "";
mqd_t mqueue;
struct mq_attr attr = {0};
ret = snprintf_s(mqname, MQUEUE_STANDARD_NAME_LENGTH, MQUEUE_STANDARD_NAME_LENGTH - 1,
"/mq008_%d", LOS_CurTaskIDGet());
ICUNIT_GOTO_NOT_EQUAL(ret, -1, ret, EXIT2);
mqueue = mq_open(mqname, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR, NULL);
ICUNIT_GOTO_NOT_EQUAL(mqueue, (mqd_t)-1, mqueue, EXIT1);
ret = mq_getattr(mqueue, &attr);
ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT1);
ICUNIT_GOTO_EQUAL(attr.mq_curmsgs, 0, attr.mq_curmsgs, EXIT1);
ICUNIT_GOTO_EQUAL(attr.mq_flags, O_CREAT | O_RDWR, attr.mq_flags, EXIT1);
ICUNIT_GOTO_EQUAL(attr.mq_maxmsg, MQ_MAX_MSG_NUM, attr.mq_maxmsg, EXIT1);
ICUNIT_GOTO_EQUAL(attr.mq_msgsize, MQ_MAX_MSG_LEN, attr.mq_msgsize, EXIT1);
ret = mq_close(mqueue);
ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT1);
ret = mq_unlink(mqname);
ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT);
return LOS_OK;
EXIT1:
mq_close(mqueue);
EXIT:
mq_unlink(mqname);
EXIT2:
return LOS_OK;
}
/**
* @tc.name: ItPosixQueue008
* @tc.desc: Test interface mq_getattr
* @tc.type: FUNC
* @tc.require: issueI603SR6
*/
VOID ItPosixQueue008(VOID)
{
TEST_ADD_CASE("ItPosixQueue008", Testcase, TEST_POSIX, TEST_QUE, TEST_LEVEL2, TEST_FUNCTION);
}

View File

@@ -0,0 +1,85 @@
/*
* Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_posix_queue.h"
static UINT32 Testcase(VOID)
{
INT32 ret;
CHAR mqname[MQUEUE_STANDARD_NAME_LENGTH] = "";
mqd_t mqueue;
struct mq_attr attr = {0};
struct mq_attr attrget;
ret = snprintf_s(mqname, MQUEUE_STANDARD_NAME_LENGTH, MQUEUE_STANDARD_NAME_LENGTH - 1,
"/mq009_%d", LOS_CurTaskIDGet());
ICUNIT_GOTO_NOT_EQUAL(ret, -1, ret, EXIT2);
attr.mq_maxmsg = MQUEUE_SHORT_ARRAY_LENGTH;
attr.mq_msgsize = 5; // 5, queue message size.
mqueue = mq_open(mqname, O_CREAT | O_RDWR | O_NONBLOCK, S_IRUSR | S_IWUSR, &attr);
ICUNIT_GOTO_NOT_EQUAL(mqueue, (mqd_t)-1, mqueue, EXIT1);
ret = mq_getattr(mqueue, &attrget);
ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT1);
ICUNIT_GOTO_EQUAL(attrget.mq_curmsgs, 0, attrget.mq_curmsgs, EXIT1);
ICUNIT_GOTO_EQUAL(attrget.mq_flags, O_CREAT | O_RDWR | O_NONBLOCK, attrget.mq_flags, EXIT1);
ICUNIT_GOTO_EQUAL(attrget.mq_maxmsg, attr.mq_maxmsg, attrget.mq_maxmsg, EXIT1);
ICUNIT_GOTO_EQUAL(attrget.mq_msgsize, attr.mq_msgsize, attrget.mq_msgsize, EXIT1);
if (!(attrget.mq_flags & O_NONBLOCK)) {
goto EXIT1;
}
ret = mq_close(mqueue);
ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT1);
ret = mq_unlink(mqname);
ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT);
return LOS_OK;
EXIT1:
mq_close(mqueue);
EXIT:
mq_unlink(mqname);
EXIT2:
return LOS_OK;
}
/**
* @tc.name: ItPosixQueue009
* @tc.desc: Test interface mq_getattr
* @tc.type: FUNC
* @tc.require: issueI603SR6
*/
VOID ItPosixQueue009(VOID)
{
TEST_ADD_CASE("ItPosixQueue009", Testcase, TEST_POSIX, TEST_QUE, TEST_LEVEL2, TEST_FUNCTION);
}

View File

@@ -0,0 +1,76 @@
/*
* Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_posix_queue.h"
static UINT32 Testcase(VOID)
{
INT32 ret;
CHAR mqname[MQUEUE_STANDARD_NAME_LENGTH] = "";
mqd_t mqueue1;
mqd_t mqueue2;
ret = snprintf_s(mqname, MQUEUE_STANDARD_NAME_LENGTH, MQUEUE_STANDARD_NAME_LENGTH - 1,
"/mq010_%d", LOS_CurTaskIDGet());
ICUNIT_GOTO_NOT_EQUAL(ret, -1, ret, EXIT3);
mqueue1 = mq_open(mqname, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR, NULL);
ICUNIT_GOTO_NOT_EQUAL(mqueue1, (mqd_t)-1, mqueue1, EXIT1);
mqueue2 = mq_open(mqname, O_CREAT | O_EXCL | O_RDWR, S_IRUSR | S_IWUSR, NULL);
ICUNIT_GOTO_EQUAL(mqueue2, (mqd_t)-1, mqueue2, EXIT2);
ret = mq_close(mqueue1);
ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT1);
ret = mq_unlink(mqname);
ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT);
return LOS_OK;
EXIT2:
mq_close(mqueue2);
EXIT1:
mq_close(mqueue1);
EXIT:
mq_unlink(mqname);
EXIT3:
return LOS_OK;
}
/**
* @tc.name: ItPosixQueue010
* @tc.desc: Test interface mq_unlink
* @tc.type: FUNC
* @tc.require: issueI603SR6
*/
VOID ItPosixQueue010(VOID)
{
TEST_ADD_CASE("ItPosixQueue010", Testcase, TEST_POSIX, TEST_QUE, TEST_LEVEL2, TEST_FUNCTION);
}

View File

@@ -0,0 +1,74 @@
/*
* Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_posix_queue.h"
static UINT32 Testcase(VOID)
{
INT32 ret;
CHAR mqname[MQUEUE_STANDARD_NAME_LENGTH] = "";
const CHAR *msgptr = MQUEUE_SEND_STRING_TEST;
mqd_t mqueue;
ret = snprintf_s(mqname, MQUEUE_STANDARD_NAME_LENGTH, MQUEUE_STANDARD_NAME_LENGTH - 1,
"/mq011_%d", LOS_CurTaskIDGet());
ICUNIT_GOTO_NOT_EQUAL(ret, -1, ret, EXIT2);
mqueue = mq_open(mqname, O_CREAT | O_RDWR | O_NONBLOCK, S_IRUSR | S_IWUSR, NULL);
ICUNIT_GOTO_NOT_EQUAL(mqueue, (mqd_t)-1, mqueue, EXIT1);
ret = mq_send(mqueue, msgptr, strlen(msgptr), 0);
ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT1);
ret = mq_close(mqueue);
ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT1);
ret = mq_unlink(mqname);
ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT);
return LOS_OK;
EXIT1:
mq_close(mqueue);
EXIT:
mq_unlink(mqname);
EXIT2:
return LOS_OK;
}
/**
* @tc.name: ItPosixQueue011
* @tc.desc: Test interface mq_send
* @tc.type: FUNC
* @tc.require: issueI603SR6
*/
VOID ItPosixQueue011(VOID)
{
TEST_ADD_CASE("ItPosixQueue011", Testcase, TEST_POSIX, TEST_QUE, TEST_LEVEL2, TEST_FUNCTION);
}

View File

@@ -0,0 +1,95 @@
/*
* Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_posix_queue.h"
static UINT32 Testcase(VOID)
{
INT32 ret;
CHAR mqname[MQUEUE_STANDARD_NAME_LENGTH] = {0};
CHAR msgrcd[MQUEUE_STANDARD_NAME_LENGTH] = {0};
const CHAR *msgptr = MQUEUE_SEND_STRING_TEST;
mqd_t mqueue1;
mqd_t mqueue2;
struct mq_attr attr = {0};
ret = snprintf_s(mqname, MQUEUE_STANDARD_NAME_LENGTH, MQUEUE_STANDARD_NAME_LENGTH - 1,
"/mq012_%d", LOS_CurTaskIDGet());
ICUNIT_GOTO_NOT_EQUAL(ret, -1, ret, EXIT3);
attr.mq_msgsize = MQUEUE_STANDARD_NAME_LENGTH;
attr.mq_maxmsg = MQUEUE_STANDARD_NAME_LENGTH;
mqueue1 = mq_open(mqname, O_CREAT | O_RDWR | O_NONBLOCK, S_IRUSR | S_IWUSR, &attr);
ICUNIT_GOTO_NOT_EQUAL(mqueue1, (mqd_t)-1, mqueue1, EXIT1);
ret = mq_receive(mqueue1, msgrcd, MQUEUE_STANDARD_NAME_LENGTH, NULL);
ICUNIT_GOTO_EQUAL(ret, -1, ret, EXIT1);
ret = mq_send(mqueue1, msgptr, strlen(msgptr), 0);
ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT1);
mqueue2 = mq_open(mqname, O_RDWR | O_NONBLOCK, S_IRUSR | S_IWUSR, NULL);
ICUNIT_GOTO_NOT_EQUAL(mqueue1, (mqd_t)-1, mqueue1, EXIT2);
ret = mq_receive(mqueue1, msgrcd, MQUEUE_STANDARD_NAME_LENGTH, NULL);
ICUNIT_GOTO_EQUAL(ret, strlen(msgptr), ret, EXIT2);
ret = mq_close(mqueue1);
ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT2);
ret = mq_close(mqueue2);
ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT1);
ret = mq_unlink(mqname);
ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT);
return LOS_OK;
EXIT2:
mq_close(mqueue2);
EXIT1:
mq_close(mqueue1);
EXIT:
mq_unlink(mqname);
EXIT3:
return LOS_OK;
}
/**
* @tc.name: ItPosixQueue012
* @tc.desc: Test interface mq_receive
* @tc.type: FUNC
* @tc.require: issueI603SR6
*/
VOID ItPosixQueue012(VOID)
{
TEST_ADD_CASE("ItPosixQueue012", Testcase, TEST_POSIX, TEST_QUE, TEST_LEVEL2, TEST_FUNCTION);
}

View File

@@ -0,0 +1,72 @@
/*
* Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_posix_queue.h"
static UINT32 Testcase(VOID)
{
INT32 ret;
CHAR mqname[MQUEUE_STANDARD_NAME_LENGTH] = "";
mqd_t mqueue;
struct sigevent ev;
struct sigaction act;
ret = snprintf_s(mqname, MQUEUE_STANDARD_NAME_LENGTH, MQUEUE_STANDARD_NAME_LENGTH - 1,
"/mq013_%d", LOS_CurTaskIDGet());
ICUNIT_GOTO_NOT_EQUAL(ret, -1, ret, EXIT2);
mqueue = mq_open(mqname, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR, NULL);
ICUNIT_GOTO_NOT_EQUAL(mqueue, (mqd_t)-1, mqueue, EXIT1);
ret = mq_close(mqueue);
ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT1);
ret = mq_unlink(mqname);
ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT);
return LOS_OK;
EXIT1:
mq_close(mqueue);
EXIT:
mq_unlink(mqname);
EXIT2:
return LOS_OK;
}
/**
* @tc.name: ItPosixQueue013
* @tc.desc: Test interface mq_close
* @tc.type: FUNC
* @tc.require: issueI603SR6
*/
VOID ItPosixQueue013(VOID)
{
TEST_ADD_CASE("ItPosixQueue013", Testcase, TEST_POSIX, TEST_QUE, TEST_LEVEL2, TEST_FUNCTION);
}

View File

@@ -0,0 +1,64 @@
/*
* Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_posix_queue.h"
static UINT32 Testcase(VOID)
{
INT32 ret;
CHAR mqname[MQUEUE_STANDARD_NAME_LENGTH] = "";
mqd_t mqueue;
ret = snprintf_s(mqname, MQUEUE_STANDARD_NAME_LENGTH, MQUEUE_STANDARD_NAME_LENGTH - 1,
"/mq014_%d", LOS_CurTaskIDGet());
ICUNIT_GOTO_NOT_EQUAL(ret, -1, ret, EXIT1);
mqueue = mq_open(mqname, O_RDWR, S_IRUSR | S_IWUSR, NULL);
ICUNIT_GOTO_EQUAL(mqueue, (mqd_t)-1, mqueue, EXIT);
return LOS_OK;
EXIT:
mq_close(mqueue);
mq_unlink(mqname);
EXIT1:
return LOS_OK;
}
/**
* @tc.name: ItPosixQueue014
* @tc.desc: Test interface mq_open
* @tc.type: FUNC
* @tc.require: issueI603SR6
*/
VOID ItPosixQueue014(VOID)
{
TEST_ADD_CASE("ItPosixQueue014", Testcase, TEST_POSIX, TEST_QUE, TEST_LEVEL2, TEST_FUNCTION);
}

View File

@@ -0,0 +1,72 @@
/*
* Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_posix_queue.h"
#define QUEUE_NAME_MAX_LEN (MQUEUE_NAME_MAX_TEST * 2)
static UINT32 Testcase(VOID)
{
CHAR mqname[QUEUE_NAME_MAX_LEN];
mqd_t mqueue;
UINT32 ret;
INT32 i;
ret = snprintf_s(mqname, QUEUE_NAME_MAX_LEN, QUEUE_NAME_MAX_LEN - 1, \
"/mq015_%d", LOS_CurTaskIDGet());
ICUNIT_GOTO_NOT_EQUAL(ret, -1, ret, EXIT1);
for (i = 0; i < MQUEUE_NAME_MAX_TEST; i++) {
ret = strcat_s(mqname, QUEUE_NAME_MAX_LEN, "0");
ICUNIT_ASSERT_EQUAL(ret, EOK, ret);
}
mqueue = mq_open(mqname, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR, NULL);
ICUNIT_GOTO_EQUAL(mqueue, (mqd_t)-1, mqueue, EXIT);
ICUNIT_ASSERT_EQUAL(errno, ENAMETOOLONG, errno);
return LOS_OK;
EXIT:
mq_close(mqueue);
mq_unlink(mqname);
EXIT1:
return LOS_OK;
}
/**
* @tc.name: ItPosixQueue015
* @tc.desc: Test interface mq_open
* @tc.type: FUNC
* @tc.require: issueI603SR6
*/
VOID ItPosixQueue015(VOID)
{
TEST_ADD_CASE("ItPosixQueue015", Testcase, TEST_POSIX, TEST_QUE, TEST_LEVEL2, TEST_FUNCTION);
}

View File

@@ -0,0 +1,64 @@
/*
* Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_posix_queue.h"
static UINT32 Testcase(VOID)
{
INT32 ret;
CHAR qname[MQUEUE_STANDARD_NAME_LENGTH] = "";
mqd_t queue;
ret = snprintf_s(qname, MQUEUE_STANDARD_NAME_LENGTH, MQUEUE_STANDARD_NAME_LENGTH - 1, \
"/mq016-1_%d", LOS_CurTaskIDGet());
ICUNIT_GOTO_NOT_EQUAL(ret, -1, ret, EXIT1);
queue = mq_open(qname, O_RDWR, S_IRUSR | S_IWUSR, NULL);
ICUNIT_GOTO_EQUAL(queue, (mqd_t)-1, queue, EXIT);
ICUNIT_ASSERT_EQUAL(errno, ENOENT, errno);
return LOS_OK;
EXIT:
mq_close(queue);
mq_unlink(qname);
EXIT1:
return LOS_OK;
}
/**
* @tc.name: ItPosixQueue016
* @tc.desc: Test interface mq_open
* @tc.type: FUNC
* @tc.require: issueI603SR6
*/
VOID ItPosixQueue016(VOID)
{
TEST_ADD_CASE("ItPosixQueue016", Testcase, TEST_POSIX, TEST_QUE, TEST_LEVEL2, TEST_FUNCTION);
}

View File

@@ -0,0 +1,71 @@
/*
* Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_posix_queue.h"
static UINT32 Testcase(VOID)
{
CHAR qname[MQUEUE_STANDARD_NAME_LENGTH];
INT32 ret;
mqd_t queue;
ret = snprintf_s(qname, MQUEUE_STANDARD_NAME_LENGTH, MQUEUE_STANDARD_NAME_LENGTH - 1, \
"/mq017-1_%d", LOS_CurTaskIDGet());
ICUNIT_GOTO_NOT_EQUAL(ret, -1, ret, EXIT1);
queue = mq_open(qname, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR, NULL);
if (queue == (mqd_t)-1) {
ICUNIT_ASSERT_NOT_EQUAL(queue, (mqd_t)-1, queue);
}
ret = mq_close(queue);
ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT);
ret = mq_unlink(qname);
ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT);
return LOS_OK;
EXIT:
mq_close(queue);
mq_unlink(qname);
EXIT1:
return LOS_OK;
}
/**
* @tc.name: ItPosixQueue017
* @tc.desc: Test interface mq_close
* @tc.type: FUNC
* @tc.require: issueI603SR6
*/
VOID ItPosixQueue017(VOID)
{
TEST_ADD_CASE("ItPosixQueue017", Testcase, TEST_POSIX, TEST_QUE, TEST_LEVEL2, TEST_FUNCTION);
}

View File

@@ -0,0 +1,92 @@
/*
* Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_posix_queue.h"
#define QUEUE_MSG_SIZE 20
#define QUEUE_MAX_MSG_SIZE 20
static UINT32 Testcase(VOID)
{
INT32 ret;
CHAR mqname[MQUEUE_STANDARD_NAME_LENGTH] = "";
CHAR msgrcd[QUEUE_MSG_SIZE] = {0};
struct mq_attr attr = {0};
struct timespec absTimeout = {0};
mqd_t mqueue;
(void)snprintf_s(mqname, MQUEUE_STANDARD_NAME_LENGTH - 1, MQUEUE_STANDARD_NAME_LENGTH, "/mq018_%d",
LOS_CurTaskIDGet());
attr.mq_msgsize = QUEUE_MSG_SIZE;
attr.mq_maxmsg = QUEUE_MAX_MSG_SIZE;
mqueue = mq_open(mqname, O_CREAT | O_RDWR | O_EXCL, S_IRUSR | S_IWUSR, &attr);
ICUNIT_ASSERT_NOT_EQUAL(mqueue, (mqd_t)-1, mqueue);
ret = mq_timedsend(mqueue, "1234567890123456789", QUEUE_MSG_SIZE, 0, &absTimeout);
ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT1);
ret = mq_receive(mqueue, msgrcd, QUEUE_MSG_SIZE, NULL);
ICUNIT_GOTO_EQUAL(ret, QUEUE_MSG_SIZE, ret, EXIT1);
ret = mq_close(mqueue);
ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT1);
mqueue = mq_open(mqname, O_RDWR | O_NONBLOCK, S_IRUSR | S_IWUSR, &attr);
ICUNIT_GOTO_NOT_EQUAL(mqueue, (mqd_t)-1, mqueue, EXIT1);
ret = mq_receive(mqueue, msgrcd, QUEUE_MSG_SIZE, NULL);
ICUNIT_GOTO_EQUAL(ret, -1, ret, EXIT1);
ret = mq_close(mqueue);
ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT1);
ret = mq_unlink(mqname);
ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT);
return LOS_OK;
EXIT1:
mq_close(mqueue);
EXIT:
mq_unlink(mqname);
return LOS_OK;
}
/**
* @tc.name: ItPosixQueue018
* @tc.desc: Test interface mq_timedsend
* @tc.type: FUNC
* @tc.require: issueI603SR6
*/
VOID ItPosixQueue018(VOID)
{
TEST_ADD_CASE("ItPosixQueue018", Testcase, TEST_POSIX, TEST_QUE, TEST_LEVEL0, TEST_FUNCTION);
}

View File

@@ -0,0 +1,53 @@
/*
* Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_posix_queue.h"
static UINT32 Testcase(VOID)
{
INT32 ret;
ret = mq_close((mqd_t)-1); // -1: invalid message queue descriptor
ICUNIT_ASSERT_NOT_EQUAL(ret, 0, ret);
ICUNIT_ASSERT_EQUAL(errno, EBADF, errno);
return LOS_OK;
}
/**
* @tc.name: ItPosixQueue019
* @tc.desc: Test interface mq_close
* @tc.type: FUNC
* @tc.require: issueI6148G
*/
VOID ItPosixQueue019(VOID)
{
TEST_ADD_CASE("ItPosixQueue019", Testcase, TEST_POSIX, TEST_QUE, TEST_LEVEL2, TEST_FUNCTION);
}

View File

@@ -0,0 +1,87 @@
/*
* Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_posix_queue.h"
static UINT32 Testcase(VOID)
{
INT32 ret = 0;
CHAR mqname[MQUEUE_STANDARD_NAME_LENGTH] = {0};
CHAR msgrcd[MQUEUE_STANDARD_NAME_LENGTH] = {0};
const CHAR *msgptr = MQUEUE_SEND_STRING_TEST;
struct timespec ts;
mqd_t mqueue;
struct mq_attr attr = {0};
ret = snprintf_s(mqname, MQUEUE_STANDARD_NAME_LENGTH, MQUEUE_STANDARD_NAME_LENGTH - 1, \
"/mq020_%d", LOS_CurTaskIDGet());
ICUNIT_GOTO_NOT_EQUAL(ret, -1, ret, EXIT2);
attr.mq_msgsize = MQUEUE_STANDARD_NAME_LENGTH;
attr.mq_maxmsg = MQUEUE_SHORT_ARRAY_LENGTH;
mqueue = mq_open(mqname, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR, &attr);
ICUNIT_GOTO_NOT_EQUAL(mqueue, (mqd_t)-1, mqueue, EXIT1);
ts.tv_sec = 1;
ts.tv_nsec = 0;
ret = mq_timedsend(mqueue, msgptr, strlen(msgptr), 0, &ts);
ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT1);
ret = mq_receive(mqueue, msgrcd, MQUEUE_STANDARD_NAME_LENGTH, NULL);
ICUNIT_GOTO_EQUAL(ret, MQUEUE_SHORT_ARRAY_LENGTH, ret, EXIT1);
ret = strncmp(msgptr, msgrcd, strlen(msgptr));
ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT1);
ret = mq_close(mqueue);
ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT);
ret = mq_unlink(mqname);
ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT2);
return LOS_OK;
EXIT1:
mq_close(mqueue);
EXIT:
mq_unlink(mqname);
EXIT2:
return LOS_NOK;
}
/**
* @tc.name: ItPosixQueue020
* @tc.desc: Test interface mq_receive
* @tc.type: FUNC
* @tc.require: issueI6148G
*/
VOID ItPosixQueue020(VOID)
{
TEST_ADD_CASE("ItPosixQueue020", Testcase, TEST_POSIX, TEST_QUE, TEST_LEVEL2, TEST_FUNCTION);
}

View File

@@ -0,0 +1,71 @@
/*
* Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_posix_queue.h"
static UINT32 Testcase(VOID)
{
INT32 ret;
CHAR mqname[MQUEUE_STANDARD_NAME_LENGTH] = {0};
mqd_t mqueue;
struct sigevent se;
ret = snprintf_s(mqname, MQUEUE_STANDARD_NAME_LENGTH, MQUEUE_STANDARD_NAME_LENGTH - 1,
"/mq021_%d", LOS_CurTaskIDGet());
ICUNIT_GOTO_NOT_EQUAL(ret, -1, ret, EXIT2);
mqueue = mq_open(mqname, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR, NULL);
ICUNIT_GOTO_NOT_EQUAL(mqueue, (mqd_t)-1, mqueue, EXIT1);
ret = mq_close(mqueue);
ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT);
ret = mq_unlink(mqname);
ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT2);
return LOS_OK;
EXIT1:
mq_close(mqueue);
EXIT:
mq_unlink(mqname);
EXIT2:
return LOS_NOK;
}
/**
* @tc.name: ItPosixQueue021
* @tc.desc: Test interface mq_open
* @tc.type: FUNC
* @tc.require: issueI6148G
*/
VOID ItPosixQueue021(VOID)
{
TEST_ADD_CASE("ItPosixQueue021", Testcase, TEST_POSIX, TEST_QUE, TEST_LEVEL2, TEST_FUNCTION);
}

Some files were not shown because too many files have changed in this diff Show More