mirror of
https://gitee.com/cosyos/cosyos.git
synced 2026-10-06 04:59:34 +08:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c0313f71da | ||
|
|
258bec6bf8 | ||
|
|
66cec6a025 | ||
|
|
33b4202701 | ||
|
|
6455cf2758 | ||
|
|
898ff7865a | ||
|
|
d020034a4a | ||
|
|
a1b589ea0b | ||
|
|
c66a2437e3 | ||
|
|
d4bf3aff8b | ||
|
|
700d31ba60 | ||
|
|
7f4db259e2 | ||
|
|
9a7d9635f8 | ||
|
|
eee22f820d | ||
|
|
e5a975d42f | ||
|
|
679f5c1fd3 | ||
|
|
e91b62f290 | ||
|
|
031cca4b9d | ||
|
|
4a20a39687 | ||
|
|
3bcf4ceff8 | ||
|
|
3ab308c537 | ||
|
|
a784b26eb8 | ||
|
|
17c056d7ed | ||
|
|
4f19057745 | ||
|
|
7e5b028a56 | ||
|
|
f9ba2aa251 | ||
|
|
af41e6c460 | ||
|
|
1873344e87 | ||
|
|
9e41666dbc | ||
|
|
f726a97216 | ||
|
|
782deba4ff | ||
|
|
04988b8126 | ||
|
|
4981b3aa53 | ||
|
|
0649b21b98 | ||
|
|
2108228f0c | ||
|
|
78c93148a0 | ||
|
|
2d4aed5206 | ||
|
|
460cb03c2d | ||
|
|
121c150837 | ||
|
|
8e20ad27ca | ||
|
|
9e780b7011 | ||
|
|
4d0645086f | ||
|
|
d60e86189e | ||
|
|
75966f0282 | ||
|
|
ad38d6cdb0 | ||
|
|
13cc63854e | ||
|
|
6cc3fbc506 | ||
|
|
a3470ca160 | ||
|
|
f29f3b81e8 | ||
|
|
e4f30c71b4 | ||
|
|
cbb27554d7 | ||
|
|
bddc5a3c02 | ||
|
|
62411867f9 | ||
|
|
84412b2749 | ||
|
|
21c9a66c9a | ||
|
|
5a1fd5b6ab | ||
|
|
9419f7ceb6 | ||
|
|
76d00daf09 | ||
|
|
e64a683ed8 | ||
|
|
7a2386c917 | ||
|
|
b37b372afa | ||
|
|
486a15e264 | ||
|
|
c69f954ad2 | ||
|
|
b229394449 | ||
|
|
773cf53197 | ||
|
|
b12c851987 | ||
|
|
f44becc3ba | ||
|
|
489acefded | ||
|
|
ad42e660f6 | ||
|
|
a6be37e8f5 | ||
|
|
3e20aa6df0 | ||
|
|
3f88af33c8 | ||
|
|
3203efe7fc | ||
|
|
c6b2756a2c | ||
|
|
434271557b | ||
|
|
0c7d825b38 | ||
|
|
a239af26ad | ||
|
|
fe705cb9f2 | ||
|
|
6d01c7df90 | ||
|
|
463c1ebc2a | ||
|
|
75a18c6cac | ||
|
|
e07ff2dea3 | ||
|
|
ad3002568f | ||
|
|
5c89aee75a | ||
|
|
b81cf4e3f0 | ||
|
|
2d7c8ba454 | ||
|
|
4bbc70c9cf | ||
|
|
e58417f047 | ||
|
|
b8d3b1b8d6 | ||
|
|
0f10aac948 | ||
|
|
875e5cc580 | ||
|
|
d810f396b0 | ||
|
|
8af4830367 | ||
|
|
60a1fb79ef | ||
|
|
7a7ed3caec | ||
|
|
854f64e298 | ||
|
|
7b56561db6 | ||
|
|
53665f9701 | ||
|
|
1205fbf73d | ||
|
|
3d2ef144dc | ||
|
|
804ac1e0f3 | ||
|
|
901f91b9f7 | ||
|
|
b3e2ceb90f | ||
|
|
bc77aa3bcb | ||
|
|
ed991d2103 | ||
|
|
02ca420419 | ||
|
|
c4036f250a | ||
|
|
853e304d2b | ||
|
|
d7deaaf5bc | ||
|
|
604062dff7 | ||
|
|
a84c40ad7f | ||
|
|
0d5eb9923a | ||
|
|
6a73667ddc | ||
|
|
035939aa93 | ||
|
|
bce0f2c95d | ||
|
|
4914810faf | ||
|
|
e3c0bb227a | ||
|
|
092b81e71f | ||
|
|
401268807d | ||
|
|
e608124650 | ||
|
|
e349488313 | ||
|
|
934c8dc537 | ||
|
|
149f87381d | ||
|
|
953b750eae | ||
|
|
53f5758989 | ||
|
|
62c680d4d5 | ||
|
|
b21305f237 | ||
|
|
84bbccaeac | ||
|
|
59e184f881 | ||
|
|
35278b9b7b | ||
|
|
68b7883845 | ||
|
|
b1f644b570 | ||
|
|
7a8a9727a1 | ||
|
|
8f4c51be7e | ||
|
|
79df9e8c70 | ||
|
|
8ccdd9e32a | ||
|
|
40040405e8 | ||
|
|
9d35e4bed5 | ||
|
|
4de3c801c1 | ||
|
|
be3eab8b72 | ||
|
|
10609a6b87 | ||
|
|
4d0d476d1f | ||
|
|
5ecf3ad785 | ||
|
|
102a2e281c | ||
|
|
94a8a46b8a | ||
|
|
3ea4acae49 | ||
|
|
673089cab3 | ||
|
|
76ee4725b8 | ||
|
|
9715ece53d | ||
|
|
f975de7bef | ||
|
|
9e94f863ce | ||
|
|
62156e014a | ||
|
|
f2292046a4 | ||
|
|
4fb7f49772 | ||
|
|
4e9c468ff5 | ||
|
|
7ee44c7713 | ||
|
|
e2201f75ea | ||
|
|
1fbf7d2602 | ||
|
|
740012fa5d | ||
|
|
7a9257ae15 | ||
|
|
0a277dbc12 | ||
|
|
34ec9abe6b | ||
|
|
97b507d50e | ||
|
|
bcbb48f906 | ||
|
|
8bee36aa35 | ||
|
|
e6f8bb4627 | ||
|
|
d751406129 | ||
|
|
a2a3b5fb16 | ||
|
|
99d71a97c6 | ||
|
|
ad6086de2e | ||
|
|
98f38fc1b3 | ||
|
|
d8b0374dfe | ||
|
|
bf98e1f2f8 | ||
|
|
bb18d6a6b0 | ||
|
|
135984c962 | ||
|
|
9662824b4b | ||
|
|
f7bb67dd47 | ||
|
|
e2d661aeeb | ||
|
|
2d9a3dcd27 | ||
|
|
ee552807da | ||
|
|
e61648ab08 | ||
|
|
788a361ceb | ||
|
|
9e14cf0d29 | ||
|
|
0e290803e4 | ||
|
|
c97f37ba2e | ||
|
|
f76ce9288a | ||
|
|
a772e49b9c | ||
|
|
003a65358d | ||
|
|
f2e6cd0d84 | ||
|
|
8ce43f660f | ||
|
|
8b26e9a3b6 | ||
|
|
7f17a82d6b | ||
|
|
c359724bc0 | ||
|
|
bb194d1c1a | ||
|
|
f7d923e30c | ||
|
|
d04ef559b4 | ||
|
|
435cee98fe | ||
|
|
568c7f99a5 | ||
|
|
2b0063f207 | ||
|
|
fd3e2460f8 | ||
|
|
0a0eaf4cd0 | ||
|
|
618b3e9c5a | ||
|
|
f62b89ce16 | ||
|
|
0e8c5e3121 | ||
|
|
4d0f6298b2 | ||
|
|
2e2800119b | ||
|
|
378d882bb5 | ||
|
|
865bcf203f | ||
|
|
264692dafb | ||
|
|
4cd506c243 | ||
|
|
2e47d970e7 | ||
|
|
cdc2f2691b | ||
|
|
b0a946708a | ||
|
|
73322f5281 | ||
|
|
7f86763d0b | ||
|
|
8ea1b48bae | ||
|
|
e9fefdbdf0 | ||
|
|
a6bd76641f | ||
|
|
6b394e0fc8 | ||
|
|
12b9814f78 | ||
|
|
115c6ae309 | ||
|
|
3c5921822b | ||
|
|
b97cb04ac6 | ||
|
|
ddd2ee3a4e | ||
|
|
ca30605162 | ||
|
|
9e0f8bb081 | ||
|
|
1aec3b5bdc | ||
|
|
04ec41fd17 | ||
|
|
1dbf7dd8be | ||
|
|
5ea3c51598 | ||
|
|
91f6f907a4 | ||
|
|
4a29ad7ca5 | ||
|
|
1a9eae729e | ||
|
|
1bd366647d | ||
|
|
fd34bb79da | ||
|
|
a53fa58e70 | ||
|
|
d320bb5991 | ||
|
|
91159f0404 | ||
|
|
6f3523739f | ||
|
|
a48ed16b78 | ||
|
|
e8a1d00689 | ||
|
|
38296014bc | ||
|
|
da601e3cc5 | ||
|
|
8fc00a4a44 | ||
|
|
ac7a7d8c06 | ||
|
|
58f3cc85d4 | ||
|
|
c7b9902abe | ||
|
|
a85384709b | ||
|
|
facfef0317 | ||
|
|
8b568aeec7 | ||
|
|
47bdd060c7 | ||
|
|
121a0eb633 | ||
|
|
0ff1a11af6 | ||
|
|
7488d6517f | ||
|
|
4100045848 | ||
|
|
30a237e4aa | ||
|
|
c8c509ca10 | ||
|
|
bd8200f8e9 | ||
|
|
4bf045bc01 | ||
|
|
90e3cc513d | ||
|
|
7dfa63d0ea | ||
|
|
0cc8a19fc7 | ||
|
|
01a2860547 | ||
|
|
06b15e8488 | ||
|
|
6e7c456d57 | ||
|
|
1f181d8023 | ||
|
|
709d3a18a8 | ||
|
|
efaf286203 | ||
|
|
c2d642525a | ||
|
|
5295187019 | ||
|
|
95c7dbf4eb | ||
|
|
affac1faa6 | ||
|
|
21f82e3019 | ||
|
|
022a1c5991 | ||
|
|
09ec59bfb5 | ||
|
|
e2045f95c1 | ||
|
|
cbc51acb97 | ||
|
|
ae8a6e567c | ||
|
|
12876fac06 | ||
|
|
f4a05aef91 | ||
|
|
1fb6170f55 | ||
|
|
4b181c7d21 | ||
|
|
72f24513e4 | ||
|
|
3d5696c87b | ||
|
|
65aafb7b20 | ||
|
|
0034c5bdf9 | ||
|
|
7d67c6fe8e | ||
|
|
61754d794b | ||
|
|
86b8af336f | ||
|
|
b5ed7ac6da | ||
|
|
6e5a101e31 | ||
|
|
df38e5b51f | ||
|
|
d4e5887e3d | ||
|
|
951bb09350 | ||
|
|
a8411e1166 | ||
|
|
a35346cb5b | ||
|
|
99f5f49cd0 | ||
|
|
15fead1050 | ||
|
|
6464c6b4be | ||
|
|
380d66f935 | ||
|
|
f5cea63fd1 | ||
|
|
a83b5716c2 | ||
|
|
6be9f04e2c | ||
|
|
860fb30446 | ||
|
|
97aa794318 | ||
|
|
d3b009650c | ||
|
|
8b8115cbdb | ||
|
|
5e61714b09 | ||
|
|
89bd25c8f4 | ||
|
|
b00c0bf0b0 | ||
|
|
4fad1cf7c6 | ||
|
|
abdd6fb5a2 | ||
|
|
03674f2a67 | ||
|
|
a5d5f67d67 | ||
|
|
a4c820eae7 | ||
|
|
1ef5db08b3 | ||
|
|
375db84214 | ||
|
|
f127be8889 | ||
|
|
f510a84c5c | ||
|
|
e6d3e2d637 | ||
|
|
86c5e65387 | ||
|
|
f8a028544e | ||
|
|
8c7b7555e7 | ||
|
|
844be48fe7 | ||
|
|
96645fb0bd | ||
|
|
5e10a47a7e | ||
|
|
391a446f78 | ||
|
|
09318a5468 | ||
|
|
ecbcd1eab2 | ||
|
|
68bfb689b5 | ||
|
|
b6b7450fd2 | ||
|
|
af7c2d1f8f | ||
|
|
7d7a5dba85 | ||
|
|
38fdd5fc9f | ||
|
|
56f17ae01a | ||
|
|
9dde142350 | ||
|
|
76aa3329a6 | ||
|
|
9b63e26af4 | ||
|
|
83836e889e | ||
|
|
ebb9ab73c3 | ||
|
|
13509382f6 | ||
|
|
fb83a40582 | ||
|
|
1a621091c7 | ||
|
|
7a796a79fa | ||
|
|
9b047e3f6d | ||
|
|
ce9ab16608 | ||
|
|
2c84c16542 | ||
|
|
2a4e1ae79d | ||
|
|
cd39472d0b | ||
|
|
f3d8c7f75c | ||
|
|
99a862c24c | ||
|
|
fe7f533e23 | ||
|
|
242c792348 | ||
|
|
b44aa679ec | ||
|
|
62ca66b452 | ||
|
|
b9fc783e0e | ||
|
|
d7701ab34f | ||
|
|
78aab300cc | ||
|
|
2461bdc795 | ||
|
|
18a2964a28 | ||
|
|
539f8bb7fe | ||
|
|
fec76f6517 | ||
|
|
a68c4cb1a2 | ||
|
|
c9e827ecae | ||
|
|
85ba43f42f | ||
|
|
f6b7ea3f4b | ||
|
|
e8a581f374 | ||
|
|
a036aabfc5 | ||
|
|
62a113cdb7 | ||
|
|
29136200fc | ||
|
|
f2703de52f | ||
|
|
ff04e13fb8 | ||
|
|
28bcd2a977 | ||
|
|
7c94ffaf2c | ||
|
|
d0c785c728 | ||
|
|
ab4baf9483 | ||
|
|
b974048809 | ||
|
|
bd93389800 | ||
|
|
f794555424 | ||
|
|
95f4284e3e | ||
|
|
53d4992392 | ||
|
|
d9f0e754d1 | ||
|
|
7a8e921aed | ||
|
|
a59987cacb | ||
|
|
c5245def5f | ||
|
|
dee1c31f6c | ||
|
|
616237e46b | ||
|
|
085a3a0970 | ||
|
|
c9c1c9f334 | ||
|
|
8a3ee7ae2b | ||
|
|
b2fc49612f | ||
|
|
3ad4ca7d3e | ||
|
|
2da00995e2 | ||
|
|
64c9b1bf95 | ||
|
|
ef2fc6cb79 | ||
|
|
acb96c32b2 | ||
|
|
29506b41f8 | ||
|
|
823c0504da | ||
|
|
ce9aa6ee42 | ||
|
|
f362b2f5c8 | ||
|
|
d7c272574c | ||
|
|
b32b500e79 | ||
|
|
0521c3b798 | ||
|
|
e125c054b2 | ||
|
|
c115addb21 | ||
|
|
7a62dd369e | ||
|
|
fedba4ebae | ||
|
|
eddae4d799 | ||
|
|
7b57c585fb | ||
|
|
cdb01f5051 | ||
|
|
fb84d3fdc6 | ||
|
|
a1176dd016 | ||
|
|
3f47ddec90 | ||
|
|
cba2e6427f | ||
|
|
0f4dbbbbea | ||
|
|
93d8934cee | ||
|
|
a969ce97b4 | ||
|
|
2c37e23d2a | ||
|
|
8f3ec078fd | ||
|
|
6a8cf16cf4 | ||
|
|
25aa16faea | ||
|
|
6d0177bb11 | ||
|
|
70f5a25d06 | ||
|
|
8d2a530c9f | ||
|
|
8acf2387a1 | ||
|
|
a3d1a5861d | ||
|
|
077d6d6880 | ||
|
|
63548e782a | ||
|
|
d4ace1f3c1 | ||
|
|
712ef52d6d | ||
|
|
4ace17c226 | ||
|
|
f02662cfb9 | ||
|
|
e641d7ba11 | ||
|
|
7c386c4476 | ||
|
|
cba9dec0e3 | ||
|
|
789c5acd42 | ||
|
|
6ba02e21e5 | ||
|
|
8689f53fd4 | ||
|
|
f2313dc3dd | ||
|
|
5dacbf4fc3 | ||
|
|
3d29f7010a | ||
|
|
6ec899d1e4 | ||
|
|
8e661b0257 | ||
|
|
15680c9e5e | ||
|
|
15595589b9 | ||
|
|
3c3ae8dfe3 | ||
|
|
1271175bee | ||
|
|
fc66c20d30 | ||
|
|
cd952dde9e | ||
|
|
8728047066 | ||
|
|
c2b6a66993 | ||
|
|
5fc2adf9c1 | ||
|
|
5779318e80 | ||
|
|
bda3cb6867 | ||
|
|
7a8bc055c9 | ||
|
|
e6366bf80e | ||
|
|
77c483585f | ||
|
|
253ed311cc | ||
|
|
172f26e179 | ||
|
|
412460be71 | ||
|
|
24e9a42ed8 | ||
|
|
0e245acb2d | ||
|
|
b6a2c23b23 | ||
|
|
2df0515430 | ||
|
|
aba1d92f60 | ||
|
|
ac71108d86 | ||
|
|
b892b79b88 | ||
|
|
0cead1d235 | ||
|
|
e4de4ea63c | ||
|
|
e42a91d123 | ||
|
|
ee45b70cc2 | ||
|
|
d2cbfc8113 | ||
|
|
c0fb890c0a | ||
|
|
9bc030333e | ||
|
|
2484777baf | ||
|
|
6a253f929b | ||
|
|
fea3280d30 | ||
|
|
b4393b9e63 | ||
|
|
32157c0ab5 | ||
|
|
165ab7f2a8 | ||
|
|
a89eb49c1d | ||
|
|
aae595934c | ||
|
|
14d6a42053 | ||
|
|
49ac343edd | ||
|
|
8c99f5ab85 | ||
|
|
aa43584895 | ||
|
|
ad70bce6f8 | ||
|
|
26309041b2 | ||
|
|
8ea5ba4a16 | ||
|
|
1cf7163098 | ||
|
|
eb167460ac | ||
|
|
8b2f9134bd | ||
|
|
af3f864127 | ||
|
|
e87b9e1d4f | ||
|
|
f3692627c0 | ||
|
|
125c18583b | ||
|
|
af1c855669 | ||
|
|
6c36aacc9a | ||
|
|
74322c01a1 | ||
|
|
0bcd3ee1ac | ||
|
|
a3aa004174 | ||
|
|
3abebd9302 | ||
|
|
6f836f2d28 | ||
|
|
a65f692e4e | ||
|
|
9157b668d6 | ||
|
|
a1c1b1556e | ||
|
|
023e2170e9 | ||
|
|
a572fefbdf | ||
|
|
ab2d315d67 | ||
|
|
5b430c536a | ||
|
|
f6bcfdd510 | ||
|
|
6e2babac87 | ||
|
|
2273e67a41 | ||
|
|
111a5567a5 | ||
|
|
5c904bc3ef | ||
|
|
cae92e8d18 | ||
|
|
85c9426106 | ||
|
|
c64f0734dd | ||
|
|
00fa307ac9 | ||
|
|
488d4cc183 | ||
|
|
1854ecd6d9 | ||
|
|
3ff5fa8be3 | ||
|
|
90d5c680f8 | ||
|
|
d60eb1fc8e | ||
|
|
202f8f6b06 | ||
|
|
dc839dfbae | ||
|
|
1c61cf6e8f | ||
|
|
b623c9d1b3 | ||
|
|
e92943a9a1 | ||
|
|
e7e16dd450 | ||
|
|
0165e3937c | ||
|
|
bc7a607edf | ||
|
|
685527f4a9 | ||
|
|
3c5580bec2 | ||
|
|
e401e1cc5b | ||
|
|
4a8b3d1d55 | ||
|
|
7a5f543e03 | ||
|
|
1857120de7 | ||
|
|
94cb6bdf21 | ||
|
|
c574c73f19 | ||
|
|
b74852f180 | ||
|
|
e98ebb3f84 | ||
|
|
dcf0aa9e6f | ||
|
|
1e0d58dbc5 | ||
|
|
166b322cf6 | ||
|
|
988d05e998 | ||
|
|
3c95ebf805 | ||
|
|
5009a604fe | ||
|
|
923ba5f62b | ||
|
|
93b0616119 | ||
|
|
cad9bc0d9c | ||
|
|
ac461b30bf | ||
|
|
d36f5c1030 | ||
|
|
a6f08069da | ||
|
|
c2845979a6 | ||
|
|
6dd19699b5 | ||
|
|
c003865a0a | ||
|
|
f2ebbf817a | ||
|
|
42bb5e04f9 | ||
|
|
d4de64db13 | ||
|
|
88560a02fe | ||
|
|
d37e145fb1 | ||
|
|
c3b90b0228 | ||
|
|
8560ffe59e | ||
|
|
64b84a6206 | ||
|
|
b864f726c6 | ||
|
|
bb6424230f | ||
|
|
da75712359 | ||
|
|
4dcf4077d3 | ||
|
|
aaaf741be9 | ||
|
|
bf91d5e9ac | ||
|
|
d24901bdc3 | ||
|
|
1c3a13daba | ||
|
|
3bfbbeeede | ||
|
|
0bbcede9b7 | ||
|
|
99aa6c495b | ||
|
|
448b9a23fa | ||
|
|
e6356e3ae3 | ||
|
|
f6fe832fbb | ||
|
|
f64328d47e | ||
|
|
9b049fd057 | ||
|
|
60bd1358d9 | ||
|
|
7d0dcfbbad | ||
|
|
6cb4d9194f | ||
|
|
8e4ce7b822 | ||
|
|
6c55138e73 | ||
|
|
16b550533f | ||
|
|
d9f3cb6f2f | ||
|
|
f98103b32c |
Binary file not shown.
@@ -225,3 +225,141 @@
|
|||||||
* DEBUG输出(包括任务管理器和命令行)扩展至 中英文双语。
|
* DEBUG输出(包括任务管理器和命令行)扩展至 中英文双语。
|
||||||
* 更新日期:2026.03.10
|
* 更新日期:2026.03.10
|
||||||
|
|
||||||
|
### V2.3.3
|
||||||
|
* CosyOS-III Cube 新版发布,完美支持中文路径,无论是 CosyOS路径 还是 工程路径,都可随意用中文,不会有问题。<br>
|
||||||
|
同时修复了路径识别上的bug,可应对各种复杂路径,确保成功安装。
|
||||||
|
* 更新日期:2026.04.06
|
||||||
|
|
||||||
|
### V2.3.4
|
||||||
|
* 优化了协作式调度和时间片轮转调度相关算法和细节。
|
||||||
|
* uYieldTasking(),调整为:当开启相同优先级任务的协作式调度或时间片轮转调度时,才支持此项服务。
|
||||||
|
* 更新日期:2026.04.16
|
||||||
|
|
||||||
|
### V2.3.5
|
||||||
|
* 部分关键字重命名,包括数据类型、变量名称、宏定义等。
|
||||||
|
* 调整了大部分 const、volatile 关键字的位置,由数据类型之前调整为之后。
|
||||||
|
* syscfg.h 中增加了选项,可配置安全运行时计数器的位数。
|
||||||
|
* 更新日期:2026.06.10
|
||||||
|
|
||||||
|
### V2.3.6
|
||||||
|
* 有关任务启动的三个全局变量封装在一个结构体中。
|
||||||
|
* 启动任务增加了新的安全策略,避免重复启动同一个任务。
|
||||||
|
* 修复了一处有关任务调度的隐形bug。
|
||||||
|
* 更新日期:2026.06.11
|
||||||
|
|
||||||
|
### V2.3.7
|
||||||
|
* 修复了 port_cmx_s.c 中的一处遗漏重命名。
|
||||||
|
* 进一步优化了启动任务,提高可靠性。
|
||||||
|
* 增加了一项新的服务,重置任务。
|
||||||
|
* 更新日期:2026.06.13
|
||||||
|
|
||||||
|
### V2.3.8
|
||||||
|
* 超时链表由单向链表调整为双向链表。
|
||||||
|
* 安全运行时,彻底解决其在特定情况下的不可靠因素。
|
||||||
|
* 更新日期:2026.06.15
|
||||||
|
|
||||||
|
### V2.3.9
|
||||||
|
* 增加了新的栈监控机制,使得对主栈和任务栈用量的检查更为准确,进一步提高了可靠性并降低了栈溢出的风险。
|
||||||
|
* 更新日期:2026.06.20
|
||||||
|
|
||||||
|
### V2.4.0
|
||||||
|
* 进一步优化了主栈检查,提升可靠性和易用性。
|
||||||
|
* 修复了GCC编译器会产生警告的问题。
|
||||||
|
* 更新日期:2026.06.22
|
||||||
|
|
||||||
|
### V2.4.1
|
||||||
|
* 增加配置选项,是否需要在用户中断中接收消息?
|
||||||
|
* 创建服务功能升级,互斥信号量、二值信号量、计数信号量、飞信、邮箱等,提供了创建不初始化服务,<br>
|
||||||
|
该功能可用来创建相应的数组,或把它们封装在结构体中。
|
||||||
|
* 更新日期:2026.06.28
|
||||||
|
|
||||||
|
### V2.4.2
|
||||||
|
* 内核代码和移植文件中,部分关键路径添加屏障指令,以保安全。
|
||||||
|
* 裁剪掉了 for Cortex-M0 的 互斥访问机制二。
|
||||||
|
* 更新日期:2026.07.04
|
||||||
|
|
||||||
|
### V3.0.0
|
||||||
|
* 重构了移植架构,为使未来的移植工作可以更顺利的进行。
|
||||||
|
* 新增了对 RISC-V32 指令集架构的支持,并针对 青稞V4系列微处理器 进行测试和调优。
|
||||||
|
* 中断FIFO服务技术进一步升级,优化了包括 中断FIFO服务装载器、中断FIFO服务处理器。<br>
|
||||||
|
针对 80251 推出了新的 中断FIFO服务互斥访问方案,新增方案包括 [INC]指令、关闭总中断。
|
||||||
|
* 其它调整及优化。
|
||||||
|
* 更新日期:2026.07.21
|
||||||
|
|
||||||
|
### V3.0.1
|
||||||
|
* 针对 RISC-V32,推出了自研先进技术,可实现 CH32V 全程开启硬件压栈。<br>
|
||||||
|
该技术为纯软件实现,不依赖特定硬件(0x804->bit5),V103、203 等皆可完美支持。
|
||||||
|
* 优化了中断FIFO服务装载器,性能进一步提升。同时增加了新的互斥访问方案:关闭总中断(嵌套方式)。
|
||||||
|
* 更新日期:2026.07.30
|
||||||
|
|
||||||
|
### V3.0.2
|
||||||
|
* 解决了 V3.0.1 版本中,硬件压栈相关技术的不可靠因素,确保系统稳定可靠运行。
|
||||||
|
* 更新日期:2026.08.03
|
||||||
|
|
||||||
|
### V3.0.3
|
||||||
|
* V3.0.2 版本的硬件压栈技术仍存在不可靠因素,现已彻底解决。
|
||||||
|
* 同时推出了 硬件压栈技术可靠性验证方法,以方便测试和验证。
|
||||||
|
* 更新日期:2026.08.05
|
||||||
|
|
||||||
|
### V3.0.4
|
||||||
|
* 解决了 Cortex-M33 任务不能正常启动并运行的问题,可靠性进一步提升。
|
||||||
|
* 更新日期:2026.08.07
|
||||||
|
|
||||||
|
### V3.0.5
|
||||||
|
* Cortex-M33 任务不能正常启动的问题解决后,导致 RISC-V 任务不能正常启动。<br>
|
||||||
|
紧急推出新版本解决上述问题,并使 RISC-V 的任务切换更加可靠。
|
||||||
|
* 更新日期:2026.08.07
|
||||||
|
|
||||||
|
### V3.0.6
|
||||||
|
* for RISC-V32,推出了终极先进技术,可实现硬件压栈无需可靠性验证,即可确保任务切换的安全、可靠。
|
||||||
|
* 更新日期:2026.08.09
|
||||||
|
|
||||||
|
### V3.0.7
|
||||||
|
* 针对 RV32 硬件压栈,分为两个文件,port_rv32e_HWS.S、port_rv32i_HWS.S,分别针对 RV32E 和 RV32I。
|
||||||
|
* 针对 RV32E,中断FIFO服务的装载,新增了互斥访问机制。
|
||||||
|
* 优化了 arm 互斥访问机制,当中断FIFO服务并发装载时,效率会有显著提升。
|
||||||
|
* 更新日期:2026.08.14
|
||||||
|
|
||||||
|
### V3.0.8
|
||||||
|
* RISC-V32,系统滴答自动配置做出调整,计数模式调整为向上计数,以尽可能兼容青稞系列更多的型号。
|
||||||
|
* 更新日期:2026.08.15
|
||||||
|
|
||||||
|
### V3.0.9
|
||||||
|
* DEBUG输出 增加编码设置功能,GB2312、UTF-8 可选,方便用户不同的应用场景。<br>
|
||||||
|
之前的版本相当于 DEBUG输出编码 仅支持 GB2312。
|
||||||
|
* 更新日期:2026.08.18
|
||||||
|
|
||||||
|
### V3.1.0
|
||||||
|
* 优化了 Arm 双栈指针的初始化,可靠性拉满。
|
||||||
|
* 更新日期:2026.08.27
|
||||||
|
|
||||||
|
### V3.1.1
|
||||||
|
* CosyOS-DEBUG 增加新功能,具体包括:<br>
|
||||||
|
1、支持设置发送分包间隔时间。<br>
|
||||||
|
2、正式开启命令行功能,并支持通过下发命令来动态操作任务。<br>
|
||||||
|
3、推出 CosyOS3Shell 串口调试工具,内含任务管理器和命令行。<br>
|
||||||
|
* CosyOS-III Cube 正式更名为 CosyOS3Cube。
|
||||||
|
* 更新日期:2026.09.02
|
||||||
|
|
||||||
|
### V3.1.2
|
||||||
|
* 注释信息中的“任务名称文本”更名为“任务名称标识”。
|
||||||
|
* 取消了系统配置项:DEBUG发送分包间隔时间,改由系统定义为固定的恰当值。
|
||||||
|
* CosyOS3Shell,版本升级为 v1.1.1,可实现任务管理器、命令行、用户 printf,<br>
|
||||||
|
三者共用同一个串口并分屏显示,用户体验度拉满。这对于嵌入式开发来说具有里程碑意义,极具实用价值。
|
||||||
|
* 更新日期:2026.09.08
|
||||||
|
|
||||||
|
### V3.1.3
|
||||||
|
* 优化了 os_debug.c、串口接收解析中的一句代码。
|
||||||
|
* CosyOS3Shell,版本升级为 v1.2.0。
|
||||||
|
* 更新日期:2026.09.14
|
||||||
|
|
||||||
|
### V3.1.5
|
||||||
|
* 优化了 51 的 demo_debug.c,DEBUG_MODE 为 0 时,允许串口接收。
|
||||||
|
* CosyOS3Shell,版本升级为 v1.2.1,以解决 C51 printf 包尾 \r\n 变为 \r\r\n 时,显示异常的问题。
|
||||||
|
* 更新日期:2026.09.16
|
||||||
|
|
||||||
|
### V3.1.6
|
||||||
|
* CosyOS3Cube 版本更新.
|
||||||
|
* CosyOS3Shell 版本更新至 v1.2.4.
|
||||||
|
* 更新日期:2026.10.01
|
||||||
|
|
||||||
|
|||||||
@@ -3,11 +3,12 @@
|
|||||||
* @file demo_debug.c
|
* @file demo_debug.c
|
||||||
* @brief 例程-DEBUG for STC32G
|
* @brief 例程-DEBUG for STC32G
|
||||||
* @author 迟凯峰
|
* @author 迟凯峰
|
||||||
* @version V1.0.1
|
* @version V1.0.3
|
||||||
* @date 2025.10.20
|
* @date 2026.07.31
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
#if 0 /* 编译开关 */
|
#if 1 /* 编译开关 */ \
|
||||||
|
&& defined ( __C251__ )
|
||||||
|
|
||||||
#include "CosyOS.H"
|
#include "CosyOS.H"
|
||||||
#if (SYSCFG_DEBUGGING == __ENABLED__)
|
#if (SYSCFG_DEBUGGING == __ENABLED__)
|
||||||
|
|||||||
@@ -3,8 +3,8 @@
|
|||||||
* @file demo_main.c
|
* @file demo_main.c
|
||||||
* @brief 例程-主函数 for STC32G
|
* @brief 例程-主函数 for STC32G
|
||||||
* @author 迟凯峰
|
* @author 迟凯峰
|
||||||
* @version V1.0.2
|
* @version V1.0.3
|
||||||
* @date 2025.10.20
|
* @date 2026.06.20
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
#if 0 /* 编译开关 */
|
#if 0 /* 编译开关 */
|
||||||
@@ -14,6 +14,11 @@
|
|||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
|
/* 主栈检查初始化 */// 在main函数的入口处
|
||||||
|
#if (SYSCFG_DEBUGGING == 1) && (MCUCFG_TASKSTACK_MODE & __MSP__)
|
||||||
|
uMainStack_CheckInit(256); // 传参主栈大小,务必与启动文件中定义值相同。
|
||||||
|
#endif
|
||||||
|
|
||||||
/* USER INIT CODE BEGIN */
|
/* USER INIT CODE BEGIN */
|
||||||
|
|
||||||
/* USER INIT CODE END */
|
/* USER INIT CODE END */
|
||||||
|
|||||||
@@ -4,16 +4,24 @@
|
|||||||
CosyOS-配置 / syscfg.h -> 系统配置>>标准头文件,应首先被正确定义。
|
CosyOS-配置 / syscfg.h -> 系统配置>>标准头文件,应首先被正确定义。
|
||||||
而后,在 C251、A251 标签页中,可能需要添加标准头文件的包含路径。
|
而后,在 C251、A251 标签页中,可能需要添加标准头文件的包含路径。
|
||||||
|
|
||||||
2、main函数(参照例程 demo_main.c)
|
2、MCU配置
|
||||||
|
CosyOS-配置 / mcucfg_80251.h -> 系统时钟频率,需要正确定义。
|
||||||
|
内存方案配置,需根据edata内存的大小选择合适的方案。
|
||||||
|
基本的原则是:
|
||||||
|
(1)如果edata内存很大,优先考虑方案一。
|
||||||
|
(2)如果ddata内存适中,考虑方案二三四。
|
||||||
|
(3)如果edata内存很小,优先考虑方案五。
|
||||||
|
|
||||||
|
3、main函数(参照例程 demo_main.c)
|
||||||
初始化 PendSV中断(必须)
|
初始化 PendSV中断(必须)
|
||||||
配置 DEBUG(可选)
|
配置 DEBUG(可选)
|
||||||
启动 CosyOS(必须)
|
启动 CosyOS(必须)
|
||||||
|
|
||||||
3、系统中断(参照例程 demo_int.c)
|
4、系统中断(参照例程 demo_int.c)
|
||||||
屏蔽 定时器0中断原函数(必须)
|
屏蔽 定时器0中断原函数(必须)
|
||||||
屏蔽 PendSV中断原函数(必须)
|
屏蔽 PendSV中断原函数(必须)
|
||||||
|
|
||||||
4、DEBUG(可选,参照例程 demo_debug.c)
|
5、DEBUG(可选,参照例程 demo_debug.c)
|
||||||
|
|
||||||
不出意外的话,您的项目现在已经可以正常编译了。
|
不出意外的话,您的项目现在已经可以正常编译了。
|
||||||
|
|
||||||
@@ -34,4 +42,15 @@
|
|||||||
其中的用户定义部分,与PendSV中断配置、用户自定义任务切换现场保护
|
其中的用户定义部分,与PendSV中断配置、用户自定义任务切换现场保护
|
||||||
等功能息息相关,在未来可能需要适当调整。
|
等功能息息相关,在未来可能需要适当调整。
|
||||||
|
|
||||||
|
--------------------------------------------------------------------
|
||||||
|
|
||||||
|
其它注意事项
|
||||||
|
|
||||||
|
1、任务栈SIZE不允许大于65535。
|
||||||
|
2、CosyOS for 80251,原生仅适配 Keil C251 编译器,如果您使用其它编译器,
|
||||||
|
应注意以下事项:
|
||||||
|
(1)CosyOS 内核中需要 __C251__ 关键字做条件编译,移植汇编文件中需要
|
||||||
|
__A251__ 关键字做条件编译,如果编译器不支持该关键字可自行添加。
|
||||||
|
(2)其它可能的、未知的兼容性问题。
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -3,11 +3,12 @@
|
|||||||
* @file demo_debug.c
|
* @file demo_debug.c
|
||||||
* @brief 例程-DEBUG for STC8H
|
* @brief 例程-DEBUG for STC8H
|
||||||
* @author 迟凯峰
|
* @author 迟凯峰
|
||||||
* @version V1.0.1
|
* @version V1.1.0
|
||||||
* @date 2025.10.20
|
* @date 2026.09.16
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
#if 0 /* 编译开关 */
|
#if 1 /* 编译开关 */ \
|
||||||
|
&& defined ( __C51__ )
|
||||||
|
|
||||||
#include "CosyOS.H"
|
#include "CosyOS.H"
|
||||||
#if (SYSCFG_DEBUGGING == __ENABLED__)
|
#if (SYSCFG_DEBUGGING == __ENABLED__)
|
||||||
@@ -19,7 +20,7 @@
|
|||||||
/*-------------------------------------------------------------*
|
/*-------------------------------------------------------------*
|
||||||
| DEBUG_MODE | 输出(UART SEND)| 输入(UART RECV)| 推荐等级 |
|
| DEBUG_MODE | 输出(UART SEND)| 输入(UART RECV)| 推荐等级 |
|
||||||
|------------+------------------+------------------+----------|
|
|------------+------------------+------------------+----------|
|
||||||
| 0 | printf(查询) | 无 | * |
|
| 0 | printf(查询) | DMA串口接收中断 | * |
|
||||||
|------------+------------------+------------------+----------|
|
|------------+------------------+------------------+----------|
|
||||||
| 1 | 串口发送中断 | 串口接收中断 | *** |
|
| 1 | 串口发送中断 | 串口接收中断 | *** |
|
||||||
|------------+------------------+------------------+----------|
|
|------------+------------------+------------------+----------|
|
||||||
@@ -27,7 +28,7 @@
|
|||||||
*-------------------------------------------------------------*/
|
*-------------------------------------------------------------*/
|
||||||
#define DEBUG_MODE 0
|
#define DEBUG_MODE 0
|
||||||
|
|
||||||
/* DEBUG RECV 缓存SIZE */// 当 DEBUG_MODE 非0时,需定义此项
|
/* DEBUG RECV 缓存SIZE */
|
||||||
#define DEBUG_RECV_BUFF 32
|
#define DEBUG_RECV_BUFF 32
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
@@ -38,14 +39,6 @@
|
|||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
#if (DEBUG_MODE == 0)
|
|
||||||
#include <stdio.h>
|
|
||||||
#else
|
|
||||||
static char xdata u_debug_recv_buff[DEBUG_RECV_BUFF];
|
|
||||||
static char xdata *u_debug_recv_p = u_debug_recv_buff;
|
|
||||||
#if (DEBUG_MODE == 1)
|
|
||||||
static char xdata *u_debug_send_p;
|
|
||||||
#elif (DEBUG_MODE == 2)
|
|
||||||
#ifdef DMA_UR1R_RXA
|
#ifdef DMA_UR1R_RXA
|
||||||
#undef DMA_UR1R_RXA
|
#undef DMA_UR1R_RXA
|
||||||
#endif
|
#endif
|
||||||
@@ -54,18 +47,30 @@ static char xdata *u_debug_send_p;
|
|||||||
#endif
|
#endif
|
||||||
#define DMA_UR1R_RXA (*(char xdata * volatile xdata *)0xfa3d)
|
#define DMA_UR1R_RXA (*(char xdata * volatile xdata *)0xfa3d)
|
||||||
#define DMA_UR1T_TXA (*(char xdata * volatile xdata *)0xfa35)
|
#define DMA_UR1T_TXA (*(char xdata * volatile xdata *)0xfa35)
|
||||||
|
|
||||||
|
#if (DEBUG_MODE == 0)
|
||||||
|
#include <stdio.h>
|
||||||
|
static char xdata DMA_UR1R_SBUF;
|
||||||
|
#elif (DEBUG_MODE == 1)
|
||||||
|
static char xdata *u_debug_send_p;
|
||||||
|
#elif (DEBUG_MODE == 2)
|
||||||
static unsigned char DMA_UR1T_cishu;
|
static unsigned char DMA_UR1T_cishu;
|
||||||
static unsigned char DMA_UR1T_bytes;
|
static unsigned char DMA_UR1T_bytes;
|
||||||
static char xdata DMA_UR1R_SBUF;
|
static char xdata DMA_UR1R_SBUF;
|
||||||
#endif
|
#endif
|
||||||
#endif
|
static char xdata u_debug_recv_buff[DEBUG_RECV_BUFF];
|
||||||
|
static char xdata *u_debug_recv_p = u_debug_recv_buff;
|
||||||
|
|
||||||
void Debug_Config(void)
|
void Debug_Config(void)
|
||||||
{
|
{
|
||||||
#if (DEBUG_MODE == 0)
|
#if (DEBUG_MODE == 0)
|
||||||
REN = 0;
|
REN = 1;
|
||||||
ES = 0;
|
ES = 0;
|
||||||
TI = 1;
|
TI = 1;
|
||||||
|
DMA_UR1R_RXA = &DMA_UR1R_SBUF;
|
||||||
|
DMA_UR1R_AMT = 0;
|
||||||
|
DMA_UR1R_CFG |= 0x80 | 0x04 | 0x01;
|
||||||
|
DMA_UR1R_CR |= 0x80 | 0x20 | 0x01;
|
||||||
|
|
||||||
#elif (DEBUG_MODE == 1)
|
#elif (DEBUG_MODE == 1)
|
||||||
if(~PSH && ~PS){
|
if(~PSH && ~PS){
|
||||||
@@ -150,7 +155,9 @@ void DMA_UR1T_Isr(void) interrupt 50
|
|||||||
xDebugSend_Complete();
|
xDebugSend_Complete();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if (DEBUG_MODE != 1)
|
||||||
void DMA_UR1R_Isr(void) interrupt 51
|
void DMA_UR1R_Isr(void) interrupt 51
|
||||||
{
|
{
|
||||||
DMA_UR1R_STA &=~0x01;
|
DMA_UR1R_STA &=~0x01;
|
||||||
@@ -168,6 +175,6 @@ void DMA_UR1R_Isr(void) interrupt 51
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
|||||||
@@ -3,8 +3,8 @@
|
|||||||
* @file demo_main.c
|
* @file demo_main.c
|
||||||
* @brief 例程-主函数 for STC8H
|
* @brief 例程-主函数 for STC8H
|
||||||
* @author 迟凯峰
|
* @author 迟凯峰
|
||||||
* @version V1.0.2
|
* @version V1.0.3
|
||||||
* @date 2025.10.20
|
* @date 2026.06.20
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
#if 0 /* 编译开关 */
|
#if 0 /* 编译开关 */
|
||||||
@@ -14,6 +14,11 @@
|
|||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
|
/* 主栈检查初始化 */// 在main函数的入口处
|
||||||
|
#if (SYSCFG_DEBUGGING == 1)
|
||||||
|
uMainStack_CheckInit();
|
||||||
|
#endif
|
||||||
|
|
||||||
/* USER INIT CODE BEGIN */
|
/* USER INIT CODE BEGIN */
|
||||||
|
|
||||||
/* USER INIT CODE END */
|
/* USER INIT CODE END */
|
||||||
|
|||||||
@@ -4,16 +4,19 @@
|
|||||||
CosyOS-配置 / syscfg.h -> 系统配置>>标准头文件,应首先被正确定义。
|
CosyOS-配置 / syscfg.h -> 系统配置>>标准头文件,应首先被正确定义。
|
||||||
而后,在 C51、A51 标签页中,可能需要添加标准头文件的包含路径。
|
而后,在 C51、A51 标签页中,可能需要添加标准头文件的包含路径。
|
||||||
|
|
||||||
2、main函数(参照例程 demo_main.c)
|
2、MCU配置
|
||||||
|
CosyOS-配置 / mcucfg_8051.h -> 系统时钟频率,需要正确定义。
|
||||||
|
|
||||||
|
3、main函数(参照例程 demo_main.c)
|
||||||
初始化 PendSV中断(必须)
|
初始化 PendSV中断(必须)
|
||||||
配置 DEBUG(可选)
|
配置 DEBUG(可选)
|
||||||
启动 CosyOS(必须)
|
启动 CosyOS(必须)
|
||||||
|
|
||||||
3、系统中断(参照例程 demo_int.c)
|
4、系统中断(参照例程 demo_int.c)
|
||||||
屏蔽 定时器0中断原函数(必须)
|
屏蔽 定时器0中断原函数(必须)
|
||||||
屏蔽 PendSV中断原函数(必须)
|
屏蔽 PendSV中断原函数(必须)
|
||||||
|
|
||||||
4、DEBUG(可选,参照例程 demo_debug.c)
|
5、DEBUG(可选,参照例程 demo_debug.c)
|
||||||
|
|
||||||
不出意外的话,您的项目现在已经可以正常编译了。
|
不出意外的话,您的项目现在已经可以正常编译了。
|
||||||
|
|
||||||
@@ -64,4 +67,20 @@
|
|||||||
覆盖地图中应逐一查看这些函数,对于使用了内存的应手动修正调用树或
|
覆盖地图中应逐一查看这些函数,对于使用了内存的应手动修正调用树或
|
||||||
移除覆盖分析。
|
移除覆盖分析。
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
|
||||||
|
其它注意事项
|
||||||
|
|
||||||
|
1、默认情况下,任务栈SIZE不允许大于255。只有在启用了XBPSTACK的任务切换
|
||||||
|
现场保护时,任务栈SIZE才允许大于255,最大可为65535。
|
||||||
|
2、CosyOS for 8051,原生仅适配 Keil C51 编译器,如果您使用其它编译器,
|
||||||
|
应注意以下事项:
|
||||||
|
(1)CosyOS 内核中需要 __C51__ 关键字做条件编译,移植汇编文件中需要
|
||||||
|
__A51__ 关键字做条件编译,如果编译器不支持该关键字可自行添加。
|
||||||
|
(2)CosyOS 内核中会用到 #pragma NOAREGS 来实现相对寄存器访问,如果
|
||||||
|
编译器不支持应设法等效替换。
|
||||||
|
(3)已知某些编译器不支持 .s 汇编文件,可将移植文件中的 .s 文件更名为
|
||||||
|
.A51,如 port_8051s.s 更名为 port_8051s.A51。
|
||||||
|
(4)其它可能的、未知的兼容性问题。
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
/**************************************************************************//**
|
/**************************************************************************//**
|
||||||
* @item CosyOS-III 例程(系统构建)
|
* @item CosyOS-III 例程(系统构建)
|
||||||
* @file demo_debug_fwl.c
|
* @file demo_debug_fwl.c
|
||||||
* @brief 例程-DEBUG for STM32F4 use Standard Peripheric Driver
|
* @brief 例程-DEBUG for STM32 use Standard Peripheric Driver
|
||||||
* @author 迟凯峰
|
* @author 迟凯峰
|
||||||
* @version V1.0.1
|
* @version V1.0.2
|
||||||
* @date 2026.02.19
|
* @date 2026.06.28
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
#if 0 /* 编译开关 */ \
|
#if 1 /* 编译开关 */ \
|
||||||
&& defined (USE_STDPERIPH_DRIVER)
|
&& defined (USE_STDPERIPH_DRIVER)
|
||||||
|
|
||||||
#include "CosyOS.H"
|
#include "CosyOS.H"
|
||||||
@@ -37,7 +37,15 @@
|
|||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#if (__CORTEX_M == 0)
|
||||||
|
#include "stm32f0xx_usart.h"
|
||||||
|
#elif (__CORTEX_M == 3)
|
||||||
|
#include "stm32f10x_usart.h"
|
||||||
|
#elif (__CORTEX_M == 4)
|
||||||
#include "stm32f4xx_usart.h"
|
#include "stm32f4xx_usart.h"
|
||||||
|
#elif (__CORTEX_M == 7)
|
||||||
|
#include "stm32h7xx_usart.h"
|
||||||
|
#endif
|
||||||
static char u_debug_recv_buff[DEBUG_RECV_BUFF];
|
static char u_debug_recv_buff[DEBUG_RECV_BUFF];
|
||||||
static char *u_debug_recv_p = u_debug_recv_buff;
|
static char *u_debug_recv_p = u_debug_recv_buff;
|
||||||
#if (DEBUG_MODE == 0)
|
#if (DEBUG_MODE == 0)
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
/**************************************************************************//**
|
/**************************************************************************//**
|
||||||
* @item CosyOS-III 例程(系统构建)
|
* @item CosyOS-III 例程(系统构建)
|
||||||
* @file demo_debug_hal.c
|
* @file demo_debug_hal.c
|
||||||
* @brief 例程-DEBUG for STM32F4 use HAL Driver
|
* @brief 例程-DEBUG for STM32 use HAL Driver
|
||||||
* @author 迟凯峰
|
* @author 迟凯峰
|
||||||
* @version V1.0.1
|
* @version V1.0.2
|
||||||
* @date 2026.02.19
|
* @date 2026.06.28
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
#if 0 /* 编译开关 */ \
|
#if 1 /* 编译开关 */ \
|
||||||
&& defined (USE_HAL_DRIVER)
|
&& defined (USE_HAL_DRIVER)
|
||||||
|
|
||||||
#include "CosyOS.H"
|
#include "CosyOS.H"
|
||||||
|
|||||||
@@ -3,8 +3,8 @@
|
|||||||
* @file demo_main.c
|
* @file demo_main.c
|
||||||
* @brief 例程-主函数 for Cortex-M
|
* @brief 例程-主函数 for Cortex-M
|
||||||
* @author 迟凯峰
|
* @author 迟凯峰
|
||||||
* @version V1.0.2
|
* @version V1.0.4
|
||||||
* @date 2026.02.19
|
* @date 2026.06.22
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
#if 0 /* 编译开关 */
|
#if 0 /* 编译开关 */
|
||||||
@@ -14,6 +14,15 @@
|
|||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
|
/* 主栈检查初始化 */// 在main函数的入口处
|
||||||
|
#if (SYSCFG_DEBUGGING == 1)
|
||||||
|
#if defined ( __ICCARM__ ) // IAR EWARM
|
||||||
|
uMainStack_CheckInit();
|
||||||
|
#else // AC5/AC6/GCC
|
||||||
|
uMainStack_CheckInit(0x1000); // 传参主栈大小,务必与定义值相同。
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
/* USER INIT CODE BEGIN */
|
/* USER INIT CODE BEGIN */
|
||||||
// firmware library standard peripheric Driver
|
// firmware library standard peripheric Driver
|
||||||
#if defined (USE_STDPERIPH_DRIVER)
|
#if defined (USE_STDPERIPH_DRIVER)
|
||||||
|
|||||||
@@ -6,24 +6,24 @@
|
|||||||
1、系统配置
|
1、系统配置
|
||||||
CosyOS-配置 / syscfg.h -> 系统配置>>标准头文件,应首先被正确定义。
|
CosyOS-配置 / syscfg.h -> 系统配置>>标准头文件,应首先被正确定义。
|
||||||
|
|
||||||
2、main函数(参照例程 demo_main.c)
|
2、MCU配置
|
||||||
|
CosyOS-配置 / mcucfg_cmx.h,配置 系统中断 和 互斥访问方案。
|
||||||
|
Cortex-M3/M4/M7等内核:根据系统中断配置,选择 mcucfg_cm0.h
|
||||||
|
或 mcucfg_cm3.h 进行再配置。
|
||||||
|
Cortex-M0/M0+等内核:在 mcucfg_cm0.h 中,继续配置 系统中断。
|
||||||
|
|
||||||
|
3、main函数(参照例程 demo_main.c)
|
||||||
初始化 SysTick替代定时器(可选)
|
初始化 SysTick替代定时器(可选)
|
||||||
配置 DEBUG(可选)
|
配置 DEBUG(可选)
|
||||||
启动 CosyOS(必须)
|
启动 CosyOS(必须)
|
||||||
|
|
||||||
3、系统中断(参照例程 demo_int.c)
|
4、系统中断(参照例程 demo_int.c)
|
||||||
屏蔽 PendSV中断原函数(必须)
|
屏蔽 PendSV中断原函数(必须)
|
||||||
调用 tCosyTick_Handler(必须)
|
调用 tCosyTick_Handler(必须)
|
||||||
|
|
||||||
4、DEBUG(可选,参照例程 demo_debug_fwl.c 或 demo_debug_hal.c)
|
5、DEBUG(可选,参照例程 demo_debug_fwl.c 或 demo_debug_hal.c)
|
||||||
|
|
||||||
Cortex-M3/M4/M7等内核:
|
不出意外的话,您的项目现在已经可以正常编译了。
|
||||||
不出意外的话,您的项目现在已经可以正常编译了。
|
|
||||||
|
|
||||||
Cortex-M0/M0+等内核:
|
|
||||||
CosyOS-配置 / mcucfg_cmx.h,配置 系统中断 和 互斥访问方案;
|
|
||||||
CosyOS-配置 / mcucfg_cm0.h,配置 系统中断;
|
|
||||||
至此,您的项目才能正常编译。
|
|
||||||
|
|
||||||
但在未来,仍需重点关注如下内容:
|
但在未来,仍需重点关注如下内容:
|
||||||
|
|
||||||
@@ -35,8 +35,8 @@ Cortex-M0/M0+等内核:
|
|||||||
CosyOS-配置 / mcucfg_cm0.h
|
CosyOS-配置 / mcucfg_cm0.h
|
||||||
CosyOS-配置 / mcucfg_cm3.h
|
CosyOS-配置 / mcucfg_cm3.h
|
||||||
|
|
||||||
3、启动文件配置
|
3、堆栈配置
|
||||||
在启动文件中需要合理的配置堆栈,STACK固定给中断使用;
|
需要合理的配置堆栈,STACK固定给中断使用;
|
||||||
动态分配的内存和动态创建的对象,都需要用到HEAP。
|
动态分配的内存和动态创建的对象,都需要用到HEAP。
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,106 @@
|
|||||||
|
/**************************************************************************//**
|
||||||
|
* @item CosyOS-III 例程(系统构建)
|
||||||
|
* @file demo_debug.c
|
||||||
|
* @brief 例程-DEBUG for CH32V30x use firmware library
|
||||||
|
* @author 迟凯峰
|
||||||
|
* @version v1.0.1
|
||||||
|
* @date 2026.07.31
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
#if 0 /* 编译开关 */
|
||||||
|
|
||||||
|
#include "CosyOS.H"
|
||||||
|
#if (SYSCFG_DEBUGGING == __ENABLED__)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 用户定义
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*-------------------------------------------------------------*
|
||||||
|
| DEBUG_MODE | 输出(UART SEND)| 输入(UART RECV)| 推荐等级 |
|
||||||
|
|------------+------------------+------------------+----------|
|
||||||
|
| 0 | printf(查询) | 串口接收中断 | * |
|
||||||
|
|------------+------------------+------------------+----------|
|
||||||
|
| 1 | 串口发送中断 | 串口接收中断 | *** |
|
||||||
|
*-------------------------------------------------------------*/
|
||||||
|
#define DEBUG_MODE 1 // 建议不要配置为0,否则极易导致 系统调试器(Debugger)的任务栈需求激增!
|
||||||
|
|
||||||
|
/* DEBUG RECV 缓存SIZE */
|
||||||
|
#define DEBUG_RECV_BUFF 32
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
// 1、例程中使用了UART1做为DEBUG专用串口,用户如需更换其它串口请自行调整。
|
||||||
|
// 2、下方的DEBUG配置函数 Debug_Config(),不能够取代基本的串口初始化工作,
|
||||||
|
// 用户在main函数中,在调用该函数之前,需先行初始化串口。
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include "ch32v30x_usart.h"
|
||||||
|
static char u_debug_recv_buff[DEBUG_RECV_BUFF];
|
||||||
|
static char *u_debug_recv_p = u_debug_recv_buff;
|
||||||
|
#if (DEBUG_MODE == 0)
|
||||||
|
#include <stdio.h>
|
||||||
|
#elif (DEBUG_MODE == 1)
|
||||||
|
static char *u_debug_send_p;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void Debug_Config(void)
|
||||||
|
{
|
||||||
|
#if (DEBUG_MODE == 0)
|
||||||
|
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
|
||||||
|
|
||||||
|
#elif (DEBUG_MODE == 1)
|
||||||
|
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#if (SYSCFG_DEBUG_SENDLEN == __DISABLED__)
|
||||||
|
void debug_hook(char _XDATA_MEM_ *p)
|
||||||
|
#else
|
||||||
|
void debug_hook(char _XDATA_MEM_ *p, s_u16_t len)
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
#if (DEBUG_MODE == 0)
|
||||||
|
printf("%s", p);
|
||||||
|
xDebugSend_Complete();
|
||||||
|
|
||||||
|
#elif (DEBUG_MODE == 1)
|
||||||
|
u_debug_send_p = p;
|
||||||
|
USART_ITConfig(USART1, USART_IT_TXE, ENABLE);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
// 根据是否启用硬件压栈及串口中断优先级,选择相匹配的声明方式:
|
||||||
|
void USART1_IRQHandler(void) __attribute__((interrupt)); // 声明为软件压栈
|
||||||
|
//void USART1_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast"))); // 声明为硬件压栈
|
||||||
|
void USART1_IRQHandler(void)
|
||||||
|
{
|
||||||
|
#if (DEBUG_MODE == 1)
|
||||||
|
if(USART_GetITStatus(USART1, USART_IT_TXE) != RESET){
|
||||||
|
if(*u_debug_send_p){
|
||||||
|
USART_SendData(USART1, *u_debug_send_p++);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
USART_ITConfig(USART1, USART_IT_TXE, DISABLE);
|
||||||
|
xDebugSend_Complete();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET){
|
||||||
|
if(u_debug_recv_p - u_debug_recv_buff < DEBUG_RECV_BUFF - 1){
|
||||||
|
*u_debug_recv_p = USART_ReceiveData(USART1);
|
||||||
|
if(*u_debug_recv_p++ == '\n'){
|
||||||
|
xDebugRecv_Handler(u_debug_recv_buff, u_debug_recv_p - u_debug_recv_buff);
|
||||||
|
u_debug_recv_p = u_debug_recv_buff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
u_debug_recv_p = u_debug_recv_buff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,184 @@
|
|||||||
|
RISC-V32 之系统构建
|
||||||
|
|
||||||
|
|
||||||
|
概述
|
||||||
|
|
||||||
|
1、rv32 目前暂不支持 cube 安装,用户需手动移植。移植过程中遇到问题
|
||||||
|
可加入社区获取技术支持。
|
||||||
|
|
||||||
|
2、目前仅支持 PSP栈模式,即不存在全局唯一主栈或中断专用栈,而是当前
|
||||||
|
任务栈即为当前主栈。这导致所有中断都是入任务栈,所以中断嵌套深度
|
||||||
|
应尽量配置少一些,同时任务栈SIZE应尽量大一些,以防溢出。
|
||||||
|
|
||||||
|
3、CosyOS 采用了自研先进技术,可实现 CH32V 全程开启硬件压栈。
|
||||||
|
该技术为纯软件实现,不依赖特定硬件(0x804->bit5),V103、203 等
|
||||||
|
皆可完美支持。所以,如果您的处理器支持硬件压栈,建议开启。
|
||||||
|
|
||||||
|
如果开启硬件压栈,中断函数的声明原则等同裸机。
|
||||||
|
即如果最大硬件压栈深度为3级,需要将低优先级的三级中断声明为硬件压栈,
|
||||||
|
高优先级的中断声明为软件压栈。
|
||||||
|
|
||||||
|
RV32I 开启硬件压栈,注意事项:
|
||||||
|
(1)处理器需要仅工作在机器模式
|
||||||
|
可在启动文件中,通过配置 mstatus 的 MPP 为 3 来实现。
|
||||||
|
(2)x4(tp)、mscratch、0xE000E040(中断优先级阈值)等寄存器,专用
|
||||||
|
于任务切换,不允许用户使用。
|
||||||
|
|
||||||
|
|
||||||
|
移植流程(以 MRS2 为例)
|
||||||
|
|
||||||
|
1、裸机工程
|
||||||
|
准备项目的裸机工程,一个最基础的工程即可。
|
||||||
|
|
||||||
|
2、删除文件
|
||||||
|
删除 CosyOS-源代码 中无关的文件,使其不被编译。
|
||||||
|
|
||||||
|
建议必须删除的文件:
|
||||||
|
(1)Port 中,仅保留 port_x32、syscfg.h
|
||||||
|
(2)Port / port_x32 中,仅保留 RISC-V32、port_x32.c、port_x32.h
|
||||||
|
|
||||||
|
建议可选删除的文件:
|
||||||
|
(1)Demo-Service
|
||||||
|
(2)Demo-Build 中,仅保留 RISC-V32、demo_task.c
|
||||||
|
注:如果不删除不会影响正常编译
|
||||||
|
|
||||||
|
3、拷贝文件
|
||||||
|
拷贝 CosyOS-源代码 至工程中。
|
||||||
|
|
||||||
|
4、包含路径
|
||||||
|
打开工程,添加下方的包含路径。
|
||||||
|
C包含路径:
|
||||||
|
cosyos-v3.0.1/System
|
||||||
|
cosyos-v3.0.1/Port
|
||||||
|
cosyos-v3.0.1/Port/port_x32
|
||||||
|
cosyos-v3.0.1/Port/port_x32/RISC-V32
|
||||||
|
汇编包含路径:
|
||||||
|
cosyos-v3.0.1/Port
|
||||||
|
cosyos-v3.0.1/Port/port_x32/RISC-V32
|
||||||
|
|
||||||
|
|
||||||
|
构建流程
|
||||||
|
|
||||||
|
0、Include/Exclude
|
||||||
|
Port / port_x32 / RISC-V32 / port_rv32_SWS.S, 为软件压栈专用,兼容 RV32E、RV32I 指令集;
|
||||||
|
Port / port_x32 / RISC-V32 / port_rv32e_HWS.S,为硬件压栈专用,针对 RV32E 指令集(青稞 V2 系列);
|
||||||
|
Port / port_x32 / RISC-V32 / port_rv32i_HWS.S,为硬件压栈专用,针对 RV32I 指令集(青稞 V3/V4 系列);
|
||||||
|
根据是否启用硬件压栈,Include 相匹配的文件,Exclude 不匹配的文件。
|
||||||
|
如果启用硬件压栈,port_rv32e_HWS.S、port_rv32i_HWS.S 可同时包含。
|
||||||
|
|
||||||
|
1、系统配置
|
||||||
|
Port / syscfg.h -> 系统配置>>处理器架构,应定义为 4。
|
||||||
|
Port / syscfg.h -> 系统配置>>标准头文件,需要正确定义,如定义为
|
||||||
|
"ch32v30x.h"。
|
||||||
|
|
||||||
|
2、MCU配置
|
||||||
|
Port / port_x32 / RISC-V32 / mcucfg_rv32.h 中,配置系统滴答和
|
||||||
|
系统时钟。
|
||||||
|
|
||||||
|
3、main函数
|
||||||
|
在main函数的末尾处,先配置 DEBUG(如果使用 CosyOS-任务管理器),
|
||||||
|
最后再启动 CosyOS(必须)。
|
||||||
|
|
||||||
|
4、系统中断
|
||||||
|
CosyOS 固定采用 SysTick_Handler 和 SW_Handler 做为系统中断。
|
||||||
|
用户需要自行在 SysTick_Handler 中调用 tCosyTick_Handler。
|
||||||
|
用户不要自行创建 SW_Handler。
|
||||||
|
|
||||||
|
5、DEBUG(可选,参照例程 demo_debug.c)
|
||||||
|
|
||||||
|
在未来,用户仍需重点关注如下内容:
|
||||||
|
|
||||||
|
1、系统配置
|
||||||
|
Port / syscfg.h
|
||||||
|
|
||||||
|
2、MCU配置
|
||||||
|
Port / port_x32 / RISC-V32 / mcucfg_rv32.h
|
||||||
|
|
||||||
|
3、启动文件配置
|
||||||
|
在 handle_reset 中,配置特权级(mstatus);
|
||||||
|
配置硬件压栈使能、中断嵌套使能、中断嵌套深度、硬件压栈溢出后中断使能(0x804)。
|
||||||
|
|
||||||
|
4、ld文件配置
|
||||||
|
配置硬件栈size。
|
||||||
|
通常配置一个极小的数值即可,据不完全测试,该值配置为0即可正常运行:
|
||||||
|
__stack_size = 0;
|
||||||
|
|
||||||
|
|
||||||
|
例程
|
||||||
|
|
||||||
|
/* 例程-main */
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
/* USER INIT CODE BEGIN */
|
||||||
|
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
|
||||||
|
SystemCoreClockUpdate();
|
||||||
|
Delay_Init();
|
||||||
|
////USART_Printf_Init(115200);
|
||||||
|
USART1_UART_Init (115200);
|
||||||
|
printf("SystemClk:%d\r\n",SystemCoreClock);
|
||||||
|
printf( "ChipID:%08x\r\n", DBGMCU_GetCHIPID() );
|
||||||
|
printf("This is printf example\r\n");
|
||||||
|
/* USER INIT CODE END */
|
||||||
|
|
||||||
|
/* USER DEBUG CONFIG */// for CosyOS-Taskmgr
|
||||||
|
#if (SYSCFG_DEBUGGING == 1)
|
||||||
|
if(1){
|
||||||
|
void Debug_Config(void);
|
||||||
|
Debug_Config();
|
||||||
|
}// defined in demo_debug.c
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* USER 启动 CosyOS */// 在main函数的末尾处
|
||||||
|
if(1){
|
||||||
|
#if 1 // 建议前期调试时开启,如果CosyOS启动失败会返回错误码提示用户!
|
||||||
|
unsigned char _ecode = uStartCosyOS();
|
||||||
|
printf("CosyOS startup failed, error code: %d.\r\n", (int)_ecode);
|
||||||
|
#else
|
||||||
|
uStartCosyOS();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
while(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 例程-SysTick_Handler */// 根据是否启用硬件压栈,选择相匹配的声明方式:
|
||||||
|
//void SysTick_Handler(void) __attribute__((interrupt)); // 声明为软件压栈
|
||||||
|
void SysTick_Handler(void) __attribute__((interrupt("WCH-Interrupt-fast"))); // 声明为硬件压栈
|
||||||
|
void SysTick_Handler(void)
|
||||||
|
{
|
||||||
|
SysTick->SR = 0;
|
||||||
|
tCosyTick_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 例程-启动文件 */// 使能硬件压栈并仅为机器模式
|
||||||
|
handle_reset:
|
||||||
|
/* Enable interrupt nesting and hardware stack */
|
||||||
|
// HWSTKOVEN, PMTCFG, INESTEN, HWSTKEN
|
||||||
|
li t0, (1 << 4) | (3 << 2) | (1 << 1) | 1
|
||||||
|
csrw 0x804, t0
|
||||||
|
/* Enable floating point and global interrupt, configure privileged mode */
|
||||||
|
// FS, MPP, MPIE, MIE
|
||||||
|
li t0, (3 << 13) | (3 << 11) | (1 << 7) | (1 << 3)
|
||||||
|
csrw mstatus, t0
|
||||||
|
|
||||||
|
/*
|
||||||
|
0x804
|
||||||
|
HWSTKOVEN:硬件压栈溢出后中断使能
|
||||||
|
PMTCFG: 中断嵌套深度
|
||||||
|
INESTEN: 中断嵌套使能
|
||||||
|
HWSTKEN: 硬件压栈使能
|
||||||
|
|
||||||
|
mstatus
|
||||||
|
FS: 浮点单元状态
|
||||||
|
MPP: 进中断前特权模式
|
||||||
|
MPIE:进中断前中断使能状态
|
||||||
|
MIE: 机器模式中断使能
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* 例程-断点测试钩子 */// for RV32I 硬件压栈
|
||||||
|
void test_breakpoint_hook(void)
|
||||||
|
{
|
||||||
|
printf("break point test failed\r\n");
|
||||||
|
while(1);
|
||||||
|
}
|
||||||
|
|
||||||
+7
-13
@@ -3,8 +3,8 @@
|
|||||||
* @file demo_task.c
|
* @file demo_task.c
|
||||||
* @brief 例程-任务
|
* @brief 例程-任务
|
||||||
* @author 迟凯峰
|
* @author 迟凯峰
|
||||||
* @version V1.0.4
|
* @version V1.1.1
|
||||||
* @date 2025.12.24
|
* @date 2026.09.14
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
#if 0 /* 编译开关 */
|
#if 0 /* 编译开关 */
|
||||||
@@ -15,21 +15,15 @@
|
|||||||
/*-----------------------*
|
/*-----------------------*
|
||||||
| 创建任务 - 参数说明表 |
|
| 创建任务 - 参数说明表 |
|
||||||
|-----------------------+-----------------------------------------------------------*
|
|-----------------------+-----------------------------------------------------------*
|
||||||
| 任务名称 | 任务优先级 | 任务栈大小 | 安全运行时 | 任务名称文本(兼容模式) |
|
| 任务名称 | 任务优先级 | 任务栈大小 | 安全运行时 | 任务名称标识(兼容模式) |
|
||||||
|----------+------------+------------+------------+---------------------------------|
|
|----------+------------+------------+------------+---------------------------------|
|
||||||
| task_1 | 1级 | 384字节 | 0为无限长 | 0为自动引用任务名称,即"task_1" |
|
| task_1 | 1级 | 512字节 | 0为无限长 | 0为自动引用任务名称,即"task_1" |
|
||||||
|----------+------------+------------+------------+---------------------------------|
|
|----------+------------+------------+------------+---------------------------------|
|
||||||
| task_2 | 2级 | 384字节 | 9滴答周期 | "task_led"为任务名称文本 |
|
| task_2 | 2级 | 512字节 | 9滴答周期 | "task_led"为任务名称标识 |
|
||||||
*-----------------------------------------------------------------------------------*/
|
*-----------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
/*
|
|
||||||
注意事项 for 8051:
|
|
||||||
1、在默认情况下,任务栈SIZE不允许大于255。
|
|
||||||
2、只有在启用了XBPSTACK的任务切换现场保护时,任务栈SIZE才允许大于255,最大可为65535。
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* 静态创建 task_1 */
|
/* 静态创建 task_1 */
|
||||||
uCreateTask(task_1, 1, 384, 0, 0)
|
uCreateTask(task_1, 1, 512, 0, 0)
|
||||||
{
|
{
|
||||||
while(1){
|
while(1){
|
||||||
printf("task_1\r\n");
|
printf("task_1\r\n");
|
||||||
@@ -38,7 +32,7 @@ uCreateTask(task_1, 1, 384, 0, 0)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* 动态创建 task_2 */
|
/* 动态创建 task_2 */
|
||||||
dCreateTask(task_2, 2, 384, 9, "task_led")
|
dCreateTask(task_2, 2, 512, 9, "task_led")
|
||||||
{
|
{
|
||||||
while(1){
|
while(1){
|
||||||
printf("task_2\r\n");
|
printf("task_2\r\n");
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
* @note 事件处理线程(task_1)中,可以实现超时处理机制。
|
* @note 事件处理线程(task_1)中,可以实现超时处理机制。
|
||||||
* @author 迟凯峰
|
* @author 迟凯峰
|
||||||
* @version V1.0.0
|
* @version V1.0.0
|
||||||
* @date 2025.10.21
|
* @date 2026.07.31
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
/*-------------------------------------------------------*
|
/*-------------------------------------------------------*
|
||||||
@@ -19,7 +19,7 @@
|
|||||||
| pGiveBin(bin) | 中断中给予二值信号量 - FLAG服务 |
|
| pGiveBin(bin) | 中断中给予二值信号量 - FLAG服务 |
|
||||||
*-------------------------------------------------------*/
|
*-------------------------------------------------------*/
|
||||||
|
|
||||||
#if 1 /* 编译开关 */
|
#if 0 /* 编译开关 */
|
||||||
|
|
||||||
#include "CosyOS.H"
|
#include "CosyOS.H"
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
* @note 事件处理线程(task_1)中,无法实现超时处理机制。
|
* @note 事件处理线程(task_1)中,无法实现超时处理机制。
|
||||||
* @author 迟凯峰
|
* @author 迟凯峰
|
||||||
* @version V1.0.0
|
* @version V1.0.0
|
||||||
* @date 2025.10.21
|
* @date 2026.07.31
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
/*-------------------------------------------------*
|
/*-------------------------------------------------*
|
||||||
@@ -19,7 +19,7 @@
|
|||||||
| pClearBlock(task) | 中断中清除阻塞 - FLAG服务 |
|
| pClearBlock(task) | 中断中清除阻塞 - FLAG服务 |
|
||||||
*-------------------------------------------------*/
|
*-------------------------------------------------*/
|
||||||
|
|
||||||
#if 1 /* 编译开关 */
|
#if 0 /* 编译开关 */
|
||||||
|
|
||||||
#include "CosyOS.H"
|
#include "CosyOS.H"
|
||||||
|
|
||||||
|
|||||||
@@ -7,10 +7,10 @@
|
|||||||
统一处理该类事件。
|
统一处理该类事件。
|
||||||
* @author 迟凯峰
|
* @author 迟凯峰
|
||||||
* @version V1.0.0
|
* @version V1.0.0
|
||||||
* @date 2025.10.22
|
* @date 2026.07.31
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
#if 1 /* 编译开关 */
|
#if 0 /* 编译开关 */
|
||||||
|
|
||||||
#include "CosyOS.H"
|
#include "CosyOS.H"
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
* @note 事件处理线程(task_1)中,无法实现超时处理机制。
|
* @note 事件处理线程(task_1)中,无法实现超时处理机制。
|
||||||
* @author 迟凯峰
|
* @author 迟凯峰
|
||||||
* @version V1.0.0
|
* @version V1.0.0
|
||||||
* @date 2025.10.21
|
* @date 2026.07.31
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
/*-----------------------------------------------*
|
/*-----------------------------------------------*
|
||||||
@@ -19,7 +19,7 @@
|
|||||||
| pResumeTask(task) | 中断中恢复任务 - FLAG服务 |
|
| pResumeTask(task) | 中断中恢复任务 - FLAG服务 |
|
||||||
*-----------------------------------------------*/
|
*-----------------------------------------------*/
|
||||||
|
|
||||||
#if 1 /* 编译开关 */
|
#if 0 /* 编译开关 */
|
||||||
|
|
||||||
#include "CosyOS.H"
|
#include "CosyOS.H"
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
* @note 计数信号量,是唯一能够实现并发事件同步的手段。
|
* @note 计数信号量,是唯一能够实现并发事件同步的手段。
|
||||||
* @author 迟凯峰
|
* @author 迟凯峰
|
||||||
* @version V1.0.0
|
* @version V1.0.0
|
||||||
* @date 2025.10.21
|
* @date 2026.07.31
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
/*-------------------------------------------------------*
|
/*-------------------------------------------------------*
|
||||||
@@ -18,7 +18,7 @@
|
|||||||
| iGiveSem(sem) | 中断中给予计数信号量 - FIFO服务 |
|
| iGiveSem(sem) | 中断中给予计数信号量 - FIFO服务 |
|
||||||
*-------------------------------------------------------*/
|
*-------------------------------------------------------*/
|
||||||
|
|
||||||
#if 1 /* 编译开关 */
|
#if 0 /* 编译开关 */
|
||||||
|
|
||||||
#include "CosyOS.H"
|
#include "CosyOS.H"
|
||||||
|
|
||||||
|
|||||||
@@ -5,10 +5,10 @@
|
|||||||
* @details 通过私信的应用实现任务间通信。
|
* @details 通过私信的应用实现任务间通信。
|
||||||
* @author 迟凯峰
|
* @author 迟凯峰
|
||||||
* @version V1.0.1
|
* @version V1.0.1
|
||||||
* @date 2026.02.04
|
* @date 2026.07.31
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
#if 1 /* 编译开关 */
|
#if 0 /* 编译开关 */
|
||||||
|
|
||||||
#include "CosyOS.H" // 用户的各个c文件中应包含此文件
|
#include "CosyOS.H" // 用户的各个c文件中应包含此文件
|
||||||
#include <stdio.h> // for printf
|
#include <stdio.h> // for printf
|
||||||
@@ -22,7 +22,7 @@
|
|||||||
|
|
||||||
dExternTaskmsg(task_2)(unsigned int, void *, float); // 声明动态创建的私信任务 task_2
|
dExternTaskmsg(task_2)(unsigned int, void *, float); // 声明动态创建的私信任务 task_2
|
||||||
|
|
||||||
/* 静态创建私信任务 task_1 */ // 1个私信参数
|
/* 静态创建私信任务 task_1 */// 1个私信参数
|
||||||
uCreateTaskmsg(task_1, 1, 512, 0, "task_key", 1)(unsigned int tm1)
|
uCreateTaskmsg(task_1, 1, 512, 0, "task_key", 1)(unsigned int tm1)
|
||||||
{
|
{
|
||||||
while(1){ // 已内置循环,此循环可省略
|
while(1){ // 已内置循环,此循环可省略
|
||||||
@@ -35,7 +35,7 @@ uCreateTaskmsg(task_1, 1, 512, 0, "task_key", 1)(unsigned int tm1)
|
|||||||
uEndTaskmsg(); // 结束私信任务
|
uEndTaskmsg(); // 结束私信任务
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 动态创建私信任务 task_2 */ // 3个私信参数
|
/* 动态创建私信任务 task_2 */// 3个私信参数
|
||||||
dCreateTaskmsg(task_2, 2, 768, 0, "task_led", 3)(unsigned int tm1, void *tm2, float tm3)
|
dCreateTaskmsg(task_2, 2, 768, 0, "task_led", 3)(unsigned int tm1, void *tm2, float tm3)
|
||||||
{
|
{
|
||||||
// while(1){ // 已内置循环,此循环可省略
|
// while(1){ // 已内置循环,此循环可省略
|
||||||
|
|||||||
@@ -6,10 +6,10 @@
|
|||||||
* @note 可实现超时处理机制。
|
* @note 可实现超时处理机制。
|
||||||
* @author 迟凯峰
|
* @author 迟凯峰
|
||||||
* @version V1.0.0
|
* @version V1.0.0
|
||||||
* @date 2025.10.25
|
* @date 2026.07.31
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
#if 1 /* 编译开关 */
|
#if 0 /* 编译开关 */
|
||||||
|
|
||||||
#include "CosyOS.H"
|
#include "CosyOS.H"
|
||||||
|
|
||||||
|
|||||||
@@ -6,10 +6,10 @@
|
|||||||
* @note 可实现超时处理机制。
|
* @note 可实现超时处理机制。
|
||||||
* @author 迟凯峰
|
* @author 迟凯峰
|
||||||
* @version V1.0.0
|
* @version V1.0.0
|
||||||
* @date 2025.10.25
|
* @date 2026.07.31
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
#if 1 /* 编译开关 */
|
#if 0 /* 编译开关 */
|
||||||
|
|
||||||
#include "CosyOS.H"
|
#include "CosyOS.H"
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
* @note 适用于多个任意优先级任务的循环协作。
|
* @note 适用于多个任意优先级任务的循环协作。
|
||||||
* @author 迟凯峰
|
* @author 迟凯峰
|
||||||
* @version V1.0.0
|
* @version V1.0.0
|
||||||
* @date 2025.10.21
|
* @date 2026.07.31
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
/*-------------------------------------------*
|
/*-------------------------------------------*
|
||||||
@@ -17,7 +17,7 @@
|
|||||||
| uGiveBin(bin) | 任务中 给予二值信号量 |
|
| uGiveBin(bin) | 任务中 给予二值信号量 |
|
||||||
*-------------------------------------------*/
|
*-------------------------------------------*/
|
||||||
|
|
||||||
#if 1 /* 编译开关 */
|
#if 0 /* 编译开关 */
|
||||||
|
|
||||||
#include "CosyOS.H"
|
#include "CosyOS.H"
|
||||||
|
|
||||||
|
|||||||
@@ -1,76 +0,0 @@
|
|||||||
/**************************************************************************//**
|
|
||||||
* @item CosyOS-III 例程(服务应用)
|
|
||||||
* @file coop_delay.c
|
|
||||||
* @brief 协作_阻塞延时
|
|
||||||
* @details 通过阻塞延时,实现任务的循环协作。
|
|
||||||
* @note 适用于多个相同优先级任务的循环协作,依赖协作式调度算法。
|
|
||||||
* @author 迟凯峰
|
|
||||||
* @version V1.0.0
|
|
||||||
* @date 2025.10.21
|
|
||||||
******************************************************************************/
|
|
||||||
|
|
||||||
/*-----------------------------------*
|
|
||||||
| 服务 | 描述 |
|
|
||||||
|-----------------+-----------------|
|
|
||||||
| uDelay_xx(time) | 任务中 阻塞延时 |
|
|
||||||
*-----------------------------------*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
注意事项:
|
|
||||||
1、需开启相同优先级任务的协作式调度。
|
|
||||||
2、延时时间最短为两个tick,不可更短。
|
|
||||||
3、任务的启动顺序,决定了任务的协作运行顺序。
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if 1 /* 编译开关 */
|
|
||||||
|
|
||||||
#include "CosyOS.H"
|
|
||||||
|
|
||||||
/* task_1 */
|
|
||||||
uCreateTask(task_1, 1, 384, 0, 0)
|
|
||||||
{
|
|
||||||
while(1){
|
|
||||||
/* 协作处理事务 开始 */
|
|
||||||
|
|
||||||
/* 协作处理事务 结束 */
|
|
||||||
/* 同步至task_2 开始 */
|
|
||||||
uDelay_tc(2);
|
|
||||||
/* 同步至task_2 结束 */
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* task_2 */
|
|
||||||
uCreateTask(task_2, 1, 384, 0, 0)
|
|
||||||
{
|
|
||||||
while(1){
|
|
||||||
/* 协作处理事务 开始 */
|
|
||||||
|
|
||||||
/* 协作处理事务 结束 */
|
|
||||||
/* 同步至task_3 开始 */
|
|
||||||
uDelay_tc(2);
|
|
||||||
/* 同步至task_3 结束 */
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* task_3 */
|
|
||||||
uCreateTask(task_3, 1, 384, 0, 0)
|
|
||||||
{
|
|
||||||
while(1){
|
|
||||||
/* 协作处理事务 开始 */
|
|
||||||
|
|
||||||
/* 协作处理事务 结束 */
|
|
||||||
/* 同步至task_1 开始 */
|
|
||||||
uDelay_tc(2);
|
|
||||||
/* 同步至task_1 结束 */
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 启动钩子 */
|
|
||||||
void start_hook(void)
|
|
||||||
{
|
|
||||||
uStartTask_Ready(task_1); // 启动task_1,初始状态为就绪状态
|
|
||||||
uStartTask_Ready(task_2); // 启动task_2,初始状态为就绪状态
|
|
||||||
uStartTask_Ready(task_3); // 启动task_3,初始状态为就绪状态
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -6,7 +6,7 @@
|
|||||||
* @note 适用于两个不同优先级任务的循环协作。
|
* @note 适用于两个不同优先级任务的循环协作。
|
||||||
* @author 迟凯峰
|
* @author 迟凯峰
|
||||||
* @version V1.0.0
|
* @version V1.0.0
|
||||||
* @date 2025.10.21
|
* @date 2026.07.31
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
/*-------------------------------------*
|
/*-------------------------------------*
|
||||||
@@ -17,7 +17,7 @@
|
|||||||
| uResumeTask(task) | 任务中 恢复任务 |
|
| uResumeTask(task) | 任务中 恢复任务 |
|
||||||
*-------------------------------------*/
|
*-------------------------------------*/
|
||||||
|
|
||||||
#if 1 /* 编译开关 */
|
#if 0 /* 编译开关 */
|
||||||
|
|
||||||
#include "CosyOS.H"
|
#include "CosyOS.H"
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
* @note 适用于多个不同优先级任务的循环协作。
|
* @note 适用于多个不同优先级任务的循环协作。
|
||||||
* @author 迟凯峰
|
* @author 迟凯峰
|
||||||
* @version V1.0.0
|
* @version V1.0.0
|
||||||
* @date 2025.10.21
|
* @date 2026.07.31
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
/*----------------------------------------------------------*
|
/*----------------------------------------------------------*
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
| uResumeSuspend(task) | 任务中 恢复指定任务并挂起自身任务 |
|
| uResumeSuspend(task) | 任务中 恢复指定任务并挂起自身任务 |
|
||||||
*----------------------------------------------------------*/
|
*----------------------------------------------------------*/
|
||||||
|
|
||||||
#if 1 /* 编译开关 */
|
#if 0 /* 编译开关 */
|
||||||
|
|
||||||
#include "CosyOS.H"
|
#include "CosyOS.H"
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
* @note 适用于多个相同优先级任务的循环协作。
|
* @note 适用于多个相同优先级任务的循环协作。
|
||||||
* @author 迟凯峰
|
* @author 迟凯峰
|
||||||
* @version V1.0.0
|
* @version V1.0.0
|
||||||
* @date 2025.10.21
|
* @date 2026.07.31
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
/*----------------------------------------------------------*
|
/*----------------------------------------------------------*
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
| uResumeSuspend(task) | 任务中 恢复指定任务并挂起自身任务 |
|
| uResumeSuspend(task) | 任务中 恢复指定任务并挂起自身任务 |
|
||||||
*----------------------------------------------------------*/
|
*----------------------------------------------------------*/
|
||||||
|
|
||||||
#if 1 /* 编译开关 */
|
#if 0 /* 编译开关 */
|
||||||
|
|
||||||
#include "CosyOS.H"
|
#include "CosyOS.H"
|
||||||
|
|
||||||
|
|||||||
@@ -3,10 +3,10 @@
|
|||||||
* @file coop_yield.c
|
* @file coop_yield.c
|
||||||
* @brief 协作_禅让任务
|
* @brief 协作_禅让任务
|
||||||
* @details 通过禅让任务,实现任务的循环协作。
|
* @details 通过禅让任务,实现任务的循环协作。
|
||||||
* @note 适用于多个相同优先级任务的循环协作,依赖时间片轮转调度算法。
|
* @note 适用于多个相同优先级任务的循环协作。
|
||||||
* @author 迟凯峰
|
* @author 迟凯峰
|
||||||
* @version V1.0.0
|
* @version V1.0.1
|
||||||
* @date 2025.10.21
|
* @date 2026.07.31
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
/*--------------------------------*
|
/*--------------------------------*
|
||||||
@@ -17,12 +17,12 @@
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
注意事项:
|
注意事项:
|
||||||
1、需开启相同优先级任务的时间片轮转调度。
|
1、需开启相同优先级任务的协作式调度或时间片轮转调度。
|
||||||
2、每个任务的运行时间,都必须小于时间片时间。
|
2、如果是时间片轮转调度,每个任务的运行时间,都必须小于时间片时间。
|
||||||
3、任务的启动顺序,决定了任务的协作运行顺序。
|
3、任务的启动顺序,决定了任务的协作运行顺序。
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#if 1 /* 编译开关 */
|
#if 0 /* 编译开关 */
|
||||||
|
|
||||||
#include "CosyOS.H"
|
#include "CosyOS.H"
|
||||||
|
|
||||||
|
|||||||
@@ -12,10 +12,10 @@
|
|||||||
* @note 本例程仅以 STM32-HAL库 的应用为例,其它情形请用户自行做出调整。
|
* @note 本例程仅以 STM32-HAL库 的应用为例,其它情形请用户自行做出调整。
|
||||||
* @author 迟凯峰
|
* @author 迟凯峰
|
||||||
* @version V1.0.1
|
* @version V1.0.1
|
||||||
* @date 2026.02.19
|
* @date 2026.07.31
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
#if 1 /* 编译开关 */
|
#if 0 /* 编译开关 */
|
||||||
|
|
||||||
|
|
||||||
#define PENDSV_FIFO_FLAG 2 // 定时服务为中断挂起服务,选择 FIFO服务 或 FLAG服务(1:FIFO服务,2:FLAG服务)
|
#define PENDSV_FIFO_FLAG 2 // 定时服务为中断挂起服务,选择 FIFO服务 或 FLAG服务(1:FIFO服务,2:FLAG服务)
|
||||||
|
|||||||
@@ -186,7 +186,7 @@
|
|||||||
same "printed page" as the copyright notice for easier
|
same "printed page" as the copyright notice for easier
|
||||||
identification within third-party archives.
|
identification within third-party archives.
|
||||||
|
|
||||||
Copyright [yyyy] [name of copyright owner]
|
Copyright [2026] [CosyOS]
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,125 +0,0 @@
|
|||||||
/**************************************************************************//**
|
|
||||||
* @item CosyOS-III Port
|
|
||||||
* @file port_cmx.c
|
|
||||||
* @brief CMSIS Cortex-M Core Port File
|
|
||||||
* @author 迟凯峰
|
|
||||||
* @version V2.3.1
|
|
||||||
* @date 2026.03.01
|
|
||||||
******************************************************************************/
|
|
||||||
|
|
||||||
#include "os_var.h"
|
|
||||||
#ifdef __PORT_CMX_H
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* 中断FIFO服务
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if (MCUCFG_PENDSVFIFO_DEPTH > 0)
|
|
||||||
|
|
||||||
#if (SYSCFG_PENDSVFIFO_MONITOR == __ENABLED__)
|
|
||||||
s_u32_t mPendSV_FIFO_DepthMAX = 0;
|
|
||||||
s_u16_t mPendSV_FIFO_CountMAX = 0;
|
|
||||||
#endif
|
|
||||||
void *mPendSV_FIFO_0[MCUCFG_PENDSVFIFO_DEPTH + 1]; /*!< FIFO0 */
|
|
||||||
void *mPendSV_FIFO_1[MCUCFG_PENDSVFIFO_DEPTH + 1]; /*!< FIFO1 */
|
|
||||||
volatile bool m_sign_fifo = true; /*!< FIFO互斥访问锁:入FIFO与出FIFO的互斥
|
|
||||||
if(m_sign_fifo == true) {中断FIFO服务装载器入FIFO0,中断FIFO服务处理器出FIFO1}
|
|
||||||
if(m_sign_fifo == false){中断FIFO服务装载器入FIFO1,中断FIFO服务处理器出FIFO0} */
|
|
||||||
#if (MCUCFG_PENDSVFIFO_MUTEX == 2) /*!< 互斥访问机制一 */
|
|
||||||
void *mPendSV_FIFO_X; /*!< FIFO替身计数器 */
|
|
||||||
#elif (MCUCFG_PENDSVFIFO_MUTEX == 3) /*!< 互斥访问机制二 */
|
|
||||||
volatile bool m0_sign_mutex = false; /*!< FIFO计数器访问 */
|
|
||||||
s_u8_t M0_IRQn_Pri[48]; /*!< 中断优先级表 */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* 中断FIFO服务处理器 */
|
|
||||||
void mPendSV_FIFOHandler(void)
|
|
||||||
{
|
|
||||||
register void **p;
|
|
||||||
register void *sv;
|
|
||||||
register s_u32_t i;
|
|
||||||
register s_u16_t j = 0;
|
|
||||||
|
|
||||||
__FIFO_0:
|
|
||||||
p = mPendSV_FIFO_0;
|
|
||||||
/* 独占访问FIFO0 */
|
|
||||||
m_sign_fifo = false;
|
|
||||||
if(true){
|
|
||||||
i = (s_u32_t)mPendSV_FIFO_0[0];
|
|
||||||
#if (MCUCFG_PENDSVFIFO_MUTEX == 3)
|
|
||||||
i >>= 24;
|
|
||||||
#endif
|
|
||||||
mPendSV_FIFO_0[0] = OS_NULL;
|
|
||||||
#if (SYSCFG_PENDSVFIFO_MONITOR == __ENABLED__)
|
|
||||||
if(i > mPendSV_FIFO_DepthMAX){
|
|
||||||
mPendSV_FIFO_DepthMAX = i;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
if(i > MCUCFG_PENDSVFIFO_DEPTH){
|
|
||||||
i = MCUCFG_PENDSVFIFO_DEPTH;
|
|
||||||
#if (SYSCFG_PENDSVFIFO_MONITOR == __ENABLED__)
|
|
||||||
s_fault.overflow_pendsvfifo = true;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
j += i;
|
|
||||||
do{
|
|
||||||
sv = *++p;
|
|
||||||
#if (MCUCFG_PENDSVFIFO_MUTEX <= 1)
|
|
||||||
(*sPendSV_FIFOHandler[*(const s_u8_t *)sv])(sv);
|
|
||||||
#else
|
|
||||||
if(sv != OS_NULL){
|
|
||||||
*p = OS_NULL;
|
|
||||||
(*sPendSV_FIFOHandler[*(const s_u8_t *)sv])(sv);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}while(--i);
|
|
||||||
}
|
|
||||||
|
|
||||||
OS_NOP(1);
|
|
||||||
|
|
||||||
p = mPendSV_FIFO_1;
|
|
||||||
/* 独占访问FIFO1 */
|
|
||||||
m_sign_fifo = true;
|
|
||||||
if(mPendSV_FIFO_1[0]){
|
|
||||||
i = (s_u32_t)mPendSV_FIFO_1[0];
|
|
||||||
#if (MCUCFG_PENDSVFIFO_MUTEX == 3)
|
|
||||||
i >>= 24;
|
|
||||||
#endif
|
|
||||||
mPendSV_FIFO_1[0] = OS_NULL;
|
|
||||||
#if (SYSCFG_PENDSVFIFO_MONITOR == __ENABLED__)
|
|
||||||
if(i > mPendSV_FIFO_DepthMAX){
|
|
||||||
mPendSV_FIFO_DepthMAX = i;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
if(i > MCUCFG_PENDSVFIFO_DEPTH){
|
|
||||||
i = MCUCFG_PENDSVFIFO_DEPTH;
|
|
||||||
#if (SYSCFG_PENDSVFIFO_MONITOR == __ENABLED__)
|
|
||||||
s_fault.overflow_pendsvfifo = true;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
j += i;
|
|
||||||
do{
|
|
||||||
sv = *++p;
|
|
||||||
#if (MCUCFG_PENDSVFIFO_MUTEX <= 1)
|
|
||||||
(*sPendSV_FIFOHandler[*(const s_u8_t *)sv])(sv);
|
|
||||||
#else
|
|
||||||
if(sv != OS_NULL){
|
|
||||||
*p = OS_NULL;
|
|
||||||
(*sPendSV_FIFOHandler[*(const s_u8_t *)sv])(sv);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}while(--i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(mPendSV_FIFO_0[0] && j < MCUCFG_PENDSVFIFO_COUNT) goto __FIFO_0;
|
|
||||||
#if (SYSCFG_PENDSVFIFO_MONITOR == __ENABLED__)
|
|
||||||
if(mPendSV_FIFO_CountMAX < j) mPendSV_FIFO_CountMAX = j;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -3,8 +3,8 @@
|
|||||||
* @file port_cmx_iar.s
|
* @file port_cmx_iar.s
|
||||||
* @brief CMSIS Cortex-M Core Port File for IAR Compiler
|
* @brief CMSIS Cortex-M Core Port File for IAR Compiler
|
||||||
* @author 迟凯峰
|
* @author 迟凯峰
|
||||||
* @version V2.3.1
|
* @version v3.0.0
|
||||||
* @date 2026.03.01
|
* @date 2026.07.21
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
用户须知
|
用户须知
|
||||||
@@ -41,7 +41,6 @@ OS_PendSV_Handler:
|
|||||||
bl sPendSV_Handler
|
bl sPendSV_Handler
|
||||||
; 直接返回吗?
|
; 直接返回吗?
|
||||||
cbz r0, __RETURN
|
cbz r0, __RETURN
|
||||||
isb
|
|
||||||
; 保护现场吗?
|
; 保护现场吗?
|
||||||
ldr r1, =s_task_current
|
ldr r1, =s_task_current
|
||||||
IF (SYSCFG_DEBUGGING == 1)
|
IF (SYSCFG_DEBUGGING == 1)
|
||||||
@@ -49,24 +48,22 @@ OS_PendSV_Handler:
|
|||||||
cbz r0, __RESTORE
|
cbz r0, __RESTORE
|
||||||
ENDIF
|
ENDIF
|
||||||
mrs r0, psp
|
mrs r0, psp
|
||||||
|
isb
|
||||||
; 任务PC监控
|
; 任务PC监控
|
||||||
IF (SYSCFG_TASKPC_MONITOR == 1)
|
IF (SYSCFG_TASKPC_MONITOR == 1)
|
||||||
EXTERN s_taskmgr_sign
|
|
||||||
EXTERN s_pc
|
EXTERN s_pc
|
||||||
ldr r2, =s_taskmgr_sign
|
|
||||||
ldrb r2, [r2]
|
|
||||||
cbz r2, __PROTECTING
|
|
||||||
ldr r2, [r0,#24]
|
ldr r2, [r0,#24]
|
||||||
ldr r3, =s_pc
|
ldr r3, =s_pc
|
||||||
str r2, [r3]
|
str r2, [r3]
|
||||||
ENDIF
|
ENDIF
|
||||||
; 保护现场
|
; 保护现场
|
||||||
__PROTECTING IF (MCUCFG_ASPEN_LSPEN == 1)
|
IF (MCUCFG_ASPEN_LSPEN == 1)
|
||||||
vstmdb r0!, {s16-s31}
|
vstmdb r0!, {s16-s31}
|
||||||
ENDIF
|
ENDIF
|
||||||
stmdb r0!, {r4-r11}
|
stmdb r0!, {r4-r11}
|
||||||
ldr r2, [r1]
|
ldr r2, [r1]
|
||||||
str r0, [r2]
|
str r0, [r2]
|
||||||
|
dsb
|
||||||
; 恢复现场
|
; 恢复现场
|
||||||
__RESTORE ldr r3, =s_task_news
|
__RESTORE ldr r3, =s_task_news
|
||||||
ldr r3, [r3]
|
ldr r3, [r3]
|
||||||
@@ -84,22 +81,29 @@ __RETURN pop {pc}
|
|||||||
|
|
||||||
; 中断FIFO服务装载器
|
; 中断FIFO服务装载器
|
||||||
|
|
||||||
IF (MCUCFG_PENDSVFIFO_DEPTH > 0)
|
IF (SYSCFG_PENDSVFIFO_DEPTH > 0)
|
||||||
|
|
||||||
PUBLIC mPendSV_FIFOLoader
|
PUBLIC mPendSV_FIFOLoader
|
||||||
mPendSV_FIFOLoader:
|
mPendSV_FIFOLoader:
|
||||||
EXTERN mPendSV_FIFO_0
|
EXTERN mPendSV_FIFO_0
|
||||||
EXTERN mPendSV_FIFO_1
|
EXTERN mPendSV_FIFO_1
|
||||||
EXTERN m_sign_fifo
|
EXTERN m_fifo_lock
|
||||||
; FIFO选择
|
; FIFO选择
|
||||||
ldr r2, =m_sign_fifo
|
ldr r2, =m_fifo_lock
|
||||||
ldrb r3, [r2]
|
ldrb r3, [r2]
|
||||||
cbz r3, __FIFO1
|
cbz r3, __FIFO1
|
||||||
__FIFO0 ldr r1, =mPendSV_FIFO_0
|
__FIFO0 ldr r1, =mPendSV_FIFO_0
|
||||||
b __COUNT
|
b __OVERFLOW1
|
||||||
__FIFO1 ldr r1, =mPendSV_FIFO_1
|
__FIFO1 ldr r1, =mPendSV_FIFO_1
|
||||||
|
; 计数溢出
|
||||||
|
__OVERFLOW1 IF (0) ; 正常情况下计数器难以溢出,默认关闭防护以提高装载效率。
|
||||||
|
ldr r2, [r1]
|
||||||
|
ldr r3, =0x80000000
|
||||||
|
cmp r2, r3
|
||||||
|
bhi __OVER
|
||||||
|
ENDIF
|
||||||
; FIFO计数
|
; FIFO计数
|
||||||
__COUNT /* 1、互斥访问指令 */
|
/* 互斥访问指令 */
|
||||||
#if (MCUCFG_PENDSVFIFO_MUTEX == 1)
|
#if (MCUCFG_PENDSVFIFO_MUTEX == 1)
|
||||||
__LOOP ldrex r2, [r1]
|
__LOOP ldrex r2, [r1]
|
||||||
adds r2, #1
|
adds r2, #1
|
||||||
@@ -110,7 +114,7 @@ __LOOP ldrex r2, [r1]
|
|||||||
#error 互斥访问方案 未选择 互斥访问指令!
|
#error 互斥访问方案 未选择 互斥访问指令!
|
||||||
#endif
|
#endif
|
||||||
; FIFO溢出
|
; FIFO溢出
|
||||||
cmp r2, #MCUCFG_PENDSVFIFO_DEPTH
|
cmp r2, #SYSCFG_PENDSVFIFO_DEPTH
|
||||||
bhi __OVER
|
bhi __OVER
|
||||||
; FIFO装载
|
; FIFO装载
|
||||||
lsls r2, r2, #2
|
lsls r2, r2, #2
|
||||||
@@ -3,8 +3,8 @@
|
|||||||
* @file mcucfg_cm0.h
|
* @file mcucfg_cm0.h
|
||||||
* @brief CMSIS Cortex-M Core Config File
|
* @brief CMSIS Cortex-M Core Config File
|
||||||
* @author 迟凯峰
|
* @author 迟凯峰
|
||||||
* @version V2.0.0
|
* @version v3.0.0
|
||||||
* @date 2025.08.04
|
* @date 2026.08.15
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
#ifndef __MCUCFG_CM0_H
|
#ifndef __MCUCFG_CM0_H
|
||||||
@@ -62,11 +62,11 @@
|
|||||||
|
|
||||||
// 替代定时器-重装载值
|
// 替代定时器-重装载值
|
||||||
// 如果该值为常量可配置为常量,否则应配置为可读的重装载值寄存器。
|
// 如果该值为常量可配置为常量,否则应配置为可读的重装载值寄存器。
|
||||||
#define MCUCFG_SYSTICK_LOADVALUE (SYSCFG_SYSTICK_CYCLE - 1) //=(TIM14->ARR)
|
#define MCUCFG_SYSTICK_LOADVALUE (SYSCFG_SYSTICK_CYCLE - 1) // = (TIM14->ARR)
|
||||||
|
|
||||||
// 替代定时器-时钟
|
// 替代定时器-时钟
|
||||||
// 告知CosyOS您所配置的定时器时钟,单位为兆赫(MHZ)。
|
// 告知CosyOS您所配置的定时器时钟,单位为兆赫(MHZ)。
|
||||||
#define MCUCFG_SYSTICK_CLK 1 //=(系统时钟 / (TIM14->PSC + 1))
|
#define MCUCFG_SYSTICK_CLK 1 // = (系统时钟 / (TIM14->PSC + 1))
|
||||||
|
|
||||||
//////////////////////////////////* 系统定义 *//////////////////////////////////
|
//////////////////////////////////* 系统定义 *//////////////////////////////////
|
||||||
|
|
||||||
@@ -3,8 +3,8 @@
|
|||||||
* @file mcucfg_cm3.h
|
* @file mcucfg_cm3.h
|
||||||
* @brief CMSIS Cortex-M Core Config File
|
* @brief CMSIS Cortex-M Core Config File
|
||||||
* @author 迟凯峰
|
* @author 迟凯峰
|
||||||
* @version V2.0.0
|
* @version v3.0.0
|
||||||
* @date 2025.08.04
|
* @date 2026.08.15
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
#ifndef __MCUCFG_CM3_H
|
#ifndef __MCUCFG_CM3_H
|
||||||
@@ -69,7 +69,7 @@
|
|||||||
|
|
||||||
// 系统滴答-时钟
|
// 系统滴答-时钟
|
||||||
// 告知CosyOS您所配置的系统滴答时钟,单位为兆赫(MHZ)。
|
// 告知CosyOS您所配置的系统滴答时钟,单位为兆赫(MHZ)。
|
||||||
#define MCUCFG_SYSTICK_CLK (系统时钟 / ((SysTick->CTRL & 4) ? 1 : 8))
|
#define MCUCFG_SYSTICK_CLK 168 // = (系统时钟 / ((SysTick->CTRL & 4) ? 1 : 8))
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -3,8 +3,8 @@
|
|||||||
* @file mcucfg_cmx.h
|
* @file mcucfg_cmx.h
|
||||||
* @brief CMSIS Cortex-M Core Config File
|
* @brief CMSIS Cortex-M Core Config File
|
||||||
* @author 迟凯峰
|
* @author 迟凯峰
|
||||||
* @version V2.3.1
|
* @version v3.0.0
|
||||||
* @date 2026.03.01
|
* @date 2026.07.21
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
#ifndef __MCUCFG_CMX_H
|
#ifndef __MCUCFG_CMX_H
|
||||||
@@ -33,12 +33,12 @@
|
|||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
// <o> 中断FIFO服务装载器-互斥访问方案
|
// <o> 中断FIFO服务装载器-互斥访问方案
|
||||||
// <1=> 互斥访问指令 <2=> 互斥访问机制一 <3=> 互斥访问机制二 <0=> 关闭总中断
|
// <1=> 互斥访问指令 <255=> 互斥访问机制 <0=> 关闭总中断
|
||||||
// <i> ------------------------------------------------------------------------
|
// <i> ------------------------------------------------------------------------
|
||||||
// <i> 一、互斥访问指令
|
// <i> 互斥访问指令
|
||||||
// <i> 仅适用于Cortex-M3/M4/M7等支持互斥访问指令[LDREX/STREX]的内核,可实现全局不关总中断、零中断延迟。
|
// <i> 仅适用于Cortex-M3/M4/M7等支持互斥访问指令[LDREX/STREX]的内核,可实现全局不关总中断、零中断延迟。
|
||||||
// <i> ------------------------------------------------------------------------
|
// <i> ------------------------------------------------------------------------
|
||||||
// <i> 二、互斥访问机制一
|
// <i> 互斥访问机制
|
||||||
// <i> 仅推荐于Cortex-M0/M0+等不支持互斥访问指令[LDREX/STREX]的内核,可实现全局不关总中断、零中断延迟。
|
// <i> 仅推荐于Cortex-M0/M0+等不支持互斥访问指令[LDREX/STREX]的内核,可实现全局不关总中断、零中断延迟。
|
||||||
// <i> 全局寄存器变量
|
// <i> 全局寄存器变量
|
||||||
// <i> 首先需要定义一个全局寄存器变量(系统默认定义为r6),专用于互斥访问:
|
// <i> 首先需要定义一个全局寄存器变量(系统默认定义为r6),专用于互斥访问:
|
||||||
@@ -55,46 +55,20 @@
|
|||||||
// <i> 注:中断优先级号为负值的中断通常仅包括 Reset_Handler、NMI_Handler、HardFault_Handler。
|
// <i> 注:中断优先级号为负值的中断通常仅包括 Reset_Handler、NMI_Handler、HardFault_Handler。
|
||||||
// <i> 用户需严格遵守上述的服务调用规约,否则可能会对系统可靠性造成不利影响。
|
// <i> 用户需严格遵守上述的服务调用规约,否则可能会对系统可靠性造成不利影响。
|
||||||
// <i> ------------------------------------------------------------------------
|
// <i> ------------------------------------------------------------------------
|
||||||
// <i> 三、互斥访问机制二
|
// <i> 关闭总中断
|
||||||
// <i> 仅推荐于Cortex-M0/M0+等不支持互斥访问指令[LDREX/STREX]的内核,可实现全局不关总中断、零中断延迟。
|
|
||||||
// <i> 服务调用规约
|
|
||||||
// <i> 仅允许用户在中断优先级号:0、1、2、3 的用户中断中调用【中断FIFO服务】。
|
|
||||||
// <i> 中断优先级号:负值的用户中断中不允许调用【中断FIFO服务】。
|
|
||||||
// <i> 注:中断优先级号为负值的中断通常仅包括 Reset_Handler、NMI_Handler、HardFault_Handler。
|
|
||||||
// <i> 这基本上已经相当于没有服务调用规约的限制。
|
|
||||||
// <i> ------------------------------------------------------------------------
|
|
||||||
// <i> 零、关闭总中断
|
|
||||||
// <i> 适用于所有ARM内核,并具有极短的、确定的关闭总中断时间,包括关闭总中断、再次开启总中断在内,
|
// <i> 适用于所有ARM内核,并具有极短的、确定的关闭总中断时间,包括关闭总中断、再次开启总中断在内,
|
||||||
// <i> 共10个指令周期(嵌套方式);如果是非嵌套方式,仅为7个指令周期。
|
// <i> 共10个指令周期(嵌套方式);如果是非嵌套方式,仅为7个指令周期。
|
||||||
// <i> 内核关闭总中断仅发生在 port_cmx_s.c 中,“中断FIFO服务装载器” 中的 “__COUNT” 段。
|
// <i> 内核关闭总中断仅发生在 port_cmx_s.c 中,“中断FIFO服务装载器” 中的 “FIFO计数” 段。
|
||||||
// <i> ------------------------------------------------------------------------
|
// <i> ------------------------------------------------------------------------
|
||||||
// <i> 配置技巧:
|
// <i> 配置技巧:
|
||||||
// <i> 用户可优先选择 “互斥访问指令” 编译尝试,如果内核不支持该指令,编译器会给出明确提示,此时再更换其它方案。
|
// <i> 用户可优先选择 “互斥访问指令” 编译尝试,如果内核不支持该指令,编译器会给出明确提示,此时再更换其它方案。
|
||||||
// <i> 在中断FIFO服务的装载效率上,“互斥访问机制一” 要比 “互斥访问机制二” 高效许多,但缺点是服务调用规约的限制较大。
|
|
||||||
#define MCUCFG_PENDSVFIFO_MUTEX 1
|
#define MCUCFG_PENDSVFIFO_MUTEX 1
|
||||||
|
|
||||||
// <q> 关闭总中断-嵌套方式
|
// <q> 关闭总中断-嵌套方式
|
||||||
// <i> 当“中断FIFO服务装载器-互斥访问方案”选择关闭总中断时,是否采用嵌套方式?
|
// <i> 当“中断FIFO服务装载器-互斥访问方案”选择关闭总中断时,是否采用嵌套方式?
|
||||||
// <i> 如果用户在中断中使用了中断锁(xDisableIRQ/xResumeIRQ)或自行关闭总中断(操作PRIMASK),推荐采用嵌套方式。
|
// <i> 如果用户在中断中使用了中断锁(xDisableIRQ/xResumeIRQ)或自行关闭总中断(操作PRIMASK),推荐采用嵌套方式。
|
||||||
// <i> 否则可关闭嵌套方式,缩短内核关闭总中断时间(将缩短至7个指令周期)。
|
// <i> 否则可关闭嵌套方式,缩短内核关闭总中断时间(将缩短至7个指令周期)。
|
||||||
#define MCUCFG_PENDSVFIFO_MUTEX0 1
|
#define MCUCFG_PENDSVFIFO_XXXXX 1
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
|
||||||
// <o> PendSV_FIFO深度
|
|
||||||
// <i> 此项参数取决于您在中断中调用的FIFO服务的总数及中断的频率。
|
|
||||||
// <i> 对于Cortex-M来说,PendSV_FIFO的最大深度可为255。
|
|
||||||
// <i> 可开启PendSV_FIFO监控功能,监控历史上的最大值,再适当增大,以确保其不会溢出。
|
|
||||||
#define MCUCFG_PENDSVFIFO_DEPTH 32
|
|
||||||
|
|
||||||
// <o> 中断FIFO服务处理器-最大并发执行数
|
|
||||||
// <i> 中断FIFO服务处理器在一次运行中,允许执行服务的最大数量。
|
|
||||||
// <i> 如果超出这个数值,中断FIFO服务处理器将主动退出运行,而后继续执行任务调度/切换。
|
|
||||||
// <i> 该功能可防止因中断FIFO服务的多阶段持续并发而导致的中断FIFO服务处理器死锁(永远有执行不完的服务),
|
|
||||||
// <i> 并最终导致任务不能调度运行。
|
|
||||||
// <i> 该值通常建议在“PendSV_FIFO深度值的2~10倍之间”选取,不建议过大或过小。
|
|
||||||
// <i> 可开启PendSV_FIFO监控功能,监控“实际并发执行数”在历史上的最大值,如果过大说明设计存在不合理因素,
|
|
||||||
// <i> 应设法予以解决。
|
|
||||||
#define MCUCFG_PENDSVFIFO_COUNT 256
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
// <q> 浮点寄存器上下文自动保存
|
// <q> 浮点寄存器上下文自动保存
|
||||||
@@ -108,15 +82,4 @@
|
|||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
#if (MCUCFG_PENDSVFIFO_DEPTH > 255)
|
|
||||||
#error PendSV_FIFO深度溢出!
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define MCUCFG_OSZEROINSTALL 0
|
|
||||||
#define mSysTick_Clear()
|
|
||||||
#define mUserReg_SAVEc()
|
|
||||||
#define mUserReg_RESc()
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
/**************************************************************************//**
|
||||||
|
* @item CosyOS-III Port
|
||||||
|
* @file port_cmx.c
|
||||||
|
* @brief CMSIS Cortex-M Core Port File
|
||||||
|
* @author 迟凯峰
|
||||||
|
* @version v3.0.0
|
||||||
|
* @date 2026.07.21
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
#include "os_var.h"
|
||||||
|
#ifdef __PORT_CMX_H
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 栈监控(主栈)
|
||||||
|
*/
|
||||||
|
#if (SYSCFG_DEBUGGING == __ENABLED__)
|
||||||
|
s_u32_t m_msp; // main stack initial pointer
|
||||||
|
s_u32_t m_stacksize; // main stack size
|
||||||
|
s_u32_t m_stacklen_max = 0; // main stack used length of maximum
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 中断FIFO服务
|
||||||
|
*/
|
||||||
|
#if (SYSCFG_PENDSVFIFO_DEPTH > 0) && (MCUCFG_PENDSVFIFO_MUTEX == 0xFF)
|
||||||
|
void *mPendSV_FIFO_X; // 互斥访问机制.FIFO替身计数器
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,107 @@
|
|||||||
|
/**************************************************************************//**
|
||||||
|
* @item CosyOS-III Config
|
||||||
|
* @file mcucfg_rv32.h
|
||||||
|
* @brief RISC-V32 Core Config File
|
||||||
|
* @author 迟凯峰
|
||||||
|
* @version v3.0.7
|
||||||
|
* @date 2026.08.15
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
#ifndef __MCUCFG_RV32_H
|
||||||
|
#define __MCUCFG_RV32_H
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// 中断FIFO服务装载器-互斥访问方案
|
||||||
|
// <1=> [lr][sc]指令 <2=> [amoadd]指令 <255=> 互斥访问机制 <0=> 关闭总中断(嵌套方式)
|
||||||
|
// <i> ------------------------------------------------------------------------
|
||||||
|
// [lr][sc]指令
|
||||||
|
// 可实现全局不关总中断、零中断延迟。
|
||||||
|
// 值得留意的是,青稞 V3A/V4 系列微处理器,对该指令进行了弱化处理,仅作为 lw,sw
|
||||||
|
// 执行,不再具有独占访问能力,所以不要使用。
|
||||||
|
// <i> ------------------------------------------------------------------------
|
||||||
|
// [amoadd]指令
|
||||||
|
// 可实现全局不关总中断、零中断延迟。
|
||||||
|
// 该指令执行周期可能会稍长且不确定。
|
||||||
|
// <i> ------------------------------------------------------------------------
|
||||||
|
// 互斥访问机制
|
||||||
|
// 可实现全局不关总中断、零中断延迟。
|
||||||
|
// 适用于不支持上述原子访问指令的情况,如青稞 V2 系列。
|
||||||
|
// x4(tp)、mscratch 专用于该机制下中断FIFO服务的互斥装载,用户不要使用。
|
||||||
|
// 青稞 V3/V4 系列,如果启用硬件压栈(port_rv32i_HWS.S),也会用到这两个寄存器,
|
||||||
|
// 会与互斥访问机制相冲突。
|
||||||
|
// <i> ------------------------------------------------------------------------
|
||||||
|
// 关闭总中断(嵌套方式)
|
||||||
|
// 适用于不支持上述原子访问指令的情况,如青稞 V2 系列。
|
||||||
|
// 由于在关闭总中断之后必须使用 fence.i 指令同步隔离,所以关闭总中断时间暂不确定。
|
||||||
|
#define MCUCFG_PENDSVFIFO_MUTEX 2
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// 浮点寄存器上下文自动保存
|
||||||
|
// <0=> 不保存 <1=> 保存
|
||||||
|
// 是否启用浮点寄存器的上下文自动保存功能?
|
||||||
|
// 如果存在并且启用了硬件浮点单元,同时在多个任务中都要进行浮点运算,可考虑开启该选项。
|
||||||
|
#define MCUCFG_FPU_AUTOSTORE 0
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
/* 系统滴答-配置方式 */
|
||||||
|
// <0=> 手动配置 <1=> 自动配置
|
||||||
|
// 手动配置:您需自行手动配置和系统滴答有关的一切事宜;
|
||||||
|
// 例外的是,滴答中断优先级将由CosyOS自动配置为最低级。
|
||||||
|
// 自动配置:CosyOS会自动为您处理好一切事宜,开箱即用。
|
||||||
|
#define MCUCFG_SYSTICK_AUTOCONFIG 1
|
||||||
|
|
||||||
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
#if (MCUCFG_SYSTICK_AUTOCONFIG == 1)
|
||||||
|
/* 自动配置-额外配置 */
|
||||||
|
// 如果系统滴答配置方式为自动配置,需额外配置下方定义项。
|
||||||
|
|
||||||
|
// 系统时钟频率
|
||||||
|
// 告知CosyOS您所配置的系统时钟,单位为兆赫(MHZ)。
|
||||||
|
#define MCUCFG_SYSCLK 96
|
||||||
|
|
||||||
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
#else
|
||||||
|
/* 手动配置-额外配置 */
|
||||||
|
// 如果系统滴答配置方式为手动配置,用户仍需额外配置下方定义项,
|
||||||
|
// 用于 CosyOS-任务管理器 的CPU使用率统计、滴答时间统计等功能。
|
||||||
|
// 当然,如果您不打算使用 CosyOS-任务管理器,可不用配置。
|
||||||
|
// 默认配置仅为示例,给用户以参考和提示。
|
||||||
|
|
||||||
|
// 系统滴答-计数方式
|
||||||
|
// <1=> 从零向上计数至重装载值溢出 <2=> 从重装载值向下计数至零溢出
|
||||||
|
// <3=> 从重装载值向上计数至零溢出 <4=> 从零向下计数至重装载值溢出
|
||||||
|
// 告知CosyOS您所配置的定时器计数方式。
|
||||||
|
#define MCUCFG_SYSTICK_COUNTMODE 2
|
||||||
|
|
||||||
|
// 系统滴答-位数
|
||||||
|
// 如果定时器计数方式配置为3或4,应正确配置该定义。
|
||||||
|
#define MCUCFG_SYSTICK_BITS 32
|
||||||
|
|
||||||
|
// 系统滴答-当前值
|
||||||
|
// 应配置为可读的当前值寄存器。
|
||||||
|
#define MCUCFG_SYSTICK_CURRVALUE (*(volatile uint32_t *)0xE000F008)
|
||||||
|
|
||||||
|
// 系统滴答-重装载值
|
||||||
|
// 如果该值为常量可配置为常量,否则应配置为可读的重装载值寄存器。
|
||||||
|
#define MCUCFG_SYSTICK_LOADVALUE (*(volatile uint32_t *)0xE000F010)
|
||||||
|
|
||||||
|
// 系统滴答-时钟
|
||||||
|
// 告知CosyOS您所配置的系统滴答时钟,单位为兆赫(MHZ)。
|
||||||
|
#define MCUCFG_SYSTICK_CLK 96 // = (系统时钟 / (((*(volatile uint32_t *)0xE000F000) & 4) ? 1 : 8))
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//////////////////////////////////* 系统定义 *//////////////////////////////////
|
||||||
|
|
||||||
|
// 以下为系统定义,用户不可随意修改。
|
||||||
|
|
||||||
|
#define MCUCFG_REGBYTES 4
|
||||||
|
#define MCUCFG_FPUBYTES 4
|
||||||
|
#define MCUCFG_TIMn_IRQn 12
|
||||||
|
#define MCUCFG_XXXx_IRQn 14
|
||||||
|
#define OS_PendSV_Handler SW_Handler
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,174 @@
|
|||||||
|
/**************************************************************************//**
|
||||||
|
* @item CosyOS-III Port
|
||||||
|
* @file port_rv32.h
|
||||||
|
* @brief RISC-V32 Core Port File
|
||||||
|
* @author 迟凯峰
|
||||||
|
* @version v3.0.8
|
||||||
|
* @date 2026.08.15
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
#ifndef __PORT_RV32_H
|
||||||
|
#define __PORT_RV32_H
|
||||||
|
|
||||||
|
/* INCLUDE */
|
||||||
|
#include "port_x32.h"
|
||||||
|
#include "mcucfg_rv32.h"
|
||||||
|
#include SYSCFG_STANDARDHEAD
|
||||||
|
#include "os_cmsis.h"
|
||||||
|
#include "os_stack.h"
|
||||||
|
|
||||||
|
|
||||||
|
/* CONST & ATTRIBUTE */
|
||||||
|
#define MCUCFG_STACK_ALIGN __ALIGNED(16)
|
||||||
|
#define MCUCFG_TASKSTACK_REALLOC __DISABLED__
|
||||||
|
#if (MCUCFG_FPU_AUTOSTORE == __ENABLED__)
|
||||||
|
#define MCUCFG_PUSH_FPU (32 * MCUCFG_FPUBYTES)
|
||||||
|
#else
|
||||||
|
#define MCUCFG_PUSH_FPU 0
|
||||||
|
#endif
|
||||||
|
#if !defined ( __riscv_32e )
|
||||||
|
#define MCUCFG_PUSH_REG (32 * MCUCFG_REGBYTES)
|
||||||
|
#else
|
||||||
|
#define MCUCFG_PUSH_REG (16 * MCUCFG_REGBYTES)
|
||||||
|
#endif
|
||||||
|
#define MCUCFG_BASICSTACKSIZE (MCUCFG_PUSH_FPU + MCUCFG_PUSH_REG)
|
||||||
|
|
||||||
|
|
||||||
|
/* TaskCtrl */
|
||||||
|
#define mTaskCtrl_Head_ m_sp_t psp;
|
||||||
|
#define mTaskCtrl_Tail_ m_sp_t psp_top;
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* SysTick
|
||||||
|
*/
|
||||||
|
#if (MCUCFG_SYSTICK_AUTOCONFIG == __ENABLED__)
|
||||||
|
/* 自动配置 */
|
||||||
|
#define MCUCFG_SYSTICK_COUNTMODE 1 /*!< 计数方式,1:从零向上计数至重装载值溢出 */
|
||||||
|
#define MCUCFG_SYSTICK_LIMITVALUE (1UL << 32) /*!< 极限值 */
|
||||||
|
#define MCUCFG_SYSTICK_CURRVALUE *(volatile s_u32_t *)(0xE000F008) /*!< 当前值寄存器 */
|
||||||
|
#define MCUCFG_SYSTICK_CLK MCUCFG_SYSCLK
|
||||||
|
#define MCUCFG_SYSTICK_COUNT1CYC (SYSCFG_SYSTICK_CYCLE * MCUCFG_SYSTICK_CLK * 1UL)
|
||||||
|
#define MCUCFG_SYSTICK_LOADVALUE (MCUCFG_SYSTICK_COUNT1CYC - 1)
|
||||||
|
#define MCUCFG_SYSTICK_MAXVALUE MCUCFG_SYSTICK_LOADVALUE
|
||||||
|
#define MCUCFG_SYSTICK_MINVALUE 0
|
||||||
|
#if (MCUCFG_SYSTICK_COUNT1CYC > MCUCFG_SYSTICK_LIMITVALUE)
|
||||||
|
#error 系统滴答定时器溢出。
|
||||||
|
#endif
|
||||||
|
#define mSysTick_SetLOAD() *(volatile s_u32_t *)(0xE000F010) = MCUCFG_SYSTICK_LOADVALUE
|
||||||
|
#define mSysTick_SetCTRL() *(volatile s_u32_t *)(0xE000F000) = 0x2F
|
||||||
|
#define mSysTick_INIT() \
|
||||||
|
do{ \
|
||||||
|
mSysTick_SetPRI(); \
|
||||||
|
mSysTick_SetLOAD(); \
|
||||||
|
mSysTick_SetCTRL(); \
|
||||||
|
}while(false)
|
||||||
|
|
||||||
|
#else
|
||||||
|
/* 手动配置 */
|
||||||
|
#if (MCUCFG_SYSTICK_COUNTMODE == 1 || MCUCFG_SYSTICK_COUNTMODE == 2)
|
||||||
|
#define MCUCFG_SYSTICK_MAXVALUE (MCUCFG_SYSTICK_LOADVALUE)
|
||||||
|
#define MCUCFG_SYSTICK_MINVALUE 0
|
||||||
|
#define MCUCFG_SYSTICK_COUNT1CYC (MCUCFG_SYSTICK_LOADVALUE + 1UL)
|
||||||
|
|
||||||
|
#elif (MCUCFG_SYSTICK_COUNTMODE == 3 || MCUCFG_SYSTICK_COUNTMODE == 4)
|
||||||
|
#define MCUCFG_SYSTICK_LIMITVALUE (1UL << MCUCFG_SYSTICK_BITS)
|
||||||
|
#define MCUCFG_SYSTICK_MAXVALUE (MCUCFG_SYSTICK_LIMITVALUE)
|
||||||
|
#define MCUCFG_SYSTICK_MINVALUE (MCUCFG_SYSTICK_LOADVALUE)
|
||||||
|
#define MCUCFG_SYSTICK_COUNT1CYC (MCUCFG_SYSTICK_MAXVALUE - MCUCFG_SYSTICK_MINVALUE)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define mSysTick_INIT() mSysTick_SetPRI()
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* SysTick_Handler + PendSV_Handler
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* SysTick */
|
||||||
|
#define mSysTick_SetPRI() \
|
||||||
|
*(volatile s_u8_t *)(0xE000E400 + MCUCFG_TIMn_IRQn) = 0xFF
|
||||||
|
|
||||||
|
/* PendSV */
|
||||||
|
#define mPendSV_SetPRI() \
|
||||||
|
*(volatile s_u8_t *)(0xE000E400 + MCUCFG_XXXx_IRQn) = 0xFF
|
||||||
|
|
||||||
|
#define mPendSV_Set() \
|
||||||
|
*(volatile s_u32_t *)(0xE000E200 + MCUCFG_XXXx_IRQn / 32 * 4) = 0x01UL << (MCUCFG_XXXx_IRQn % 32)
|
||||||
|
|
||||||
|
#define mPendSV_Clear() \
|
||||||
|
*(volatile s_u32_t *)(0xE000E280 + MCUCFG_XXXx_IRQn / 32 * 4) = 0x01UL << (MCUCFG_XXXx_IRQn % 32)
|
||||||
|
|
||||||
|
#define mPendSV_INIT() mPendSV_SetPRI()
|
||||||
|
|
||||||
|
/* 内核锁 */
|
||||||
|
#define mSysINT_Disable() \
|
||||||
|
*(volatile s_u32_t *)(0xE000E180 + MCUCFG_XXXx_IRQn / 32 * 4) = (0x01UL << (MCUCFG_XXXx_IRQn % 32)) \
|
||||||
|
| (0x01UL << (MCUCFG_TIMn_IRQn % 32))
|
||||||
|
#define mSysINT_Enable() \
|
||||||
|
*(volatile s_u32_t *)(0xE000E100 + MCUCFG_XXXx_IRQn / 32 * 4) = (0x01UL << (MCUCFG_XXXx_IRQn % 32)) \
|
||||||
|
| (0x01UL << (MCUCFG_TIMn_IRQn % 32))
|
||||||
|
__STATIC_FORCEINLINE void __mu_disable_sysirq(void)
|
||||||
|
{
|
||||||
|
mSysINT_Disable();
|
||||||
|
__ASM("fence.i");
|
||||||
|
}
|
||||||
|
|
||||||
|
__STATIC_FORCEINLINE void __mu_enable_sysirq(void)
|
||||||
|
{
|
||||||
|
__ASM("fence rw, rw");
|
||||||
|
mSysINT_Enable();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* CosyOS初始化 */
|
||||||
|
#define mCosyOS_INIT() \
|
||||||
|
do{ \
|
||||||
|
mPendSV_INIT(); \
|
||||||
|
mSysTick_INIT(); \
|
||||||
|
}while(false)
|
||||||
|
|
||||||
|
|
||||||
|
/* CosyOS低功耗 */
|
||||||
|
#define mCosyOS_IDLE() __WFI()
|
||||||
|
|
||||||
|
|
||||||
|
/* 任务栈 */
|
||||||
|
#define MCUCFG_TASKSTACK_MODE __PSP__
|
||||||
|
|
||||||
|
#define mTaskStack_Init() \
|
||||||
|
do{ \
|
||||||
|
node_news->psp_top = (m_sp_t)node_news->bsp + node_news->stacksize; \
|
||||||
|
if(node_news->psp_top % 16){ \
|
||||||
|
node_news->psp_top /= 16; \
|
||||||
|
node_news->psp_top *= 16; \
|
||||||
|
node_news->stacksize = node_news->psp_top - (m_sp_t)node_news->bsp; \
|
||||||
|
} \
|
||||||
|
mTaskStack_CheckInit(); \
|
||||||
|
mTaskStack_Reset(); \
|
||||||
|
}while(false)
|
||||||
|
|
||||||
|
#define mTaskStack_Reset() \
|
||||||
|
do{ \
|
||||||
|
node_news->psp = node_news->psp_top; \
|
||||||
|
node_news->psp -= MCUCFG_BASICSTACKSIZE; \
|
||||||
|
*(volatile s_u32_t *)(node_news->psp + MCUCFG_PUSH_FPU) = (s_u32_t)node_news->entry; /* x0(mepc) */ \
|
||||||
|
}while(false)
|
||||||
|
|
||||||
|
/* 栈监控 */
|
||||||
|
#if (SYSCFG_DEBUGGING == __ENABLED__)
|
||||||
|
#define mTaskStack_Check0() s_task_current->psp_top - __get_SP() + MCUCFG_PUSH_FPU
|
||||||
|
#define mTaskStack_Check() s_stack_check((s_u8_t *)(s_task_current->psp_top), s_task_current->stacksize)
|
||||||
|
#define mTaskStack_CheckInit() s_stack_check_init((s_u8_t *)(node_news->psp_top), node_news->stacksize)
|
||||||
|
|
||||||
|
#else
|
||||||
|
#define mTaskStack_CheckInit()
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* 内存访问屏障 */
|
||||||
|
#define __mx_MMB() __ASM("fence rw, rw")
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,85 @@
|
|||||||
|
/**************************************************************************//**
|
||||||
|
* @item CosyOS-III Port
|
||||||
|
* @file port_rv32_FSL.S
|
||||||
|
* @brief RISC-V32 Core Port File for Interrupt FIFO Service Loading
|
||||||
|
* @author 迟凯峰
|
||||||
|
* @version v3.0.7
|
||||||
|
* @date 2026.08.14
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
#include "syscfg.h"
|
||||||
|
#include "mcucfg_rv32.h"
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#if (SYSCFG_PENDSVFIFO_DEPTH > 0)
|
||||||
|
|
||||||
|
/* 互斥访问机制 */
|
||||||
|
#if (MCUCFG_PENDSVFIFO_MUTEX == 0xFF)
|
||||||
|
.data
|
||||||
|
mPendSV_FIFO_X: .word 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* 中断FIFO服务装载器 */
|
||||||
|
.global mPendSV_FIFOLoader
|
||||||
|
.align 2
|
||||||
|
mPendSV_FIFOLoader:
|
||||||
|
|
||||||
|
/* FIFO选择 */
|
||||||
|
la a2, m_fifo_lock
|
||||||
|
lb a3, (a2)
|
||||||
|
beqz a3, 1f
|
||||||
|
la a1, mPendSV_FIFO_0
|
||||||
|
j 2f
|
||||||
|
1: la a1, mPendSV_FIFO_1
|
||||||
|
/* 计数溢出 */
|
||||||
|
2:
|
||||||
|
#if (0) // 正常情况下计数器难以溢出,默认关闭防护以提高装载效率。
|
||||||
|
lw a2, (a1)
|
||||||
|
li a3, 0x80000000
|
||||||
|
bltu a3, a2, 5f
|
||||||
|
#endif
|
||||||
|
/* FIFO计数 */
|
||||||
|
/* 关闭总中断(嵌套方式)*/
|
||||||
|
#if (MCUCFG_PENDSVFIFO_MUTEX == 0)
|
||||||
|
csrr a3, mstatus
|
||||||
|
csrc mstatus, 0x8
|
||||||
|
fence.i
|
||||||
|
lw a2, (a1)
|
||||||
|
addi a2, a2, 1
|
||||||
|
sw a2, (a1)
|
||||||
|
csrw mstatus, a3
|
||||||
|
/* [lr][sc]指令 */
|
||||||
|
#elif (MCUCFG_PENDSVFIFO_MUTEX == 1)
|
||||||
|
3: lr.w a2, (a1)
|
||||||
|
addi a2, a2, 1
|
||||||
|
sc.w a3, a2, (a1)
|
||||||
|
bnez a3, 3b
|
||||||
|
/* [amoadd]指令 */
|
||||||
|
#elif (MCUCFG_PENDSVFIFO_MUTEX == 2)
|
||||||
|
li a3, 1
|
||||||
|
amoadd.w a2, a3, (a1)
|
||||||
|
addi a2, a2, 1
|
||||||
|
/* 互斥访问机制 */
|
||||||
|
#elif (MCUCFG_PENDSVFIFO_MUTEX == 0xFF)
|
||||||
|
csrrwi a3, mscratch, 1
|
||||||
|
3: add tp, a1, zero
|
||||||
|
lw a2, (tp)
|
||||||
|
addi a2, a2, 1
|
||||||
|
sw a2, (tp)
|
||||||
|
bne tp, a1, 3b
|
||||||
|
csrw mscratch, a3
|
||||||
|
beqz a3, 4f
|
||||||
|
la tp, mPendSV_FIFO_X
|
||||||
|
#endif
|
||||||
|
/* FIFO溢出 */
|
||||||
|
4: li a3, SYSCFG_PENDSVFIFO_DEPTH
|
||||||
|
bltu a3, a2, 5f
|
||||||
|
/* FIFO装载 */
|
||||||
|
slli a2, a2, 2
|
||||||
|
add a1, a1, a2
|
||||||
|
sw a0, (a1)
|
||||||
|
|
||||||
|
5: ret
|
||||||
|
|
||||||
|
#endif
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,73 @@
|
|||||||
|
/**************************************************************************//**
|
||||||
|
* @item CosyOS-III Port
|
||||||
|
* @file port_rv32e_HWS.S
|
||||||
|
* @brief RV32E Core Port File for Hardware Stack
|
||||||
|
* @note 对处理器特权模式无要求。
|
||||||
|
* @note x4(tp)寄存器默认未保护,如需保护可自行开启。
|
||||||
|
* @author 迟凯峰
|
||||||
|
* @version v3.0.7
|
||||||
|
* @date 2026.08.14
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
#if defined ( __riscv_32e )
|
||||||
|
|
||||||
|
#include "syscfg.h"
|
||||||
|
#include "mcucfg_rv32.h"
|
||||||
|
#define store sw
|
||||||
|
#define load lw
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
/* PendSV 软中断 */
|
||||||
|
|
||||||
|
.global OS_PendSV_Handler
|
||||||
|
.align 2
|
||||||
|
OS_PendSV_Handler: // hardware push Caller
|
||||||
|
|
||||||
|
/* push Callee */
|
||||||
|
addi sp, sp, -4 * MCUCFG_REGBYTES
|
||||||
|
store x8, 1 * MCUCFG_REGBYTES(sp)
|
||||||
|
store x9, 2 * MCUCFG_REGBYTES(sp)
|
||||||
|
////store x4, 3 * MCUCFG_REGBYTES(sp) // default not store/load x4
|
||||||
|
|
||||||
|
call sPendSV_Handler
|
||||||
|
beqz a0, 2f // 直接返回
|
||||||
|
la s1, s_task_current
|
||||||
|
addi s0, a0, -1
|
||||||
|
beqz s0, 1f // 恢复现场
|
||||||
|
|
||||||
|
/* push mepc */
|
||||||
|
csrr a0, mepc
|
||||||
|
store a0, 0 * MCUCFG_REGBYTES(sp)
|
||||||
|
|
||||||
|
/* 任务-PC 监控 */
|
||||||
|
#if (SYSCFG_TASKPC_MONITOR == 1)
|
||||||
|
la a1, s_pc
|
||||||
|
sw a0, (a1)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
lw t0, (s1)
|
||||||
|
sw sp, (t0)
|
||||||
|
fence rw, rw
|
||||||
|
|
||||||
|
/* 恢复现场 */
|
||||||
|
1: la t1, s_task_news
|
||||||
|
lw t0, (t1)
|
||||||
|
lw sp, (t0)
|
||||||
|
sw t0, (s1)
|
||||||
|
|
||||||
|
/* pop mepc */
|
||||||
|
load a0, 0 * MCUCFG_REGBYTES(sp)
|
||||||
|
csrw mepc, a0
|
||||||
|
|
||||||
|
/* pop Callee */
|
||||||
|
2: load x8, 1 * MCUCFG_REGBYTES(sp)
|
||||||
|
load x9, 2 * MCUCFG_REGBYTES(sp)
|
||||||
|
////load x4, 3 * MCUCFG_REGBYTES(sp) // default not store/load x4
|
||||||
|
addi sp, sp, 4 * MCUCFG_REGBYTES
|
||||||
|
|
||||||
|
mret // hardware pop Caller
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#endif
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,90 @@
|
|||||||
|
/**************************************************************************//**
|
||||||
|
* @item CosyOS-III Port
|
||||||
|
* @file port_x32.c
|
||||||
|
* @brief 32 bits Micro-Controller Public Port File
|
||||||
|
* @author 迟凯峰
|
||||||
|
* @version v3.0.0
|
||||||
|
* @date 2026.07.21
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
#include "os_var.h"
|
||||||
|
#ifdef __PORT_X32_H
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 中断FIFO服务
|
||||||
|
*/
|
||||||
|
#if (SYSCFG_PENDSVFIFO_DEPTH > 0)
|
||||||
|
|
||||||
|
/**
|
||||||
|
\brief FIFO互斥访问锁
|
||||||
|
\details 入FIFO与出FIFO之间的互斥
|
||||||
|
\note if(锁) { 中断FIFO服务装载器入FIFO0,中断FIFO服务处理器出FIFO1 } <br>
|
||||||
|
else { 中断FIFO服务装载器入FIFO1,中断FIFO服务处理器出FIFO0 }
|
||||||
|
*/
|
||||||
|
bool volatile m_fifo_lock = true;
|
||||||
|
|
||||||
|
void *mPendSV_FIFO_0[SYSCFG_PENDSVFIFO_DEPTH + 1]; // FIFO0
|
||||||
|
void *mPendSV_FIFO_1[SYSCFG_PENDSVFIFO_DEPTH + 1]; // FIFO1
|
||||||
|
|
||||||
|
#if (SYSCFG_PENDSVFIFO_MONITOR == __ENABLED__)
|
||||||
|
s_u32_t mPendSV_FIFO_DepthMAX/**/sZeroInstall;
|
||||||
|
s_u16_t mPendSV_FIFO_CountMAX/**/sZeroInstall;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* 中断FIFO服务处理器 */
|
||||||
|
void mPendSV_FIFOHandler(void)
|
||||||
|
{
|
||||||
|
register s_u32_t i;
|
||||||
|
register s_u16_t j = 0;
|
||||||
|
register bool lock = 1;
|
||||||
|
register void ** p;
|
||||||
|
void ** const fifo[2] = {mPendSV_FIFO_0, mPendSV_FIFO_1};
|
||||||
|
|
||||||
|
while(true){
|
||||||
|
lock = !lock;
|
||||||
|
p = fifo[lock];
|
||||||
|
m_fifo_lock = lock;
|
||||||
|
__mx_MMB();
|
||||||
|
|
||||||
|
if(p[0]){
|
||||||
|
i = (s_u32_t)p[0];
|
||||||
|
p[0] = 0;
|
||||||
|
#if (SYSCFG_PENDSVFIFO_MONITOR == __ENABLED__)
|
||||||
|
if(i > mPendSV_FIFO_DepthMAX){
|
||||||
|
mPendSV_FIFO_DepthMAX = i;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
if(i > SYSCFG_PENDSVFIFO_DEPTH){
|
||||||
|
i = SYSCFG_PENDSVFIFO_DEPTH;
|
||||||
|
#if (SYSCFG_PENDSVFIFO_MONITOR == __ENABLED__)
|
||||||
|
s_fault.overflow_pendsvfifo = true;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
j += i;
|
||||||
|
do{
|
||||||
|
register void *sv = *++p;
|
||||||
|
#if (MCUCFG_PENDSVFIFO_MUTEX < 0x80)
|
||||||
|
(*sPendSV_FIFOHandler[*(s_u8_t const *)sv])(sv);
|
||||||
|
#else
|
||||||
|
if(sv != OS_NULL){
|
||||||
|
*p = OS_NULL;
|
||||||
|
(*sPendSV_FIFOHandler[*(s_u8_t const *)sv])(sv);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}while(--i);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(lock){
|
||||||
|
if(0 == mPendSV_FIFO_0[0]) break;
|
||||||
|
if(j >= SYSCFG_PENDSVFIFO_COUNT) break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#if (SYSCFG_PENDSVFIFO_MONITOR == __ENABLED__)
|
||||||
|
if(mPendSV_FIFO_CountMAX < j) mPendSV_FIFO_CountMAX = j;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,96 @@
|
|||||||
|
/**************************************************************************//**
|
||||||
|
* @item CosyOS-III Port
|
||||||
|
* @file port_x32.h
|
||||||
|
* @brief 32 bits Micro-Controller Public Port File
|
||||||
|
* @author 迟凯峰
|
||||||
|
* @version v3.0.0
|
||||||
|
* @date 2026.07.21
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
#ifndef __PORT_X32_H
|
||||||
|
#define __PORT_X32_H
|
||||||
|
|
||||||
|
/* INCLUDE */
|
||||||
|
#include "syscfg.h"
|
||||||
|
#include "os_def.h"
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
|
|
||||||
|
/* LAJI */
|
||||||
|
#define _SYS_REG_
|
||||||
|
#define _SYS_MEM_
|
||||||
|
#define _OBJ_MEM_
|
||||||
|
#define _RTC_MEM_
|
||||||
|
#define _QUE_MEM_
|
||||||
|
#define _CODE_MEM_
|
||||||
|
#define _CONST_MEM_
|
||||||
|
#define _STACK_MEM_
|
||||||
|
#define _XDATA_MEM_
|
||||||
|
#define _DEBUG_MEM_
|
||||||
|
#define _STATIC_MEM_
|
||||||
|
#define _MALLOC_MEM_
|
||||||
|
|
||||||
|
|
||||||
|
/* Typedef */
|
||||||
|
#define m_boolvoid_tf
|
||||||
|
typedef char s_s8_t;
|
||||||
|
typedef short s_s16_t;
|
||||||
|
typedef int s_s32_t;
|
||||||
|
typedef unsigned char s_u8_t;
|
||||||
|
typedef unsigned short s_u16_t;
|
||||||
|
typedef unsigned int s_u32_t;
|
||||||
|
typedef bool m_bit_t;
|
||||||
|
typedef s_u32_t m_sp_t;
|
||||||
|
typedef s_u32_t m_pc_t;
|
||||||
|
typedef s_u32_t m_tick_t;
|
||||||
|
typedef s_u32_t m_group_t;
|
||||||
|
typedef s_u32_t m_fetion_t;
|
||||||
|
typedef s_u32_t m_tqcount_t;
|
||||||
|
typedef s_u32_t m_rtccount_t;
|
||||||
|
typedef s_u32_t m_stacklen_t;
|
||||||
|
typedef s_u32_t m_stacksize_t;
|
||||||
|
|
||||||
|
|
||||||
|
/* CONST & ATTRIBUTE */
|
||||||
|
#define MCUCFG_PCLEN 4
|
||||||
|
#define MCUCFG_TASK_ATTRIBUTE
|
||||||
|
#define MCUCFG_OSIT_ATTRIBUTE
|
||||||
|
#define MCUCFG_SYSTICK_ATTRIBUTE
|
||||||
|
#define MCUCFG_TERNARY_MASK
|
||||||
|
|
||||||
|
|
||||||
|
/* 中断FIFO服务-声明 */
|
||||||
|
#if (SYSCFG_PENDSVFIFO_DEPTH > 0)
|
||||||
|
extern bool volatile m_fifo_lock;
|
||||||
|
extern s_u32_t mPendSV_FIFO_DepthMAX;
|
||||||
|
extern s_u16_t mPendSV_FIFO_CountMAX;
|
||||||
|
extern void *mPendSV_FIFO_0[SYSCFG_PENDSVFIFO_DEPTH + 1];
|
||||||
|
extern void *mPendSV_FIFO_1[SYSCFG_PENDSVFIFO_DEPTH + 1];
|
||||||
|
extern void mPendSV_FIFOLoader (void *sv);
|
||||||
|
extern void mPendSV_FIFOHandler(void);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* 中断FIFO服务-装载 */
|
||||||
|
#define mPendSV_FIFOLoad() \
|
||||||
|
do{ \
|
||||||
|
mPendSV_FIFOLoader(&u_psv); \
|
||||||
|
mPendSV_Set(); \
|
||||||
|
}while(false)
|
||||||
|
|
||||||
|
/* 中断FIFO服务-处理 */
|
||||||
|
#define mPendSV_FIFOHandle() \
|
||||||
|
if(mPendSV_FIFO_0[0]) mPendSV_FIFOHandler()
|
||||||
|
|
||||||
|
|
||||||
|
/* 事件标志组-中断中写多标志位 */
|
||||||
|
#define miWriteFlagBits() \
|
||||||
|
if(!u_psv.value){ \
|
||||||
|
do{}while(false)
|
||||||
|
|
||||||
|
|
||||||
|
/* 内核锁 */
|
||||||
|
#define mSysIRQ_Disable() __mu_disable_sysirq()
|
||||||
|
#define mSysIRQ_Enable() __mu_enable_sysirq()
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -3,8 +3,8 @@
|
|||||||
* @file mcucfg_80251.h
|
* @file mcucfg_80251.h
|
||||||
* @brief 80251 Core Config File
|
* @brief 80251 Core Config File
|
||||||
* @author 迟凯峰
|
* @author 迟凯峰
|
||||||
* @version V2.3.1
|
* @version v3.0.0
|
||||||
* @date 2026.03.01
|
* @date 2026.07.21
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
#ifndef __MCUCFG_80251_H
|
#ifndef __MCUCFG_80251_H
|
||||||
@@ -72,22 +72,26 @@
|
|||||||
|
|
||||||
// </h>
|
// </h>
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
// <o> PendSV_FIFO深度
|
// <o> 中断FIFO服务装载器-互斥访问方案
|
||||||
// <0=> 0级(不启用PendSV_FIFO)<8=> 8级 <16=> 16级 <24=> 24级 <32=> 32级 <40=> 40级
|
// <256=> [JBC]指令 <255=> [INC]指令 <0=> 关闭总中断
|
||||||
// <i> 此项参数取决于您在中断中调用挂起服务的总数及中断的频率。
|
// <i> ------------------------------------------------------------------------
|
||||||
// <i> 对于80251来说,PendSV_FIFO的最大深度为40,您应妥善处理中断中调用的挂起服务,避免不必要的调用。
|
// <i> [JBC]指令
|
||||||
// <i> 可开启PendSV_FIFO监控功能,监控历史上的最大值,再适当增大,以确保其不会溢出。
|
// <i> 适用于所有80251内核,可实现全局不关总中断、零中断延迟。
|
||||||
#define MCUCFG_PENDSVFIFO_DEPTH 32
|
// <i> 适用于FIFO服务持续并发量较小的情况。
|
||||||
|
// <i> PendSV_FIFO深度最大值:40
|
||||||
// <o> 中断FIFO服务处理器-最大并发执行数
|
// <i> ------------------------------------------------------------------------
|
||||||
// <i> 中断FIFO服务处理器在一次运行中,允许执行服务的最大数量。
|
// <i> [INC]指令
|
||||||
// <i> 如果超出这个数值,中断FIFO服务处理器将主动退出运行,而后继续执行任务调度/切换。
|
// <i> 适用于所有80251内核,可实现全局不关总中断、零中断延迟。
|
||||||
// <i> 该功能可防止因中断FIFO服务的多阶段持续并发而导致的中断FIFO服务处理器死锁(永远有执行不完的服务),
|
// <i> 适用于FIFO服务持续并发量较大的情况。
|
||||||
// <i> 并最终导致任务不能调度运行。
|
// <i> PendSV_FIFO深度最大值:127
|
||||||
// <i> 该值通常建议在“PendSV_FIFO深度值的2~10倍之间”选取,不建议过大或过小。
|
// <i> ------------------------------------------------------------------------
|
||||||
// <i> 可开启PendSV_FIFO监控功能,监控“实际并发执行数”在历史上的最大值,如果过大说明设计存在不合理因素,
|
// <i> 关闭总中断
|
||||||
// <i> 应设法予以解决。
|
// <i> 适用于所有80251内核,并具有极短的、确定的关闭总中断时间,
|
||||||
#define MCUCFG_PENDSVFIFO_COUNT 256
|
// <i> 包括关闭总中断、再次开启总中断在内,共8个机器周期。
|
||||||
|
// <i> 内核关闭总中断仅发生在 port_80251s.s > mPendSV_FIFOPreempt 中。
|
||||||
|
// <i> 适用于FIFO服务持续并发量较大的情况。
|
||||||
|
// <i> PendSV_FIFO深度最大值:127
|
||||||
|
#define MCUCFG_PENDSVFIFO_MUTEX 256
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
// <h> 动态内存设置
|
// <h> 动态内存设置
|
||||||
@@ -191,8 +195,12 @@ do{ \
|
|||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
#define __MSP__ 0 // MSP模式
|
#ifndef __MSP__
|
||||||
#define __PSP__ 1 // PSP模式
|
#define __MSP__ 1 // MSP模式
|
||||||
|
#endif
|
||||||
|
#ifndef __PSP__
|
||||||
|
#define __PSP__ 2 // PSP模式
|
||||||
|
#endif
|
||||||
|
|
||||||
#if (__MCUCFG_SYSCLK && __MCUCFG_SYSCLK <= 255)
|
#if (__MCUCFG_SYSCLK && __MCUCFG_SYSCLK <= 255)
|
||||||
#define MCUCFG_SYSCLK (__MCUCFG_SYSCLK / 1UL)
|
#define MCUCFG_SYSCLK (__MCUCFG_SYSCLK / 1UL)
|
||||||
@@ -232,10 +240,5 @@ do{ \
|
|||||||
#define mUserReg_Addr (node_news->bsp + 42)
|
#define mUserReg_Addr (node_news->bsp + 42)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ((MCUCFG_PENDSVFIFO_DEPTH % 8) || (MCUCFG_PENDSVFIFO_DEPTH > 40))
|
|
||||||
#error 参数非法 of 中断挂起服务FIFO队列深度!
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -4,8 +4,8 @@
|
|||||||
;* @brief 80251 Core Config File
|
;* @brief 80251 Core Config File
|
||||||
;* @details 自定义任务切换现场保护,汇编语言保护方案。
|
;* @details 自定义任务切换现场保护,汇编语言保护方案。
|
||||||
;* @author 迟凯峰
|
;* @author 迟凯峰
|
||||||
;* @version V2.0.0
|
;* @version v3.0.0
|
||||||
;* @date 2025.08.04
|
;* @date 2026.07.21
|
||||||
;*******************************************************************************
|
;*******************************************************************************
|
||||||
|
|
||||||
; 下方各定义项已经直接给出示例(保护/恢复:DPH1、DPL1、DPS),直接修改即可。
|
; 下方各定义项已经直接给出示例(保护/恢复:DPH1、DPL1、DPS),直接修改即可。
|
||||||
@@ -0,0 +1,114 @@
|
|||||||
|
/**************************************************************************//**
|
||||||
|
* @item CosyOS-III Port
|
||||||
|
* @file port_80251.c
|
||||||
|
* @brief 80251 Core Port File
|
||||||
|
* @author 迟凯峰
|
||||||
|
* @version v3.0.0
|
||||||
|
* @date 2026.07.21
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
#include "os_var.h"
|
||||||
|
#ifdef __PORT_80251_H
|
||||||
|
|
||||||
|
s_u16_t _SYS_MEM_ m_bsp_add = sizeof(s_taskload_ts);
|
||||||
|
static s_u8_t xdata mVOID _at_ 0;
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 栈监控(涵盖主栈和任务栈)
|
||||||
|
*/
|
||||||
|
#if (SYSCFG_DEBUGGING == __ENABLED__)
|
||||||
|
s_u16_t data m_taskstacklen;
|
||||||
|
#if (MCUCFG_TASKSTACK_MODE == __MSP__)
|
||||||
|
s_u16_t m_msp;
|
||||||
|
s_u16_t m_stacksize;
|
||||||
|
s_u16_t m_stacklen_max/**/sZeroInstall;
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 中断FIFO服务
|
||||||
|
*/
|
||||||
|
#if (SYSCFG_PENDSVFIFO_DEPTH > 0)
|
||||||
|
|
||||||
|
#if (MCUCFG_PENDSVFIFO_MUTEX < 0x80) \
|
||||||
|
|| (MCUCFG_PENDSVFIFO_MUTEX > 0xFF)
|
||||||
|
void _STATIC_MEM_ *mPendSV_FIFO_0[SYSCFG_PENDSVFIFO_DEPTH] _at_ 0x0100; // FIFO0
|
||||||
|
void _STATIC_MEM_ *mPendSV_FIFO_1[SYSCFG_PENDSVFIFO_DEPTH] _at_ 0x0200; // FIFO1
|
||||||
|
#else
|
||||||
|
void _STATIC_MEM_ *mPendSV_FIFO_0[SYSCFG_PENDSVFIFO_DEPTH] _at_ 0x0100/**/sZeroInstall_Group;
|
||||||
|
void _STATIC_MEM_ *mPendSV_FIFO_1[SYSCFG_PENDSVFIFO_DEPTH] _at_ 0x0200/**/sZeroInstall_Group;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* [INC]指令 和 关闭总中断
|
||||||
|
*/
|
||||||
|
#if (MCUCFG_PENDSVFIFO_MUTEX < 0x100)
|
||||||
|
|
||||||
|
/* FIFO计数器 */
|
||||||
|
s_u8_t data m_fifo_count[2]/**/sZeroInstall_Group;
|
||||||
|
|
||||||
|
/* 中断FIFO服务处理器 */
|
||||||
|
void mPendSV_FIFOHandler(void)
|
||||||
|
{
|
||||||
|
register s_u8_t i;
|
||||||
|
register s_u16_t j = 0;
|
||||||
|
register bool lock = 1;
|
||||||
|
register void _STATIC_MEM_ * _STATIC_MEM_ * p;
|
||||||
|
void _STATIC_MEM_ * _STATIC_MEM_ * const fifo[2] = {
|
||||||
|
mPendSV_FIFO_0 - 1,
|
||||||
|
mPendSV_FIFO_1 - 1
|
||||||
|
};
|
||||||
|
|
||||||
|
while(true){
|
||||||
|
lock = !lock;
|
||||||
|
p = fifo[lock];
|
||||||
|
m_fifo_lock = lock;
|
||||||
|
__mx_MMB();
|
||||||
|
|
||||||
|
if(m_fifo_count[lock]){
|
||||||
|
i = m_fifo_count[lock];
|
||||||
|
m_fifo_count[lock] = 0;
|
||||||
|
#if (SYSCFG_PENDSVFIFO_MONITOR == __ENABLED__)
|
||||||
|
if(i > mPendSV_FIFO_DepthMAX){
|
||||||
|
mPendSV_FIFO_DepthMAX = i;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
if(i > SYSCFG_PENDSVFIFO_DEPTH){
|
||||||
|
i = SYSCFG_PENDSVFIFO_DEPTH;
|
||||||
|
#if (SYSCFG_PENDSVFIFO_MONITOR == __ENABLED__)
|
||||||
|
s_fault.overflow_pendsvfifo = true;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
j += i;
|
||||||
|
do{
|
||||||
|
register void _STATIC_MEM_ *sv = *++p;
|
||||||
|
#if (MCUCFG_PENDSVFIFO_MUTEX < 0x80)
|
||||||
|
(*sPendSV_FIFOHandler[*(s_u8_t const *)sv])(sv);
|
||||||
|
#else
|
||||||
|
if(sv != OS_NULL){
|
||||||
|
*p = OS_NULL;
|
||||||
|
(*sPendSV_FIFOHandler[*(s_u8_t const *)sv])(sv);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}while(--i);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(lock){
|
||||||
|
if(0 == m_fifo_count[0]) break;
|
||||||
|
if(j >= SYSCFG_PENDSVFIFO_COUNT) break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#if (SYSCFG_PENDSVFIFO_MONITOR == __ENABLED__)
|
||||||
|
if(mPendSV_FIFO_CountMAX < j) mPendSV_FIFO_CountMAX = j;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -3,12 +3,11 @@
|
|||||||
;* @file startup_80251.s
|
;* @file startup_80251.s
|
||||||
;* @brief 80251 Core Startup File
|
;* @brief 80251 Core Startup File
|
||||||
;* @author 迟凯峰
|
;* @author 迟凯峰
|
||||||
;* @version V2.0.0
|
;* @version v3.0.0
|
||||||
;* @date 2025.08.04
|
;* @date 2026.07.21
|
||||||
;*******************************************************************************
|
;*******************************************************************************
|
||||||
;
|
;
|
||||||
$INCLUDE (syscfg.h)
|
IF __A251__
|
||||||
IF SYSCFG_MCUCORE == 80251
|
|
||||||
$INCLUDE (mcucfg_80251.h)
|
$INCLUDE (mcucfg_80251.h)
|
||||||
;
|
;
|
||||||
;///////////////////////////////////////////////////////////////////////////////
|
;///////////////////////////////////////////////////////////////////////////////
|
||||||
@@ -3,8 +3,8 @@
|
|||||||
* @file mcucfg_8051.h
|
* @file mcucfg_8051.h
|
||||||
* @brief 8051 Core Config File
|
* @brief 8051 Core Config File
|
||||||
* @author 迟凯峰
|
* @author 迟凯峰
|
||||||
* @version V2.3.1
|
* @version v3.0.0
|
||||||
* @date 2026.03.01
|
* @date 2026.07.21
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
#ifndef __MCUCFG_8051_H
|
#ifndef __MCUCFG_8051_H
|
||||||
@@ -75,24 +75,6 @@
|
|||||||
#define mPendSV_Clear CLR IE0
|
#define mPendSV_Clear CLR IE0
|
||||||
|
|
||||||
// </h>
|
// </h>
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
|
||||||
// <o> PendSV_FIFO深度
|
|
||||||
// <0=> 0级(不启用PendSV_FIFO)<8=> 8级 <16=> 16级 <24=> 24级 <32=> 32级 <40=> 40级
|
|
||||||
// <i> 此项参数取决于您在中断中调用挂起服务的总数及中断的频率。
|
|
||||||
// <i> 对于8051来说,PendSV_FIFO的最大深度为40,您应妥善处理中断中调用的挂起服务,避免不必要的调用。
|
|
||||||
// <i> 可开启PendSV_FIFO监控功能,监控历史上的最大值,再适当增大,以确保其不会溢出。
|
|
||||||
#define MCUCFG_PENDSVFIFO_DEPTH 16
|
|
||||||
|
|
||||||
// <o> 中断FIFO服务处理器-最大并发执行数
|
|
||||||
// <i> 中断FIFO服务处理器在一次运行中,允许执行服务的最大数量。
|
|
||||||
// <i> 如果超出这个数值,中断FIFO服务处理器将主动退出运行,而后继续执行任务调度/切换。
|
|
||||||
// <i> 该功能可防止因中断FIFO服务的多阶段持续并发而导致的中断FIFO服务处理器死锁(永远有执行不完的服务),
|
|
||||||
// <i> 并最终导致任务不能调度运行。
|
|
||||||
// <i> 该值通常建议在“PendSV_FIFO深度值的2~10倍之间”选取,不建议过大或过小。
|
|
||||||
// <i> 可开启PendSV_FIFO监控功能,监控“实际并发执行数”在历史上的最大值,如果过大说明设计存在不合理因素,
|
|
||||||
// <i> 应设法予以解决。
|
|
||||||
#define MCUCFG_PENDSVFIFO_COUNT 128
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
// <h> 动态内存设置
|
// <h> 动态内存设置
|
||||||
// <i> CosyOS会使用下列参数自动初始化内存池。
|
// <i> CosyOS会使用下列参数自动初始化内存池。
|
||||||
@@ -234,6 +216,8 @@ do{ \
|
|||||||
#define _QUE_MEM_ xdata
|
#define _QUE_MEM_ xdata
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define MCUCFG_PENDSVFIFO_MUTEX 0x100
|
||||||
|
|
||||||
#if (!__MCUCFG_USERREGSAVE_C)
|
#if (!__MCUCFG_USERREGSAVE_C)
|
||||||
#define mUserReg_DEFc_
|
#define mUserReg_DEFc_
|
||||||
#define mUserReg_SAVEc()
|
#define mUserReg_SAVEc()
|
||||||
@@ -253,10 +237,5 @@ do{ \
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ((MCUCFG_PENDSVFIFO_DEPTH % 8) || (MCUCFG_PENDSVFIFO_DEPTH > 40))
|
|
||||||
#error 参数非法 of 中断挂起服务FIFO队列深度!
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -4,8 +4,8 @@
|
|||||||
;* @brief 8051 Core Config File
|
;* @brief 8051 Core Config File
|
||||||
;* @details 自定义任务切换现场保护,汇编语言保护方案。
|
;* @details 自定义任务切换现场保护,汇编语言保护方案。
|
||||||
;* @author 迟凯峰
|
;* @author 迟凯峰
|
||||||
;* @version V2.0.0
|
;* @version v3.0.0
|
||||||
;* @date 2025.08.04
|
;* @date 2026.07.21
|
||||||
;*******************************************************************************
|
;*******************************************************************************
|
||||||
;
|
;
|
||||||
; 请在 mcucfg_8051.h 文件中,选择您中意的保护方案,而后在下面重新调整代码。
|
; 请在 mcucfg_8051.h 文件中,选择您中意的保护方案,而后在下面重新调整代码。
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
/**************************************************************************//**
|
||||||
|
* @item CosyOS-III Port
|
||||||
|
* @file port_8051.c
|
||||||
|
* @brief 8051 Core Port File
|
||||||
|
* @author 迟凯峰
|
||||||
|
* @version v3.0.0
|
||||||
|
* @date 2026.07.21
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
#include "os_var.h"
|
||||||
|
#ifdef __PORT_8051_H
|
||||||
|
|
||||||
|
s_u8_t _SYS_MEM_ m_bsp_add = sizeof(s_taskload_ts);
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 栈监控(涵盖主栈和任务栈)
|
||||||
|
*/
|
||||||
|
#if (SYSCFG_DEBUGGING == __ENABLED__)
|
||||||
|
s_u8_t data m_taskstacklen;
|
||||||
|
s_u8_t m_msp;
|
||||||
|
s_u8_t m_stacksize;
|
||||||
|
s_u8_t m_stacklen_max/**/sZeroInstall;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 中断FIFO服务
|
||||||
|
*/
|
||||||
|
#if (SYSCFG_PENDSVFIFO_DEPTH > 0)
|
||||||
|
s_u16_t mPendSV_FIFO_0[SYSCFG_PENDSVFIFO_DEPTH] _at_ 0x0000;
|
||||||
|
s_u16_t mPendSV_FIFO_1[SYSCFG_PENDSVFIFO_DEPTH] _at_ 0x0100;
|
||||||
|
#else
|
||||||
|
static s_u8_t xdata mVOID _at_ 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -3,13 +3,12 @@
|
|||||||
;* @file startup_8051.s
|
;* @file startup_8051.s
|
||||||
;* @brief 8051 Core Startup File
|
;* @brief 8051 Core Startup File
|
||||||
;* @author 迟凯峰
|
;* @author 迟凯峰
|
||||||
;* @version V2.0.0
|
;* @version v3.0.0
|
||||||
;* @date 2025.08.04
|
;* @date 2026.07.21
|
||||||
;*******************************************************************************
|
;*******************************************************************************
|
||||||
;
|
;
|
||||||
|
IF __A51__
|
||||||
$NOMOD51
|
$NOMOD51
|
||||||
$INCLUDE (syscfg.h)
|
|
||||||
IF SYSCFG_MCUCORE == 8051
|
|
||||||
;
|
;
|
||||||
;-------------------------------------------------------------------------------
|
;-------------------------------------------------------------------------------
|
||||||
; 基于 STARTUP.A51 修改,摒弃了一些不常用的或用不到的功能,并添加中文注释。
|
; 基于 STARTUP.A51 修改,摒弃了一些不常用的或用不到的功能,并添加中文注释。
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,104 @@
|
|||||||
|
/**************************************************************************//**
|
||||||
|
* @item CosyOS-III Port
|
||||||
|
* @file port_x51.h
|
||||||
|
* @brief 80x51 Core Port File
|
||||||
|
* @author 迟凯峰
|
||||||
|
* @version v3.0.0
|
||||||
|
* @date 2026.07.21
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
#ifndef __PORT_X51_H
|
||||||
|
#define __PORT_X51_H
|
||||||
|
|
||||||
|
/* INCLUDE */
|
||||||
|
#include "syscfg.h"
|
||||||
|
#include "os_def.h"
|
||||||
|
#include <intrins.h>
|
||||||
|
|
||||||
|
|
||||||
|
/* Typedef */
|
||||||
|
typedef char s_s8_t;
|
||||||
|
typedef short s_s16_t;
|
||||||
|
typedef long s_s32_t;
|
||||||
|
typedef unsigned char s_u8_t;
|
||||||
|
typedef unsigned short s_u16_t;
|
||||||
|
typedef unsigned long s_u32_t;
|
||||||
|
typedef s_u8_t bool;
|
||||||
|
typedef bit m_bit_t;
|
||||||
|
typedef s_u32_t m_group_t;
|
||||||
|
#if (SYSCFG_SYSTICK_CYCLE > 1000000UL / 65536)
|
||||||
|
typedef s_u16_t m_rtccount_t;
|
||||||
|
#else
|
||||||
|
typedef s_u32_t m_rtccount_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* Extern */
|
||||||
|
extern void mx_disable_irq(void);
|
||||||
|
extern void mx_resume_irq (void);
|
||||||
|
#if (SYSCFG_PENDSVFIFO_DEPTH > 0)
|
||||||
|
extern bit m_sign_fifo_0_0;
|
||||||
|
extern bit m_fifo_lock;
|
||||||
|
extern s_u8_t data m_fifo_count[2];
|
||||||
|
extern s_u8_t mPendSV_FIFO_DepthMAX;
|
||||||
|
extern s_u16_t mPendSV_FIFO_CountMAX;
|
||||||
|
extern void mPendSV_FIFOHandler(void);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* CONST & ATTRIBUTE */
|
||||||
|
#define MCUCFG_STACK_ALIGN
|
||||||
|
|
||||||
|
|
||||||
|
/* SysTick */
|
||||||
|
#define MCUCFG_SYSTICK_COUNTMODE 3 /*!< 计数方式,3:从重装载值向上计数至零溢出 */
|
||||||
|
#define MCUCFG_SYSTICK_LIMITVALUE (1UL << 16) /*!< 极限值 */
|
||||||
|
#define MCUCFG_SYSTICK_CLKDIV ((MCUCFG_SYSCLKHZ / 1000UL * SYSCFG_SYSTICK_CYCLE <= MCUCFG_SYSTICK_MAXVALUE * 1000UL) ? 1 : 12)
|
||||||
|
#define MCUCFG_SYSTICK_COUNT1CYC ((MCUCFG_SYSCLKHZ / 1000UL * SYSCFG_SYSTICK_CYCLE) / MCUCFG_SYSTICK_CLKDIV / 1000UL)
|
||||||
|
#define MCUCFG_SYSTICK_LOADVALUE (MCUCFG_SYSTICK_LIMITVALUE - MCUCFG_SYSTICK_COUNT1CYC)
|
||||||
|
#define MCUCFG_SYSTICK_MAXVALUE MCUCFG_SYSTICK_LIMITVALUE
|
||||||
|
#define MCUCFG_SYSTICK_MINVALUE MCUCFG_SYSTICK_LOADVALUE
|
||||||
|
|
||||||
|
|
||||||
|
/* 内核锁 */
|
||||||
|
#define mSysIRQ_Disable() \
|
||||||
|
do{ \
|
||||||
|
mPendSV_Disable(); \
|
||||||
|
mSysTick_Disable(); \
|
||||||
|
}while(false)
|
||||||
|
|
||||||
|
#define mSysIRQ_Enable() \
|
||||||
|
do{ \
|
||||||
|
mSysTick_Enable(); \
|
||||||
|
mPendSV_Enable(); \
|
||||||
|
}while(false)
|
||||||
|
|
||||||
|
|
||||||
|
/* CosyOS初始化 */
|
||||||
|
#define mCosyOS_INIT() \
|
||||||
|
do{ \
|
||||||
|
s_init_mempool((void _MALLOC_MEM_ *)MCUCFG_MALLOCMEMBPTR, MCUCFG_MALLOCMEMSIZE); \
|
||||||
|
OS_NOP(1); \
|
||||||
|
mSysTick_INIT(); \
|
||||||
|
EA = 1; \
|
||||||
|
}while(false)
|
||||||
|
|
||||||
|
|
||||||
|
/* CosyOS低功耗 */
|
||||||
|
#define mCosyOS_IDLE() \
|
||||||
|
do{ \
|
||||||
|
PCON |= 0x01; \
|
||||||
|
OS_NOP(4); \
|
||||||
|
}while(false)
|
||||||
|
|
||||||
|
|
||||||
|
/* 全局临界区 */
|
||||||
|
#define mxDisableIRQ() mx_disable_irq()
|
||||||
|
#define mxResumeIRQ() mx_resume_irq()
|
||||||
|
|
||||||
|
|
||||||
|
/* 内存访问屏障 */
|
||||||
|
#define __mx_MMB()
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
+81
-26
File diff suppressed because it is too large
Load Diff
@@ -2,24 +2,26 @@
|
|||||||

|

|
||||||

|

|
||||||

|

|
||||||

|

|
||||||
[](https://gitee.com/cosyos/cosyos/stargazers)
|
[](https://gitee.com/cosyos/cosyos/stargazers)
|
||||||
[](https://gitee.com/cosyos/cosyos/members)
|
[](https://gitee.com/cosyos/cosyos/members)
|
||||||
|
|
||||||
* CosyOS-QQ交流群:303421780.
|
* CosyOS-QQ交流群:303421780.
|
||||||
|
|
||||||
### 最新消息
|
### 最新消息
|
||||||
* CosyOS-III V2.3.0 发布,私信回归了,与之前版本相比,更为易用和高效、也更加可靠,欢迎大家踊跃试用!<br>
|
CosyOS3Shell 串口调试工具,闪亮发布!可实现任务管理器、命令行、printf,三者共用同一个串口并分屏显示。<br>
|
||||||
Demo-Service > 2、消息同步,有例程可做为参考。
|
CosyOS-III V3.0.8 版本发布,全面支持青稞 V2/V3/V4 系列微处理器,并全面支持全程开启硬件压栈。<br>
|
||||||
* CosyOS官网 [https://www.cosyos.com](https://www.cosyos.com),现已正式上线,诚邀您莅临访问!<br>
|
CosyOS-III V3.0.1 版本发布,针对 RISC-V32,推出了自研先进技术,可实现 **CH32V 全程开启硬件压栈** 。<br>
|
||||||
当前正处于建站初期,各方面内容都还不够丰富,正在持续优化并完善中。。。
|
该技术为纯软件实现,不依赖特定硬件(0x804->bit5),V103、203 等皆可完美支持。
|
||||||
* 近日,新增 例程-服务应用,为用户示范各项常用服务的典型应用,并在未来会陆续优化完善。
|
|
||||||
* CosyOS-III V2.0.0 发布,推出了中断挂起服务_FIFO-错误调用返回,这标志着CosyOS进一步走向成熟和完善。
|
### 移植流程
|
||||||
* CosyOS-III V1.4.0 发布,推出了升级安装程序 CosyOS-III Cube.exe,可轻松将裸机工程升级为CosyOS工程。
|
**Cube安装方式:** <br>
|
||||||
* CosyOS-III V1.3.8 发布,完善了对 Arm Compiler 5/6、GNU Compiler、IAR Compiler 等主流编译器的支持。
|
**1、裸机工程** 先准备好项目的裸机工程。<br>
|
||||||
* CosyOS-III V1.3.0 发布,解决了当嵌套获取多个互斥信号量时,可能会发生的优先级反转问题(该bug普遍存在于常见主流RTOS中)。
|
**2、升级安装** 运行 CosyOS3Cube.exe,把 裸机工程 升级为 CosyOS工程。<br>
|
||||||
* CosyOS 又取得新突破,现已升级至 **CosyOS-III**,说明文档持续更新中。。。<br>
|
**3、系统构建** 打开工程,参照 CosyOS-例程(系统构建)> readme.txt 中的说明,完成系统构建。<br>
|
||||||
原有 CosyOS-I、CosyOS-II 停止更新维护,但仍提供技术支持。
|
|
||||||
|
**手动移植方式:** <br>
|
||||||
|
RISC-V32 暂不支持 Cube安装,只能自行手动移植,移植可参考 Demo-Build/RISC-V32/readme.txt 中的说明,如移植过程中遇到问题可加入社区获取工程模板和技术支持。
|
||||||
|
|
||||||
### 序言
|
### 序言
|
||||||
* 近年来,随着RTOS的普及及在嵌入式设备中的广泛应用,以关闭总中断等方式来保护临界段所带来的危害性(丢失响应、处理延误)正日益凸显出来,其中以高速通讯接收丢帧、高速捕获丢失脉冲等中断丢失响应现象最为紧要和普遍。有些RTOS关闭总中断可能过于频繁,且未能提供“系统最大关闭总中断时间”等核心关键参数,实时性有待商榷。<br>
|
* 近年来,随着RTOS的普及及在嵌入式设备中的广泛应用,以关闭总中断等方式来保护临界段所带来的危害性(丢失响应、处理延误)正日益凸显出来,其中以高速通讯接收丢帧、高速捕获丢失脉冲等中断丢失响应现象最为紧要和普遍。有些RTOS关闭总中断可能过于频繁,且未能提供“系统最大关闭总中断时间”等核心关键参数,实时性有待商榷。<br>
|
||||||
@@ -100,17 +102,19 @@ dCreateTask(task_3, 3, 384, 9, "task_key")
|
|||||||
# 启动钩子
|
# 启动钩子
|
||||||
void start_hook(void)
|
void start_hook(void)
|
||||||
{
|
{
|
||||||
|
// uScheduleLock(); // 如果不想在启动任务过程中进行任务调度,可开启调度锁。
|
||||||
uStartTask_Ready (task_1); // 启动 task_1,初始状态为就绪状态
|
uStartTask_Ready (task_1); // 启动 task_1,初始状态为就绪状态
|
||||||
uStartTask_Block (task_2); // 启动 task_2,初始状态为阻塞状态(阻塞类型为延时阻塞,延时时间为无限长)
|
uStartTask_Block (task_2); // 启动 task_2,初始状态为阻塞状态(阻塞类型为延时阻塞,延时时间为无限长)
|
||||||
uStartTask_Suspend(task_3); // 启动 task_3,初始状态为挂起状态
|
uStartTask_Suspend(task_3); // 启动 task_3,初始状态为挂起状态
|
||||||
|
// uScheduleUnlock();
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
您有没有眼前一亮呢?CosyOS创建任务竟如此简单,通过调用API并输入各项参数,而后直接写任务代码即可。下一步就是在启动钩子中启动任务,任务便可参与调度并运行了。 _**任务静态创建与动态创建的相互转换也极为便利,API名称中,仅需 “u”改“d” 或 “d”改“u” 即可。**_
|
您有没有眼前一亮呢?CosyOS创建任务竟如此简单,通过调用API并输入各项参数,而后直接写任务代码即可。下一步就是在启动钩子中启动任务,任务便可参与调度并运行了。 _**任务静态创建与动态创建的相互转换也极为便利,API名称中,仅需 “u”改“d” 或 “d”改“u” 即可。**_
|
||||||
|
|
||||||
### 突破创新
|
### 突破创新
|
||||||
* 所有支持内核均可实现全局不关总中断、**零中断延迟**,从系统层面保证了用户中断的实时响应
|
* 所有支持内核均可实现 **全局不关总中断、零中断延迟**,从系统层面保证了用户中断的实时响应
|
||||||
* 领先的零中断延迟技术,率先应用于8051、Cortex-M0等处理器,在世界上可能尚属首例
|
* 领先的零中断延迟技术,率先应用于 8051、Cortex-M0 等处理器,在世界上可能尚属首例
|
||||||
* **任务就绪表**,采用 零/一/二级位图,保证了抢占式任务调度的硬实时性
|
* **任务就绪表**,采用 零/一/二级位图,保证了抢占式任务调度的硬实时性
|
||||||
* **三维链表**技术,可显著的减少操作链表,服务的执行速度更快
|
* **三维链表**技术,可显著的减少操作链表,服务的执行速度更快
|
||||||
* 创新的**协作式调度**,协作仅作用于相同优先级的任务,具有高度的实用价值
|
* 创新的**协作式调度**,协作仅作用于相同优先级的任务,具有高度的实用价值
|
||||||
@@ -130,8 +134,8 @@ void start_hook(void)
|
|||||||
<br>
|
<br>
|
||||||
-—————— CosyOS-III 任务管理器 ——————-
|
-—————— CosyOS-III 任务管理器 ——————-
|
||||||
|
|
||||||
### 支持内核
|
### 支持架构
|
||||||
CosyOS 现支持 8051、80251、Cortex-M 等内核,未来会陆续添加对其它内核的支持。<br>
|
CosyOS 现支持 8051、80251、Cortex-M、RISC-V32 等架构,未来会陆续添加对其它架构的支持。<br>
|
||||||
|
|
||||||
### 编译环境
|
### 编译环境
|
||||||
CosyOS 现支持 keil C51、C251、MDK-Arm(AC5、AC6),GCC-Arm,IAR-EWARM 等主流编译器,<br>
|
CosyOS 现支持 keil C51、C251、MDK-Arm(AC5、AC6),GCC-Arm,IAR-EWARM 等主流编译器,<br>
|
||||||
@@ -144,11 +148,13 @@ CosyOS 现支持 keil C51、C251、MDK-Arm(AC5、AC6),GCC-Arm,IAR-EWARM
|
|||||||
| **Hook** | **钩子文件** <br>CosyOS 已经为用户创建好了六个系统钩子函数,<br>分别位于各自的同名文件中,用户直接写代码即可。 |
|
| **Hook** | **钩子文件** <br>CosyOS 已经为用户创建好了六个系统钩子函数,<br>分别位于各自的同名文件中,用户直接写代码即可。 |
|
||||||
| **Port** | **移植文件** <br>syscfg.h:系统配置文件 <br>其它文件夹:各MCU配置和移植文件 |
|
| **Port** | **移植文件** <br>syscfg.h:系统配置文件 <br>其它文件夹:各MCU配置和移植文件 |
|
||||||
| **Demo-Build** | **例程文件** <br>例程文件 for 系统构建 |
|
| **Demo-Build** | **例程文件** <br>例程文件 for 系统构建 |
|
||||||
| **Setup** | **安装程序** <br>**CosyOS-III Cube** 升级安装程序 |
|
|
||||||
| **Demo-Service** | **例程文件** <br>例程文件 for 服务应用 <br> _不会通过安装程序添加到工程中,用户需自行查阅。_ |
|
| **Demo-Service** | **例程文件** <br>例程文件 for 服务应用 <br> _不会通过安装程序添加到工程中,用户需自行查阅。_ |
|
||||||
|
| **Setup** | **安装程序** <br>**CosyOS3Cube** 升级安装程序,协助开发者快速完成系统部署,<br>轻松将裸机工程升级为CosyOS工程。|
|
||||||
|
| **Shell** | **调试工具** <br>**CosyOS3Shell** 串口调试工具,可实现任务管理器、命令行、<br>printf,三者共用同一个串口并分屏显示。|
|
||||||
|
|
||||||
### 文档中心
|
### 文档中心
|
||||||
#### [API用户参考手册](https://gitee.com/cosyos/cosyos/blob/master/%E8%AF%B4%E6%98%8E%E6%96%87%E6%A1%A3/CosyOS-III%20API%E7%94%A8%E6%88%B7%E5%8F%82%E8%80%83%E6%89%8B%E5%86%8C%20V2.0.0.chm)
|
|
||||||
|
**[CosyOS官网](https://www.cosyos.com/)** 为大家提供了丰富的说明文档,包括 内核原理、开发指南、注意事项、疑难解答 等,可前往查阅。
|
||||||
|
|
||||||
### 参与贡献
|
### 参与贡献
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
+2
-2
@@ -4,7 +4,7 @@ CosyOS-III 安装向导
|
|||||||
2、CosyOS-源代码根文件夹,支持任意名称和随意命名,
|
2、CosyOS-源代码根文件夹,支持任意名称和随意命名,
|
||||||
但内部目录结构和文件名称等不可改变。
|
但内部目录结构和文件名称等不可改变。
|
||||||
3、CosyOS-源代码,可放置在工程文件所在分区的任意位置。
|
3、CosyOS-源代码,可放置在工程文件所在分区的任意位置。
|
||||||
4、CosyOS-III Cube.exe,必须在原目录(Setup)下运行,
|
4、CosyOS3Cube.exe,必须在原目录(Setup)下运行,
|
||||||
不可拷贝至其它位置运行。
|
不可拷贝至其它位置运行。
|
||||||
|
|
||||||
如上述条件不能满足,请先退出安装,待重新调整好后再试!
|
如上述条件不能满足,请先退出安装,待重新调整好后再试!
|
||||||
@@ -27,4 +27,4 @@ IAR EWARM:*.ewp
|
|||||||
|
|
||||||
|
|
||||||
CosyOS
|
CosyOS
|
||||||
2026.03.15
|
2026.09.02
|
||||||
Binary file not shown.
@@ -0,0 +1,50 @@
|
|||||||
|
CosyOS3Shell 简介
|
||||||
|
|
||||||
|
CosyOS3Shell 是由CosyOS官方推出的一款串口调试工具,可实现任务管理器、命令行、printf,
|
||||||
|
三者共用同一个串口并分屏显示,用户可使用该软件来呈现 printf、任务管理器,并进行命令行调试。
|
||||||
|
|
||||||
|
|
||||||
|
CosyOS3Shell 使用说明
|
||||||
|
|
||||||
|
【功能说明】
|
||||||
|
1.串口设置:选择串口、波特率、编码等。
|
||||||
|
2.打开串口:打开串口时会自动发送命令,打开任务管理器。
|
||||||
|
3.关闭串口:关闭串口时会自动发送命令,退出任务管理器。
|
||||||
|
4.任务管理器:呈现接收到的任务管理器内容。
|
||||||
|
5.命令行窗口:交互式的收发窗口,分为发送行(行首标识:>>>)与接收行(行首标识:<<<);
|
||||||
|
当前发送行输入命令后回车发送,行首右键可弹出命令菜单,实现快速输入常用命令或重输上一次发送的内容。
|
||||||
|
6.printf窗口:菜单栏 printf 按钮弹出,呈现用户的 printf 内容。
|
||||||
|
7.字体//背景:各窗口标题栏中的字体//背景按钮,可设置字体//背景色,右键按钮恢复默认。
|
||||||
|
|
||||||
|
【快捷键】(命令行窗口)
|
||||||
|
Enter —— 发送当前输入
|
||||||
|
F3 —— 快速重输上一次发送的内容
|
||||||
|
Ctrl+Z —— 撤销当前发送行输入的内容
|
||||||
|
Ctrl+C —— 复制选中文本
|
||||||
|
Ctrl+V —— 粘贴
|
||||||
|
|
||||||
|
|
||||||
|
printf 注意事项
|
||||||
|
|
||||||
|
CosyOS3Shell 是以 "\r\n" 做为接收包尾标识的,并以 " "(两个空格)、"<>" 做为任务管理器的接收包头标识,
|
||||||
|
"ACK:"(忽略大小写)做为命令行的接收包头标识。因此要求用户的 printf,包头不能使用 " "、"<>"、"ACK:",
|
||||||
|
并以 "\r\n" 做为包尾,如此才能实现正常的分屏显示。
|
||||||
|
|
||||||
|
【错误示例】
|
||||||
|
printf("task_1."); // 包尾非 "\r\n"
|
||||||
|
printf(" u%\r\n", var); // 包头为 " "
|
||||||
|
printf("ack:u%\r\n", var); // 包头为 "ACK:"
|
||||||
|
printf("var:u%\r\n<>\r\n", var); // 第二包的包头为 "<>"
|
||||||
|
|
||||||
|
【正确示例】
|
||||||
|
printf("task_1\r\n");
|
||||||
|
printf("var:u%\r\n", var);
|
||||||
|
printf("var:u%\r\n\r\n", var);
|
||||||
|
printf("task_1\r\nvar:u%\r\n", var);
|
||||||
|
|
||||||
|
|
||||||
|
其它事项
|
||||||
|
|
||||||
|
任务中打印,可调用 uPrintf 来替代标准库的 printf,以此来保证多任务打印时的线程安全。
|
||||||
|
uPrintf 仍然会调用 printf,因此相关文件中应包含 <stdio.h>。
|
||||||
|
|
||||||
+6
-4
@@ -4,13 +4,15 @@
|
|||||||
* @brief 系统链接头文件
|
* @brief 系统链接头文件
|
||||||
* @details 用户的各个c文件中应包含此文件。
|
* @details 用户的各个c文件中应包含此文件。
|
||||||
* @author 迟凯峰
|
* @author 迟凯峰
|
||||||
* @version V2.3.1
|
* @version v3.1.6
|
||||||
* @date 2026.03.01
|
* @date 2026.10.01
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
#ifndef __COSYOS_H
|
#ifndef __COSYOS_H
|
||||||
#define __COSYOS_H
|
#define __COSYOS_H
|
||||||
|
|
||||||
|
#define COSYOS3_VERSION "v3.1.6"
|
||||||
|
|
||||||
#include "os_var.h"
|
#include "os_var.h"
|
||||||
#include "os_api.h"
|
#include "os_api.h"
|
||||||
#include "sv_com.h"
|
#include "sv_com.h"
|
||||||
@@ -20,9 +22,9 @@
|
|||||||
#include "sv_pend.h"
|
#include "sv_pend.h"
|
||||||
#include "sv_task.h"
|
#include "sv_task.h"
|
||||||
#include "sv_tick.h"
|
#include "sv_tick.h"
|
||||||
#include "ur_api.h"
|
#include "os_main.h"
|
||||||
#include "ur_eapi.h"
|
#include "ur_eapi.h"
|
||||||
|
#include "ur_api.h"
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
+9
-9
@@ -3,8 +3,8 @@
|
|||||||
* @file os_api.h
|
* @file os_api.h
|
||||||
* @brief 系统内核专用API
|
* @brief 系统内核专用API
|
||||||
* @author 迟凯峰
|
* @author 迟凯峰
|
||||||
* @version V2.3.1
|
* @version v3.0.0
|
||||||
* @date 2026.03.01
|
* @date 2026.07.21
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
#ifndef __OS_API_H
|
#ifndef __OS_API_H
|
||||||
@@ -33,27 +33,27 @@
|
|||||||
|
|
||||||
/** 启动定时中断任务 */
|
/** 启动定时中断任务 */
|
||||||
#define sStartTask_TimInt(tmid) \
|
#define sStartTask_TimInt(tmid) \
|
||||||
sUSV_StartTask_0(s_timint_handle[tmid]->hookorhand.hand, OS_STATUS_SUSPENDED)
|
sUSV_StartTask_0(s_timint_handle[tmid]->hookorload.load, OS_STATUS_SUSPENDED)
|
||||||
|
|
||||||
/** 启动定时查询任务 */
|
/** 启动定时查询任务 */
|
||||||
#define sStartTask_TimQry(tmid) \
|
#define sStartTask_TimQry(tmid) \
|
||||||
sUSV_StartTask_0(s_timqry_handle[tmid]->hookorhand.hand, OS_STATUS_SUSPENDED)
|
sUSV_StartTask_0(s_timqry_handle[tmid]->hookorload.load, OS_STATUS_SUSPENDED)
|
||||||
|
|
||||||
/** 恢复定时中断任务 */
|
/** 恢复定时中断任务 */
|
||||||
#define sResumeTask_TimInt(tmid) \
|
#define sResumeTask_TimInt(tmid) \
|
||||||
sTSV_ResumeTask(*(s_timint_handle[tmid]->hookorhand.hand)->dualhandle)
|
sTSV_ResumeTask(*(s_timint_handle[tmid]->hookorload.load)->h2task)
|
||||||
|
|
||||||
/** 恢复定时查询任务 */
|
/** 恢复定时查询任务 */
|
||||||
#define sResumeTask_TimQry(tmid) \
|
#define sResumeTask_TimQry(tmid) \
|
||||||
sTSV_ResumeTask(*(s_timqry_handle[tmid]->hookorhand.hand)->dualhandle)
|
sTSV_ResumeTask(*(s_timqry_handle[tmid]->hookorload.load)->h2task)
|
||||||
|
|
||||||
/** 调用定时中断钩子 */
|
/** 调用定时中断钩子 */
|
||||||
#define sCallHook_TimInt(tmid) \
|
#define sCallHook_TimInt(tmid) \
|
||||||
(*s_timint_handle[tmid]->hookorhand.hook)()
|
(*s_timint_handle[tmid]->hookorload.hook)()
|
||||||
|
|
||||||
/** 调用定时查询钩子 */
|
/** 调用定时查询钩子 */
|
||||||
#define sCallHook_TimQry(tmid) \
|
#define sCallHook_TimQry(tmid) \
|
||||||
(*s_timqry_handle[tmid]->hookorhand.hook)()
|
(*s_timqry_handle[tmid]->hookorload.hook)()
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -220,7 +220,7 @@ sTaskMsg_Init_7(g); \
|
|||||||
tm8##g = tm8_##g
|
tm8##g = tm8_##g
|
||||||
|
|
||||||
#define sTaskMsg_Init(n) \
|
#define sTaskMsg_Init(n) \
|
||||||
static volatile s_u8_t u_tmrf = 0; \
|
static s_u8_t volatile u_tmrf = 0; \
|
||||||
if(s_taskmsg_sign){ \
|
if(s_taskmsg_sign){ \
|
||||||
u_tmrf = 1; \
|
u_tmrf = 1; \
|
||||||
sTaskMsg_Init_##n(_); \
|
sTaskMsg_Init_##n(_); \
|
||||||
|
|||||||
@@ -1,22 +0,0 @@
|
|||||||
/**************************************************************************//**
|
|
||||||
* @item CosyOS-III Kernel
|
|
||||||
* @file os_base.h
|
|
||||||
* @brief 基本数据类型定义
|
|
||||||
* @author 迟凯峰
|
|
||||||
* @version V2.3.0
|
|
||||||
* @date 2026.02.01
|
|
||||||
******************************************************************************/
|
|
||||||
|
|
||||||
#ifndef __OS_BASE_H
|
|
||||||
#define __OS_BASE_H
|
|
||||||
|
|
||||||
typedef char s_s8_t;
|
|
||||||
typedef short s_s16_t;
|
|
||||||
typedef long s_s32_t;
|
|
||||||
typedef unsigned char s_u8_t;
|
|
||||||
typedef unsigned short s_u16_t;
|
|
||||||
typedef unsigned long s_u32_t;
|
|
||||||
typedef s_u8_t s_ecode_t; /*!< 错误码类型 */
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,19 +1,63 @@
|
|||||||
/**************************************************************************//**
|
/**************************************************************************//**
|
||||||
* @item CosyOS-III Port
|
* @item CosyOS-III Kernel
|
||||||
* @file cmsis_specific.h
|
* @file os_cmsis.h
|
||||||
* @brief CMSIS compiler specific defines
|
* @brief CMSIS compiler specific defines
|
||||||
* @author 迟凯峰
|
* @author 迟凯峰
|
||||||
* @version V2.0.0
|
* @version v3.0.0
|
||||||
* @date 2025.08.04
|
* @date 2026.07.21
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
#ifndef __CMSIS_SPECIFIC_H
|
#ifndef __OS_CMSIS_H
|
||||||
#define __CMSIS_SPECIFIC_H
|
#define __OS_CMSIS_H
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Keil C51
|
||||||
|
*/
|
||||||
|
#if defined ( __C51__ )
|
||||||
|
|
||||||
|
#ifndef __WEAK
|
||||||
|
#define __WEAK
|
||||||
|
#endif
|
||||||
|
#ifndef __NOP
|
||||||
|
#define __NOP _nop_
|
||||||
|
#endif
|
||||||
|
#ifndef __STATIC_FORCEINLINE
|
||||||
|
#define __STATIC_FORCEINLINE static
|
||||||
|
#endif
|
||||||
|
#ifndef __NOINLINE
|
||||||
|
#define __NOINLINE
|
||||||
|
#endif
|
||||||
|
#ifndef __UNUSED
|
||||||
|
#define __UNUSED(X) X = X
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Keil C251
|
||||||
|
*/
|
||||||
|
#elif defined ( __C251__ )
|
||||||
|
|
||||||
|
#ifndef __WEAK
|
||||||
|
#define __WEAK
|
||||||
|
#endif
|
||||||
|
#ifndef __NOP
|
||||||
|
#define __NOP _nop_
|
||||||
|
#endif
|
||||||
|
#ifndef __STATIC_FORCEINLINE
|
||||||
|
#define __STATIC_FORCEINLINE static
|
||||||
|
#endif
|
||||||
|
#ifndef __NOINLINE
|
||||||
|
#define __NOINLINE
|
||||||
|
#endif
|
||||||
|
#ifndef __UNUSED
|
||||||
|
#define __UNUSED(X) void *p_##X = (void *)X
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Arm Compiler 4/5
|
* Arm Compiler 4/5
|
||||||
*/
|
*/
|
||||||
#if defined ( __CC_ARM )
|
#elif defined ( __CC_ARM )
|
||||||
|
|
||||||
#ifndef __ASM
|
#ifndef __ASM
|
||||||
#define __ASM __asm
|
#define __ASM __asm
|
||||||
@@ -36,7 +80,9 @@
|
|||||||
#ifndef __NOINLINE
|
#ifndef __NOINLINE
|
||||||
#define __NOINLINE __attribute__((noinline))
|
#define __NOINLINE __attribute__((noinline))
|
||||||
#endif
|
#endif
|
||||||
|
#ifndef __UNUSED
|
||||||
#define __UNUSED(X) (void)X
|
#define __UNUSED(X) (void)X
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -65,7 +111,9 @@
|
|||||||
#ifndef __NOINLINE
|
#ifndef __NOINLINE
|
||||||
#define __NOINLINE __attribute__((noinline))
|
#define __NOINLINE __attribute__((noinline))
|
||||||
#endif
|
#endif
|
||||||
|
#ifndef __UNUSED
|
||||||
#define __UNUSED(X) (void)X
|
#define __UNUSED(X) (void)X
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -94,7 +142,9 @@
|
|||||||
#ifndef __NOINLINE
|
#ifndef __NOINLINE
|
||||||
#define __NOINLINE __attribute__((noinline))
|
#define __NOINLINE __attribute__((noinline))
|
||||||
#endif
|
#endif
|
||||||
|
#ifndef __UNUSED
|
||||||
#define __UNUSED(X) (void)X
|
#define __UNUSED(X) (void)X
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -135,7 +185,9 @@
|
|||||||
#ifndef __NOINLINE
|
#ifndef __NOINLINE
|
||||||
#define __NOINLINE //_Pragma("optimize = no_inline")
|
#define __NOINLINE //_Pragma("optimize = no_inline")
|
||||||
#endif
|
#endif
|
||||||
|
#ifndef __UNUSED
|
||||||
#define __UNUSED(X) (void)X
|
#define __UNUSED(X) (void)X
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
+147
-39
File diff suppressed because it is too large
Load Diff
+44
-40
@@ -3,8 +3,8 @@
|
|||||||
* @file os_def.h
|
* @file os_def.h
|
||||||
* @brief 初始宏定义
|
* @brief 初始宏定义
|
||||||
* @author 迟凯峰
|
* @author 迟凯峰
|
||||||
* @version V2.3.0
|
* @version v3.1.0
|
||||||
* @date 2026.02.18
|
* @date 2026.08.27
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
#ifndef __OS_DEF_H
|
#ifndef __OS_DEF_H
|
||||||
@@ -33,8 +33,7 @@
|
|||||||
|
|
||||||
#define true 1
|
#define true 1
|
||||||
#define false 0
|
#define false 0
|
||||||
#define OS_NULL 0 /*!< 通用的空指针 */
|
#define OS_NULL 0
|
||||||
#define OS_VOID ((s_tasknode_tsp)~0) /*!< 专用的空指针,超时链表专用。*/
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -47,11 +46,11 @@
|
|||||||
#define __DYNAMIC__ 1 /*!< 动态队列 ............. */
|
#define __DYNAMIC__ 1 /*!< 动态队列 ............. */
|
||||||
#define __QUE_FIFO__ 0 /*!< 先入先出队列 ......... */
|
#define __QUE_FIFO__ 0 /*!< 先入先出队列 ......... */
|
||||||
#define __QUE_LIFO__ 1 /*!< 后入先出队列 ......... */
|
#define __QUE_LIFO__ 1 /*!< 后入先出队列 ......... */
|
||||||
#define __MCS_51__ 0 /*!< 指令集架构:MCS51 .... */
|
|
||||||
#define __MCS_251__ 1 /*!< 指令集架构:MCS251 ... */
|
|
||||||
#define __ARM__ 2 /*!< 指令集架构:ARM ...... */
|
|
||||||
#define __COOPERATIVE__ 1 /*!< 协作式调度............ */
|
#define __COOPERATIVE__ 1 /*!< 协作式调度............ */
|
||||||
#define __TIMESHARING__ 2 /*!< 时间片轮转调度........ */
|
#define __TIMESHARING__ 2 /*!< 时间片轮转调度........ */
|
||||||
|
#define __MSP__ 0x01
|
||||||
|
#define __PSP__ 0x02
|
||||||
|
#define __MSP_PSP__ (__MSP__ | __PSP__)
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -100,46 +99,51 @@
|
|||||||
* SVID(服务ID,中断FIFO服务-系统专用ID)
|
* SVID(服务ID,中断FIFO服务-系统专用ID)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define OS_SVID_CLEARDELAY 0x00
|
#define OS_SVID_CLEARDELAY 0x00 /*!< 清除就绪延时 ....... */
|
||||||
#define OS_SVID_RESUMETASK 0x01
|
#define OS_SVID_RESUMETASK 0x01 /*!< 恢复任务 ........... */
|
||||||
#define OS_SVID_SUSPENDTASK 0x02
|
#define OS_SVID_SUSPENDTASK 0x02 /*!< 挂起任务 ........... */
|
||||||
#define OS_SVID_DELETETASK 0x03
|
#define OS_SVID_DELETETASK 0x03 /*!< 删除任务 ........... */
|
||||||
#define OS_SVID_CLEARBLOCK 0x04
|
#define OS_SVID_RESETTASK 0x04 /*!< 重置任务 ........... */
|
||||||
#define OS_SVID_SETBLOCK 0x05
|
#define OS_SVID_CLEARBLOCK 0x05 /*!< 清除阻塞 ........... */
|
||||||
#define OS_SVID_SETTASKPRI 0x06
|
#define OS_SVID_SETBLOCK 0x06 /*!< 设置阻塞 ........... */
|
||||||
#define OS_SVID_WRITEBINARY 0x07
|
#define OS_SVID_SETTASKPRI 0x07 /*!< 设置任务优先级 ..... */
|
||||||
#define OS_SVID_GIVESEMAPH 0x08
|
#define OS_SVID_WRITEBINARY 0x08 /*!< 写二值信号量 ....... */
|
||||||
#define OS_SVID_SENDFETION 0x09
|
#define OS_SVID_GIVESEMAPH 0x09 /*!< 给予计数信号量 ..... */
|
||||||
#define OS_SVID_SENDMAIL 0x0A
|
#define OS_SVID_SENDFETION 0x0A /*!< 发送飞信 ........... */
|
||||||
#define OS_SVID_SENDMSG 0x0B
|
#define OS_SVID_SENDMAIL 0x0B /*!< 发送邮件 ........... */
|
||||||
#define OS_SVID_TIMINT 0x0C
|
#define OS_SVID_SENDMSG 0x0C /*!< 发送消息 ........... */
|
||||||
#define OS_SVID_TIMQRY 0x0D
|
#define OS_SVID_TIMINT 0x0D /*!< 定时中断 ........... */
|
||||||
#define OS_SVID_WRITEGROUP 0x0E
|
#define OS_SVID_TIMQRY 0x0E /*!< 定时查询 ........... */
|
||||||
#define OS_SVID_WRITEGVAR 0x0F
|
#define OS_SVID_WRITEGROUP 0x0F /*!< 写标志组 ........... */
|
||||||
#define OS_SVID_PENDSVC 0x10
|
#define OS_SVID_WRITEGVAR 0x10 /*!< 写全局变量 ......... */
|
||||||
#define OS_SVID_END 0x11
|
#define OS_SVID_PENDSVC 0x11 /*!< 挂起服务调用 ....... */
|
||||||
|
#define OS_SVID_END 0x12
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ECODE(错误码)
|
* ECODE(错误码)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define OS_ECODE_NOERROR 0 /*!< 无错误 ............. */
|
#define OS_ECODE_NOERROR 0x00 /*!< 无错误 ............. */
|
||||||
#define OS_ECODE_OVERFLOW_MSGQUEUE 1 /*!< 消息队列溢出 ....... */
|
|
||||||
#define OS_ECODE_OVERFLOW_TASKQUEUE 2 /*!< 任务队列溢出 ....... */
|
|
||||||
#define OS_ECODE_OVERFLOW_TASKSTACK 3 /*!< 任务栈溢出 ......... */
|
|
||||||
#define OS_ECODE_MALLOCFAIL_MSGNODE 4 /*!< 消息节点内存分配失败 */
|
|
||||||
#define OS_ECODE_MALLOCFAIL_TASKNODE 5 /*!< 任务节点内存分配失败 */
|
|
||||||
#define OS_ECODE_MALLOCFAIL_TASKSTACK 6 /*!< 任务栈内存分配失败 . */
|
|
||||||
#define OS_ECODE_TASKSUSPENDED 7 /*!< 任务已挂起 ......... */
|
|
||||||
#define OS_ECODE_TASKSTOPPED 8 /*!< 任务已停止 ......... */
|
|
||||||
#define OS_ECODE_TASKNOTSTARTED 9 /*!< 任务未启动/已删除 .. */
|
|
||||||
#define OS_ECODE_TASKNOTREADY 10 /*!< 任务未就绪 ......... */
|
|
||||||
#define OS_ECODE_TASKNOTBLOCKED 11 /*!< 任务未阻塞 ......... */
|
|
||||||
#define OS_ECODE_TASKNOTSUSPENDED 12 /*!< 任务未挂起 ......... */
|
|
||||||
#define OS_ECODE_TASKPRIUNCHANGED 13 /*!< 任务优先级未改变 ... */
|
|
||||||
#define OS_ECODE_DONOTKNOW 255 /*!< 未知错误 ........... */
|
|
||||||
|
|
||||||
|
#define OS_ECODE_TASKSTARTED 0x0D /*!< 任务已启动 ......... */
|
||||||
|
#define OS_ECODE_TASKSUSPENDED 0x0E /*!< 任务已挂起 ......... */
|
||||||
|
#define OS_ECODE_TASKSTOPPED 0x0F /*!< 任务已停止 ......... */
|
||||||
|
#define OS_ECODE_TASKDELETED 0x10 /*!< 任务已删除 ......... */
|
||||||
|
#define OS_ECODE_TASKNOTSTARTED 0x10 /*!< 任务未启动 ......... */
|
||||||
|
#define OS_ECODE_TASKNOTBLOCKED 0x11 /*!< 任务未阻塞 ......... */
|
||||||
|
#define OS_ECODE_TASKNOTSUSPENDED 0x12 /*!< 任务未挂起 ......... */
|
||||||
|
#define OS_ECODE_TASKPRIUNCHANGED 0x13 /*!< 任务优先级未改变 ... */
|
||||||
|
|
||||||
|
#define OS_ECODE_OVERFLOW_MSGQUEUE 0x21 /*!< 消息队列溢出 ....... */
|
||||||
|
#define OS_ECODE_OVERFLOW_TASKQUEUE 0x22 /*!< 任务队列溢出 ....... */
|
||||||
|
#define OS_ECODE_OVERFLOW_TASKSTACK 0x23 /*!< 任务栈溢出 ......... */
|
||||||
|
|
||||||
|
#define OS_ECODE_MALLOCFAIL_MSGNODE 0x31 /*!< 消息节点内存分配失败 */
|
||||||
|
#define OS_ECODE_MALLOCFAIL_TASKNODE 0x32 /*!< 任务节点内存分配失败 */
|
||||||
|
#define OS_ECODE_MALLOCFAIL_TASKSTACK 0x33 /*!< 任务栈内存分配失败 . */
|
||||||
|
|
||||||
|
#define OS_ECODE_DONOTKNOW 0xFF /*!< 未知错误 ........... */
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
+135
-112
File diff suppressed because it is too large
Load Diff
+5
-2
@@ -3,11 +3,12 @@
|
|||||||
* @file os_main.c
|
* @file os_main.c
|
||||||
* @brief 启动-CosyOS
|
* @brief 启动-CosyOS
|
||||||
* @author 迟凯峰
|
* @author 迟凯峰
|
||||||
* @version V2.3.0
|
* @version v3.1.0
|
||||||
* @date 2026.02.01
|
* @date 2026.08.27
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
#include "os_var.h"
|
#include "os_var.h"
|
||||||
|
#if (MCUCFG_TASKSTACK_MODE != __MSP_PSP__)
|
||||||
#include "os_api.h"
|
#include "os_api.h"
|
||||||
#include "sv_create.h"
|
#include "sv_create.h"
|
||||||
#include "sv_task.h"
|
#include "sv_task.h"
|
||||||
@@ -31,3 +32,5 @@ s_ecode_t uStartCosyOS(void)
|
|||||||
mCosyOS_INIT();
|
mCosyOS_INIT();
|
||||||
return uStartTask_Ready(Starter);
|
return uStartTask_Ready(Starter);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|||||||
@@ -0,0 +1,36 @@
|
|||||||
|
/**************************************************************************//**
|
||||||
|
* @item CosyOS-III Kernel
|
||||||
|
* @file os_main.h
|
||||||
|
* @brief 启动-CosyOS
|
||||||
|
* @author 迟凯峰
|
||||||
|
* @version v3.1.0
|
||||||
|
* @date 2026.08.27
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
#include "os_var.h"
|
||||||
|
#if (MCUCFG_TASKSTACK_MODE == __MSP_PSP__)
|
||||||
|
#include "os_api.h"
|
||||||
|
#include "sv_create.h"
|
||||||
|
#include "sv_task.h"
|
||||||
|
#include "ur_api.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
\brief 启动-CosyOS
|
||||||
|
\param 无
|
||||||
|
\return 错误码
|
||||||
|
\note 用户应自主创建main函数,并在其末尾处调用该函数来启动-CosyOS;
|
||||||
|
在正常情况下,该函数并不会返回,而是直接调度至 Starter 运行;
|
||||||
|
只有当 Starter 启动失败时,才会返回错误码提示用户。
|
||||||
|
*/
|
||||||
|
__STATIC_FORCEINLINE s_ecode_t uStartCosyOS(void)
|
||||||
|
{
|
||||||
|
sCat2Str(SYSCFG_STARTERCREATE, ExtTask(Starter));
|
||||||
|
#if (OS_TIMINTTOTAL > 0 || OS_TIMQRYTOTAL > 0)
|
||||||
|
void os_init_timing(void);
|
||||||
|
os_init_timing();
|
||||||
|
#endif
|
||||||
|
mCosyOS_INIT();
|
||||||
|
return uStartTask_Ready(Starter);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
+173
-125
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,99 @@
|
|||||||
|
/**************************************************************************//**
|
||||||
|
* @item CosyOS-III Kernel
|
||||||
|
* @file os_stack.c
|
||||||
|
* @brief main stack and task stack check
|
||||||
|
* @author 迟凯峰
|
||||||
|
* @version v3.0.0
|
||||||
|
* @date 2026.07.21
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
#include "os_stack.h"
|
||||||
|
|
||||||
|
#if (SYSCFG_DEBUGGING == __ENABLED__)
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#if defined ( __C51__ )
|
||||||
|
#define STACK_TYPE 1 // 满增栈
|
||||||
|
static s_u8_t const stack_data[ 8] = {"CosyOS51"};
|
||||||
|
|
||||||
|
#elif defined ( __C251__ )
|
||||||
|
#define STACK_TYPE 1 // 满增栈
|
||||||
|
static s_u8_t const stack_data[16] = {"CosyOS for 80251"};
|
||||||
|
|
||||||
|
#else
|
||||||
|
#define STACK_TYPE 2 // 满减栈
|
||||||
|
static s_u8_t const stack_data[32] = {"CosyOS is an RTOS come on China."};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
\brief 栈检查初始化
|
||||||
|
\param[in] addr 栈的初始安装指针
|
||||||
|
\param[in] size 栈的大小
|
||||||
|
\return 无
|
||||||
|
*/
|
||||||
|
void s_stack_check_init(STACK_ADDR_T addr, STACK_SIZE_T size)
|
||||||
|
{
|
||||||
|
STACK_SIZE_T i;
|
||||||
|
STACK_SIZE_T c = size / sizeof(stack_data);
|
||||||
|
|
||||||
|
#if ( STACK_TYPE == 1 )
|
||||||
|
STACK_ADDR_T p = addr + size - sizeof(stack_data);
|
||||||
|
|
||||||
|
#elif ( STACK_TYPE == 2 )
|
||||||
|
STACK_ADDR_T p = addr - size;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
for(i = 0; i < c; i++){
|
||||||
|
memcpy(p, stack_data, sizeof(stack_data));
|
||||||
|
|
||||||
|
#if ( STACK_TYPE == 1 )
|
||||||
|
p -= sizeof(stack_data);
|
||||||
|
|
||||||
|
#elif ( STACK_TYPE == 2 )
|
||||||
|
p += sizeof(stack_data);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
\brief 栈检查
|
||||||
|
\param[in] addr 栈的初始安装指针
|
||||||
|
\param[in] size 栈的大小
|
||||||
|
\return 栈用量
|
||||||
|
*/
|
||||||
|
STACK_SIZE_T s_stack_check(STACK_ADDR_T addr, STACK_SIZE_T size)
|
||||||
|
{
|
||||||
|
STACK_SIZE_T i;
|
||||||
|
STACK_SIZE_T c = size / sizeof(stack_data);
|
||||||
|
|
||||||
|
#if ( STACK_TYPE == 1 )
|
||||||
|
STACK_ADDR_T p = addr + size - sizeof(stack_data);
|
||||||
|
|
||||||
|
#elif ( STACK_TYPE == 2 )
|
||||||
|
STACK_ADDR_T p = addr - size;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
for(i = 0; i < c; i++){
|
||||||
|
if(!memcmp(p, stack_data, sizeof(stack_data))){
|
||||||
|
|
||||||
|
#if ( STACK_TYPE == 1 )
|
||||||
|
p -= sizeof(stack_data);
|
||||||
|
|
||||||
|
#elif ( STACK_TYPE == 2 )
|
||||||
|
p += sizeof(stack_data);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#if ( STACK_TYPE == 1 )
|
||||||
|
return (STACK_SIZE_T)(p - addr) + sizeof(stack_data);
|
||||||
|
|
||||||
|
#elif ( STACK_TYPE == 2 )
|
||||||
|
return (STACK_SIZE_T)(addr - p);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
/**************************************************************************//**
|
||||||
|
* @item CosyOS-III Kernel
|
||||||
|
* @file os_stack.h
|
||||||
|
* @brief main stack and task stack check
|
||||||
|
* @author 迟凯峰
|
||||||
|
* @version v3.0.0
|
||||||
|
* @date 2026.07.21
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
#ifndef __OS_STACK_H
|
||||||
|
#define __OS_STACK_H
|
||||||
|
|
||||||
|
#include "os_redef.h"
|
||||||
|
|
||||||
|
#if defined ( __C51__ )
|
||||||
|
typedef s_u8_t idata *STACK_ADDR_T;
|
||||||
|
typedef s_u8_t STACK_SIZE_T;
|
||||||
|
|
||||||
|
#elif defined ( __C251__ )
|
||||||
|
typedef s_u8_t edata *STACK_ADDR_T;
|
||||||
|
typedef s_u16_t STACK_SIZE_T;
|
||||||
|
|
||||||
|
#else
|
||||||
|
typedef s_u8_t *STACK_ADDR_T;
|
||||||
|
typedef s_u32_t STACK_SIZE_T;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
void s_stack_check_init(STACK_ADDR_T addr, STACK_SIZE_T size);
|
||||||
|
STACK_SIZE_T s_stack_check (STACK_ADDR_T addr, STACK_SIZE_T size);
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
+7
-5
@@ -3,8 +3,8 @@
|
|||||||
* @file os_starter.c
|
* @file os_starter.c
|
||||||
* @brief 任务启动器(Starter)
|
* @brief 任务启动器(Starter)
|
||||||
* @author 迟凯峰
|
* @author 迟凯峰
|
||||||
* @version V2.3.2
|
* @version v3.1.2
|
||||||
* @date 2026.03.08
|
* @date 2026.09.06
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
#include "os_var.h"
|
#include "os_var.h"
|
||||||
@@ -20,15 +20,17 @@
|
|||||||
\param[in] 任务优先级 SYSCFG_TASKPRIORITY - (SYSCFG_DEBUGGING ? 3 : 1)
|
\param[in] 任务优先级 SYSCFG_TASKPRIORITY - (SYSCFG_DEBUGGING ? 3 : 1)
|
||||||
\param[in] 任务栈大小 SYSCFG_STACKSIZE_STARTER
|
\param[in] 任务栈大小 SYSCFG_STACKSIZE_STARTER
|
||||||
\param[in] 安全运行时 0
|
\param[in] 安全运行时 0
|
||||||
\param[in] 任务名称文本<br>
|
\param[in] 任务名称标识<br>
|
||||||
遗产模式:"Starter"<br>
|
遗产模式:"Starter"<br>
|
||||||
标准/兼容模式:[中文:"任务启动器",英文:"Starter"]
|
标准/兼容模式:[中文:"任务启动器",英文:"Starter"]
|
||||||
\return 无
|
\return 无
|
||||||
*/
|
*/
|
||||||
#if (SYSCFG_DEBUG_LANGUAGE == 0)
|
#if (SYSCFG_DEBUG_LANGUAGE == 0)
|
||||||
#define _taskname "Starter"
|
#define _taskname "Starter"
|
||||||
|
#elif (SYSCFG_DEBUG_ENCODING == 0)
|
||||||
|
#define _taskname "任务启动器"
|
||||||
#else
|
#else
|
||||||
#define _taskname "\xC8\xCE\xCE\xF1\xC6\xF4\xB6\xAF\xC6\xF7" /*!< "任务启动器" */
|
#define _taskname "\xC8\xCE\xCE\xF1\xC6\xF4\xB6\xAF\xC6\xF7"
|
||||||
#endif
|
#endif
|
||||||
sCat2Str
|
sCat2Str
|
||||||
(
|
(
|
||||||
|
|||||||
+15
-5
@@ -3,8 +3,8 @@
|
|||||||
* @file os_sysidle.c
|
* @file os_sysidle.c
|
||||||
* @brief 系统空闲任务(Sysidle)
|
* @brief 系统空闲任务(Sysidle)
|
||||||
* @author 迟凯峰
|
* @author 迟凯峰
|
||||||
* @version V2.3.2
|
* @version v3.1.2
|
||||||
* @date 2026.03.08
|
* @date 2026.09.06
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
#include "os_var.h"
|
#include "os_var.h"
|
||||||
@@ -19,15 +19,17 @@
|
|||||||
\param[in] 任务优先级 0
|
\param[in] 任务优先级 0
|
||||||
\param[in] 任务栈大小 SYSCFG_STACKSIZE_SYSIDLE
|
\param[in] 任务栈大小 SYSCFG_STACKSIZE_SYSIDLE
|
||||||
\param[in] 安全运行时 0
|
\param[in] 安全运行时 0
|
||||||
\param[in] 任务名称文本<br>
|
\param[in] 任务名称标识<br>
|
||||||
遗产模式:"Sysidle"<br>
|
遗产模式:"Sysidle"<br>
|
||||||
标准/兼容模式:[中文:"系统空闲",英文:"Sysidle"]
|
标准/兼容模式:[中文:"系统空闲",英文:"Sysidle"]
|
||||||
\return 无
|
\return 无
|
||||||
*/
|
*/
|
||||||
#if (SYSCFG_DEBUG_LANGUAGE == 0)
|
#if (SYSCFG_DEBUG_LANGUAGE == 0)
|
||||||
#define _taskname "Sysidle"
|
#define _taskname "Sysidle"
|
||||||
|
#elif (SYSCFG_DEBUG_ENCODING == 0)
|
||||||
|
#define _taskname "系统空闲"
|
||||||
#else
|
#else
|
||||||
#define _taskname "\xCF\xB5\xCD\xB3\xBF\xD5\xCF\xD0" /*!< "系统空闲" */
|
#define _taskname "\xCF\xB5\xCD\xB3\xBF\xD5\xCF\xD0"
|
||||||
#endif
|
#endif
|
||||||
uCreateTask(Sysidle, 0, SYSCFG_STACKSIZE_SYSIDLE, 0, _taskname)
|
uCreateTask(Sysidle, 0, SYSCFG_STACKSIZE_SYSIDLE, 0, _taskname)
|
||||||
{
|
{
|
||||||
@@ -46,6 +48,14 @@ uCreateTask(Sysidle, 0, SYSCFG_STACKSIZE_SYSIDLE, 0, _taskname)
|
|||||||
#if (SYSCFG_IDLEHOOK == __ENABLED__)
|
#if (SYSCFG_IDLEHOOK == __ENABLED__)
|
||||||
idle_hook();
|
idle_hook();
|
||||||
#endif
|
#endif
|
||||||
|
#if (SYSCFG_DEBUGGING == __ENABLED__) && (MCUCFG_TASKSTACK_MODE & __MSP__)
|
||||||
|
if(true){
|
||||||
|
m_stacklen_t len = mMainStack_Check();
|
||||||
|
if(m_stacklen_max < len){
|
||||||
|
m_stacklen_max = len;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
#if (SYSCFG_LOWPOWERMODE == __ENABLED__)
|
#if (SYSCFG_LOWPOWERMODE == __ENABLED__)
|
||||||
mCosyOS_IDLE();
|
mCosyOS_IDLE();
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
+231
-68
File diff suppressed because it is too large
Load Diff
+2
-2
@@ -3,8 +3,8 @@
|
|||||||
* @file os_timing.c
|
* @file os_timing.c
|
||||||
* @brief 初始化定时中断、定时查询
|
* @brief 初始化定时中断、定时查询
|
||||||
* @author 迟凯峰
|
* @author 迟凯峰
|
||||||
* @version V2.3.0
|
* @version v3.0.0
|
||||||
* @date 2026.02.01
|
* @date 2026.07.21
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
#include "os_var.h"
|
#include "os_var.h"
|
||||||
|
|||||||
+44
-45
@@ -3,85 +3,84 @@
|
|||||||
* @file os_var.c
|
* @file os_var.c
|
||||||
* @brief 系统全局变量定义
|
* @brief 系统全局变量定义
|
||||||
* @author 迟凯峰
|
* @author 迟凯峰
|
||||||
* @version V2.3.0
|
* @version v3.1.1
|
||||||
* @date 2026.02.01
|
* @date 2026.09.02
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
#include "os_redef.h"
|
#include "os_redef.h"
|
||||||
|
|
||||||
/* The Soft-RTC */
|
/* The Soft-RTC */
|
||||||
#if (SYSCFG_SOFTRTC == __ENABLED__)
|
#if (SYSCFG_SOFTRTC == __ENABLED__)
|
||||||
const s_u8_t _CONST_MEM_ s_month0day[13] = {31, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; /*!< 每月各有几天?*/
|
s_u8_t const _CONST_MEM_ s_month0day[13] = {31, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; /*!< 每月各有几天?*/
|
||||||
s_u8_t _RTC_MEM_ s_month2day = 28; /*!< 二月有几天?*/
|
s_u8_t _RTC_MEM_ s_month2day = 28; /*!< 二月有几天?*/
|
||||||
s_every_ts _SYS_MEM_ s_sign_every/**/sZeroInstall_Group; /*!< 每信号 */
|
s_every_ts _SYS_MEM_ s_sign_every/**/sZeroInstall_Group; /*!< 每信号 */
|
||||||
m_rtccount_t _SYS_MEM_ s_rtc_counter/**/sZeroInstall; /*!< RTC计数器 */
|
m_rtccount_t _SYS_MEM_ s_rtc_counter/**/sZeroInstall; /*!< RTC计数器 */
|
||||||
s_rtc_ts _RTC_MEM_ s_rtc = {SYSCFG_MANUFACTUREDATE}; /*!< RTC */
|
s_rtc_ts _RTC_MEM_ s_rtc = {SYSCFG_MANUFACTUREDATE}; /*!< RTC */
|
||||||
#endif
|
#endif
|
||||||
/* The Task */
|
/* The Task */
|
||||||
volatile m_bit_t /*_SYS_MEM_*/ s_sign_startup = true;
|
m_bit_t volatile/*_SYS_MEM_*/ s_sign_startup = true;
|
||||||
volatile s_schesign_tu _SYS_MEM_ s_sign_schedule = {{0, 1}}; /*!< 调度信号 */
|
s_schesign_tu volatile _SYS_MEM_ s_sign_schedule = {{0, 1}}; /*!< 调度信号 */
|
||||||
volatile m_bit_t /*_SYS_MEM_*/ s_sign_delay/**/sZeroInstall; /*!< 就绪延时信号 */
|
m_bit_t volatile/*_SYS_MEM_*/ s_sign_delay/**/sZeroInstall; /*!< 就绪延时信号 */
|
||||||
s_u8_t _SYS_MEM_ s_schedulelock_counter/**/sZeroInstall;/*!< 调度锁嵌套计数器 */
|
s_u8_t _SYS_MEM_ s_schedulelock_counter/**/sZeroInstall;/*!< 调度锁嵌套计数器 */
|
||||||
s_ecode_t _SYS_MEM_ s_startup_ecode = OS_ECODE_NOERROR; /*!< 启动任务时,用来异地缓存错误码 */
|
s_taskstart_ts _SYS_MEM_ s_task_starter/**/sZeroInstall_Group; /*!< 任务启动器 */
|
||||||
s_u8_t _SYS_MEM_ s_task_status0 = OS_STATUS_DELETED; /*!< 被启动任务 -> 初始状态 */
|
s_taskctrl_tsp _SYS_MEM_ s_task_current/**/sZeroInstall; /*!< 当前任务句柄 */
|
||||||
s_taskhand_tsp _SYS_MEM_ s_task_starter/**/sZeroInstall; /*!< 被启动任务 -> 装载块句柄 */
|
s_taskctrl_tsp s_timer_list[OS_TIMESLOTNUM]/**/sZeroInstall_Group; /*!< 定时器链表 */
|
||||||
s_tasknode_tsp _SYS_MEM_ s_task_current/**/sZeroInstall; /*!< 当前任务句柄 */
|
s_u8_t _SYS_MEM_ s_timer_pointer = OS_TIMESLOTNUM - 1UL;
|
||||||
s_tasknode_tsp s_timer_list[OS_TIMESLOTNUM]/**/sZeroInstall_Group; /*!< 定时器链表 */
|
|
||||||
s_u8_t _SYS_MEM_ s_timer_pointer = OS_TIMESLOTNUM - 1UL;
|
|
||||||
#if (SYSCFG_SAMEPRISCHEDULE == __TIMESHARING__ && SYSCFG_TIMESHARINGMODE == 2)
|
#if (SYSCFG_SAMEPRISCHEDULE == __TIMESHARING__ && SYSCFG_TIMESHARINGMODE == 2)
|
||||||
const s_sharing_t _CONST_MEM_ s_time_sharing[SYSCFG_TASKPRIORITY] = {SYSCFG_CUSTOMTIMESHARING}; /*!< 自定义时间片 -> 时间片数组 */
|
s_sharing_t const _CONST_MEM_ s_time_sharing[SYSCFG_TASKPRIORITY] = {SYSCFG_CUSTOMTIMESHARING}; /*!< 自定义时间片 -> 时间片数组 */
|
||||||
#endif
|
#endif
|
||||||
#if (SYSCFG_KERNELLOCKNESTING == __ENABLED__)
|
#if (SYSCFG_KERNELLOCKNESTING == __ENABLED__)
|
||||||
s_u8_t _SYS_MEM_ s_kernellock_counter/**/sZeroInstall; /*!< 内核锁嵌套计数器 */
|
s_u8_t _SYS_MEM_ s_kernellock_counter/**/sZeroInstall; /*!< 内核锁嵌套计数器 */
|
||||||
#endif
|
#endif
|
||||||
/* The Safe runtime */
|
/* The Safe runtime */
|
||||||
#if (SYSCFG_SAFERUNTIME == __ENABLED__)
|
#if (SYSCFG_SAFERUNTIME == __ENABLED__)
|
||||||
m_bit_t /*_SYS_MEM_*/ s_timeout_sign/**/sZeroInstall; /*!< 超时信号 */
|
m_bit_t /*_SYS_MEM_*/ s_timeout_sign/**/sZeroInstall; /*!< 超时信号 */
|
||||||
s_tasknode_tsp _SYS_MEM_ s_timeout_list = OS_VOID; /*!< 超时链表 */
|
s_taskctrl_tsp _STATIC_MEM_ s_timeout_list/**/sZeroInstall; /*!< 超时链表 */
|
||||||
#endif
|
#endif
|
||||||
/* The Timing Interrupt */
|
/* The Timing Interrupt */
|
||||||
#if (OS_TIMINTTOTAL > 0)
|
#if (OS_TIMINTTOTAL > 0)
|
||||||
s_timinthand_tsp s_timint_handle[OS_TIMINTTOTAL]; /*!< 定时中断句柄 */
|
s_timinthand_tsp s_timint_handle[OS_TIMINTTOTAL]; /*!< 定时中断句柄 */
|
||||||
#endif
|
#endif
|
||||||
/* The Timing Query */
|
/* The Timing Query */
|
||||||
#if (OS_TIMQRYTOTAL > 0)
|
#if (OS_TIMQRYTOTAL > 0)
|
||||||
s_timqryhand_tsp s_timqry_handle[OS_TIMQRYTOTAL]; /*!< 定时查询句柄 */
|
s_timqryhand_tsp s_timqry_handle[OS_TIMQRYTOTAL]; /*!< 定时查询句柄 */
|
||||||
#endif
|
#endif
|
||||||
/* The Task Message */
|
/* The Task Message */
|
||||||
#if (SYSCFG_TASKMSG == __ENABLED__)
|
#if (SYSCFG_TASKMSG == __ENABLED__)
|
||||||
volatile s_u8_t /*_SYS_MEM_*/ s_taskmsg_sign/**/sZeroInstall; /*!< 发送私信信号 */
|
s_u8_t volatile _SYS_MEM_ s_taskmsg_sign/**/sZeroInstall; /*!< 发送私信信号 */
|
||||||
#endif
|
#endif
|
||||||
/* The Debug Interface */
|
/* The Debug Interface */
|
||||||
#if (SYSCFG_DEBUGGING == __ENABLED__)
|
#if (SYSCFG_DEBUGGING == __ENABLED__)
|
||||||
m_bit_t /*_SYS_MEM_*/ s_debug_sendsign/**/sZeroInstall;
|
m_bit_t /*_SYS_MEM_*/ s_debug_sendsign/**/sZeroInstall;
|
||||||
s_u8_t _SYS_MEM_ s_debug_sendtype/**/sZeroInstall;
|
s_u8_t _SYS_MEM_ s_debug_sendtype/**/sZeroInstall;
|
||||||
s_u8_t _SYS_MEM_ s_debug_recvlen/**/sZeroInstall;
|
s_u8_t _SYS_MEM_ s_debug_recvlen/**/sZeroInstall;
|
||||||
char * _XDATA_MEM_ s_debug_recvptr;/*
|
char * _XDATA_MEM_ s_debug_recvptr;
|
||||||
char _XDATA_MEM_ s_cmdline_sendbuff[OS_CMDLINESENDBUFFSIZE];
|
s_command_ts _XDATA_MEM_ s_debug_cmd/**/sZeroInstall_Group;
|
||||||
|
char _XDATA_MEM_ s_cmdline_sendbuff[OS_CMDLINESENDBUFFSIZE];
|
||||||
#if (SYSCFG_DEBUG_SENDLEN == __ENABLED__)
|
#if (SYSCFG_DEBUG_SENDLEN == __ENABLED__)
|
||||||
s_u16_t _XDATA_MEM_ s_cmdline_sendlen;
|
s_u16_t _XDATA_MEM_ s_cmdline_sendlen;
|
||||||
#endif*/
|
|
||||||
m_bit_t /*_SYS_MEM_*/ s_taskmgr_sign = SYSCFG_TASKMGR_AUTOSTART;
|
|
||||||
char _XDATA_MEM_ s_taskmgr_sendbuff[OS_TASKMGRSENDBUFFSIZE];
|
|
||||||
#if (SYSCFG_DEBUG_SENDLEN == __ENABLED__)
|
|
||||||
s_u16_t _XDATA_MEM_ s_taskmgr_sendlen;
|
|
||||||
#endif
|
#endif
|
||||||
s_u32_t _DEBUG_MEM_ s_taskmgr_upspeed/**/sZeroInstall;
|
m_bit_t /*_SYS_MEM_*/ s_taskmgr_sign = SYSCFG_TASKMGR_AUTOSTART;
|
||||||
s_alarm_ts _DEBUG_MEM_ s_alarm/**/sZeroInstall_Group;
|
char _XDATA_MEM_ s_taskmgr_sendbuff[OS_TASKMGRSENDBUFFSIZE];
|
||||||
s_fault_ts _DEBUG_MEM_ s_fault/**/sZeroInstall_Group;
|
#if (SYSCFG_DEBUG_SENDLEN == __ENABLED__)
|
||||||
|
s_u16_t _XDATA_MEM_ s_taskmgr_sendlen;
|
||||||
|
#endif
|
||||||
|
s_u32_t _DEBUG_MEM_ s_taskmgr_upspeed/**/sZeroInstall;
|
||||||
|
s_alarm_ts _DEBUG_MEM_ s_alarm/**/sZeroInstall_Group;
|
||||||
|
s_fault_ts _DEBUG_MEM_ s_fault/**/sZeroInstall_Group;
|
||||||
#if (SYSCFG_SYSTICKTIME_COUNT == __ENABLED__)
|
#if (SYSCFG_SYSTICKTIME_COUNT == __ENABLED__)
|
||||||
s_u32_t _DEBUG_MEM_ s_tick_count1/**/sZeroInstall;
|
s_u32_t _DEBUG_MEM_ s_tick_count1/**/sZeroInstall;
|
||||||
s_u32_t _DEBUG_MEM_ s_tick_count2/**/sZeroInstall;
|
s_u32_t _DEBUG_MEM_ s_tick_count2/**/sZeroInstall;
|
||||||
#endif
|
#endif
|
||||||
#if (SYSCFG_TASKPC_MONITOR == __ENABLED__)
|
#if (SYSCFG_TASKPC_MONITOR == __ENABLED__)
|
||||||
m_pc_t _SYS_MEM_ s_pc/**/sZeroInstall;
|
m_pc_t _SYS_MEM_ s_pc/**/sZeroInstall;
|
||||||
#endif
|
#endif
|
||||||
#if (SYSCFG_RUNTIME_COUNT == __ENABLED__)
|
#if (SYSCFG_RUNTIME_COUNT == __ENABLED__)
|
||||||
s_runtime_ts _DEBUG_MEM_ s_runtime/**/sZeroInstall_Group;
|
s_runtime_ts _DEBUG_MEM_ s_runtime/**/sZeroInstall_Group;
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
/* The Task */
|
/* The Task */
|
||||||
const s_u8_t _CONST_MEM_ s_task_pickmap[SYSCFG_TASKPICKBITMAP * 128] =
|
s_u8_t const _CONST_MEM_ s_task_pickmap[SYSCFG_TASKPICKBITMAP * 128] =
|
||||||
{
|
{
|
||||||
#if (SYSCFG_TASKPICKBITMAP == 1)
|
#if (SYSCFG_TASKPICKBITMAP == 1)
|
||||||
/* 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F */
|
/* 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F */
|
||||||
@@ -113,7 +112,7 @@ const s_u8_t _CONST_MEM_ s_task_pickmap[SYSCFG_TASKPICKBITMAP * 128] =
|
|||||||
/* F */ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
|
/* F */ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
|
||||||
#endif
|
#endif
|
||||||
}; /*!< Task pick bitmap */
|
}; /*!< Task pick bitmap */
|
||||||
s_tasknode_tsp _QUE_MEM_ s_task_queue[SYSCFG_TASKPRIORITY]/**/sZeroInstall_Group; /*!< 任务队列 */
|
s_taskctrl_tsp _QUE_MEM_ s_task_queue[SYSCFG_TASKPRIORITY]/**/sZeroInstall_Group; /*!< 任务队列 */
|
||||||
m_tqcount_t _QUE_MEM_ s_task_queue_count/**/sZeroInstall;
|
m_tqcount_t _QUE_MEM_ s_task_queue_count/**/sZeroInstall;
|
||||||
#if (SYSCFG_TASKPRIORITY > 64)
|
#if (SYSCFG_TASKPRIORITY > 64)
|
||||||
s_u8_t _QUE_MEM_ s_task_table_index/**/sZeroInstall; /*!< 任务表索引 */
|
s_u8_t _QUE_MEM_ s_task_table_index/**/sZeroInstall; /*!< 任务表索引 */
|
||||||
@@ -130,6 +129,6 @@ s_u8_t _QUE_MEM_ s_task_ready_count[SYSCFG_TASKPRIORITY]/**/sZeroInstall_Group;
|
|||||||
#elif (SYSCFG_MUTEX == __ENABLED__)
|
#elif (SYSCFG_MUTEX == __ENABLED__)
|
||||||
s_u8_t _SYS_MEM_ s_taskpri_ceiling = SYSCFG_BASEPRI_CEILING; /*!< 天花板优先级 */
|
s_u8_t _SYS_MEM_ s_taskpri_ceiling = SYSCFG_BASEPRI_CEILING; /*!< 天花板优先级 */
|
||||||
#endif
|
#endif
|
||||||
#if (MCUCFG_PENDSVFIFO_DEPTH > 0 && SYSCFG_PENDSVFIFO_ERRORCALLBACK == __ENABLED__)
|
#if (SYSCFG_PENDSVFIFO_DEPTH > 0 && SYSCFG_PENDSVFIFO_ERRORCALLBACK == __ENABLED__)
|
||||||
s_ecode_t _SYS_MEM_ s_psvfifo_ecode; /*!< 中断挂起服务_FIFO-错误调用返回.错误码 */
|
s_ecode_t _SYS_MEM_ s_psvfifo_ecode; /*!< 中断挂起服务_FIFO-错误调用返回.错误码 */
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
+44
-45
@@ -3,8 +3,8 @@
|
|||||||
* @file os_var.h
|
* @file os_var.h
|
||||||
* @brief 系统全局变量声明
|
* @brief 系统全局变量声明
|
||||||
* @author 迟凯峰
|
* @author 迟凯峰
|
||||||
* @version V2.3.0
|
* @version v3.1.1
|
||||||
* @date 2026.02.01
|
* @date 2026.09.02
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
#ifndef __OS_VAR_H
|
#ifndef __OS_VAR_H
|
||||||
@@ -13,78 +13,77 @@
|
|||||||
|
|
||||||
/* The Soft-RTC */
|
/* The Soft-RTC */
|
||||||
#if (SYSCFG_SOFTRTC == __ENABLED__)
|
#if (SYSCFG_SOFTRTC == __ENABLED__)
|
||||||
extern const s_u8_t _CONST_MEM_ s_month0day[13];
|
extern s_u8_t const _CONST_MEM_ s_month0day[13];
|
||||||
extern s_u8_t _RTC_MEM_ s_month2day;
|
extern s_u8_t _RTC_MEM_ s_month2day;
|
||||||
extern s_every_ts _SYS_MEM_ s_sign_every;
|
extern s_every_ts _SYS_MEM_ s_sign_every;
|
||||||
extern m_rtccount_t _SYS_MEM_ s_rtc_counter;
|
extern m_rtccount_t _SYS_MEM_ s_rtc_counter;
|
||||||
extern s_rtc_ts _RTC_MEM_ s_rtc;
|
extern s_rtc_ts _RTC_MEM_ s_rtc;
|
||||||
#endif
|
#endif
|
||||||
/* The Task */
|
/* The Task */
|
||||||
extern volatile m_bit_t /*_SYS_MEM_*/ s_sign_startup;
|
extern m_bit_t volatile/*_SYS_MEM_*/ s_sign_startup;
|
||||||
extern volatile s_schesign_tu _SYS_MEM_ s_sign_schedule;
|
extern s_schesign_tu volatile _SYS_MEM_ s_sign_schedule;
|
||||||
extern volatile m_bit_t /*_SYS_MEM_*/ s_sign_delay;
|
extern m_bit_t volatile/*_SYS_MEM_*/ s_sign_delay;
|
||||||
extern s_u8_t _SYS_MEM_ s_schedulelock_counter;
|
extern s_u8_t _SYS_MEM_ s_schedulelock_counter;
|
||||||
extern s_ecode_t _SYS_MEM_ s_startup_ecode;
|
extern s_taskstart_ts _SYS_MEM_ s_task_starter;
|
||||||
extern s_u8_t _SYS_MEM_ s_task_status0;
|
extern s_taskctrl_tsp _SYS_MEM_ s_task_current;
|
||||||
extern s_taskhand_tsp _SYS_MEM_ s_task_starter;
|
extern s_taskctrl_tsp s_timer_list[OS_TIMESLOTNUM];
|
||||||
extern s_tasknode_tsp _SYS_MEM_ s_task_current;
|
extern s_u8_t _SYS_MEM_ s_timer_pointer;
|
||||||
extern s_tasknode_tsp s_timer_list[OS_TIMESLOTNUM];
|
|
||||||
extern s_u8_t _SYS_MEM_ s_timer_pointer;
|
|
||||||
#if (SYSCFG_SAMEPRISCHEDULE == __TIMESHARING__ && SYSCFG_TIMESHARINGMODE == 2)
|
#if (SYSCFG_SAMEPRISCHEDULE == __TIMESHARING__ && SYSCFG_TIMESHARINGMODE == 2)
|
||||||
extern const s_sharing_t _CONST_MEM_ s_time_sharing[SYSCFG_TASKPRIORITY];
|
extern s_sharing_t const _CONST_MEM_ s_time_sharing[SYSCFG_TASKPRIORITY];
|
||||||
#endif
|
#endif
|
||||||
#if (SYSCFG_KERNELLOCKNESTING == __ENABLED__)
|
#if (SYSCFG_KERNELLOCKNESTING == __ENABLED__)
|
||||||
extern s_u8_t _SYS_MEM_ s_kernellock_counter;
|
extern s_u8_t _SYS_MEM_ s_kernellock_counter;
|
||||||
#endif
|
#endif
|
||||||
/* The Safe runtime */
|
/* The Safe runtime */
|
||||||
#if (SYSCFG_SAFERUNTIME == __ENABLED__)
|
#if (SYSCFG_SAFERUNTIME == __ENABLED__)
|
||||||
extern m_bit_t /*_SYS_MEM_*/ s_timeout_sign;
|
extern m_bit_t /*_SYS_MEM_*/ s_timeout_sign;
|
||||||
extern s_tasknode_tsp _SYS_MEM_ s_timeout_list;
|
extern s_taskctrl_tsp _STATIC_MEM_ s_timeout_list;
|
||||||
#endif
|
#endif
|
||||||
/* The Timing Interrupt */
|
/* The Timing Interrupt */
|
||||||
#if (OS_TIMINTTOTAL > 0)
|
#if (OS_TIMINTTOTAL > 0)
|
||||||
extern s_timinthand_tsp s_timint_handle[OS_TIMINTTOTAL];
|
extern s_timinthand_tsp s_timint_handle[OS_TIMINTTOTAL];
|
||||||
#endif
|
#endif
|
||||||
/* The Timing Query */
|
/* The Timing Query */
|
||||||
#if (OS_TIMQRYTOTAL > 0)
|
#if (OS_TIMQRYTOTAL > 0)
|
||||||
extern s_timqryhand_tsp s_timqry_handle[OS_TIMQRYTOTAL];
|
extern s_timqryhand_tsp s_timqry_handle[OS_TIMQRYTOTAL];
|
||||||
#endif
|
#endif
|
||||||
/* The Task Message */
|
/* The Task Message */
|
||||||
#if (SYSCFG_TASKMSG == __ENABLED__)
|
#if (SYSCFG_TASKMSG == __ENABLED__)
|
||||||
extern volatile s_u8_t /*_SYS_MEM_*/ s_taskmsg_sign;
|
extern s_u8_t volatile _SYS_MEM_ s_taskmsg_sign;
|
||||||
#endif
|
#endif
|
||||||
/* The Debug Interface */
|
/* The Debug Interface */
|
||||||
#if (SYSCFG_DEBUGGING == __ENABLED__)
|
#if (SYSCFG_DEBUGGING == __ENABLED__)
|
||||||
extern m_bit_t /*_SYS_MEM_*/ s_debug_sendsign;
|
extern m_bit_t /*_SYS_MEM_*/ s_debug_sendsign;
|
||||||
extern s_u8_t _SYS_MEM_ s_debug_sendtype;
|
extern s_u8_t _SYS_MEM_ s_debug_sendtype;
|
||||||
extern s_u8_t _SYS_MEM_ s_debug_recvlen;
|
extern s_u8_t _SYS_MEM_ s_debug_recvlen;
|
||||||
extern char * _XDATA_MEM_ s_debug_recvptr;/*
|
extern char * _XDATA_MEM_ s_debug_recvptr;
|
||||||
extern char _XDATA_MEM_ s_cmdline_sendbuff[OS_CMDLINESENDBUFFSIZE];
|
extern s_command_ts _XDATA_MEM_ s_debug_cmd;
|
||||||
|
extern char _XDATA_MEM_ s_cmdline_sendbuff[OS_CMDLINESENDBUFFSIZE];
|
||||||
#if (SYSCFG_DEBUG_SENDLEN == __ENABLED__)
|
#if (SYSCFG_DEBUG_SENDLEN == __ENABLED__)
|
||||||
extern s_u16_t _XDATA_MEM_ s_cmdline_sendlen;
|
extern s_u16_t _XDATA_MEM_ s_cmdline_sendlen;
|
||||||
#endif*/
|
|
||||||
extern m_bit_t /*_SYS_MEM_*/ s_taskmgr_sign;
|
|
||||||
extern char _XDATA_MEM_ s_taskmgr_sendbuff[OS_TASKMGRSENDBUFFSIZE];
|
|
||||||
#if (SYSCFG_DEBUG_SENDLEN == __ENABLED__)
|
|
||||||
extern s_u16_t _XDATA_MEM_ s_taskmgr_sendlen;
|
|
||||||
#endif
|
#endif
|
||||||
extern s_u32_t _DEBUG_MEM_ s_taskmgr_upspeed;
|
extern m_bit_t /*_SYS_MEM_*/ s_taskmgr_sign;
|
||||||
extern s_alarm_ts _DEBUG_MEM_ s_alarm;
|
extern char _XDATA_MEM_ s_taskmgr_sendbuff[OS_TASKMGRSENDBUFFSIZE];
|
||||||
extern s_fault_ts _DEBUG_MEM_ s_fault;
|
#if (SYSCFG_DEBUG_SENDLEN == __ENABLED__)
|
||||||
|
extern s_u16_t _XDATA_MEM_ s_taskmgr_sendlen;
|
||||||
|
#endif
|
||||||
|
extern s_u32_t _DEBUG_MEM_ s_taskmgr_upspeed;
|
||||||
|
extern s_alarm_ts _DEBUG_MEM_ s_alarm;
|
||||||
|
extern s_fault_ts _DEBUG_MEM_ s_fault;
|
||||||
#if (SYSCFG_SYSTICKTIME_COUNT == __ENABLED__)
|
#if (SYSCFG_SYSTICKTIME_COUNT == __ENABLED__)
|
||||||
extern s_u32_t _DEBUG_MEM_ s_tick_count1;
|
extern s_u32_t _DEBUG_MEM_ s_tick_count1;
|
||||||
extern s_u32_t _DEBUG_MEM_ s_tick_count2;
|
extern s_u32_t _DEBUG_MEM_ s_tick_count2;
|
||||||
#endif
|
#endif
|
||||||
#if (SYSCFG_TASKPC_MONITOR == __ENABLED__)
|
#if (SYSCFG_TASKPC_MONITOR == __ENABLED__)
|
||||||
extern m_pc_t _SYS_MEM_ s_pc;
|
extern m_pc_t _SYS_MEM_ s_pc;
|
||||||
#endif
|
#endif
|
||||||
#if (SYSCFG_RUNTIME_COUNT == __ENABLED__)
|
#if (SYSCFG_RUNTIME_COUNT == __ENABLED__)
|
||||||
extern s_runtime_ts _DEBUG_MEM_ s_runtime;
|
extern s_runtime_ts _DEBUG_MEM_ s_runtime;
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
/* The Task */
|
/* The Task */
|
||||||
extern const s_u8_t _CONST_MEM_ s_task_pickmap[SYSCFG_TASKPICKBITMAP * 128];
|
extern s_u8_t const _CONST_MEM_ s_task_pickmap[SYSCFG_TASKPICKBITMAP * 128];
|
||||||
extern s_tasknode_tsp _QUE_MEM_ s_task_queue[SYSCFG_TASKPRIORITY];
|
extern s_taskctrl_tsp _QUE_MEM_ s_task_queue[SYSCFG_TASKPRIORITY];
|
||||||
extern m_tqcount_t _QUE_MEM_ s_task_queue_count;
|
extern m_tqcount_t _QUE_MEM_ s_task_queue_count;
|
||||||
#if (SYSCFG_TASKPRIORITY > 64)
|
#if (SYSCFG_TASKPRIORITY > 64)
|
||||||
extern s_u8_t _QUE_MEM_ s_task_table_index;
|
extern s_u8_t _QUE_MEM_ s_task_table_index;
|
||||||
@@ -101,7 +100,7 @@ extern s_u8_t _QUE_MEM_ s_task_ready_count[SYSCFG_TASKPRIORITY];
|
|||||||
#elif (SYSCFG_MUTEX == __ENABLED__)
|
#elif (SYSCFG_MUTEX == __ENABLED__)
|
||||||
extern s_u8_t _SYS_MEM_ s_taskpri_ceiling;
|
extern s_u8_t _SYS_MEM_ s_taskpri_ceiling;
|
||||||
#endif
|
#endif
|
||||||
#if (MCUCFG_PENDSVFIFO_DEPTH > 0 && SYSCFG_PENDSVFIFO_ERRORCALLBACK == __ENABLED__)
|
#if (SYSCFG_PENDSVFIFO_DEPTH > 0 && SYSCFG_PENDSVFIFO_ERRORCALLBACK == __ENABLED__)
|
||||||
extern s_ecode_t _SYS_MEM_ s_psvfifo_ecode;
|
extern s_ecode_t _SYS_MEM_ s_psvfifo_ecode;
|
||||||
#endif
|
#endif
|
||||||
extern void (_CODE_MEM_ * const _CONST_MEM_ sPendSV_FIFOHandler[OS_SVID_END])(void _STATIC_MEM_ *sv);
|
extern void (_CODE_MEM_ * const _CONST_MEM_ sPendSV_FIFOHandler[OS_SVID_END])(void _STATIC_MEM_ *sv);
|
||||||
|
|||||||
+139
-48
File diff suppressed because it is too large
Load Diff
+29
-27
@@ -4,41 +4,43 @@
|
|||||||
* @brief 内核公共服务
|
* @brief 内核公共服务
|
||||||
* @details 在服务层临界区中调用并执行。
|
* @details 在服务层临界区中调用并执行。
|
||||||
* @author 迟凯峰
|
* @author 迟凯峰
|
||||||
* @version V2.3.0
|
* @version v3.0.0
|
||||||
* @date 2026.02.01
|
* @date 2026.07.21
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
#ifndef __SV_COM_H
|
#ifndef __SV_COM_H
|
||||||
#define __SV_COM_H
|
#define __SV_COM_H
|
||||||
|
|
||||||
#include "os_redef.h"
|
#include "os_redef.h"
|
||||||
void sa_add_ready (s_tasknode_tsp htask);
|
void sa_add_ready (s_taskctrl_tsp htask);
|
||||||
void sa_remove_ready (s_tasknode_tsp htask);
|
void sa_remove_ready (s_taskctrl_tsp htask);
|
||||||
void sa_insert_taskque (s_tasknode_tsp htask);
|
void sa_insert_taskque (s_taskctrl_tsp htask);
|
||||||
void sa_remove_taskque (s_tasknode_tsp htask);
|
void sa_remove_taskque (s_taskctrl_tsp htask);
|
||||||
void sa_insert_blocklist (s_tasknode_tsp *h2task);
|
void sa_insert_blocklist (s_taskctrl_tsp *h2task);
|
||||||
void sa_remove_blocklist (s_tasknode_tsp htask);
|
void sa_remove_blocklist (s_taskctrl_tsp htask);
|
||||||
void sa_insert_timerlist (s_tasknode_tsp htask, s_delay_t tick);
|
void sa_insert_timerlist (s_taskctrl_tsp htask, s_delay_t tick);
|
||||||
void sa_remove_timerlist (s_tasknode_tsp htask);
|
void sa_remove_timerlist (s_taskctrl_tsp htask);
|
||||||
void sa_block_to_float (s_tasknode_tsp htask);
|
void sa_block_to_float (s_taskctrl_tsp htask);
|
||||||
void sa_float_to_block (s_tasknode_tsp htask);
|
void sa_float_to_block (s_taskctrl_tsp htask);
|
||||||
void sa_block_to_ready (s_tasknode_tsp htask);
|
void sa_block_to_ready (s_taskctrl_tsp htask);
|
||||||
void sa_resume_task (s_tasknode_tsp htask);
|
void sa_resume_task (s_taskctrl_tsp htask);
|
||||||
void sa_suspend_task (s_tasknode_tsp htask);
|
void sa_suspend_task (s_taskctrl_tsp htask);
|
||||||
void sa_stop_task (s_tasknode_tsp htask);
|
void sa_stop_task (s_taskctrl_tsp htask);
|
||||||
void sa_free_task (s_tasknode_tsp htask);
|
void sa_free_task (s_taskctrl_tsp htask);
|
||||||
void sa_delete_task (s_tasknode_tsp htask);
|
void sa_delete_task (s_taskctrl_tsp htask);
|
||||||
void sa_clear_block (s_tasknode_tsp htask);
|
void sa_reset_task (s_taskctrl_tsp htask, s_u8_t status);
|
||||||
void sa_set_block (s_tasknode_tsp htask, s_delay_t tick);
|
void sa_clear_block (s_taskctrl_tsp htask);
|
||||||
void sa_set_taskpri (s_tasknode_tsp htask, s_u8_t npri);
|
void sa_set_block (s_taskctrl_tsp htask, s_delay_t tick);
|
||||||
|
void sa_set_taskpri (s_taskctrl_tsp htask, s_u8_t npri);
|
||||||
|
|
||||||
void sc_clear_delay (void);
|
void sc_clear_delay (void);
|
||||||
s_ecode_t sc_resume_task (s_tasknode_tsp htask);
|
s_ecode_t sc_resume_task (s_taskctrl_tsp htask);
|
||||||
s_ecode_t sc_suspend_task (s_tasknode_tsp htask);
|
s_ecode_t sc_suspend_task (s_taskctrl_tsp htask);
|
||||||
s_ecode_t sc_delete_task (s_tasknode_tsp htask);
|
s_ecode_t sc_delete_task (s_taskctrl_tsp htask);
|
||||||
s_ecode_t sc_clear_block (s_tasknode_tsp htask);
|
s_ecode_t sc_reset_task (s_taskctrl_tsp htask, s_u8_t status);
|
||||||
s_ecode_t sc_set_block (s_tasknode_tsp htask, s_delay_t tick);
|
s_ecode_t sc_clear_block (s_taskctrl_tsp htask);
|
||||||
s_ecode_t sc_set_taskpri (s_tasknode_tsp htask, s_u8_t npri);
|
s_ecode_t sc_set_block (s_taskctrl_tsp htask, s_delay_t tick);
|
||||||
|
s_ecode_t sc_set_taskpri (s_taskctrl_tsp htask, s_u8_t npri);
|
||||||
void sc_write_binary (s_binary_tsp hbin, bool value);
|
void sc_write_binary (s_binary_tsp hbin, bool value);
|
||||||
void sc_give_semaph (s_semaph_tsp hsem);
|
void sc_give_semaph (s_semaph_tsp hsem);
|
||||||
void sc_send_fetion (s_tionbox_tsp htbox, m_fetion_t tion);
|
void sc_send_fetion (s_tionbox_tsp htbox, m_fetion_t tion);
|
||||||
|
|||||||
+65
-45
File diff suppressed because it is too large
Load Diff
+63
-15
@@ -4,12 +4,12 @@
|
|||||||
* @brief 中断FIFO服务-执行函数
|
* @brief 中断FIFO服务-执行函数
|
||||||
* @details 仅在 PendSV中断 中由系统调用并执行。
|
* @details 仅在 PendSV中断 中由系统调用并执行。
|
||||||
* @author 迟凯峰
|
* @author 迟凯峰
|
||||||
* @version V2.3.1
|
* @version v3.0.0
|
||||||
* @date 2026.03.01
|
* @date 2026.07.21
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
#include "os_var.h"
|
#include "os_var.h"
|
||||||
#if (MCUCFG_PENDSVFIFO_DEPTH > 0)
|
#if (SYSCFG_PENDSVFIFO_DEPTH > 0)
|
||||||
#include "os_api.h"
|
#include "os_api.h"
|
||||||
#include "sv_com.h"
|
#include "sv_com.h"
|
||||||
#include "ur_api.h"
|
#include "ur_api.h"
|
||||||
@@ -57,7 +57,7 @@ static void _clear_delay_(void _STATIC_MEM_ *sv) MCUCFG_OSIT_ATTRIBUTE
|
|||||||
#if 1 /* 编译开关 *//* 如果用户不会调用关联服务,可手动移除该函数(1 改为 0)*/
|
#if 1 /* 编译开关 *//* 如果用户不会调用关联服务,可手动移除该函数(1 改为 0)*/
|
||||||
static void _resume_task_(void _STATIC_MEM_ *sv) MCUCFG_OSIT_ATTRIBUTE
|
static void _resume_task_(void _STATIC_MEM_ *sv) MCUCFG_OSIT_ATTRIBUTE
|
||||||
{
|
{
|
||||||
s_tasknode_tsp htask = ((sp_task_tsp)sv)->htask;
|
s_taskctrl_tsp htask = ((sp_task_tsp)sv)->htask;
|
||||||
#if (SYSCFG_PENDSVFIFO_ERRORCALLBACK == __ENABLED__)
|
#if (SYSCFG_PENDSVFIFO_ERRORCALLBACK == __ENABLED__)
|
||||||
s_ecode_t _ecode = sc_resume_task(htask);
|
s_ecode_t _ecode = sc_resume_task(htask);
|
||||||
if(_ecode){
|
if(_ecode){
|
||||||
@@ -84,7 +84,7 @@ static void _resume_task_(void _STATIC_MEM_ *sv) MCUCFG_OSIT_ATTRIBUTE
|
|||||||
#if 1 /* 编译开关 *//* 如果用户不会调用关联服务,可手动移除该函数(1 改为 0)*/
|
#if 1 /* 编译开关 *//* 如果用户不会调用关联服务,可手动移除该函数(1 改为 0)*/
|
||||||
static void _suspend_task_(void _STATIC_MEM_ *sv) MCUCFG_OSIT_ATTRIBUTE
|
static void _suspend_task_(void _STATIC_MEM_ *sv) MCUCFG_OSIT_ATTRIBUTE
|
||||||
{
|
{
|
||||||
s_tasknode_tsp htask = ((sp_task_tsp)sv)->htask;
|
s_taskctrl_tsp htask = ((sp_task_tsp)sv)->htask;
|
||||||
#if (SYSCFG_PENDSVFIFO_ERRORCALLBACK == __ENABLED__)
|
#if (SYSCFG_PENDSVFIFO_ERRORCALLBACK == __ENABLED__)
|
||||||
s_ecode_t _ecode = sc_suspend_task(htask);
|
s_ecode_t _ecode = sc_suspend_task(htask);
|
||||||
if(_ecode){
|
if(_ecode){
|
||||||
@@ -111,7 +111,7 @@ static void _suspend_task_(void _STATIC_MEM_ *sv) MCUCFG_OSIT_ATTRIBUTE
|
|||||||
#if 1 /* 编译开关 *//* 如果用户不会调用关联服务,可手动移除该函数(1 改为 0)*/
|
#if 1 /* 编译开关 *//* 如果用户不会调用关联服务,可手动移除该函数(1 改为 0)*/
|
||||||
static void _delete_task_(void _STATIC_MEM_ *sv) MCUCFG_OSIT_ATTRIBUTE
|
static void _delete_task_(void _STATIC_MEM_ *sv) MCUCFG_OSIT_ATTRIBUTE
|
||||||
{
|
{
|
||||||
s_tasknode_tsp htask = ((sp_task_tsp)sv)->htask;
|
s_taskctrl_tsp htask = ((sp_task_tsp)sv)->htask;
|
||||||
#if (SYSCFG_PENDSVFIFO_ERRORCALLBACK == __ENABLED__)
|
#if (SYSCFG_PENDSVFIFO_ERRORCALLBACK == __ENABLED__)
|
||||||
s_ecode_t _ecode = sc_delete_task(htask);
|
s_ecode_t _ecode = sc_delete_task(htask);
|
||||||
if(_ecode){
|
if(_ecode){
|
||||||
@@ -129,6 +129,34 @@ static void _delete_task_(void _STATIC_MEM_ *sv) MCUCFG_OSIT_ATTRIBUTE
|
|||||||
#define _delete_task_ OS_NULL
|
#define _delete_task_ OS_NULL
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
\brief 重置任务
|
||||||
|
\param[in] sv 服务的结构体指针
|
||||||
|
\return 无
|
||||||
|
\note 关联服务:iResetTask(task, status)。
|
||||||
|
*/
|
||||||
|
#if 1 /* 编译开关 *//* 如果用户不会调用关联服务,可手动移除该函数(1 改为 0)*/
|
||||||
|
static void _reset_task_(void _STATIC_MEM_ *sv) MCUCFG_OSIT_ATTRIBUTE
|
||||||
|
{
|
||||||
|
s_taskctrl_tsp htask = ((sp_taskrst_tsp)sv)->htask;
|
||||||
|
s_u8_t status = ((sp_taskrst_tsp)sv)->status;
|
||||||
|
#if (SYSCFG_PENDSVFIFO_ERRORCALLBACK == __ENABLED__)
|
||||||
|
s_ecode_t _ecode = sc_reset_task(htask, status);
|
||||||
|
if(_ecode){
|
||||||
|
s_psvfifo_ecode = _ecode;
|
||||||
|
pResetTask_ErrorCallback(htask, status);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
if(htask == OS_NULL) return;
|
||||||
|
if(htask->status < OS_STATUS_DELETED){
|
||||||
|
sa_reset_task(htask, status);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
#define _reset_task_ OS_NULL
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
\brief 清除阻塞(状态)
|
\brief 清除阻塞(状态)
|
||||||
\param[in] sv 服务的结构体指针
|
\param[in] sv 服务的结构体指针
|
||||||
@@ -138,7 +166,7 @@ static void _delete_task_(void _STATIC_MEM_ *sv) MCUCFG_OSIT_ATTRIBUTE
|
|||||||
#if 1 /* 编译开关 *//* 如果用户不会调用关联服务,可手动移除该函数(1 改为 0)*/
|
#if 1 /* 编译开关 *//* 如果用户不会调用关联服务,可手动移除该函数(1 改为 0)*/
|
||||||
static void _clear_block_(void _STATIC_MEM_ *sv) MCUCFG_OSIT_ATTRIBUTE
|
static void _clear_block_(void _STATIC_MEM_ *sv) MCUCFG_OSIT_ATTRIBUTE
|
||||||
{
|
{
|
||||||
s_tasknode_tsp htask = ((sp_task_tsp)sv)->htask;
|
s_taskctrl_tsp htask = ((sp_task_tsp)sv)->htask;
|
||||||
#if (SYSCFG_PENDSVFIFO_ERRORCALLBACK == __ENABLED__)
|
#if (SYSCFG_PENDSVFIFO_ERRORCALLBACK == __ENABLED__)
|
||||||
s_ecode_t _ecode = sc_clear_block(htask);
|
s_ecode_t _ecode = sc_clear_block(htask);
|
||||||
if(_ecode){
|
if(_ecode){
|
||||||
@@ -166,7 +194,7 @@ static void _clear_block_(void _STATIC_MEM_ *sv) MCUCFG_OSIT_ATTRIBUTE
|
|||||||
#if 1 /* 编译开关 *//* 如果用户不会调用关联服务,可手动移除该函数(1 改为 0)*/
|
#if 1 /* 编译开关 *//* 如果用户不会调用关联服务,可手动移除该函数(1 改为 0)*/
|
||||||
static void _set_block_(void _STATIC_MEM_ *sv) MCUCFG_OSIT_ATTRIBUTE
|
static void _set_block_(void _STATIC_MEM_ *sv) MCUCFG_OSIT_ATTRIBUTE
|
||||||
{
|
{
|
||||||
s_tasknode_tsp htask = ((sp_blocktime_tsp)sv)->htask;
|
s_taskctrl_tsp htask = ((sp_blocktime_tsp)sv)->htask;
|
||||||
s_delay_t tick = ((sp_blocktime_tsp)sv)->tick;
|
s_delay_t tick = ((sp_blocktime_tsp)sv)->tick;
|
||||||
#if (SYSCFG_PENDSVFIFO_ERRORCALLBACK == __ENABLED__)
|
#if (SYSCFG_PENDSVFIFO_ERRORCALLBACK == __ENABLED__)
|
||||||
s_ecode_t _ecode = sc_set_block(htask, tick);
|
s_ecode_t _ecode = sc_set_block(htask, tick);
|
||||||
@@ -194,7 +222,7 @@ static void _set_block_(void _STATIC_MEM_ *sv) MCUCFG_OSIT_ATTRIBUTE
|
|||||||
#if 1 /* 编译开关 *//* 如果用户不会调用关联服务,可手动移除该函数(1 改为 0)*/
|
#if 1 /* 编译开关 *//* 如果用户不会调用关联服务,可手动移除该函数(1 改为 0)*/
|
||||||
static void _set_taskpri_(void _STATIC_MEM_ *sv) MCUCFG_OSIT_ATTRIBUTE
|
static void _set_taskpri_(void _STATIC_MEM_ *sv) MCUCFG_OSIT_ATTRIBUTE
|
||||||
{
|
{
|
||||||
s_tasknode_tsp htask = ((sp_taskpri_tsp)sv)->htask;
|
s_taskctrl_tsp htask = ((sp_taskpri_tsp)sv)->htask;
|
||||||
s_u8_t npri = ((sp_taskpri_tsp)sv)->npri;
|
s_u8_t npri = ((sp_taskpri_tsp)sv)->npri;
|
||||||
#if (SYSCFG_PENDSVFIFO_ERRORCALLBACK == __ENABLED__)
|
#if (SYSCFG_PENDSVFIFO_ERRORCALLBACK == __ENABLED__)
|
||||||
s_ecode_t _ecode = sc_set_taskpri(htask, npri);
|
s_ecode_t _ecode = sc_set_taskpri(htask, npri);
|
||||||
@@ -421,6 +449,7 @@ void (_CODE_MEM_ * const _CONST_MEM_ sPendSV_FIFOHandler[OS_SVID_END])(void _STA
|
|||||||
_resume_task_,
|
_resume_task_,
|
||||||
_suspend_task_,
|
_suspend_task_,
|
||||||
_delete_task_,
|
_delete_task_,
|
||||||
|
_reset_task_,
|
||||||
_clear_block_,
|
_clear_block_,
|
||||||
_set_block_,
|
_set_block_,
|
||||||
_set_taskpri_,
|
_set_taskpri_,
|
||||||
@@ -451,7 +480,7 @@ void (_CODE_MEM_ * const _CONST_MEM_ sPendSV_FIFOHandler[OS_SVID_END])(void _STA
|
|||||||
*/
|
*/
|
||||||
#if 1 /* 编译开关 *//* 如果该函数在用户文件中实现且此处的弱定义无效,可手动移除该函数(1 改为 0)*/ \
|
#if 1 /* 编译开关 *//* 如果该函数在用户文件中实现且此处的弱定义无效,可手动移除该函数(1 改为 0)*/ \
|
||||||
&& !defined (_resume_task_)
|
&& !defined (_resume_task_)
|
||||||
__WEAK void pResumeTask_ErrorCallback(s_tasknode_tsp htask) MCUCFG_OSIT_ATTRIBUTE
|
__WEAK void pResumeTask_ErrorCallback(s_taskctrl_tsp htask) MCUCFG_OSIT_ATTRIBUTE
|
||||||
{
|
{
|
||||||
/* Prevent unused argument(s) compilation warning */
|
/* Prevent unused argument(s) compilation warning */
|
||||||
__UNUSED(htask);
|
__UNUSED(htask);
|
||||||
@@ -468,7 +497,7 @@ __WEAK void pResumeTask_ErrorCallback(s_tasknode_tsp htask) MCUCFG_OSIT_ATTRIBUT
|
|||||||
*/
|
*/
|
||||||
#if 1 /* 编译开关 *//* 如果该函数在用户文件中实现且此处的弱定义无效,可手动移除该函数(1 改为 0)*/ \
|
#if 1 /* 编译开关 *//* 如果该函数在用户文件中实现且此处的弱定义无效,可手动移除该函数(1 改为 0)*/ \
|
||||||
&& !defined (_suspend_task_)
|
&& !defined (_suspend_task_)
|
||||||
__WEAK void pSuspendTask_ErrorCallback(s_tasknode_tsp htask) MCUCFG_OSIT_ATTRIBUTE
|
__WEAK void pSuspendTask_ErrorCallback(s_taskctrl_tsp htask) MCUCFG_OSIT_ATTRIBUTE
|
||||||
{
|
{
|
||||||
/* Prevent unused argument(s) compilation warning */
|
/* Prevent unused argument(s) compilation warning */
|
||||||
__UNUSED(htask);
|
__UNUSED(htask);
|
||||||
@@ -485,7 +514,7 @@ __WEAK void pSuspendTask_ErrorCallback(s_tasknode_tsp htask) MCUCFG_OSIT_ATTRIBU
|
|||||||
*/
|
*/
|
||||||
#if 1 /* 编译开关 *//* 如果该函数在用户文件中实现且此处的弱定义无效,可手动移除该函数(1 改为 0)*/ \
|
#if 1 /* 编译开关 *//* 如果该函数在用户文件中实现且此处的弱定义无效,可手动移除该函数(1 改为 0)*/ \
|
||||||
&& !defined (_delete_task_)
|
&& !defined (_delete_task_)
|
||||||
__WEAK void pDeleteTask_ErrorCallback(s_tasknode_tsp htask) MCUCFG_OSIT_ATTRIBUTE
|
__WEAK void pDeleteTask_ErrorCallback(s_taskctrl_tsp htask) MCUCFG_OSIT_ATTRIBUTE
|
||||||
{
|
{
|
||||||
/* Prevent unused argument(s) compilation warning */
|
/* Prevent unused argument(s) compilation warning */
|
||||||
__UNUSED(htask);
|
__UNUSED(htask);
|
||||||
@@ -495,6 +524,25 @@ __WEAK void pDeleteTask_ErrorCallback(s_tasknode_tsp htask) MCUCFG_OSIT_ATTRIBUT
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
\brief iResetTask(task, status) error callback
|
||||||
|
\param[in] htask 任务句柄
|
||||||
|
\param[in] status 任务初始状态
|
||||||
|
\return 无
|
||||||
|
*/
|
||||||
|
#if 1 /* 编译开关 *//* 如果该函数在用户文件中实现且此处的弱定义无效,可手动移除该函数(1 改为 0)*/ \
|
||||||
|
&& !defined (_reset_task_)
|
||||||
|
__WEAK void pResetTask_ErrorCallback(s_taskctrl_tsp htask, s_u8_t status) MCUCFG_OSIT_ATTRIBUTE
|
||||||
|
{
|
||||||
|
/* Prevent unused argument(s) compilation warning */
|
||||||
|
__UNUSED(htask);
|
||||||
|
__UNUSED(status);
|
||||||
|
/* NOTE: This function should not be modified, when the callback is needed,
|
||||||
|
the pDeleteTask_ErrorCallback could be implemented in the user file
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
\brief iClearBlock(task) error callback
|
\brief iClearBlock(task) error callback
|
||||||
\param[in] htask 任务句柄
|
\param[in] htask 任务句柄
|
||||||
@@ -502,7 +550,7 @@ __WEAK void pDeleteTask_ErrorCallback(s_tasknode_tsp htask) MCUCFG_OSIT_ATTRIBUT
|
|||||||
*/
|
*/
|
||||||
#if 1 /* 编译开关 *//* 如果该函数在用户文件中实现且此处的弱定义无效,可手动移除该函数(1 改为 0)*/ \
|
#if 1 /* 编译开关 *//* 如果该函数在用户文件中实现且此处的弱定义无效,可手动移除该函数(1 改为 0)*/ \
|
||||||
&& !defined (_clear_block_)
|
&& !defined (_clear_block_)
|
||||||
__WEAK void pClearBlock_ErrorCallback(s_tasknode_tsp htask) MCUCFG_OSIT_ATTRIBUTE
|
__WEAK void pClearBlock_ErrorCallback(s_taskctrl_tsp htask) MCUCFG_OSIT_ATTRIBUTE
|
||||||
{
|
{
|
||||||
/* Prevent unused argument(s) compilation warning */
|
/* Prevent unused argument(s) compilation warning */
|
||||||
__UNUSED(htask);
|
__UNUSED(htask);
|
||||||
@@ -522,7 +570,7 @@ __WEAK void pClearBlock_ErrorCallback(s_tasknode_tsp htask) MCUCFG_OSIT_ATTRIBUT
|
|||||||
*/
|
*/
|
||||||
#if 1 /* 编译开关 *//* 如果该函数在用户文件中实现且此处的弱定义无效,可手动移除该函数(1 改为 0)*/ \
|
#if 1 /* 编译开关 *//* 如果该函数在用户文件中实现且此处的弱定义无效,可手动移除该函数(1 改为 0)*/ \
|
||||||
&& !defined (_set_block_)
|
&& !defined (_set_block_)
|
||||||
__WEAK void pSetBlock_ErrorCallback(s_tasknode_tsp htask, s_delay_t tick) MCUCFG_OSIT_ATTRIBUTE
|
__WEAK void pSetBlock_ErrorCallback(s_taskctrl_tsp htask, s_delay_t tick) MCUCFG_OSIT_ATTRIBUTE
|
||||||
{
|
{
|
||||||
/* Prevent unused argument(s) compilation warning */
|
/* Prevent unused argument(s) compilation warning */
|
||||||
__UNUSED(htask);
|
__UNUSED(htask);
|
||||||
@@ -541,7 +589,7 @@ __WEAK void pSetBlock_ErrorCallback(s_tasknode_tsp htask, s_delay_t tick) MCUCFG
|
|||||||
*/
|
*/
|
||||||
#if 1 /* 编译开关 *//* 如果该函数在用户文件中实现且此处的弱定义无效,可手动移除该函数(1 改为 0)*/ \
|
#if 1 /* 编译开关 *//* 如果该函数在用户文件中实现且此处的弱定义无效,可手动移除该函数(1 改为 0)*/ \
|
||||||
&& !defined (_set_taskpri_)
|
&& !defined (_set_taskpri_)
|
||||||
__WEAK void pSetTaskPri_ErrorCallback(s_tasknode_tsp htask, s_u8_t npri) MCUCFG_OSIT_ATTRIBUTE
|
__WEAK void pSetTaskPri_ErrorCallback(s_taskctrl_tsp htask, s_u8_t npri) MCUCFG_OSIT_ATTRIBUTE
|
||||||
{
|
{
|
||||||
/* Prevent unused argument(s) compilation warning */
|
/* Prevent unused argument(s) compilation warning */
|
||||||
__UNUSED(htask);
|
__UNUSED(htask);
|
||||||
|
|||||||
+13
-5
@@ -4,8 +4,8 @@
|
|||||||
* @brief 中断FIFO服务-调用宏
|
* @brief 中断FIFO服务-调用宏
|
||||||
* @details 仅在用户中断中调用,而后挂起到 PendSV中断 中执行。
|
* @details 仅在用户中断中调用,而后挂起到 PendSV中断 中执行。
|
||||||
* @author 迟凯峰
|
* @author 迟凯峰
|
||||||
* @version V2.3.1
|
* @version v3.0.0
|
||||||
* @date 2026.03.01
|
* @date 2026.07.21
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
#ifndef __SV_INT_FIFO_H
|
#ifndef __SV_INT_FIFO_H
|
||||||
@@ -56,6 +56,14 @@ do{ \
|
|||||||
mPendSV_FIFOLoad(); \
|
mPendSV_FIFOLoad(); \
|
||||||
}while(false)
|
}while(false)
|
||||||
|
|
||||||
|
/** 重置任务 */
|
||||||
|
#define sIPS_ResetTask(_htask, _status) \
|
||||||
|
do{ \
|
||||||
|
static sp_taskrst_ts u_psv = {OS_SVID_RESETTASK, OS_NULL, _status}; \
|
||||||
|
u_psv.htask = _htask; \
|
||||||
|
mPendSV_FIFOLoad(); \
|
||||||
|
}while(false)
|
||||||
|
|
||||||
/** 清除阻塞(状态)*/
|
/** 清除阻塞(状态)*/
|
||||||
#define sIPS_ClearBlock(_htask) \
|
#define sIPS_ClearBlock(_htask) \
|
||||||
do{ \
|
do{ \
|
||||||
@@ -147,8 +155,8 @@ do{ \
|
|||||||
static sp_group_ts u_psv = {OS_SVID_WRITEGROUP, (void *)&_group, _sign##sizeof(_group), 0}; \
|
static sp_group_ts u_psv = {OS_SVID_WRITEGROUP, (void *)&_group, _sign##sizeof(_group), 0}; \
|
||||||
u_##_group##_ts u_grp; \
|
u_##_group##_ts u_grp; \
|
||||||
miWriteFlagBits(); \
|
miWriteFlagBits(); \
|
||||||
sizeof(u_grp) == 1 ? *(s_u8_t *)&u_grp = false : MCUCFG_TERNARYMASK \
|
sizeof(u_grp) == 1 ? *(s_u8_t *)&u_grp = false : MCUCFG_TERNARY_MASK \
|
||||||
sizeof(u_grp) == 2 ? *(s_u16_t *)&u_grp = false : MCUCFG_TERNARYMASK \
|
sizeof(u_grp) == 2 ? *(s_u16_t *)&u_grp = false : MCUCFG_TERNARY_MASK \
|
||||||
sizeof(u_grp) == 4 ? *(s_u32_t *)&u_grp = false : false; \
|
sizeof(u_grp) == 4 ? *(s_u32_t *)&u_grp = false : false; \
|
||||||
siWriteFlagBits_##_nbit(
|
siWriteFlagBits_##_nbit(
|
||||||
|
|
||||||
@@ -169,7 +177,7 @@ do{ \
|
|||||||
/** 设置时间 */
|
/** 设置时间 */
|
||||||
#define sIPS_SetTime(_t) \
|
#define sIPS_SetTime(_t) \
|
||||||
do{ \
|
do{ \
|
||||||
static const m_rtccount_t _c = 1000000UL / SYSCFG_SYSTICK_CYCLE / 2 + 1; \
|
static m_rtccount_t const _c = 1000000UL / SYSCFG_SYSTICK_CYCLE / 2 + 1; \
|
||||||
iWriteGAry(&s_rtc, _t, sizeof(s_rtc)); \
|
iWriteGAry(&s_rtc, _t, sizeof(s_rtc)); \
|
||||||
iWriteGVar(s_rtc_counter, _c); \
|
iWriteGVar(s_rtc_counter, _c); \
|
||||||
}while(false)
|
}while(false)
|
||||||
|
|||||||
+18
-13
@@ -4,15 +4,16 @@
|
|||||||
* @brief 中断本地服务
|
* @brief 中断本地服务
|
||||||
* @details 在用户中断中调用并直接在本地执行。
|
* @details 在用户中断中调用并直接在本地执行。
|
||||||
* @author 迟凯峰
|
* @author 迟凯峰
|
||||||
* @version V2.3.0
|
* @version v3.0.0
|
||||||
* @date 2026.02.19
|
* @date 2026.07.21
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
#include "os_var.h"
|
#include "os_var.h"
|
||||||
#include "sv_com.h"
|
#include "sv_com.h"
|
||||||
|
|
||||||
#if (SYSCFG_MCUCORE == 8051)
|
/* 相对寄存器访问 for C51 */
|
||||||
#pragma NOAREGS /* 相对寄存器访问 for C51 */
|
#if defined ( __C51__ )
|
||||||
|
#pragma NOAREGS
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -66,8 +67,8 @@ void *si_recv_mail(s_mailbox_tsp hmbox)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if (SYSCFG_MSGQUEUE == __ENABLED__)
|
#if (SYSCFG_MSGQUEUE == __ENABLED__) && (SYSCFG_MSGQUEUE_INTRECV == __ENABLED__)
|
||||||
#if (SYSCFG_MCUCORE == 8051)
|
#if defined ( __C51__ )
|
||||||
/**
|
/**
|
||||||
\brief 获取队列互斥量
|
\brief 获取队列互斥量
|
||||||
\details 获取队列访问权限 for C51接收消息。
|
\details 获取队列访问权限 for C51接收消息。
|
||||||
@@ -76,8 +77,9 @@ void *si_recv_mail(s_mailbox_tsp hmbox)
|
|||||||
*/
|
*/
|
||||||
bool si_take_quemut(s_msgque_tsp hque)
|
bool si_take_quemut(s_msgque_tsp hque)
|
||||||
{
|
{
|
||||||
if(!hque->mutex) return false;
|
if(!hque->lock) return false;
|
||||||
hque->mutex = false;
|
hque->lock = false;
|
||||||
|
__mx_MMB();
|
||||||
|
|
||||||
if(hque->type == __DYNAMIC__){
|
if(hque->type == __DYNAMIC__){
|
||||||
#if (SYSCFG_DEBUGGING == __ENABLED__)
|
#if (SYSCFG_DEBUGGING == __ENABLED__)
|
||||||
@@ -87,7 +89,8 @@ bool si_take_quemut(s_msgque_tsp hque)
|
|||||||
else if(!hque->counter);
|
else if(!hque->counter);
|
||||||
else return true;
|
else return true;
|
||||||
|
|
||||||
hque->mutex = true;
|
__mx_MMB();
|
||||||
|
hque->lock = true;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -112,7 +115,7 @@ static void *_back_ret_(bool _STATIC_MEM_ *mut, void *msg)
|
|||||||
void *si_recv_msg_c51(s_msgque_tsp hque)
|
void *si_recv_msg_c51(s_msgque_tsp hque)
|
||||||
{
|
{
|
||||||
void *msg = sc_recv_msg_staque((s_staque_tsp)hque);
|
void *msg = sc_recv_msg_staque((s_staque_tsp)hque);
|
||||||
return _back_ret_((bool *)&hque->mutex, msg);
|
return _back_ret_((bool *)&hque->lock, msg);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
/**
|
/**
|
||||||
@@ -123,8 +126,9 @@ void *si_recv_msg_c51(s_msgque_tsp hque)
|
|||||||
void *si_recv_msg_n51(s_msgque_tsp hque)
|
void *si_recv_msg_n51(s_msgque_tsp hque)
|
||||||
{
|
{
|
||||||
void *msg = OS_NULL;
|
void *msg = OS_NULL;
|
||||||
if(!hque->mutex) return OS_NULL;
|
if(!hque->lock) return OS_NULL;
|
||||||
hque->mutex = false;
|
hque->lock = false;
|
||||||
|
__mx_MMB();
|
||||||
|
|
||||||
if(hque->type == __DYNAMIC__){
|
if(hque->type == __DYNAMIC__){
|
||||||
#if (SYSCFG_DEBUGGING == __ENABLED__)
|
#if (SYSCFG_DEBUGGING == __ENABLED__)
|
||||||
@@ -135,7 +139,8 @@ void *si_recv_msg_n51(s_msgque_tsp hque)
|
|||||||
msg = sc_recv_msg_staque((s_staque_tsp)hque);
|
msg = sc_recv_msg_staque((s_staque_tsp)hque);
|
||||||
}
|
}
|
||||||
|
|
||||||
hque->mutex = true;
|
__mx_MMB();
|
||||||
|
hque->lock = true;
|
||||||
return msg;
|
return msg;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
+10
-3
@@ -4,8 +4,8 @@
|
|||||||
* @brief 中断本地服务
|
* @brief 中断本地服务
|
||||||
* @details 在用户中断中调用并直接在本地执行。
|
* @details 在用户中断中调用并直接在本地执行。
|
||||||
* @author 迟凯峰
|
* @author 迟凯峰
|
||||||
* @version V2.3.0
|
* @version v3.0.0
|
||||||
* @date 2026.02.19
|
* @date 2026.07.21
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
#ifndef __SV_INT_LOC_H
|
#ifndef __SV_INT_LOC_H
|
||||||
@@ -32,12 +32,19 @@ m_fetion_t si_recv_fetion (s_tionbox_tsp htbox);
|
|||||||
#define sISV_RecvFetion(tbox) si_recv_fetion(&tbox) /*!< 接收飞信 */
|
#define sISV_RecvFetion(tbox) si_recv_fetion(&tbox) /*!< 接收飞信 */
|
||||||
#define sISV_RecvMail(mbox) si_recv_mail(&mbox) /*!< 接收邮件 */
|
#define sISV_RecvMail(mbox) si_recv_mail(&mbox) /*!< 接收邮件 */
|
||||||
|
|
||||||
#if (SYSCFG_MCUCORE == 8051)
|
#if defined ( __C51__ )
|
||||||
#define sISV_RecvMsg(que) (si_take_quemut((s_msgque_tsp)&que) ? si_recv_msg_c51((s_msgque_tsp)&que) : OS_NULL) /*!< C51接收消息 */
|
#define sISV_RecvMsg(que) (si_take_quemut((s_msgque_tsp)&que) ? si_recv_msg_c51((s_msgque_tsp)&que) : OS_NULL) /*!< C51接收消息 */
|
||||||
#else
|
#else
|
||||||
#define sISV_RecvMsg(que) si_recv_msg_n51((s_msgque_tsp)&que) /*!< 非51接收消息 */
|
#define sISV_RecvMsg(que) si_recv_msg_n51((s_msgque_tsp)&que) /*!< 非51接收消息 */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/** 归还二值信号量 */
|
||||||
|
#define sISV_BackBin(bin) \
|
||||||
|
do{ \
|
||||||
|
__mx_MMB(); \
|
||||||
|
bin.binary = true; \
|
||||||
|
}while(false)
|
||||||
|
|
||||||
/** 查询标志组 */
|
/** 查询标志组 */
|
||||||
#define sISV_QueryFlagGroup(group) \
|
#define sISV_QueryFlagGroup(group) \
|
||||||
( \
|
( \
|
||||||
|
|||||||
+11
-10
@@ -4,8 +4,8 @@
|
|||||||
* @brief PSV服务
|
* @brief PSV服务
|
||||||
* @details 仅在 PendSV中断 中调用并执行。
|
* @details 仅在 PendSV中断 中调用并执行。
|
||||||
* @author 迟凯峰
|
* @author 迟凯峰
|
||||||
* @version V2.3.1
|
* @version v3.0.0
|
||||||
* @date 2026.03.01
|
* @date 2026.07.21
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
#ifndef __SV_PEND_H
|
#ifndef __SV_PEND_H
|
||||||
@@ -23,14 +23,15 @@
|
|||||||
@{
|
@{
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define sPSV_ClearDelay() sc_clear_delay() /*!< 清除就绪延时 */
|
#define sPSV_ClearDelay() sc_clear_delay() /*!< 清除就绪延时 */
|
||||||
#define sPSV_ResumeTask(htask) sc_resume_task(htask) /*!< 恢复任务 */
|
#define sPSV_ResumeTask(htask) sc_resume_task(htask) /*!< 恢复任务 */
|
||||||
#define sPSV_SuspendTask(htask) sc_suspend_task(htask) /*!< 挂起任务 */
|
#define sPSV_SuspendTask(htask) sc_suspend_task(htask) /*!< 挂起任务 */
|
||||||
#define sPSV_DeleteTask(htask) sc_delete_task(htask) /*!< 删除任务 */
|
#define sPSV_DeleteTask(htask) sc_delete_task(htask) /*!< 删除任务 */
|
||||||
#define sPSV_ClearBlock(htask) sc_clear_block(htask) /*!< 清除阻塞(状态)*/
|
#define sPSV_ResetTask(htask, status) sc_reset_task(htask, status)/*!< 重置任务 */
|
||||||
#define sPSV_SetBlock(htask, tick) sc_set_block(htask, tick) /*!< 设置阻塞(时间)*/
|
#define sPSV_ClearBlock(htask) sc_clear_block(htask) /*!< 清除阻塞(状态)*/
|
||||||
#define sPSV_SetTaskPri(htask, npri) sc_set_taskpri(htask, npri) /*!< 设置任务优先级 */
|
#define sPSV_SetBlock(htask, tick) sc_set_block(htask, tick) /*!< 设置阻塞(时间)*/
|
||||||
#define sPSV_GiveBin(bin) sc_write_binary(&bin, true) /*!< 给予二值信号量 */
|
#define sPSV_SetTaskPri(htask, npri) sc_set_taskpri(htask, npri) /*!< 设置任务优先级 */
|
||||||
|
#define sPSV_GiveBin(bin) sc_write_binary(&bin, true) /*!< 给予二值信号量 */
|
||||||
|
|
||||||
/** @} */
|
/** @} */
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|||||||
+63
-48
File diff suppressed because it is too large
Load Diff
+26
-19
@@ -4,8 +4,8 @@
|
|||||||
* @brief 任务服务
|
* @brief 任务服务
|
||||||
* @details 仅在任务中调用并执行。
|
* @details 仅在任务中调用并执行。
|
||||||
* @author 迟凯峰
|
* @author 迟凯峰
|
||||||
* @version V2.3.0
|
* @version v3.0.0
|
||||||
* @date 2026.02.19
|
* @date 2026.07.21
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
#ifndef __SV_TASK_H
|
#ifndef __SV_TASK_H
|
||||||
@@ -13,7 +13,7 @@
|
|||||||
|
|
||||||
#include "os_var.h"
|
#include "os_var.h"
|
||||||
|
|
||||||
#if (MCUCFG_ISA != __ARM__)
|
#if defined ( __C51__ ) || defined ( __C251__ )
|
||||||
void su_schedule_locks (void);
|
void su_schedule_locks (void);
|
||||||
void su_kernel_lock0 (void);
|
void su_kernel_lock0 (void);
|
||||||
void su_kernel_unlock0 (void);
|
void su_kernel_unlock0 (void);
|
||||||
@@ -23,7 +23,7 @@ void *su_kernel_unlocks_rvp(void *p);
|
|||||||
|
|
||||||
#if (SYSCFG_KERNELLOCKNESTING == __DISABLED__)
|
#if (SYSCFG_KERNELLOCKNESTING == __DISABLED__)
|
||||||
#define su_kernel_locks su_kernel_lock0
|
#define su_kernel_locks su_kernel_lock0
|
||||||
#elif (MCUCFG_ISA != __ARM__)
|
#elif defined ( __C51__ ) || defined ( __C251__ )
|
||||||
void su_kernel_locks (void);
|
void su_kernel_locks (void);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -31,9 +31,9 @@ void su_schedule_unlocks (void);
|
|||||||
void su_kernel_unlocks (void);
|
void su_kernel_unlocks (void);
|
||||||
void su_kernel_unlock0_psv(void);
|
void su_kernel_unlock0_psv(void);
|
||||||
|
|
||||||
s_ecode_t su_startup_task_0 (s_taskhand_tsp hhand, s_u8_t status);
|
s_ecode_t su_startup_task_0 (s_taskload_tsp hload, s_u8_t status);
|
||||||
s_ecode_t su_startup_task_1 (s_taskhand_tsp hhand, s_u8_t status, s_voidvoid_tfp entry);
|
s_ecode_t su_startup_task_1 (s_taskload_tsp hload, s_u8_t status, s_voidvoid_tfp entry);
|
||||||
s_ecode_t su_resume_suspend (s_tasknode_tsp htask);
|
s_ecode_t su_resume_suspend (s_taskctrl_tsp htask);
|
||||||
void su_yield_tasking (void);
|
void su_yield_tasking (void);
|
||||||
void su_delay (s_delay_t tick);
|
void su_delay (s_delay_t tick);
|
||||||
bool su_take_mutex (s_mutex_tsp hmut, s_delay_t tick);
|
bool su_take_mutex (s_mutex_tsp hmut, s_delay_t tick);
|
||||||
@@ -44,11 +44,11 @@ bool su_take_semaph (s_semaph_tsp hsem, s_delay_t tick);
|
|||||||
m_fetion_t su_recv_fetion (s_tionbox_tsp htbox, s_delay_t tick);
|
m_fetion_t su_recv_fetion (s_tionbox_tsp htbox, s_delay_t tick);
|
||||||
void *su_recv_mail (s_mailbox_tsp hmbox, s_delay_t tick);
|
void *su_recv_mail (s_mailbox_tsp hmbox, s_delay_t tick);
|
||||||
void *su_recv_msg (s_msgque_tsp hque, s_delay_t tick);
|
void *su_recv_msg (s_msgque_tsp hque, s_delay_t tick);
|
||||||
bool su_recv_taskmsg (volatile s_u8_t _STATIC_MEM_ *tmrf, s_delay_t tick);
|
bool su_recv_taskmsg (s_u8_t volatile _STATIC_MEM_ *tmrf, s_delay_t tick);
|
||||||
bool su_wait_group_1 (volatile s_u8_t _STATIC_MEM_ *hgrp, s_delay_t tick);
|
bool su_wait_group_1 (s_u8_t volatile _STATIC_MEM_ *hgrp, s_delay_t tick);
|
||||||
bool su_wait_group_2 (volatile s_u16_t _STATIC_MEM_ *hgrp, s_delay_t tick);
|
bool su_wait_group_2 (s_u16_t volatile _STATIC_MEM_ *hgrp, s_delay_t tick);
|
||||||
bool su_wait_group_4 (volatile s_u32_t _STATIC_MEM_ *hgrp, s_delay_t tick);
|
bool su_wait_group_4 (s_u32_t volatile _STATIC_MEM_ *hgrp, s_delay_t tick);
|
||||||
bool su_query_group (volatile void _STATIC_MEM_ *hgrp, s_u8_t size);
|
bool su_query_group (void volatile _STATIC_MEM_ *hgrp, s_u8_t size);
|
||||||
bool su_init_mempool (s_thrmem_tsp hmem, size_t size);
|
bool su_init_mempool (s_thrmem_tsp hmem, size_t size);
|
||||||
void _MALLOC_MEM_ *su_talloc (s_thrmem_tsp hmem, size_t size);
|
void _MALLOC_MEM_ *su_talloc (s_thrmem_tsp hmem, size_t size);
|
||||||
void _MALLOC_MEM_ *su_xalloc (void _MALLOC_MEM_ *p);
|
void _MALLOC_MEM_ *su_xalloc (void _MALLOC_MEM_ *p);
|
||||||
@@ -63,11 +63,12 @@ void _MALLOC_MEM_ *su_xalloc (void _MALLOC_MEM_ *p);
|
|||||||
@{
|
@{
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#if (MCUCFG_ISA == __ARM__)
|
#if !defined ( __C51__ ) && !defined ( __C251__ )
|
||||||
/** 调度上锁(进入嵌套任务临界区)*/
|
/** 调度上锁(进入嵌套任务临界区)*/
|
||||||
__STATIC_FORCEINLINE void su_schedule_locks(void)
|
__STATIC_FORCEINLINE void su_schedule_locks(void)
|
||||||
{
|
{
|
||||||
s_sign_schedule.every[0] = true;
|
s_sign_schedule.every[0] = true;
|
||||||
|
__mx_MMB();
|
||||||
s_schedulelock_counter++;
|
s_schedulelock_counter++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -116,15 +117,15 @@ __STATIC_FORCEINLINE void *su_kernel_unlocks_rvp(void *p)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/** 启动任务 */
|
/** 启动任务 */
|
||||||
#define sUSV_StartTask_0(hhand, status) \
|
#define sUSV_StartTask_0(hload, status) \
|
||||||
( \
|
( \
|
||||||
(m_boolvoid_tf(su_kernel_lock0))() || true ? su_startup_task_0((s_taskhand_tsp)hhand, status) : OS_ECODE_NOERROR \
|
(m_boolvoid_tf(su_kernel_lock0))() || true ? su_startup_task_0((s_taskload_tsp)hload, status) : OS_ECODE_NOERROR \
|
||||||
)
|
)
|
||||||
|
|
||||||
/** 启动任务 */
|
/** 启动任务 */
|
||||||
#define sUSV_StartTask_1(hhand, status, entry) \
|
#define sUSV_StartTask_1(hload, status, entry) \
|
||||||
( \
|
( \
|
||||||
(m_boolvoid_tf(su_kernel_lock0))() || true ? su_startup_task_1((s_taskhand_tsp)hhand, status, (s_voidvoid_tfp)entry) : OS_ECODE_NOERROR \
|
(m_boolvoid_tf(su_kernel_lock0))() || true ? su_startup_task_1((s_taskload_tsp)hload, status, (s_voidvoid_tfp)entry) : OS_ECODE_NOERROR \
|
||||||
)
|
)
|
||||||
|
|
||||||
/** 恢复指定任务并挂起自身任务 */
|
/** 恢复指定任务并挂起自身任务 */
|
||||||
@@ -151,6 +152,12 @@ __STATIC_FORCEINLINE void *su_kernel_unlocks_rvp(void *p)
|
|||||||
(m_boolvoid_tf(su_kernel_locks))() || true ? su_kernel_unlocks_rec(sc_delete_task(htask)) : OS_ECODE_NOERROR \
|
(m_boolvoid_tf(su_kernel_locks))() || true ? su_kernel_unlocks_rec(sc_delete_task(htask)) : OS_ECODE_NOERROR \
|
||||||
)
|
)
|
||||||
|
|
||||||
|
/** 重置任务 */
|
||||||
|
#define sUSV_ResetTask(htask, status) \
|
||||||
|
( \
|
||||||
|
(m_boolvoid_tf(su_kernel_locks))() || true ? su_kernel_unlocks_rec(sc_reset_task(htask, status)) : OS_ECODE_NOERROR \
|
||||||
|
)
|
||||||
|
|
||||||
/** 清除阻塞(状态)*/
|
/** 清除阻塞(状态)*/
|
||||||
#define sUSV_ClearBlock(htask) \
|
#define sUSV_ClearBlock(htask) \
|
||||||
( \
|
( \
|
||||||
@@ -337,8 +344,8 @@ do{ \
|
|||||||
#define sUSV_ClearFlagGroup(group) \
|
#define sUSV_ClearFlagGroup(group) \
|
||||||
do{ \
|
do{ \
|
||||||
su_kernel_locks(); \
|
su_kernel_locks(); \
|
||||||
sizeof(group) == 1 ? *(s_u8_t *)&group = false : MCUCFG_TERNARYMASK \
|
sizeof(group) == 1 ? *(s_u8_t *)&group = false : MCUCFG_TERNARY_MASK \
|
||||||
sizeof(group) == 2 ? *(s_u16_t *)&group = false : MCUCFG_TERNARYMASK \
|
sizeof(group) == 2 ? *(s_u16_t *)&group = false : MCUCFG_TERNARY_MASK \
|
||||||
sizeof(group) == 4 ? *(s_u32_t *)&group = false : false; \
|
sizeof(group) == 4 ? *(s_u32_t *)&group = false : false; \
|
||||||
su_kernel_unlocks(); \
|
su_kernel_unlocks(); \
|
||||||
}while(false)
|
}while(false)
|
||||||
|
|||||||
+11
-5
@@ -4,8 +4,8 @@
|
|||||||
* @brief 滴答服务
|
* @brief 滴答服务
|
||||||
* @details 仅在 SysTick中断 中调用并执行。
|
* @details 仅在 SysTick中断 中调用并执行。
|
||||||
* @author 迟凯峰
|
* @author 迟凯峰
|
||||||
* @version V2.3.0
|
* @version v3.0.0
|
||||||
* @date 2026.02.19
|
* @date 2026.07.21
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
#include "os_var.h"
|
#include "os_var.h"
|
||||||
@@ -26,7 +26,7 @@
|
|||||||
*/
|
*/
|
||||||
bool st_take_semaph(s_semaph_tsp hsem) MCUCFG_OSIT_ATTRIBUTE
|
bool st_take_semaph(s_semaph_tsp hsem) MCUCFG_OSIT_ATTRIBUTE
|
||||||
{
|
{
|
||||||
s_semsize_t counter = hsem->counter;
|
s_semaph_t counter = hsem->counter;
|
||||||
if(counter){
|
if(counter){
|
||||||
hsem->counter = counter - 1;
|
hsem->counter = counter - 1;
|
||||||
return true;
|
return true;
|
||||||
@@ -45,7 +45,10 @@ bool st_take_semaph(s_semaph_tsp hsem) MCUCFG_OSIT_ATTRIBUTE
|
|||||||
void *st_recv_msg(s_msgque_tsp hque) MCUCFG_OSIT_ATTRIBUTE
|
void *st_recv_msg(s_msgque_tsp hque) MCUCFG_OSIT_ATTRIBUTE
|
||||||
{
|
{
|
||||||
void *msg = OS_NULL;
|
void *msg = OS_NULL;
|
||||||
hque->mutex = false;
|
#if (SYSCFG_MSGQUEUE_INTRECV == __ENABLED__)
|
||||||
|
hque->lock = false;
|
||||||
|
__mx_MMB();
|
||||||
|
#endif
|
||||||
|
|
||||||
if(hque->counter){
|
if(hque->counter){
|
||||||
if(hque->type == __DYNAMIC__){
|
if(hque->type == __DYNAMIC__){
|
||||||
@@ -56,7 +59,10 @@ void *st_recv_msg(s_msgque_tsp hque) MCUCFG_OSIT_ATTRIBUTE
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
hque->mutex = true;
|
#if (SYSCFG_MSGQUEUE_INTRECV == __ENABLED__)
|
||||||
|
__mx_MMB();
|
||||||
|
hque->lock = true;
|
||||||
|
#endif
|
||||||
return msg;
|
return msg;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
+32
-24
@@ -4,8 +4,8 @@
|
|||||||
* @brief 滴答服务
|
* @brief 滴答服务
|
||||||
* @details 仅在 SysTick中断 中调用并执行。
|
* @details 仅在 SysTick中断 中调用并执行。
|
||||||
* @author 迟凯峰
|
* @author 迟凯峰
|
||||||
* @version V2.3.0
|
* @version v3.0.0
|
||||||
* @date 2026.02.19
|
* @date 2026.07.21
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
#ifndef __SV_TICK_H
|
#ifndef __SV_TICK_H
|
||||||
@@ -26,29 +26,37 @@ void *st_recv_msg (s_msgque_tsp hque);
|
|||||||
@{
|
@{
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define sTSV_ClearDelay() sc_clear_delay() /*!< 清除就绪延时 */
|
#define sTSV_ClearDelay() sc_clear_delay() /*!< 清除就绪延时 */
|
||||||
#define sTSV_ResumeTask(htask) sc_resume_task(htask) /*!< 恢复任务 */
|
#define sTSV_ResumeTask(htask) sc_resume_task(htask) /*!< 恢复任务 */
|
||||||
#define sTSV_SuspendTask(htask) sc_suspend_task(htask) /*!< 挂起任务 */
|
#define sTSV_SuspendTask(htask) sc_suspend_task(htask) /*!< 挂起任务 */
|
||||||
#define sTSV_DeleteTask(htask) sc_delete_task(htask) /*!< 删除任务 */
|
#define sTSV_DeleteTask(htask) sc_delete_task(htask) /*!< 删除任务 */
|
||||||
#define sTSV_ClearBlock(htask) sc_clear_block(htask) /*!< 清除阻塞 */
|
#define sTSV_ResetTask(htask, status) sc_reset_task(htask, status) /*!< 重置任务 */
|
||||||
#define sTSV_SetBlock(htask, tick) sc_set_block(htask, tick) /*!< 设置阻塞 */
|
#define sTSV_ClearBlock(htask) sc_clear_block(htask) /*!< 清除阻塞 */
|
||||||
#define sTSV_SetTaskPri(htask, npri) sc_set_taskpri(htask, npri) /*!< 设置任务优先级 */
|
#define sTSV_SetBlock(htask, tick) sc_set_block(htask, tick) /*!< 设置阻塞 */
|
||||||
#define sTSV_GiveBin(bin) sc_write_binary(&bin, true) /*!< 给予二值信号量 */
|
#define sTSV_SetTaskPri(htask, npri) sc_set_taskpri(htask, npri) /*!< 设置任务优先级 */
|
||||||
#define sTSV_GiveSem(sem) sc_give_semaph(&sem) /*!< 给予计数信号量 */
|
#define sTSV_GiveBin(bin) sc_write_binary(&bin, true) /*!< 给予二值信号量 */
|
||||||
#define sTSV_SendFetion(tbox, tion) sc_send_fetion(&tbox, tion) /*!< 发送飞信 */
|
#define sTSV_GiveSem(sem) sc_give_semaph(&sem) /*!< 给予计数信号量 */
|
||||||
#define sTSV_SendMail(mbox, mail) sc_send_mail(&mbox, mail) /*!< 发送邮件 */
|
#define sTSV_SendFetion(tbox, tion) sc_send_fetion(&tbox, tion) /*!< 发送飞信 */
|
||||||
#define sTSV_SendMsg(que, msg) sc_send_msg((s_msgque_tsp)&que, msg)/*!< 发送消息 */
|
#define sTSV_SendMail(mbox, mail) sc_send_mail(&mbox, mail) /*!< 发送邮件 */
|
||||||
#define sTSV_TimInt(tmid, tick) sc_timint(tmid, tick) /*!< 定时中断 */
|
#define sTSV_SendMsg(que, msg) sc_send_msg((s_msgque_tsp)&que, msg)/*!< 发送消息 */
|
||||||
#define sTSV_TimQry(tmid, tick) sc_timqry(tmid, tick) /*!< 定时查询 */
|
#define sTSV_TimInt(tmid, tick) sc_timint(tmid, tick) /*!< 定时中断 */
|
||||||
|
#define sTSV_TimQry(tmid, tick) sc_timqry(tmid, tick) /*!< 定时查询 */
|
||||||
|
|
||||||
#define sTSV_TakeSem(sem) st_take_semaph(&sem) /*!< 获取计数信号量 */
|
#define sTSV_TakeSem(sem) st_take_semaph(&sem) /*!< 获取计数信号量 */
|
||||||
#define sTSV_RecvMsg(que) st_recv_msg((s_msgque_tsp)&que) /*!< 接收消息 */
|
#define sTSV_RecvMsg(que) st_recv_msg((s_msgque_tsp)&que) /*!< 接收消息 */
|
||||||
|
|
||||||
#define sTSV_TakeBin(bin) si_take_binary(&bin) /*!< 获取二值信号量 */
|
#define sTSV_TakeBin(bin) si_take_binary(&bin) /*!< 获取二值信号量 */
|
||||||
#define sTSV_RecvFetion(tbox) si_recv_fetion(&tbox) /*!< 接收飞信 */
|
#define sTSV_RecvFetion(tbox) si_recv_fetion(&tbox) /*!< 接收飞信 */
|
||||||
#define sTSV_RecvMail(mbox) si_recv_mail(&mbox) /*!< 接收邮件 */
|
#define sTSV_RecvMail(mbox) si_recv_mail(&mbox) /*!< 接收邮件 */
|
||||||
|
|
||||||
#define sTSV_GetTime(t) s_memcpy(t, &s_rtc, sizeof(s_rtc)) /*!< 获取时间 */
|
#define sTSV_GetTime(t) s_memcpy(t, &s_rtc, sizeof(s_rtc)) /*!< 获取时间 */
|
||||||
|
|
||||||
|
/** 归还二值信号量 */
|
||||||
|
#define sTSV_BackBin(bin) \
|
||||||
|
do{ \
|
||||||
|
__mx_MMB(); \
|
||||||
|
bin.binary = true; \
|
||||||
|
}while(false)
|
||||||
|
|
||||||
/** 发送私信 */
|
/** 发送私信 */
|
||||||
#define sTSV_SendTaskmsg(task) \
|
#define sTSV_SendTaskmsg(task) \
|
||||||
@@ -75,8 +83,8 @@ do{ \
|
|||||||
/** 清除标志组 */
|
/** 清除标志组 */
|
||||||
#define sTSV_ClearFlagGroup(group) \
|
#define sTSV_ClearFlagGroup(group) \
|
||||||
do{ \
|
do{ \
|
||||||
sizeof(group) == 1 ? *(s_u8_t *)&group = false : MCUCFG_TERNARYMASK \
|
sizeof(group) == 1 ? *(s_u8_t *)&group = false : MCUCFG_TERNARY_MASK \
|
||||||
sizeof(group) == 2 ? *(s_u16_t *)&group = false : MCUCFG_TERNARYMASK \
|
sizeof(group) == 2 ? *(s_u16_t *)&group = false : MCUCFG_TERNARY_MASK \
|
||||||
sizeof(group) == 4 ? *(s_u32_t *)&group = false : false; \
|
sizeof(group) == 4 ? *(s_u32_t *)&group = false : false; \
|
||||||
}while(false)
|
}while(false)
|
||||||
|
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user