diff --git a/_book/.gitignore b/_book/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..05bbd0f2d9106c9f114d0dabca6a1fb197398832 --- /dev/null +++ b/_book/.gitignore @@ -0,0 +1 @@ +# nothing here \ No newline at end of file diff --git a/_book/LICENSE b/_book/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..261eeb9e9f8b2b4b0d119366dda99c6fd7d35c64 --- /dev/null +++ b/_book/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/_book/gitbook/fonts/fontawesome/FontAwesome.otf b/_book/gitbook/fonts/fontawesome/FontAwesome.otf new file mode 100644 index 0000000000000000000000000000000000000000..d4de13e832d567ff29c5b4e9561b8c370348cc9c Binary files /dev/null and b/_book/gitbook/fonts/fontawesome/FontAwesome.otf differ diff --git a/_book/gitbook/fonts/fontawesome/fontawesome-webfont.eot b/_book/gitbook/fonts/fontawesome/fontawesome-webfont.eot new file mode 100644 index 0000000000000000000000000000000000000000..c7b00d2ba8896fd29de846b19f89fcf0d56ad152 Binary files /dev/null and b/_book/gitbook/fonts/fontawesome/fontawesome-webfont.eot differ diff --git a/_book/gitbook/fonts/fontawesome/fontawesome-webfont.svg b/_book/gitbook/fonts/fontawesome/fontawesome-webfont.svg new file mode 100644 index 0000000000000000000000000000000000000000..8b66187fe067c3aa389ce8c98108f349ceae159c --- /dev/null +++ b/_book/gitbook/fonts/fontawesome/fontawesome-webfont.svg @@ -0,0 +1,685 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/_book/gitbook/fonts/fontawesome/fontawesome-webfont.ttf b/_book/gitbook/fonts/fontawesome/fontawesome-webfont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..f221e50a2ef60738ba30932d834530cdfe55cb3e Binary files /dev/null and b/_book/gitbook/fonts/fontawesome/fontawesome-webfont.ttf differ diff --git a/_book/gitbook/fonts/fontawesome/fontawesome-webfont.woff b/_book/gitbook/fonts/fontawesome/fontawesome-webfont.woff new file mode 100644 index 0000000000000000000000000000000000000000..6e7483cf61b490c08ed644d6ef802c69472eb247 Binary files /dev/null and b/_book/gitbook/fonts/fontawesome/fontawesome-webfont.woff differ diff --git a/_book/gitbook/fonts/fontawesome/fontawesome-webfont.woff2 b/_book/gitbook/fonts/fontawesome/fontawesome-webfont.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..7eb74fd127ee5eddf3b95fee6a20dc1684b0963b Binary files /dev/null and b/_book/gitbook/fonts/fontawesome/fontawesome-webfont.woff2 differ diff --git a/_book/gitbook/gitbook-plugin-fontsettings/fontsettings.js b/_book/gitbook/gitbook-plugin-fontsettings/fontsettings.js new file mode 100644 index 0000000000000000000000000000000000000000..ff7be7141364d4fbd6efa92cf03f3028b38f2809 --- /dev/null +++ b/_book/gitbook/gitbook-plugin-fontsettings/fontsettings.js @@ -0,0 +1,240 @@ +require(['gitbook', 'jquery'], function(gitbook, $) { + // Configuration + var MAX_SIZE = 4, + MIN_SIZE = 0, + BUTTON_ID; + + // Current fontsettings state + var fontState; + + // Default themes + var THEMES = [ + { + config: 'white', + text: 'White', + id: 0 + }, + { + config: 'sepia', + text: 'Sepia', + id: 1 + }, + { + config: 'night', + text: 'Night', + id: 2 + } + ]; + + // Default font families + var FAMILIES = [ + { + config: 'serif', + text: 'Serif', + id: 0 + }, + { + config: 'sans', + text: 'Sans', + id: 1 + } + ]; + + // Return configured themes + function getThemes() { + return THEMES; + } + + // Modify configured themes + function setThemes(themes) { + THEMES = themes; + updateButtons(); + } + + // Return configured font families + function getFamilies() { + return FAMILIES; + } + + // Modify configured font families + function setFamilies(families) { + FAMILIES = families; + updateButtons(); + } + + // Save current font settings + function saveFontSettings() { + gitbook.storage.set('fontState', fontState); + update(); + } + + // Increase font size + function enlargeFontSize(e) { + e.preventDefault(); + if (fontState.size >= MAX_SIZE) return; + + fontState.size++; + saveFontSettings(); + } + + // Decrease font size + function reduceFontSize(e) { + e.preventDefault(); + if (fontState.size <= MIN_SIZE) return; + + fontState.size--; + saveFontSettings(); + } + + // Change font family + function changeFontFamily(configName, e) { + if (e && e instanceof Event) { + e.preventDefault(); + } + + var familyId = getFontFamilyId(configName); + fontState.family = familyId; + saveFontSettings(); + } + + // Change type of color theme + function changeColorTheme(configName, e) { + if (e && e instanceof Event) { + e.preventDefault(); + } + + var $book = gitbook.state.$book; + + // Remove currently applied color theme + if (fontState.theme !== 0) + $book.removeClass('color-theme-'+fontState.theme); + + // Set new color theme + var themeId = getThemeId(configName); + fontState.theme = themeId; + if (fontState.theme !== 0) + $book.addClass('color-theme-'+fontState.theme); + + saveFontSettings(); + } + + // Return the correct id for a font-family config key + // Default to first font-family + function getFontFamilyId(configName) { + // Search for plugin configured font family + var configFamily = $.grep(FAMILIES, function(family) { + return family.config == configName; + })[0]; + // Fallback to default font family + return (!!configFamily)? configFamily.id : 0; + } + + // Return the correct id for a theme config key + // Default to first theme + function getThemeId(configName) { + // Search for plugin configured theme + var configTheme = $.grep(THEMES, function(theme) { + return theme.config == configName; + })[0]; + // Fallback to default theme + return (!!configTheme)? configTheme.id : 0; + } + + function update() { + var $book = gitbook.state.$book; + + $('.font-settings .font-family-list li').removeClass('active'); + $('.font-settings .font-family-list li:nth-child('+(fontState.family+1)+')').addClass('active'); + + $book[0].className = $book[0].className.replace(/\bfont-\S+/g, ''); + $book.addClass('font-size-'+fontState.size); + $book.addClass('font-family-'+fontState.family); + + if(fontState.theme !== 0) { + $book[0].className = $book[0].className.replace(/\bcolor-theme-\S+/g, ''); + $book.addClass('color-theme-'+fontState.theme); + } + } + + function init(config) { + // Search for plugin configured font family + var configFamily = getFontFamilyId(config.family), + configTheme = getThemeId(config.theme); + + // Instantiate font state object + fontState = gitbook.storage.get('fontState', { + size: config.size || 2, + family: configFamily, + theme: configTheme + }); + + update(); + } + + function updateButtons() { + // Remove existing fontsettings buttons + if (!!BUTTON_ID) { + gitbook.toolbar.removeButton(BUTTON_ID); + } + + // Create buttons in toolbar + BUTTON_ID = gitbook.toolbar.createButton({ + icon: 'fa fa-font', + label: 'Font Settings', + className: 'font-settings', + dropdown: [ + [ + { + text: 'A', + className: 'font-reduce', + onClick: reduceFontSize + }, + { + text: 'A', + className: 'font-enlarge', + onClick: enlargeFontSize + } + ], + $.map(FAMILIES, function(family) { + family.onClick = function(e) { + return changeFontFamily(family.config, e); + }; + + return family; + }), + $.map(THEMES, function(theme) { + theme.onClick = function(e) { + return changeColorTheme(theme.config, e); + }; + + return theme; + }) + ] + }); + } + + // Init configuration at start + gitbook.events.bind('start', function(e, config) { + var opts = config.fontsettings; + + // Generate buttons at start + updateButtons(); + + // Init current settings + init(opts); + }); + + // Expose API + gitbook.fontsettings = { + enlargeFontSize: enlargeFontSize, + reduceFontSize: reduceFontSize, + setTheme: changeColorTheme, + setFamily: changeFontFamily, + getThemes: getThemes, + setThemes: setThemes, + getFamilies: getFamilies, + setFamilies: setFamilies + }; +}); + + diff --git a/_book/gitbook/gitbook-plugin-fontsettings/website.css b/_book/gitbook/gitbook-plugin-fontsettings/website.css new file mode 100644 index 0000000000000000000000000000000000000000..26591fe8112a6e3f1de9855312574e9604a490f0 --- /dev/null +++ b/_book/gitbook/gitbook-plugin-fontsettings/website.css @@ -0,0 +1,291 @@ +/* + * Theme 1 + */ +.color-theme-1 .dropdown-menu { + background-color: #111111; + border-color: #7e888b; +} +.color-theme-1 .dropdown-menu .dropdown-caret .caret-inner { + border-bottom: 9px solid #111111; +} +.color-theme-1 .dropdown-menu .buttons { + border-color: #7e888b; +} +.color-theme-1 .dropdown-menu .button { + color: #afa790; +} +.color-theme-1 .dropdown-menu .button:hover { + color: #73553c; +} +/* + * Theme 2 + */ +.color-theme-2 .dropdown-menu { + background-color: #2d3143; + border-color: #272a3a; +} +.color-theme-2 .dropdown-menu .dropdown-caret .caret-inner { + border-bottom: 9px solid #2d3143; +} +.color-theme-2 .dropdown-menu .buttons { + border-color: #272a3a; +} +.color-theme-2 .dropdown-menu .button { + color: #62677f; +} +.color-theme-2 .dropdown-menu .button:hover { + color: #f4f4f5; +} +.book .book-header .font-settings .font-enlarge { + line-height: 30px; + font-size: 1.4em; +} +.book .book-header .font-settings .font-reduce { + line-height: 30px; + font-size: 1em; +} +.book.color-theme-1 .book-body { + color: #704214; + background: #f3eacb; +} +.book.color-theme-1 .book-body .page-wrapper .page-inner section { + background: #f3eacb; +} +.book.color-theme-2 .book-body { + color: #bdcadb; + background: #1c1f2b; +} +.book.color-theme-2 .book-body .page-wrapper .page-inner section { + background: #1c1f2b; +} +.book.font-size-0 .book-body .page-inner section { + font-size: 1.2rem; +} +.book.font-size-1 .book-body .page-inner section { + font-size: 1.4rem; +} +.book.font-size-2 .book-body .page-inner section { + font-size: 1.6rem; +} +.book.font-size-3 .book-body .page-inner section { + font-size: 2.2rem; +} +.book.font-size-4 .book-body .page-inner section { + font-size: 4rem; +} +.book.font-family-0 { + font-family: Georgia, serif; +} +.book.font-family-1 { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; +} +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal { + color: #704214; +} +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal a { + color: inherit; +} +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal h1, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal h2, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal h3, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal h4, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal h5, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal h6 { + color: inherit; +} +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal h1, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal h2 { + border-color: inherit; +} +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal h6 { + color: inherit; +} +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal hr { + background-color: inherit; +} +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal blockquote { + border-color: inherit; +} +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code { + background: #fdf6e3; + color: #657b83; + border-color: #f8df9c; +} +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal .highlight { + background-color: inherit; +} +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal table th, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal table td { + border-color: #f5d06c; +} +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal table tr { + color: inherit; + background-color: #fdf6e3; + border-color: #444444; +} +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal table tr:nth-child(2n) { + background-color: #fbeecb; +} +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal { + color: #bdcadb; +} +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal a { + color: #3eb1d0; +} +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal h1, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal h2, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal h3, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal h4, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal h5, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal h6 { + color: #fffffa; +} +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal h1, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal h2 { + border-color: #373b4e; +} +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal h6 { + color: #373b4e; +} +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal hr { + background-color: #373b4e; +} +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal blockquote { + border-color: #373b4e; +} +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code { + color: #9dbed8; + background: #2d3143; + border-color: #2d3143; +} +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal .highlight { + background-color: #282a39; +} +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal table th, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal table td { + border-color: #3b3f54; +} +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal table tr { + color: #b6c2d2; + background-color: #2d3143; + border-color: #3b3f54; +} +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal table tr:nth-child(2n) { + background-color: #35394b; +} +.book.color-theme-1 .book-header { + color: #afa790; + background: transparent; +} +.book.color-theme-1 .book-header .btn { + color: #afa790; +} +.book.color-theme-1 .book-header .btn:hover { + color: #73553c; + background: none; +} +.book.color-theme-1 .book-header h1 { + color: #704214; +} +.book.color-theme-2 .book-header { + color: #7e888b; + background: transparent; +} +.book.color-theme-2 .book-header .btn { + color: #3b3f54; +} +.book.color-theme-2 .book-header .btn:hover { + color: #fffff5; + background: none; +} +.book.color-theme-2 .book-header h1 { + color: #bdcadb; +} +.book.color-theme-1 .book-body .navigation { + color: #afa790; +} +.book.color-theme-1 .book-body .navigation:hover { + color: #73553c; +} +.book.color-theme-2 .book-body .navigation { + color: #383f52; +} +.book.color-theme-2 .book-body .navigation:hover { + color: #fffff5; +} +/* + * Theme 1 + */ +.book.color-theme-1 .book-summary { + color: #afa790; + background: #111111; + border-right: 1px solid rgba(0, 0, 0, 0.07); +} +.book.color-theme-1 .book-summary .book-search { + background: transparent; +} +.book.color-theme-1 .book-summary .book-search input, +.book.color-theme-1 .book-summary .book-search input:focus { + border: 1px solid transparent; +} +.book.color-theme-1 .book-summary ul.summary li.divider { + background: #7e888b; + box-shadow: none; +} +.book.color-theme-1 .book-summary ul.summary li i.fa-check { + color: #33cc33; +} +.book.color-theme-1 .book-summary ul.summary li.done > a { + color: #877f6a; +} +.book.color-theme-1 .book-summary ul.summary li a, +.book.color-theme-1 .book-summary ul.summary li span { + color: #877f6a; + background: transparent; + font-weight: normal; +} +.book.color-theme-1 .book-summary ul.summary li.active > a, +.book.color-theme-1 .book-summary ul.summary li a:hover { + color: #704214; + background: transparent; + font-weight: normal; +} +/* + * Theme 2 + */ +.book.color-theme-2 .book-summary { + color: #bcc1d2; + background: #2d3143; + border-right: none; +} +.book.color-theme-2 .book-summary .book-search { + background: transparent; +} +.book.color-theme-2 .book-summary .book-search input, +.book.color-theme-2 .book-summary .book-search input:focus { + border: 1px solid transparent; +} +.book.color-theme-2 .book-summary ul.summary li.divider { + background: #272a3a; + box-shadow: none; +} +.book.color-theme-2 .book-summary ul.summary li i.fa-check { + color: #33cc33; +} +.book.color-theme-2 .book-summary ul.summary li.done > a { + color: #62687f; +} +.book.color-theme-2 .book-summary ul.summary li a, +.book.color-theme-2 .book-summary ul.summary li span { + color: #c1c6d7; + background: transparent; + font-weight: 600; +} +.book.color-theme-2 .book-summary ul.summary li.active > a, +.book.color-theme-2 .book-summary ul.summary li a:hover { + color: #f4f4f5; + background: #252737; + font-weight: 600; +} diff --git a/_book/gitbook/gitbook-plugin-highlight/ebook.css b/_book/gitbook/gitbook-plugin-highlight/ebook.css new file mode 100644 index 0000000000000000000000000000000000000000..cecaaab5a6e3bdbbbd531e8e5a9d2737a077eef9 --- /dev/null +++ b/_book/gitbook/gitbook-plugin-highlight/ebook.css @@ -0,0 +1,135 @@ +pre, +code { + /* http://jmblog.github.io/color-themes-for-highlightjs */ + /* Tomorrow Comment */ + /* Tomorrow Red */ + /* Tomorrow Orange */ + /* Tomorrow Yellow */ + /* Tomorrow Green */ + /* Tomorrow Aqua */ + /* Tomorrow Blue */ + /* Tomorrow Purple */ +} +pre .hljs-comment, +code .hljs-comment, +pre .hljs-title, +code .hljs-title { + color: #8e908c; +} +pre .hljs-variable, +code .hljs-variable, +pre .hljs-attribute, +code .hljs-attribute, +pre .hljs-tag, +code .hljs-tag, +pre .hljs-regexp, +code .hljs-regexp, +pre .hljs-deletion, +code .hljs-deletion, +pre .ruby .hljs-constant, +code .ruby .hljs-constant, +pre .xml .hljs-tag .hljs-title, +code .xml .hljs-tag .hljs-title, +pre .xml .hljs-pi, +code .xml .hljs-pi, +pre .xml .hljs-doctype, +code .xml .hljs-doctype, +pre .html .hljs-doctype, +code .html .hljs-doctype, +pre .css .hljs-id, +code .css .hljs-id, +pre .css .hljs-class, +code .css .hljs-class, +pre .css .hljs-pseudo, +code .css .hljs-pseudo { + color: #c82829; +} +pre .hljs-number, +code .hljs-number, +pre .hljs-preprocessor, +code .hljs-preprocessor, +pre .hljs-pragma, +code .hljs-pragma, +pre .hljs-built_in, +code .hljs-built_in, +pre .hljs-literal, +code .hljs-literal, +pre .hljs-params, +code .hljs-params, +pre .hljs-constant, +code .hljs-constant { + color: #f5871f; +} +pre .ruby .hljs-class .hljs-title, +code .ruby .hljs-class .hljs-title, +pre .css .hljs-rules .hljs-attribute, +code .css .hljs-rules .hljs-attribute { + color: #eab700; +} +pre .hljs-string, +code .hljs-string, +pre .hljs-value, +code .hljs-value, +pre .hljs-inheritance, +code .hljs-inheritance, +pre .hljs-header, +code .hljs-header, +pre .hljs-addition, +code .hljs-addition, +pre .ruby .hljs-symbol, +code .ruby .hljs-symbol, +pre .xml .hljs-cdata, +code .xml .hljs-cdata { + color: #718c00; +} +pre .css .hljs-hexcolor, +code .css .hljs-hexcolor { + color: #3e999f; +} +pre .hljs-function, +code .hljs-function, +pre .python .hljs-decorator, +code .python .hljs-decorator, +pre .python .hljs-title, +code .python .hljs-title, +pre .ruby .hljs-function .hljs-title, +code .ruby .hljs-function .hljs-title, +pre .ruby .hljs-title .hljs-keyword, +code .ruby .hljs-title .hljs-keyword, +pre .perl .hljs-sub, +code .perl .hljs-sub, +pre .javascript .hljs-title, +code .javascript .hljs-title, +pre .coffeescript .hljs-title, +code .coffeescript .hljs-title { + color: #4271ae; +} +pre .hljs-keyword, +code .hljs-keyword, +pre .javascript .hljs-function, +code .javascript .hljs-function { + color: #8959a8; +} +pre .hljs, +code .hljs { + display: block; + background: white; + color: #4d4d4c; + padding: 0.5em; +} +pre .coffeescript .javascript, +code .coffeescript .javascript, +pre .javascript .xml, +code .javascript .xml, +pre .tex .hljs-formula, +code .tex .hljs-formula, +pre .xml .javascript, +code .xml .javascript, +pre .xml .vbscript, +code .xml .vbscript, +pre .xml .css, +code .xml .css, +pre .xml .hljs-cdata, +code .xml .hljs-cdata { + opacity: 0.5; +} diff --git a/_book/gitbook/gitbook-plugin-highlight/website.css b/_book/gitbook/gitbook-plugin-highlight/website.css new file mode 100644 index 0000000000000000000000000000000000000000..6674448f7cadd76ce242d0253be6269394a10978 --- /dev/null +++ b/_book/gitbook/gitbook-plugin-highlight/website.css @@ -0,0 +1,434 @@ +.book .book-body .page-wrapper .page-inner section.normal pre, +.book .book-body .page-wrapper .page-inner section.normal code { + /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ + /* Tomorrow Comment */ + /* Tomorrow Red */ + /* Tomorrow Orange */ + /* Tomorrow Yellow */ + /* Tomorrow Green */ + /* Tomorrow Aqua */ + /* Tomorrow Blue */ + /* Tomorrow Purple */ +} +.book .book-body .page-wrapper .page-inner section.normal pre .hljs-comment, +.book .book-body .page-wrapper .page-inner section.normal code .hljs-comment, +.book .book-body .page-wrapper .page-inner section.normal pre .hljs-title, +.book .book-body .page-wrapper .page-inner section.normal code .hljs-title { + color: #8e908c; +} +.book .book-body .page-wrapper .page-inner section.normal pre .hljs-variable, +.book .book-body .page-wrapper .page-inner section.normal code .hljs-variable, +.book .book-body .page-wrapper .page-inner section.normal pre .hljs-attribute, +.book .book-body .page-wrapper .page-inner section.normal code .hljs-attribute, +.book .book-body .page-wrapper .page-inner section.normal pre .hljs-tag, +.book .book-body .page-wrapper .page-inner section.normal code .hljs-tag, +.book .book-body .page-wrapper .page-inner section.normal pre .hljs-regexp, +.book .book-body .page-wrapper .page-inner section.normal code .hljs-regexp, +.book .book-body .page-wrapper .page-inner section.normal pre .hljs-deletion, +.book .book-body .page-wrapper .page-inner section.normal code .hljs-deletion, +.book .book-body .page-wrapper .page-inner section.normal pre .ruby .hljs-constant, +.book .book-body .page-wrapper .page-inner section.normal code .ruby .hljs-constant, +.book .book-body .page-wrapper .page-inner section.normal pre .xml .hljs-tag .hljs-title, +.book .book-body .page-wrapper .page-inner section.normal code .xml .hljs-tag .hljs-title, +.book .book-body .page-wrapper .page-inner section.normal pre .xml .hljs-pi, +.book .book-body .page-wrapper .page-inner section.normal code .xml .hljs-pi, +.book .book-body .page-wrapper .page-inner section.normal pre .xml .hljs-doctype, +.book .book-body .page-wrapper .page-inner section.normal code .xml .hljs-doctype, +.book .book-body .page-wrapper .page-inner section.normal pre .html .hljs-doctype, +.book .book-body .page-wrapper .page-inner section.normal code .html .hljs-doctype, +.book .book-body .page-wrapper .page-inner section.normal pre .css .hljs-id, +.book .book-body .page-wrapper .page-inner section.normal code .css .hljs-id, +.book .book-body .page-wrapper .page-inner section.normal pre .css .hljs-class, +.book .book-body .page-wrapper .page-inner section.normal code .css .hljs-class, +.book .book-body .page-wrapper .page-inner section.normal pre .css .hljs-pseudo, +.book .book-body .page-wrapper .page-inner section.normal code .css .hljs-pseudo { + color: #c82829; +} +.book .book-body .page-wrapper .page-inner section.normal pre .hljs-number, +.book .book-body .page-wrapper .page-inner section.normal code .hljs-number, +.book .book-body .page-wrapper .page-inner section.normal pre .hljs-preprocessor, +.book .book-body .page-wrapper .page-inner section.normal code .hljs-preprocessor, +.book .book-body .page-wrapper .page-inner section.normal pre .hljs-pragma, +.book .book-body .page-wrapper .page-inner section.normal code .hljs-pragma, +.book .book-body .page-wrapper .page-inner section.normal pre .hljs-built_in, +.book .book-body .page-wrapper .page-inner section.normal code .hljs-built_in, +.book .book-body .page-wrapper .page-inner section.normal pre .hljs-literal, +.book .book-body .page-wrapper .page-inner section.normal code .hljs-literal, +.book .book-body .page-wrapper .page-inner section.normal pre .hljs-params, +.book .book-body .page-wrapper .page-inner section.normal code .hljs-params, +.book .book-body .page-wrapper .page-inner section.normal pre .hljs-constant, +.book .book-body .page-wrapper .page-inner section.normal code .hljs-constant { + color: #f5871f; +} +.book .book-body .page-wrapper .page-inner section.normal pre .ruby .hljs-class .hljs-title, +.book .book-body .page-wrapper .page-inner section.normal code .ruby .hljs-class .hljs-title, +.book .book-body .page-wrapper .page-inner section.normal pre .css .hljs-rules .hljs-attribute, +.book .book-body .page-wrapper .page-inner section.normal code .css .hljs-rules .hljs-attribute { + color: #eab700; +} +.book .book-body .page-wrapper .page-inner section.normal pre .hljs-string, +.book .book-body .page-wrapper .page-inner section.normal code .hljs-string, +.book .book-body .page-wrapper .page-inner section.normal pre .hljs-value, +.book .book-body .page-wrapper .page-inner section.normal code .hljs-value, +.book .book-body .page-wrapper .page-inner section.normal pre .hljs-inheritance, +.book .book-body .page-wrapper .page-inner section.normal code .hljs-inheritance, +.book .book-body .page-wrapper .page-inner section.normal pre .hljs-header, +.book .book-body .page-wrapper .page-inner section.normal code .hljs-header, +.book .book-body .page-wrapper .page-inner section.normal pre .hljs-addition, +.book .book-body .page-wrapper .page-inner section.normal code .hljs-addition, +.book .book-body .page-wrapper .page-inner section.normal pre .ruby .hljs-symbol, +.book .book-body .page-wrapper .page-inner section.normal code .ruby .hljs-symbol, +.book .book-body .page-wrapper .page-inner section.normal pre .xml .hljs-cdata, +.book .book-body .page-wrapper .page-inner section.normal code .xml .hljs-cdata { + color: #718c00; +} +.book .book-body .page-wrapper .page-inner section.normal pre .css .hljs-hexcolor, +.book .book-body .page-wrapper .page-inner section.normal code .css .hljs-hexcolor { + color: #3e999f; +} +.book .book-body .page-wrapper .page-inner section.normal pre .hljs-function, +.book .book-body .page-wrapper .page-inner section.normal code .hljs-function, +.book .book-body .page-wrapper .page-inner section.normal pre .python .hljs-decorator, +.book .book-body .page-wrapper .page-inner section.normal code .python .hljs-decorator, +.book .book-body .page-wrapper .page-inner section.normal pre .python .hljs-title, +.book .book-body .page-wrapper .page-inner section.normal code .python .hljs-title, +.book .book-body .page-wrapper .page-inner section.normal pre .ruby .hljs-function .hljs-title, +.book .book-body .page-wrapper .page-inner section.normal code .ruby .hljs-function .hljs-title, +.book .book-body .page-wrapper .page-inner section.normal pre .ruby .hljs-title .hljs-keyword, +.book .book-body .page-wrapper .page-inner section.normal code .ruby .hljs-title .hljs-keyword, +.book .book-body .page-wrapper .page-inner section.normal pre .perl .hljs-sub, +.book .book-body .page-wrapper .page-inner section.normal code .perl .hljs-sub, +.book .book-body .page-wrapper .page-inner section.normal pre .javascript .hljs-title, +.book .book-body .page-wrapper .page-inner section.normal code .javascript .hljs-title, +.book .book-body .page-wrapper .page-inner section.normal pre .coffeescript .hljs-title, +.book .book-body .page-wrapper .page-inner section.normal code .coffeescript .hljs-title { + color: #4271ae; +} +.book .book-body .page-wrapper .page-inner section.normal pre .hljs-keyword, +.book .book-body .page-wrapper .page-inner section.normal code .hljs-keyword, +.book .book-body .page-wrapper .page-inner section.normal pre .javascript .hljs-function, +.book .book-body .page-wrapper .page-inner section.normal code .javascript .hljs-function { + color: #8959a8; +} +.book .book-body .page-wrapper .page-inner section.normal pre .hljs, +.book .book-body .page-wrapper .page-inner section.normal code .hljs { + display: block; + background: white; + color: #4d4d4c; + padding: 0.5em; +} +.book .book-body .page-wrapper .page-inner section.normal pre .coffeescript .javascript, +.book .book-body .page-wrapper .page-inner section.normal code .coffeescript .javascript, +.book .book-body .page-wrapper .page-inner section.normal pre .javascript .xml, +.book .book-body .page-wrapper .page-inner section.normal code .javascript .xml, +.book .book-body .page-wrapper .page-inner section.normal pre .tex .hljs-formula, +.book .book-body .page-wrapper .page-inner section.normal code .tex .hljs-formula, +.book .book-body .page-wrapper .page-inner section.normal pre .xml .javascript, +.book .book-body .page-wrapper .page-inner section.normal code .xml .javascript, +.book .book-body .page-wrapper .page-inner section.normal pre .xml .vbscript, +.book .book-body .page-wrapper .page-inner section.normal code .xml .vbscript, +.book .book-body .page-wrapper .page-inner section.normal pre .xml .css, +.book .book-body .page-wrapper .page-inner section.normal code .xml .css, +.book .book-body .page-wrapper .page-inner section.normal pre .xml .hljs-cdata, +.book .book-body .page-wrapper .page-inner section.normal code .xml .hljs-cdata { + opacity: 0.5; +} +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code { + /* + +Orginal Style from ethanschoonover.com/solarized (c) Jeremy Hull + +*/ + /* Solarized Green */ + /* Solarized Cyan */ + /* Solarized Blue */ + /* Solarized Yellow */ + /* Solarized Orange */ + /* Solarized Red */ + /* Solarized Violet */ +} +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs { + display: block; + padding: 0.5em; + background: #fdf6e3; + color: #657b83; +} +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-comment, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-comment, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-template_comment, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-template_comment, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .diff .hljs-header, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .diff .hljs-header, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-doctype, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-doctype, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-pi, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-pi, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .lisp .hljs-string, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .lisp .hljs-string, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-javadoc, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-javadoc { + color: #93a1a1; +} +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-keyword, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-keyword, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-winutils, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-winutils, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .method, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .method, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-addition, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-addition, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .css .hljs-tag, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .css .hljs-tag, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-request, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-request, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-status, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-status, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .nginx .hljs-title, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .nginx .hljs-title { + color: #859900; +} +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-number, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-number, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-command, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-command, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-string, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-string, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-tag .hljs-value, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-tag .hljs-value, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-rules .hljs-value, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-rules .hljs-value, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-phpdoc, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-phpdoc, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .tex .hljs-formula, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .tex .hljs-formula, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-regexp, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-regexp, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-hexcolor, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-hexcolor, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-link_url, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-link_url { + color: #2aa198; +} +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-title, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-title, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-localvars, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-localvars, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-chunk, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-chunk, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-decorator, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-decorator, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-built_in, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-built_in, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-identifier, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-identifier, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .vhdl .hljs-literal, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .vhdl .hljs-literal, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-id, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-id, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .css .hljs-function, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .css .hljs-function { + color: #268bd2; +} +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-attribute, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-attribute, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-variable, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-variable, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .lisp .hljs-body, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .lisp .hljs-body, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .smalltalk .hljs-number, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .smalltalk .hljs-number, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-constant, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-constant, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-class .hljs-title, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-class .hljs-title, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-parent, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-parent, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .haskell .hljs-type, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .haskell .hljs-type, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-link_reference, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-link_reference { + color: #b58900; +} +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-preprocessor, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-preprocessor, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-preprocessor .hljs-keyword, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-preprocessor .hljs-keyword, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-pragma, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-pragma, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-shebang, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-shebang, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-symbol, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-symbol, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-symbol .hljs-string, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-symbol .hljs-string, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .diff .hljs-change, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .diff .hljs-change, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-special, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-special, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-attr_selector, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-attr_selector, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-subst, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-subst, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-cdata, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-cdata, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .clojure .hljs-title, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .clojure .hljs-title, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .css .hljs-pseudo, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .css .hljs-pseudo, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-header, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-header { + color: #cb4b16; +} +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-deletion, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-deletion, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-important, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-important { + color: #dc322f; +} +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-link_label, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-link_label { + color: #6c71c4; +} +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .tex .hljs-formula, +.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .tex .hljs-formula { + background: #eee8d5; +} +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code { + /* Tomorrow Night Bright Theme */ + /* Original theme - https://github.com/chriskempson/tomorrow-theme */ + /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ + /* Tomorrow Comment */ + /* Tomorrow Red */ + /* Tomorrow Orange */ + /* Tomorrow Yellow */ + /* Tomorrow Green */ + /* Tomorrow Aqua */ + /* Tomorrow Blue */ + /* Tomorrow Purple */ +} +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-comment, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-comment, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-title, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-title { + color: #969896; +} +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-variable, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-variable, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-attribute, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-attribute, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-tag, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-tag, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-regexp, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-regexp, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-deletion, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-deletion, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .ruby .hljs-constant, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .ruby .hljs-constant, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .xml .hljs-tag .hljs-title, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .xml .hljs-tag .hljs-title, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .xml .hljs-pi, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .xml .hljs-pi, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .xml .hljs-doctype, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .xml .hljs-doctype, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .html .hljs-doctype, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .html .hljs-doctype, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .css .hljs-id, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .css .hljs-id, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .css .hljs-class, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .css .hljs-class, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .css .hljs-pseudo, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .css .hljs-pseudo { + color: #d54e53; +} +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-number, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-number, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-preprocessor, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-preprocessor, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-pragma, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-pragma, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-built_in, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-built_in, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-literal, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-literal, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-params, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-params, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-constant, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-constant { + color: #e78c45; +} +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .ruby .hljs-class .hljs-title, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .ruby .hljs-class .hljs-title, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .css .hljs-rules .hljs-attribute, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .css .hljs-rules .hljs-attribute { + color: #e7c547; +} +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-string, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-string, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-value, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-value, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-inheritance, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-inheritance, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-header, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-header, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-addition, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-addition, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .ruby .hljs-symbol, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .ruby .hljs-symbol, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .xml .hljs-cdata, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .xml .hljs-cdata { + color: #b9ca4a; +} +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .css .hljs-hexcolor, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .css .hljs-hexcolor { + color: #70c0b1; +} +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-function, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-function, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .python .hljs-decorator, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .python .hljs-decorator, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .python .hljs-title, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .python .hljs-title, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .ruby .hljs-function .hljs-title, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .ruby .hljs-function .hljs-title, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .ruby .hljs-title .hljs-keyword, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .ruby .hljs-title .hljs-keyword, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .perl .hljs-sub, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .perl .hljs-sub, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .javascript .hljs-title, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .javascript .hljs-title, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .coffeescript .hljs-title, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .coffeescript .hljs-title { + color: #7aa6da; +} +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-keyword, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-keyword, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .javascript .hljs-function, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .javascript .hljs-function { + color: #c397d8; +} +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs { + display: block; + background: black; + color: #eaeaea; + padding: 0.5em; +} +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .coffeescript .javascript, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .coffeescript .javascript, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .javascript .xml, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .javascript .xml, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .tex .hljs-formula, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .tex .hljs-formula, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .xml .javascript, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .xml .javascript, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .xml .vbscript, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .xml .vbscript, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .xml .css, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .xml .css, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .xml .hljs-cdata, +.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .xml .hljs-cdata { + opacity: 0.5; +} diff --git a/_book/gitbook/gitbook-plugin-livereload/plugin.js b/_book/gitbook/gitbook-plugin-livereload/plugin.js new file mode 100644 index 0000000000000000000000000000000000000000..923b3aed5ccf50313d40ecfcf700fcaf615c4e8b --- /dev/null +++ b/_book/gitbook/gitbook-plugin-livereload/plugin.js @@ -0,0 +1,11 @@ +(function() { + var newEl = document.createElement('script'), + firstScriptTag = document.getElementsByTagName('script')[0]; + + if (firstScriptTag) { + newEl.async = 1; + newEl.src = '//' + window.location.hostname + ':35729/livereload.js'; + firstScriptTag.parentNode.insertBefore(newEl, firstScriptTag); + } + +})(); diff --git a/_book/gitbook/gitbook-plugin-lunr/lunr.min.js b/_book/gitbook/gitbook-plugin-lunr/lunr.min.js new file mode 100644 index 0000000000000000000000000000000000000000..6aa6bc7d69cf8ff165a544f87b4af73aed9bdf64 --- /dev/null +++ b/_book/gitbook/gitbook-plugin-lunr/lunr.min.js @@ -0,0 +1,7 @@ +/** + * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 0.5.12 + * Copyright (C) 2015 Oliver Nightingale + * MIT Licensed + * @license + */ +!function(){var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.5.12",t.utils={},t.utils.warn=function(t){return function(e){t.console&&console.warn&&console.warn(e)}}(this),t.EventEmitter=function(){this.events={}},t.EventEmitter.prototype.addListener=function(){var t=Array.prototype.slice.call(arguments),e=t.pop(),n=t;if("function"!=typeof e)throw new TypeError("last argument must be a function");n.forEach(function(t){this.hasHandler(t)||(this.events[t]=[]),this.events[t].push(e)},this)},t.EventEmitter.prototype.removeListener=function(t,e){if(this.hasHandler(t)){var n=this.events[t].indexOf(e);this.events[t].splice(n,1),this.events[t].length||delete this.events[t]}},t.EventEmitter.prototype.emit=function(t){if(this.hasHandler(t)){var e=Array.prototype.slice.call(arguments,1);this.events[t].forEach(function(t){t.apply(void 0,e)})}},t.EventEmitter.prototype.hasHandler=function(t){return t in this.events},t.tokenizer=function(t){return arguments.length&&null!=t&&void 0!=t?Array.isArray(t)?t.map(function(t){return t.toLowerCase()}):t.toString().trim().toLowerCase().split(/[\s\-]+/):[]},t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions={},t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(e){var i=t.Pipeline.registeredFunctions[e];if(!i)throw new Error("Cannot load un-registered function: "+e);n.add(i)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(e){t.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._stack.indexOf(e);if(-1==i)throw new Error("Cannot find existingFn");i+=1,this._stack.splice(i,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._stack.indexOf(e);if(-1==i)throw new Error("Cannot find existingFn");this._stack.splice(i,0,n)},t.Pipeline.prototype.remove=function(t){var e=this._stack.indexOf(t);-1!=e&&this._stack.splice(e,1)},t.Pipeline.prototype.run=function(t){for(var e=[],n=t.length,i=this._stack.length,o=0;n>o;o++){for(var r=t[o],s=0;i>s&&(r=this._stack[s](r,o,t),void 0!==r);s++);void 0!==r&&e.push(r)}return e},t.Pipeline.prototype.reset=function(){this._stack=[]},t.Pipeline.prototype.toJSON=function(){return this._stack.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})},t.Vector=function(){this._magnitude=null,this.list=void 0,this.length=0},t.Vector.Node=function(t,e,n){this.idx=t,this.val=e,this.next=n},t.Vector.prototype.insert=function(e,n){this._magnitude=void 0;var i=this.list;if(!i)return this.list=new t.Vector.Node(e,n,i),this.length++;if(en.idx?n=n.next:(i+=e.val*n.val,e=e.next,n=n.next);return i},t.Vector.prototype.similarity=function(t){return this.dot(t)/(this.magnitude()*t.magnitude())},t.SortedSet=function(){this.length=0,this.elements=[]},t.SortedSet.load=function(t){var e=new this;return e.elements=t,e.length=t.length,e},t.SortedSet.prototype.add=function(){var t,e;for(t=0;t1;){if(r===t)return o;t>r&&(e=o),r>t&&(n=o),i=n-e,o=e+Math.floor(i/2),r=this.elements[o]}return r===t?o:-1},t.SortedSet.prototype.locationFor=function(t){for(var e=0,n=this.elements.length,i=n-e,o=e+Math.floor(i/2),r=this.elements[o];i>1;)t>r&&(e=o),r>t&&(n=o),i=n-e,o=e+Math.floor(i/2),r=this.elements[o];return r>t?o:t>r?o+1:void 0},t.SortedSet.prototype.intersect=function(e){for(var n=new t.SortedSet,i=0,o=0,r=this.length,s=e.length,a=this.elements,h=e.elements;;){if(i>r-1||o>s-1)break;a[i]!==h[o]?a[i]h[o]&&o++:(n.add(a[i]),i++,o++)}return n},t.SortedSet.prototype.clone=function(){var e=new t.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},t.SortedSet.prototype.union=function(t){var e,n,i;return this.length>=t.length?(e=this,n=t):(e=t,n=this),i=e.clone(),i.add.apply(i,n.toArray()),i},t.SortedSet.prototype.toJSON=function(){return this.toArray()},t.Index=function(){this._fields=[],this._ref="id",this.pipeline=new t.Pipeline,this.documentStore=new t.Store,this.tokenStore=new t.TokenStore,this.corpusTokens=new t.SortedSet,this.eventEmitter=new t.EventEmitter,this._idfCache={},this.on("add","remove","update",function(){this._idfCache={}}.bind(this))},t.Index.prototype.on=function(){var t=Array.prototype.slice.call(arguments);return this.eventEmitter.addListener.apply(this.eventEmitter,t)},t.Index.prototype.off=function(t,e){return this.eventEmitter.removeListener(t,e)},t.Index.load=function(e){e.version!==t.version&&t.utils.warn("version mismatch: current "+t.version+" importing "+e.version);var n=new this;return n._fields=e.fields,n._ref=e.ref,n.documentStore=t.Store.load(e.documentStore),n.tokenStore=t.TokenStore.load(e.tokenStore),n.corpusTokens=t.SortedSet.load(e.corpusTokens),n.pipeline=t.Pipeline.load(e.pipeline),n},t.Index.prototype.field=function(t,e){var e=e||{},n={name:t,boost:e.boost||1};return this._fields.push(n),this},t.Index.prototype.ref=function(t){return this._ref=t,this},t.Index.prototype.add=function(e,n){var i={},o=new t.SortedSet,r=e[this._ref],n=void 0===n?!0:n;this._fields.forEach(function(n){var r=this.pipeline.run(t.tokenizer(e[n.name]));i[n.name]=r,t.SortedSet.prototype.add.apply(o,r)},this),this.documentStore.set(r,o),t.SortedSet.prototype.add.apply(this.corpusTokens,o.toArray());for(var s=0;s0&&(i=1+Math.log(this.documentStore.length/n)),this._idfCache[e]=i},t.Index.prototype.search=function(e){var n=this.pipeline.run(t.tokenizer(e)),i=new t.Vector,o=[],r=this._fields.reduce(function(t,e){return t+e.boost},0),s=n.some(function(t){return this.tokenStore.has(t)},this);if(!s)return[];n.forEach(function(e,n,s){var a=1/s.length*this._fields.length*r,h=this,l=this.tokenStore.expand(e).reduce(function(n,o){var r=h.corpusTokens.indexOf(o),s=h.idf(o),l=1,u=new t.SortedSet;if(o!==e){var c=Math.max(3,o.length-e.length);l=1/Math.log(c)}return r>-1&&i.insert(r,a*s*l),Object.keys(h.tokenStore.get(o)).forEach(function(t){u.add(t)}),n.union(u)},new t.SortedSet);o.push(l)},this);var a=o.reduce(function(t,e){return t.intersect(e)});return a.map(function(t){return{ref:t,score:i.similarity(this.documentVector(t))}},this).sort(function(t,e){return e.score-t.score})},t.Index.prototype.documentVector=function(e){for(var n=this.documentStore.get(e),i=n.length,o=new t.Vector,r=0;i>r;r++){var s=n.elements[r],a=this.tokenStore.get(s)[e].tf,h=this.idf(s);o.insert(this.corpusTokens.indexOf(s),a*h)}return o},t.Index.prototype.toJSON=function(){return{version:t.version,fields:this._fields,ref:this._ref,documentStore:this.documentStore.toJSON(),tokenStore:this.tokenStore.toJSON(),corpusTokens:this.corpusTokens.toJSON(),pipeline:this.pipeline.toJSON()}},t.Index.prototype.use=function(t){var e=Array.prototype.slice.call(arguments,1);e.unshift(this),t.apply(this,e)},t.Store=function(){this.store={},this.length=0},t.Store.load=function(e){var n=new this;return n.length=e.length,n.store=Object.keys(e.store).reduce(function(n,i){return n[i]=t.SortedSet.load(e.store[i]),n},{}),n},t.Store.prototype.set=function(t,e){this.has(t)||this.length++,this.store[t]=e},t.Store.prototype.get=function(t){return this.store[t]},t.Store.prototype.has=function(t){return t in this.store},t.Store.prototype.remove=function(t){this.has(t)&&(delete this.store[t],this.length--)},t.Store.prototype.toJSON=function(){return{store:this.store,length:this.length}},t.stemmer=function(){var t={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},e={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},n="[^aeiou]",i="[aeiouy]",o=n+"[^aeiouy]*",r=i+"[aeiou]*",s="^("+o+")?"+r+o,a="^("+o+")?"+r+o+"("+r+")?$",h="^("+o+")?"+r+o+r+o,l="^("+o+")?"+i,u=new RegExp(s),c=new RegExp(h),f=new RegExp(a),d=new RegExp(l),p=/^(.+?)(ss|i)es$/,m=/^(.+?)([^s])s$/,v=/^(.+?)eed$/,y=/^(.+?)(ed|ing)$/,g=/.$/,S=/(at|bl|iz)$/,w=new RegExp("([^aeiouylsz])\\1$"),x=new RegExp("^"+o+i+"[^aeiouwxy]$"),k=/^(.+?[^aeiou])y$/,b=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,E=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,_=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,F=/^(.+?)(s|t)(ion)$/,O=/^(.+?)e$/,P=/ll$/,N=new RegExp("^"+o+i+"[^aeiouwxy]$"),T=function(n){var i,o,r,s,a,h,l;if(n.length<3)return n;if(r=n.substr(0,1),"y"==r&&(n=r.toUpperCase()+n.substr(1)),s=p,a=m,s.test(n)?n=n.replace(s,"$1$2"):a.test(n)&&(n=n.replace(a,"$1$2")),s=v,a=y,s.test(n)){var T=s.exec(n);s=u,s.test(T[1])&&(s=g,n=n.replace(s,""))}else if(a.test(n)){var T=a.exec(n);i=T[1],a=d,a.test(i)&&(n=i,a=S,h=w,l=x,a.test(n)?n+="e":h.test(n)?(s=g,n=n.replace(s,"")):l.test(n)&&(n+="e"))}if(s=k,s.test(n)){var T=s.exec(n);i=T[1],n=i+"i"}if(s=b,s.test(n)){var T=s.exec(n);i=T[1],o=T[2],s=u,s.test(i)&&(n=i+t[o])}if(s=E,s.test(n)){var T=s.exec(n);i=T[1],o=T[2],s=u,s.test(i)&&(n=i+e[o])}if(s=_,a=F,s.test(n)){var T=s.exec(n);i=T[1],s=c,s.test(i)&&(n=i)}else if(a.test(n)){var T=a.exec(n);i=T[1]+T[2],a=c,a.test(i)&&(n=i)}if(s=O,s.test(n)){var T=s.exec(n);i=T[1],s=c,a=f,h=N,(s.test(i)||a.test(i)&&!h.test(i))&&(n=i)}return s=P,a=c,s.test(n)&&a.test(n)&&(s=g,n=n.replace(s,"")),"y"==r&&(n=r.toLowerCase()+n.substr(1)),n};return T}(),t.Pipeline.registerFunction(t.stemmer,"stemmer"),t.stopWordFilter=function(e){return e&&t.stopWordFilter.stopWords[e]!==e?e:void 0},t.stopWordFilter.stopWords={a:"a",able:"able",about:"about",across:"across",after:"after",all:"all",almost:"almost",also:"also",am:"am",among:"among",an:"an",and:"and",any:"any",are:"are",as:"as",at:"at",be:"be",because:"because",been:"been",but:"but",by:"by",can:"can",cannot:"cannot",could:"could",dear:"dear",did:"did","do":"do",does:"does",either:"either","else":"else",ever:"ever",every:"every","for":"for",from:"from",get:"get",got:"got",had:"had",has:"has",have:"have",he:"he",her:"her",hers:"hers",him:"him",his:"his",how:"how",however:"however",i:"i","if":"if","in":"in",into:"into",is:"is",it:"it",its:"its",just:"just",least:"least",let:"let",like:"like",likely:"likely",may:"may",me:"me",might:"might",most:"most",must:"must",my:"my",neither:"neither",no:"no",nor:"nor",not:"not",of:"of",off:"off",often:"often",on:"on",only:"only",or:"or",other:"other",our:"our",own:"own",rather:"rather",said:"said",say:"say",says:"says",she:"she",should:"should",since:"since",so:"so",some:"some",than:"than",that:"that",the:"the",their:"their",them:"them",then:"then",there:"there",these:"these",they:"they","this":"this",tis:"tis",to:"to",too:"too",twas:"twas",us:"us",wants:"wants",was:"was",we:"we",were:"were",what:"what",when:"when",where:"where",which:"which","while":"while",who:"who",whom:"whom",why:"why",will:"will","with":"with",would:"would",yet:"yet",you:"you",your:"your"},t.Pipeline.registerFunction(t.stopWordFilter,"stopWordFilter"),t.trimmer=function(t){var e=t.replace(/^\W+/,"").replace(/\W+$/,"");return""===e?void 0:e},t.Pipeline.registerFunction(t.trimmer,"trimmer"),t.TokenStore=function(){this.root={docs:{}},this.length=0},t.TokenStore.load=function(t){var e=new this;return e.root=t.root,e.length=t.length,e},t.TokenStore.prototype.add=function(t,e,n){var n=n||this.root,i=t[0],o=t.slice(1);return i in n||(n[i]={docs:{}}),0===o.length?(n[i].docs[e.ref]=e,void(this.length+=1)):this.add(o,e,n[i])},t.TokenStore.prototype.has=function(t){if(!t)return!1;for(var e=this.root,n=0;no;o++){for(var r=t[o],s=0;i>s&&(r=this._stack[s](r,o,t),void 0!==r);s++);void 0!==r&&e.push(r)}return e},t.Pipeline.prototype.reset=function(){this._stack=[]},t.Pipeline.prototype.toJSON=function(){return this._stack.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})},t.Vector=function(){this._magnitude=null,this.list=void 0,this.length=0},t.Vector.Node=function(t,e,n){this.idx=t,this.val=e,this.next=n},t.Vector.prototype.insert=function(e,n){this._magnitude=void 0;var i=this.list;if(!i)return this.list=new t.Vector.Node(e,n,i),this.length++;if(en.idx?n=n.next:(i+=e.val*n.val,e=e.next,n=n.next);return i},t.Vector.prototype.similarity=function(t){return this.dot(t)/(this.magnitude()*t.magnitude())},t.SortedSet=function(){this.length=0,this.elements=[]},t.SortedSet.load=function(t){var e=new this;return e.elements=t,e.length=t.length,e},t.SortedSet.prototype.add=function(){var t,e;for(t=0;t1;){if(r===t)return o;t>r&&(e=o),r>t&&(n=o),i=n-e,o=e+Math.floor(i/2),r=this.elements[o]}return r===t?o:-1},t.SortedSet.prototype.locationFor=function(t){for(var e=0,n=this.elements.length,i=n-e,o=e+Math.floor(i/2),r=this.elements[o];i>1;)t>r&&(e=o),r>t&&(n=o),i=n-e,o=e+Math.floor(i/2),r=this.elements[o];return r>t?o:t>r?o+1:void 0},t.SortedSet.prototype.intersect=function(e){for(var n=new t.SortedSet,i=0,o=0,r=this.length,s=e.length,a=this.elements,h=e.elements;;){if(i>r-1||o>s-1)break;a[i]!==h[o]?a[i]h[o]&&o++:(n.add(a[i]),i++,o++)}return n},t.SortedSet.prototype.clone=function(){var e=new t.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},t.SortedSet.prototype.union=function(t){var e,n,i;return this.length>=t.length?(e=this,n=t):(e=t,n=this),i=e.clone(),i.add.apply(i,n.toArray()),i},t.SortedSet.prototype.toJSON=function(){return this.toArray()},t.Index=function(){this._fields=[],this._ref="id",this.pipeline=new t.Pipeline,this.documentStore=new t.Store,this.tokenStore=new t.TokenStore,this.corpusTokens=new t.SortedSet,this.eventEmitter=new t.EventEmitter,this._idfCache={},this.on("add","remove","update",function(){this._idfCache={}}.bind(this))},t.Index.prototype.on=function(){var t=Array.prototype.slice.call(arguments);return this.eventEmitter.addListener.apply(this.eventEmitter,t)},t.Index.prototype.off=function(t,e){return this.eventEmitter.removeListener(t,e)},t.Index.load=function(e){e.version!==t.version&&t.utils.warn("version mismatch: current "+t.version+" importing "+e.version);var n=new this;return n._fields=e.fields,n._ref=e.ref,n.documentStore=t.Store.load(e.documentStore),n.tokenStore=t.TokenStore.load(e.tokenStore),n.corpusTokens=t.SortedSet.load(e.corpusTokens),n.pipeline=t.Pipeline.load(e.pipeline),n},t.Index.prototype.field=function(t,e){var e=e||{},n={name:t,boost:e.boost||1};return this._fields.push(n),this},t.Index.prototype.ref=function(t){return this._ref=t,this},t.Index.prototype.add=function(e,n){var i={},o=new t.SortedSet,r=e[this._ref],n=void 0===n?!0:n;this._fields.forEach(function(n){var r=this.pipeline.run(t.tokenizer(e[n.name]));i[n.name]=r,t.SortedSet.prototype.add.apply(o,r)},this),this.documentStore.set(r,o),t.SortedSet.prototype.add.apply(this.corpusTokens,o.toArray());for(var s=0;s0&&(i=1+Math.log(this.documentStore.length/n)),this._idfCache[e]=i},t.Index.prototype.search=function(e){var n=this.pipeline.run(t.tokenizer(e)),i=new t.Vector,o=[],r=this._fields.reduce(function(t,e){return t+e.boost},0),s=n.some(function(t){return this.tokenStore.has(t)},this);if(!s)return[];n.forEach(function(e,n,s){var a=1/s.length*this._fields.length*r,h=this,l=this.tokenStore.expand(e).reduce(function(n,o){var r=h.corpusTokens.indexOf(o),s=h.idf(o),l=1,u=new t.SortedSet;if(o!==e){var c=Math.max(3,o.length-e.length);l=1/Math.log(c)}return r>-1&&i.insert(r,a*s*l),Object.keys(h.tokenStore.get(o)).forEach(function(t){u.add(t)}),n.union(u)},new t.SortedSet);o.push(l)},this);var a=o.reduce(function(t,e){return t.intersect(e)});return a.map(function(t){return{ref:t,score:i.similarity(this.documentVector(t))}},this).sort(function(t,e){return e.score-t.score})},t.Index.prototype.documentVector=function(e){for(var n=this.documentStore.get(e),i=n.length,o=new t.Vector,r=0;i>r;r++){var s=n.elements[r],a=this.tokenStore.get(s)[e].tf,h=this.idf(s);o.insert(this.corpusTokens.indexOf(s),a*h)}return o},t.Index.prototype.toJSON=function(){return{version:t.version,fields:this._fields,ref:this._ref,documentStore:this.documentStore.toJSON(),tokenStore:this.tokenStore.toJSON(),corpusTokens:this.corpusTokens.toJSON(),pipeline:this.pipeline.toJSON()}},t.Index.prototype.use=function(t){var e=Array.prototype.slice.call(arguments,1);e.unshift(this),t.apply(this,e)},t.Store=function(){this.store={},this.length=0},t.Store.load=function(e){var n=new this;return n.length=e.length,n.store=Object.keys(e.store).reduce(function(n,i){return n[i]=t.SortedSet.load(e.store[i]),n},{}),n},t.Store.prototype.set=function(t,e){this.has(t)||this.length++,this.store[t]=e},t.Store.prototype.get=function(t){return this.store[t]},t.Store.prototype.has=function(t){return t in this.store},t.Store.prototype.remove=function(t){this.has(t)&&(delete this.store[t],this.length--)},t.Store.prototype.toJSON=function(){return{store:this.store,length:this.length}},t.stemmer=function(){var t={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},e={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},n="[^aeiou]",i="[aeiouy]",o=n+"[^aeiouy]*",r=i+"[aeiou]*",s="^("+o+")?"+r+o,a="^("+o+")?"+r+o+"("+r+")?$",h="^("+o+")?"+r+o+r+o,l="^("+o+")?"+i,u=new RegExp(s),c=new RegExp(h),f=new RegExp(a),d=new RegExp(l),p=/^(.+?)(ss|i)es$/,m=/^(.+?)([^s])s$/,v=/^(.+?)eed$/,y=/^(.+?)(ed|ing)$/,g=/.$/,S=/(at|bl|iz)$/,w=new RegExp("([^aeiouylsz])\\1$"),x=new RegExp("^"+o+i+"[^aeiouwxy]$"),k=/^(.+?[^aeiou])y$/,b=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,E=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,_=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,F=/^(.+?)(s|t)(ion)$/,O=/^(.+?)e$/,P=/ll$/,N=new RegExp("^"+o+i+"[^aeiouwxy]$"),T=function(n){var i,o,r,s,a,h,l;if(n.length<3)return n;if(r=n.substr(0,1),"y"==r&&(n=r.toUpperCase()+n.substr(1)),s=p,a=m,s.test(n)?n=n.replace(s,"$1$2"):a.test(n)&&(n=n.replace(a,"$1$2")),s=v,a=y,s.test(n)){var T=s.exec(n);s=u,s.test(T[1])&&(s=g,n=n.replace(s,""))}else if(a.test(n)){var T=a.exec(n);i=T[1],a=d,a.test(i)&&(n=i,a=S,h=w,l=x,a.test(n)?n+="e":h.test(n)?(s=g,n=n.replace(s,"")):l.test(n)&&(n+="e"))}if(s=k,s.test(n)){var T=s.exec(n);i=T[1],n=i+"i"}if(s=b,s.test(n)){var T=s.exec(n);i=T[1],o=T[2],s=u,s.test(i)&&(n=i+t[o])}if(s=E,s.test(n)){var T=s.exec(n);i=T[1],o=T[2],s=u,s.test(i)&&(n=i+e[o])}if(s=_,a=F,s.test(n)){var T=s.exec(n);i=T[1],s=c,s.test(i)&&(n=i)}else if(a.test(n)){var T=a.exec(n);i=T[1]+T[2],a=c,a.test(i)&&(n=i)}if(s=O,s.test(n)){var T=s.exec(n);i=T[1],s=c,a=f,h=N,(s.test(i)||a.test(i)&&!h.test(i))&&(n=i)}return s=P,a=c,s.test(n)&&a.test(n)&&(s=g,n=n.replace(s,"")),"y"==r&&(n=r.toLowerCase()+n.substr(1)),n};return T}(),t.Pipeline.registerFunction(t.stemmer,"stemmer"),t.stopWordFilter=function(e){return e&&t.stopWordFilter.stopWords[e]!==e?e:void 0},t.stopWordFilter.stopWords={a:"a",able:"able",about:"about",across:"across",after:"after",all:"all",almost:"almost",also:"also",am:"am",among:"among",an:"an",and:"and",any:"any",are:"are",as:"as",at:"at",be:"be",because:"because",been:"been",but:"but",by:"by",can:"can",cannot:"cannot",could:"could",dear:"dear",did:"did","do":"do",does:"does",either:"either","else":"else",ever:"ever",every:"every","for":"for",from:"from",get:"get",got:"got",had:"had",has:"has",have:"have",he:"he",her:"her",hers:"hers",him:"him",his:"his",how:"how",however:"however",i:"i","if":"if","in":"in",into:"into",is:"is",it:"it",its:"its",just:"just",least:"least",let:"let",like:"like",likely:"likely",may:"may",me:"me",might:"might",most:"most",must:"must",my:"my",neither:"neither",no:"no",nor:"nor",not:"not",of:"of",off:"off",often:"often",on:"on",only:"only",or:"or",other:"other",our:"our",own:"own",rather:"rather",said:"said",say:"say",says:"says",she:"she",should:"should",since:"since",so:"so",some:"some",than:"than",that:"that",the:"the",their:"their",them:"them",then:"then",there:"there",these:"these",they:"they","this":"this",tis:"tis",to:"to",too:"too",twas:"twas",us:"us",wants:"wants",was:"was",we:"we",were:"were",what:"what",when:"when",where:"where",which:"which","while":"while",who:"who",whom:"whom",why:"why",will:"will","with":"with",would:"would",yet:"yet",you:"you",your:"your"},t.Pipeline.registerFunction(t.stopWordFilter,"stopWordFilter"),t.trimmer=function(t){var e=t.replace(/^\W+/,"").replace(/\W+$/,"");return""===e?void 0:e},t.Pipeline.registerFunction(t.trimmer,"trimmer"),t.TokenStore=function(){this.root={docs:{}},this.length=0},t.TokenStore.load=function(t){var e=new this;return e.root=t.root,e.length=t.length,e},t.TokenStore.prototype.add=function(t,e,n){var n=n||this.root,i=t[0],o=t.slice(1);return i in n||(n[i]={docs:{}}),0===o.length?(n[i].docs[e.ref]=e,void(this.length+=1)):this.add(o,e,n[i])},t.TokenStore.prototype.has=function(t){if(!t)return!1;for(var e=this.root,n=0;n element for each result + res.results.forEach(function(res) { + var $li = $('
  • ', { + 'class': 'search-results-item' + }); + + var $title = $('

    '); + + var $link = $('', { + 'href': gitbook.state.basePath + '/' + res.url, + 'text': res.title + }); + + var content = res.body.trim(); + if (content.length > MAX_DESCRIPTION_SIZE) { + content = content.slice(0, MAX_DESCRIPTION_SIZE).trim()+'...'; + } + var $content = $('

    ').html(content); + + $link.appendTo($title); + $title.appendTo($li); + $content.appendTo($li); + $li.appendTo($searchList); + }); + } + + function launchSearch(q) { + // Add class for loading + $body.addClass('with-search'); + $body.addClass('search-loading'); + + // Launch search query + throttle(gitbook.search.query(q, 0, MAX_RESULTS) + .then(function(results) { + displayResults(results); + }) + .always(function() { + $body.removeClass('search-loading'); + }), 1000); + } + + function closeSearch() { + $body.removeClass('with-search'); + $bookSearchResults.removeClass('open'); + } + + function launchSearchFromQueryString() { + var q = getParameterByName('q'); + if (q && q.length > 0) { + // Update search input + $searchInput.val(q); + + // Launch search + launchSearch(q); + } + } + + function bindSearch() { + // Bind DOM + $searchInput = $('#book-search-input input'); + $bookSearchResults = $('#book-search-results'); + $searchList = $bookSearchResults.find('.search-results-list'); + $searchTitle = $bookSearchResults.find('.search-results-title'); + $searchResultsCount = $searchTitle.find('.search-results-count'); + $searchQuery = $searchTitle.find('.search-query'); + + // Launch query based on input content + function handleUpdate() { + var q = $searchInput.val(); + + if (q.length == 0) { + closeSearch(); + } + else { + launchSearch(q); + } + } + + // Detect true content change in search input + // Workaround for IE < 9 + var propertyChangeUnbound = false; + $searchInput.on('propertychange', function(e) { + if (e.originalEvent.propertyName == 'value') { + handleUpdate(); + } + }); + + // HTML5 (IE9 & others) + $searchInput.on('input', function(e) { + // Unbind propertychange event for IE9+ + if (!propertyChangeUnbound) { + $(this).unbind('propertychange'); + propertyChangeUnbound = true; + } + + handleUpdate(); + }); + + // Push to history on blur + $searchInput.on('blur', function(e) { + // Update history state + if (usePushState) { + var uri = updateQueryString('q', $(this).val()); + history.pushState({ path: uri }, null, uri); + } + }); + } + + gitbook.events.on('page.change', function() { + bindSearch(); + closeSearch(); + + // Launch search based on query parameter + if (gitbook.search.isInitialized()) { + launchSearchFromQueryString(); + } + }); + + gitbook.events.on('search.ready', function() { + bindSearch(); + + // Launch search from query param at start + launchSearchFromQueryString(); + }); + + function getParameterByName(name) { + var url = window.location.href; + name = name.replace(/[\[\]]/g, '\\$&'); + var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)', 'i'), + results = regex.exec(url); + if (!results) return null; + if (!results[2]) return ''; + return decodeURIComponent(results[2].replace(/\+/g, ' ')); + } + + function updateQueryString(key, value) { + value = encodeURIComponent(value); + + var url = window.location.href; + var re = new RegExp('([?&])' + key + '=.*?(&|#|$)(.*)', 'gi'), + hash; + + if (re.test(url)) { + if (typeof value !== 'undefined' && value !== null) + return url.replace(re, '$1' + key + '=' + value + '$2$3'); + else { + hash = url.split('#'); + url = hash[0].replace(re, '$1$3').replace(/(&|\?)$/, ''); + if (typeof hash[1] !== 'undefined' && hash[1] !== null) + url += '#' + hash[1]; + return url; + } + } + else { + if (typeof value !== 'undefined' && value !== null) { + var separator = url.indexOf('?') !== -1 ? '&' : '?'; + hash = url.split('#'); + url = hash[0] + separator + key + '=' + value; + if (typeof hash[1] !== 'undefined' && hash[1] !== null) + url += '#' + hash[1]; + return url; + } + else + return url; + } + } +}); diff --git a/_book/gitbook/gitbook-plugin-sharing/buttons.js b/_book/gitbook/gitbook-plugin-sharing/buttons.js new file mode 100644 index 0000000000000000000000000000000000000000..709a4e4c023c775e048b9afd7ca4ba9abd215601 --- /dev/null +++ b/_book/gitbook/gitbook-plugin-sharing/buttons.js @@ -0,0 +1,90 @@ +require(['gitbook', 'jquery'], function(gitbook, $) { + var SITES = { + 'facebook': { + 'label': 'Facebook', + 'icon': 'fa fa-facebook', + 'onClick': function(e) { + e.preventDefault(); + window.open('http://www.facebook.com/sharer/sharer.php?s=100&p[url]='+encodeURIComponent(location.href)); + } + }, + 'twitter': { + 'label': 'Twitter', + 'icon': 'fa fa-twitter', + 'onClick': function(e) { + e.preventDefault(); + window.open('http://twitter.com/home?status='+encodeURIComponent(document.title+' '+location.href)); + } + }, + 'google': { + 'label': 'Google+', + 'icon': 'fa fa-google-plus', + 'onClick': function(e) { + e.preventDefault(); + window.open('https://plus.google.com/share?url='+encodeURIComponent(location.href)); + } + }, + 'weibo': { + 'label': 'Weibo', + 'icon': 'fa fa-weibo', + 'onClick': function(e) { + e.preventDefault(); + window.open('http://service.weibo.com/share/share.php?content=utf-8&url='+encodeURIComponent(location.href)+'&title='+encodeURIComponent(document.title)); + } + }, + 'instapaper': { + 'label': 'Instapaper', + 'icon': 'fa fa-instapaper', + 'onClick': function(e) { + e.preventDefault(); + window.open('http://www.instapaper.com/text?u='+encodeURIComponent(location.href)); + } + }, + 'vk': { + 'label': 'VK', + 'icon': 'fa fa-vk', + 'onClick': function(e) { + e.preventDefault(); + window.open('http://vkontakte.ru/share.php?url='+encodeURIComponent(location.href)); + } + } + }; + + + + gitbook.events.bind('start', function(e, config) { + var opts = config.sharing; + + // Create dropdown menu + var menu = $.map(opts.all, function(id) { + var site = SITES[id]; + + return { + text: site.label, + onClick: site.onClick + }; + }); + + // Create main button with dropdown + if (menu.length > 0) { + gitbook.toolbar.createButton({ + icon: 'fa fa-share-alt', + label: 'Share', + position: 'right', + dropdown: [menu] + }); + } + + // Direct actions to share + $.each(SITES, function(sideId, site) { + if (!opts[sideId]) return; + + gitbook.toolbar.createButton({ + icon: site.icon, + label: site.text, + position: 'right', + onClick: site.onClick + }); + }); + }); +}); diff --git a/_book/gitbook/gitbook.js b/_book/gitbook/gitbook.js new file mode 100644 index 0000000000000000000000000000000000000000..13077b45ca3aa37fd567086957bbb5f31a494ded --- /dev/null +++ b/_book/gitbook/gitbook.js @@ -0,0 +1,4 @@ +!function e(t,n,r){function o(s,a){if(!n[s]){if(!t[s]){var u="function"==typeof require&&require;if(!a&&u)return u(s,!0);if(i)return i(s,!0);var c=new Error("Cannot find module '"+s+"'");throw c.code="MODULE_NOT_FOUND",c}var l=n[s]={exports:{}};t[s][0].call(l.exports,function(e){var n=t[s][1][e];return o(n?n:e)},l,l.exports,e,t,n,r)}return n[s].exports}for(var i="function"==typeof require&&require,s=0;s0&&t-1 in e)}function o(e,t,n){return de.isFunction(t)?de.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?de.grep(e,function(e){return e===t!==n}):"string"!=typeof t?de.grep(e,function(e){return se.call(t,e)>-1!==n}):je.test(t)?de.filter(t,e,n):(t=de.filter(t,e),de.grep(e,function(e){return se.call(t,e)>-1!==n&&1===e.nodeType}))}function i(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}function s(e){var t={};return de.each(e.match(qe)||[],function(e,n){t[n]=!0}),t}function a(e){return e}function u(e){throw e}function c(e,t,n){var r;try{e&&de.isFunction(r=e.promise)?r.call(e).done(t).fail(n):e&&de.isFunction(r=e.then)?r.call(e,t,n):t.call(void 0,e)}catch(e){n.call(void 0,e)}}function l(){te.removeEventListener("DOMContentLoaded",l),e.removeEventListener("load",l),de.ready()}function f(){this.expando=de.expando+f.uid++}function p(e){return"true"===e||"false"!==e&&("null"===e?null:e===+e+""?+e:Ie.test(e)?JSON.parse(e):e)}function h(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(Pe,"-$&").toLowerCase(),n=e.getAttribute(r),"string"==typeof n){try{n=p(n)}catch(e){}Re.set(e,t,n)}else n=void 0;return n}function d(e,t,n,r){var o,i=1,s=20,a=r?function(){return r.cur()}:function(){return de.css(e,t,"")},u=a(),c=n&&n[3]||(de.cssNumber[t]?"":"px"),l=(de.cssNumber[t]||"px"!==c&&+u)&&$e.exec(de.css(e,t));if(l&&l[3]!==c){c=c||l[3],n=n||[],l=+u||1;do i=i||".5",l/=i,de.style(e,t,l+c);while(i!==(i=a()/u)&&1!==i&&--s)}return n&&(l=+l||+u||0,o=n[1]?l+(n[1]+1)*n[2]:+n[2],r&&(r.unit=c,r.start=l,r.end=o)),o}function g(e){var t,n=e.ownerDocument,r=e.nodeName,o=Ue[r];return o?o:(t=n.body.appendChild(n.createElement(r)),o=de.css(t,"display"),t.parentNode.removeChild(t),"none"===o&&(o="block"),Ue[r]=o,o)}function m(e,t){for(var n,r,o=[],i=0,s=e.length;i-1)o&&o.push(i);else if(c=de.contains(i.ownerDocument,i),s=v(f.appendChild(i),"script"),c&&y(s),n)for(l=0;i=s[l++];)Ve.test(i.type||"")&&n.push(i);return f}function b(){return!0}function w(){return!1}function T(){try{return te.activeElement}catch(e){}}function C(e,t,n,r,o,i){var s,a;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=void 0);for(a in t)C(e,a,n,r,t[a],i);return e}if(null==r&&null==o?(o=n,r=n=void 0):null==o&&("string"==typeof n?(o=r,r=void 0):(o=r,r=n,n=void 0)),o===!1)o=w;else if(!o)return e;return 1===i&&(s=o,o=function(e){return de().off(e),s.apply(this,arguments)},o.guid=s.guid||(s.guid=de.guid++)),e.each(function(){de.event.add(this,t,o,r,n)})}function j(e,t){return de.nodeName(e,"table")&&de.nodeName(11!==t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e:e}function k(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function E(e){var t=rt.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function S(e,t){var n,r,o,i,s,a,u,c;if(1===t.nodeType){if(Fe.hasData(e)&&(i=Fe.access(e),s=Fe.set(t,i),c=i.events)){delete s.handle,s.events={};for(o in c)for(n=0,r=c[o].length;n1&&"string"==typeof d&&!pe.checkClone&&nt.test(d))return e.each(function(n){var i=e.eq(n);g&&(t[0]=d.call(this,n,i.html())),A(i,t,r,o)});if(p&&(i=x(t,e[0].ownerDocument,!1,e,o),s=i.firstChild,1===i.childNodes.length&&(i=s),s||o)){for(a=de.map(v(i,"script"),k),u=a.length;f=0&&nC.cacheLength&&delete e[t.shift()],e[n+" "]=r}var t=[];return e}function r(e){return e[$]=!0,e}function o(e){var t=L.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function i(e,t){for(var n=e.split("|"),r=n.length;r--;)C.attrHandle[n[r]]=t}function s(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function a(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function u(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function c(e){return function(t){return"form"in t?t.parentNode&&t.disabled===!1?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&je(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function l(e){return r(function(t){return t=+t,r(function(n,r){for(var o,i=e([],n.length,t),s=i.length;s--;)n[o=i[s]]&&(n[o]=!(r[o]=n[o]))})})}function f(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function p(){}function h(e){for(var t=0,n=e.length,r="";t1?function(t,n,r){for(var o=e.length;o--;)if(!e[o](t,n,r))return!1;return!0}:e[0]}function m(e,n,r){for(var o=0,i=n.length;o-1&&(r[c]=!(s[c]=f))}}else x=v(x===s?x.splice(d,x.length):x),i?i(null,s,x,u):K.apply(s,x)})}function x(e){for(var t,n,r,o=e.length,i=C.relative[e[0].type],s=i||C.relative[" "],a=i?1:0,u=d(function(e){return e===t},s,!0),c=d(function(e){return ee(t,e)>-1},s,!0),l=[function(e,n,r){var o=!i&&(r||n!==A)||((t=n).nodeType?u(e,n,r):c(e,n,r));return t=null,o}];a1&&g(l),a>1&&h(e.slice(0,a-1).concat({value:" "===e[a-2].type?"*":""})).replace(ae,"$1"),n,a0,i=e.length>0,s=function(r,s,a,u,c){var l,f,p,h=0,d="0",g=r&&[],m=[],y=A,x=r||i&&C.find.TAG("*",c),b=B+=null==y?1:Math.random()||.1,w=x.length;for(c&&(A=s===L||s||c);d!==w&&null!=(l=x[d]);d++){if(i&&l){for(f=0,s||l.ownerDocument===L||(O(l),a=!F);p=e[f++];)if(p(l,s||L,a)){u.push(l);break}c&&(B=b)}o&&((l=!p&&l)&&h--,r&&g.push(l))}if(h+=d,o&&d!==h){for(f=0;p=n[f++];)p(g,m,s,a);if(r){if(h>0)for(;d--;)g[d]||m[d]||(m[d]=Q.call(u));m=v(m)}K.apply(u,m),c&&!r&&m.length>0&&h+n.length>1&&t.uniqueSort(u)}return c&&(B=b,A=y),g};return o?r(s):s}var w,T,C,j,k,E,S,N,A,q,D,O,L,H,F,R,I,P,M,$="sizzle"+1*new Date,W=e.document,B=0,_=0,U=n(),z=n(),X=n(),V=function(e,t){return e===t&&(D=!0),0},G={}.hasOwnProperty,Y=[],Q=Y.pop,J=Y.push,K=Y.push,Z=Y.slice,ee=function(e,t){for(var n=0,r=e.length;n+~]|"+ne+")"+ne+"*"),le=new RegExp("="+ne+"*([^\\]'\"]*?)"+ne+"*\\]","g"),fe=new RegExp(ie),pe=new RegExp("^"+re+"$"),he={ID:new RegExp("^#("+re+")"),CLASS:new RegExp("^\\.("+re+")"),TAG:new RegExp("^("+re+"|[*])"),ATTR:new RegExp("^"+oe),PSEUDO:new RegExp("^"+ie),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ne+"*(even|odd|(([+-]|)(\\d*)n|)"+ne+"*(?:([+-]|)"+ne+"*(\\d+)|))"+ne+"*\\)|)","i"),bool:new RegExp("^(?:"+te+")$","i"),needsContext:new RegExp("^"+ne+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ne+"*((?:-\\d)?\\d*)"+ne+"*\\)|)(?=[^-]|$)","i")},de=/^(?:input|select|textarea|button)$/i,ge=/^h\d$/i,me=/^[^{]+\{\s*\[native \w/,ve=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ye=/[+~]/,xe=new RegExp("\\\\([\\da-f]{1,6}"+ne+"?|("+ne+")|.)","ig"),be=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},we=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,Te=function(e,t){return t?"\0"===e?"�":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},Ce=function(){O()},je=d(function(e){return e.disabled===!0&&("form"in e||"label"in e)},{dir:"parentNode",next:"legend"});try{K.apply(Y=Z.call(W.childNodes),W.childNodes),Y[W.childNodes.length].nodeType}catch(e){K={apply:Y.length?function(e,t){J.apply(e,Z.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}T=t.support={},k=t.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},O=t.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:W;return r!==L&&9===r.nodeType&&r.documentElement?(L=r,H=L.documentElement,F=!k(L),W!==L&&(n=L.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",Ce,!1):n.attachEvent&&n.attachEvent("onunload",Ce)),T.attributes=o(function(e){return e.className="i",!e.getAttribute("className")}),T.getElementsByTagName=o(function(e){return e.appendChild(L.createComment("")),!e.getElementsByTagName("*").length}),T.getElementsByClassName=me.test(L.getElementsByClassName),T.getById=o(function(e){return H.appendChild(e).id=$,!L.getElementsByName||!L.getElementsByName($).length}),T.getById?(C.filter.ID=function(e){var t=e.replace(xe,be);return function(e){return e.getAttribute("id")===t}},C.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&F){var n=t.getElementById(e);return n?[n]:[]}}):(C.filter.ID=function(e){var t=e.replace(xe,be);return function(e){var n="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},C.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&F){var n,r,o,i=t.getElementById(e);if(i){if(n=i.getAttributeNode("id"),n&&n.value===e)return[i];for(o=t.getElementsByName(e),r=0;i=o[r++];)if(n=i.getAttributeNode("id"),n&&n.value===e)return[i]}return[]}}),C.find.TAG=T.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):T.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],o=0,i=t.getElementsByTagName(e);if("*"===e){for(;n=i[o++];)1===n.nodeType&&r.push(n);return r}return i},C.find.CLASS=T.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&F)return t.getElementsByClassName(e)},I=[],R=[],(T.qsa=me.test(L.querySelectorAll))&&(o(function(e){H.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&R.push("[*^$]="+ne+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||R.push("\\["+ne+"*(?:value|"+te+")"),e.querySelectorAll("[id~="+$+"-]").length||R.push("~="),e.querySelectorAll(":checked").length||R.push(":checked"),e.querySelectorAll("a#"+$+"+*").length||R.push(".#.+[+~]")}),o(function(e){e.innerHTML="";var t=L.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&R.push("name"+ne+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&R.push(":enabled",":disabled"),H.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&R.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),R.push(",.*:")})),(T.matchesSelector=me.test(P=H.matches||H.webkitMatchesSelector||H.mozMatchesSelector||H.oMatchesSelector||H.msMatchesSelector))&&o(function(e){T.disconnectedMatch=P.call(e,"*"),P.call(e,"[s!='']:x"),I.push("!=",ie)}),R=R.length&&new RegExp(R.join("|")),I=I.length&&new RegExp(I.join("|")),t=me.test(H.compareDocumentPosition),M=t||me.test(H.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},V=t?function(e,t){if(e===t)return D=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n?n:(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1,1&n||!T.sortDetached&&t.compareDocumentPosition(e)===n?e===L||e.ownerDocument===W&&M(W,e)?-1:t===L||t.ownerDocument===W&&M(W,t)?1:q?ee(q,e)-ee(q,t):0:4&n?-1:1)}:function(e,t){if(e===t)return D=!0,0;var n,r=0,o=e.parentNode,i=t.parentNode,a=[e],u=[t];if(!o||!i)return e===L?-1:t===L?1:o?-1:i?1:q?ee(q,e)-ee(q,t):0;if(o===i)return s(e,t);for(n=e;n=n.parentNode;)a.unshift(n);for(n=t;n=n.parentNode;)u.unshift(n);for(;a[r]===u[r];)r++;return r?s(a[r],u[r]):a[r]===W?-1:u[r]===W?1:0},L):L},t.matches=function(e,n){return t(e,null,null,n)},t.matchesSelector=function(e,n){if((e.ownerDocument||e)!==L&&O(e),n=n.replace(le,"='$1']"),T.matchesSelector&&F&&!X[n+" "]&&(!I||!I.test(n))&&(!R||!R.test(n)))try{var r=P.call(e,n);if(r||T.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return t(n,L,null,[e]).length>0},t.contains=function(e,t){return(e.ownerDocument||e)!==L&&O(e),M(e,t)},t.attr=function(e,t){(e.ownerDocument||e)!==L&&O(e);var n=C.attrHandle[t.toLowerCase()],r=n&&G.call(C.attrHandle,t.toLowerCase())?n(e,t,!F):void 0;return void 0!==r?r:T.attributes||!F?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},t.escape=function(e){return(e+"").replace(we,Te)},t.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},t.uniqueSort=function(e){var t,n=[],r=0,o=0;if(D=!T.detectDuplicates,q=!T.sortStable&&e.slice(0),e.sort(V),D){for(;t=e[o++];)t===e[o]&&(r=n.push(o));for(;r--;)e.splice(n[r],1)}return q=null,e},j=t.getText=function(e){var t,n="",r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=j(e)}else if(3===o||4===o)return e.nodeValue}else for(;t=e[r++];)n+=j(t);return n},C=t.selectors={cacheLength:50,createPseudo:r,match:he,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(xe,be),e[3]=(e[3]||e[4]||e[5]||"").replace(xe,be),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||t.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&t.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return he.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&fe.test(n)&&(t=E(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(xe,be).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=U[e+" "];return t||(t=new RegExp("(^|"+ne+")"+e+"("+ne+"|$)"))&&U(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,n,r){return function(o){var i=t.attr(o,e);return null==i?"!="===n:!n||(i+="","="===n?i===r:"!="===n?i!==r:"^="===n?r&&0===i.indexOf(r):"*="===n?r&&i.indexOf(r)>-1:"$="===n?r&&i.slice(-r.length)===r:"~="===n?(" "+i.replace(se," ")+" ").indexOf(r)>-1:"|="===n&&(i===r||i.slice(0,r.length+1)===r+"-"))}},CHILD:function(e,t,n,r,o){var i="nth"!==e.slice(0,3),s="last"!==e.slice(-4),a="of-type"===t;return 1===r&&0===o?function(e){return!!e.parentNode}:function(t,n,u){var c,l,f,p,h,d,g=i!==s?"nextSibling":"previousSibling",m=t.parentNode,v=a&&t.nodeName.toLowerCase(),y=!u&&!a,x=!1;if(m){if(i){for(;g;){for(p=t;p=p[g];)if(a?p.nodeName.toLowerCase()===v:1===p.nodeType)return!1;d=g="only"===e&&!d&&"nextSibling"}return!0}if(d=[s?m.firstChild:m.lastChild],s&&y){for(p=m,f=p[$]||(p[$]={}),l=f[p.uniqueID]||(f[p.uniqueID]={}),c=l[e]||[],h=c[0]===B&&c[1],x=h&&c[2],p=h&&m.childNodes[h];p=++h&&p&&p[g]||(x=h=0)||d.pop();)if(1===p.nodeType&&++x&&p===t){l[e]=[B,h,x];break}}else if(y&&(p=t,f=p[$]||(p[$]={}),l=f[p.uniqueID]||(f[p.uniqueID]={}),c=l[e]||[],h=c[0]===B&&c[1],x=h),x===!1)for(;(p=++h&&p&&p[g]||(x=h=0)||d.pop())&&((a?p.nodeName.toLowerCase()!==v:1!==p.nodeType)||!++x||(y&&(f=p[$]||(p[$]={}),l=f[p.uniqueID]||(f[p.uniqueID]={}),l[e]=[B,x]),p!==t)););return x-=o,x===r||x%r===0&&x/r>=0}}},PSEUDO:function(e,n){var o,i=C.pseudos[e]||C.setFilters[e.toLowerCase()]||t.error("unsupported pseudo: "+e);return i[$]?i(n):i.length>1?(o=[e,e,"",n],C.setFilters.hasOwnProperty(e.toLowerCase())?r(function(e,t){for(var r,o=i(e,n),s=o.length;s--;)r=ee(e,o[s]),e[r]=!(t[r]=o[s])}):function(e){return i(e,0,o)}):i}},pseudos:{not:r(function(e){var t=[],n=[],o=S(e.replace(ae,"$1"));return o[$]?r(function(e,t,n,r){for(var i,s=o(e,null,r,[]),a=e.length;a--;)(i=s[a])&&(e[a]=!(t[a]=i))}):function(e,r,i){return t[0]=e,o(t,null,i,n),t[0]=null,!n.pop()}}),has:r(function(e){return function(n){ +return t(e,n).length>0}}),contains:r(function(e){return e=e.replace(xe,be),function(t){return(t.textContent||t.innerText||j(t)).indexOf(e)>-1}}),lang:r(function(e){return pe.test(e||"")||t.error("unsupported lang: "+e),e=e.replace(xe,be).toLowerCase(),function(t){var n;do if(n=F?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===H},focus:function(e){return e===L.activeElement&&(!L.hasFocus||L.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:c(!1),disabled:c(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!C.pseudos.empty(e)},header:function(e){return ge.test(e.nodeName)},input:function(e){return de.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:l(function(){return[0]}),last:l(function(e,t){return[t-1]}),eq:l(function(e,t,n){return[n<0?n+t:n]}),even:l(function(e,t){for(var n=0;n=0;)e.push(r);return e}),gt:l(function(e,t,n){for(var r=n<0?n+t:n;++r2&&"ID"===(s=i[0]).type&&9===t.nodeType&&F&&C.relative[i[1].type]){if(t=(C.find.ID(s.matches[0].replace(xe,be),t)||[])[0],!t)return n;c&&(t=t.parentNode),e=e.slice(i.shift().value.length)}for(o=he.needsContext.test(e)?0:i.length;o--&&(s=i[o],!C.relative[a=s.type]);)if((u=C.find[a])&&(r=u(s.matches[0].replace(xe,be),ye.test(i[0].type)&&f(t.parentNode)||t))){if(i.splice(o,1),e=r.length&&h(i),!e)return K.apply(n,r),n;break}}return(c||S(e,l))(r,t,!F,n,!t||ye.test(e)&&f(t.parentNode)||t),n},T.sortStable=$.split("").sort(V).join("")===$,T.detectDuplicates=!!D,O(),T.sortDetached=o(function(e){return 1&e.compareDocumentPosition(L.createElement("fieldset"))}),o(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||i("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),T.attributes&&o(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||i("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),o(function(e){return null==e.getAttribute("disabled")})||i(te,function(e,t,n){var r;if(!n)return e[t]===!0?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),t}(e);de.find=xe,de.expr=xe.selectors,de.expr[":"]=de.expr.pseudos,de.uniqueSort=de.unique=xe.uniqueSort,de.text=xe.getText,de.isXMLDoc=xe.isXML,de.contains=xe.contains,de.escapeSelector=xe.escape;var be=function(e,t,n){for(var r=[],o=void 0!==n;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(o&&de(e).is(n))break;r.push(e)}return r},we=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},Te=de.expr.match.needsContext,Ce=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,je=/^.[^:#\[\.,]*$/;de.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?de.find.matchesSelector(r,e)?[r]:[]:de.find.matches(e,de.grep(t,function(e){return 1===e.nodeType}))},de.fn.extend({find:function(e){var t,n,r=this.length,o=this;if("string"!=typeof e)return this.pushStack(de(e).filter(function(){for(t=0;t1?de.uniqueSort(n):n},filter:function(e){return this.pushStack(o(this,e||[],!1))},not:function(e){return this.pushStack(o(this,e||[],!0))},is:function(e){return!!o(this,"string"==typeof e&&Te.test(e)?de(e):e||[],!1).length}});var ke,Ee=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,Se=de.fn.init=function(e,t,n){var r,o;if(!e)return this;if(n=n||ke,"string"==typeof e){if(r="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:Ee.exec(e),!r||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof de?t[0]:t,de.merge(this,de.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:te,!0)),Ce.test(r[1])&&de.isPlainObject(t))for(r in t)de.isFunction(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return o=te.getElementById(r[2]),o&&(this[0]=o,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):de.isFunction(e)?void 0!==n.ready?n.ready(e):e(de):de.makeArray(e,this)};Se.prototype=de.fn,ke=de(te);var Ne=/^(?:parents|prev(?:Until|All))/,Ae={children:!0,contents:!0,next:!0,prev:!0};de.fn.extend({has:function(e){var t=de(e,this),n=t.length;return this.filter(function(){for(var e=0;e-1:1===n.nodeType&&de.find.matchesSelector(n,e))){i.push(n);break}return this.pushStack(i.length>1?de.uniqueSort(i):i)},index:function(e){return e?"string"==typeof e?se.call(de(e),this[0]):se.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(de.uniqueSort(de.merge(this.get(),de(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),de.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return be(e,"parentNode")},parentsUntil:function(e,t,n){return be(e,"parentNode",n)},next:function(e){return i(e,"nextSibling")},prev:function(e){return i(e,"previousSibling")},nextAll:function(e){return be(e,"nextSibling")},prevAll:function(e){return be(e,"previousSibling")},nextUntil:function(e,t,n){return be(e,"nextSibling",n)},prevUntil:function(e,t,n){return be(e,"previousSibling",n)},siblings:function(e){return we((e.parentNode||{}).firstChild,e)},children:function(e){return we(e.firstChild)},contents:function(e){return e.contentDocument||de.merge([],e.childNodes)}},function(e,t){de.fn[e]=function(n,r){var o=de.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(o=de.filter(r,o)),this.length>1&&(Ae[e]||de.uniqueSort(o),Ne.test(e)&&o.reverse()),this.pushStack(o)}});var qe=/[^\x20\t\r\n\f]+/g;de.Callbacks=function(e){e="string"==typeof e?s(e):de.extend({},e);var t,n,r,o,i=[],a=[],u=-1,c=function(){for(o=e.once,r=t=!0;a.length;u=-1)for(n=a.shift();++u-1;)i.splice(n,1),n<=u&&u--}),this},has:function(e){return e?de.inArray(e,i)>-1:i.length>0},empty:function(){return i&&(i=[]),this},disable:function(){return o=a=[],i=n="",this},disabled:function(){return!i},lock:function(){return o=a=[],n||t||(i=n=""),this},locked:function(){return!!o},fireWith:function(e,n){return o||(n=n||[],n=[e,n.slice?n.slice():n],a.push(n),t||c()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l},de.extend({Deferred:function(t){var n=[["notify","progress",de.Callbacks("memory"),de.Callbacks("memory"),2],["resolve","done",de.Callbacks("once memory"),de.Callbacks("once memory"),0,"resolved"],["reject","fail",de.Callbacks("once memory"),de.Callbacks("once memory"),1,"rejected"]],r="pending",o={state:function(){return r},always:function(){return i.done(arguments).fail(arguments),this},catch:function(e){return o.then(null,e)},pipe:function(){var e=arguments;return de.Deferred(function(t){de.each(n,function(n,r){var o=de.isFunction(e[r[4]])&&e[r[4]];i[r[1]](function(){var e=o&&o.apply(this,arguments);e&&de.isFunction(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+"With"](this,o?[e]:arguments)})}),e=null}).promise()},then:function(t,r,o){function i(t,n,r,o){return function(){var c=this,l=arguments,f=function(){var e,f;if(!(t=s&&(r!==u&&(c=void 0,l=[e]),n.rejectWith(c,l))}};t?p():(de.Deferred.getStackHook&&(p.stackTrace=de.Deferred.getStackHook()),e.setTimeout(p))}}var s=0;return de.Deferred(function(e){n[0][3].add(i(0,e,de.isFunction(o)?o:a,e.notifyWith)),n[1][3].add(i(0,e,de.isFunction(t)?t:a)),n[2][3].add(i(0,e,de.isFunction(r)?r:u))}).promise()},promise:function(e){return null!=e?de.extend(e,o):o}},i={};return de.each(n,function(e,t){var s=t[2],a=t[5];o[t[1]]=s.add,a&&s.add(function(){r=a},n[3-e][2].disable,n[0][2].lock),s.add(t[3].fire),i[t[0]]=function(){return i[t[0]+"With"](this===i?void 0:this,arguments),this},i[t[0]+"With"]=s.fireWith}),o.promise(i),t&&t.call(i,i),i},when:function(e){var t=arguments.length,n=t,r=Array(n),o=re.call(arguments),i=de.Deferred(),s=function(e){return function(n){r[e]=this,o[e]=arguments.length>1?re.call(arguments):n,--t||i.resolveWith(r,o)}};if(t<=1&&(c(e,i.done(s(n)).resolve,i.reject),"pending"===i.state()||de.isFunction(o[n]&&o[n].then)))return i.then();for(;n--;)c(o[n],s(n),i.reject);return i.promise()}});var De=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;de.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&De.test(t.name)&&e.console.warn("jQuery.Deferred exception: "+t.message,t.stack,n)},de.readyException=function(t){e.setTimeout(function(){throw t})};var Oe=de.Deferred();de.fn.ready=function(e){return Oe.then(e).catch(function(e){de.readyException(e)}),this},de.extend({isReady:!1,readyWait:1,holdReady:function(e){e?de.readyWait++:de.ready(!0)},ready:function(e){(e===!0?--de.readyWait:de.isReady)||(de.isReady=!0,e!==!0&&--de.readyWait>0||Oe.resolveWith(te,[de]))}}),de.ready.then=Oe.then,"complete"===te.readyState||"loading"!==te.readyState&&!te.documentElement.doScroll?e.setTimeout(de.ready):(te.addEventListener("DOMContentLoaded",l),e.addEventListener("load",l));var Le=function(e,t,n,r,o,i,s){var a=0,u=e.length,c=null==n;if("object"===de.type(n)){o=!0;for(a in n)Le(e,t,a,n[a],!0,i,s)}else if(void 0!==r&&(o=!0,de.isFunction(r)||(s=!0),c&&(s?(t.call(e,r),t=null):(c=t,t=function(e,t,n){return c.call(de(e),n)})),t))for(;a1,null,!0)},removeData:function(e){return this.each(function(){Re.remove(this,e)})}}),de.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=Fe.get(e,t),n&&(!r||de.isArray(n)?r=Fe.access(e,t,de.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=de.queue(e,t),r=n.length,o=n.shift(),i=de._queueHooks(e,t),s=function(){de.dequeue(e,t)};"inprogress"===o&&(o=n.shift(),r--),o&&("fx"===t&&n.unshift("inprogress"),delete i.stop,o.call(e,s,i)),!r&&i&&i.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Fe.get(e,n)||Fe.access(e,n,{empty:de.Callbacks("once memory").add(function(){Fe.remove(e,[t+"queue",n])})})}}),de.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length\x20\t\r\n\f]+)/i,Ve=/^$|\/(?:java|ecma)script/i,Ge={option:[1,""],thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};Ge.optgroup=Ge.option,Ge.tbody=Ge.tfoot=Ge.colgroup=Ge.caption=Ge.thead,Ge.th=Ge.td;var Ye=/<|&#?\w+;/;!function(){var e=te.createDocumentFragment(),t=e.appendChild(te.createElement("div")),n=te.createElement("input");n.setAttribute("type","radio"),n.setAttribute("checked","checked"),n.setAttribute("name","t"),t.appendChild(n),pe.checkClone=t.cloneNode(!0).cloneNode(!0).lastChild.checked,t.innerHTML="",pe.noCloneChecked=!!t.cloneNode(!0).lastChild.defaultValue}();var Qe=te.documentElement,Je=/^key/,Ke=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ze=/^([^.]*)(?:\.(.+)|)/;de.event={global:{},add:function(e,t,n,r,o){var i,s,a,u,c,l,f,p,h,d,g,m=Fe.get(e);if(m)for(n.handler&&(i=n,n=i.handler,o=i.selector),o&&de.find.matchesSelector(Qe,o),n.guid||(n.guid=de.guid++),(u=m.events)||(u=m.events={}),(s=m.handle)||(s=m.handle=function(t){return"undefined"!=typeof de&&de.event.triggered!==t.type?de.event.dispatch.apply(e,arguments):void 0}),t=(t||"").match(qe)||[""],c=t.length;c--;)a=Ze.exec(t[c])||[],h=g=a[1],d=(a[2]||"").split(".").sort(),h&&(f=de.event.special[h]||{},h=(o?f.delegateType:f.bindType)||h,f=de.event.special[h]||{},l=de.extend({type:h,origType:g,data:r,handler:n,guid:n.guid,selector:o,needsContext:o&&de.expr.match.needsContext.test(o),namespace:d.join(".")},i),(p=u[h])||(p=u[h]=[],p.delegateCount=0,f.setup&&f.setup.call(e,r,d,s)!==!1||e.addEventListener&&e.addEventListener(h,s)),f.add&&(f.add.call(e,l),l.handler.guid||(l.handler.guid=n.guid)),o?p.splice(p.delegateCount++,0,l):p.push(l),de.event.global[h]=!0)},remove:function(e,t,n,r,o){var i,s,a,u,c,l,f,p,h,d,g,m=Fe.hasData(e)&&Fe.get(e);if(m&&(u=m.events)){for(t=(t||"").match(qe)||[""],c=t.length;c--;)if(a=Ze.exec(t[c])||[],h=g=a[1],d=(a[2]||"").split(".").sort(),h){for(f=de.event.special[h]||{},h=(r?f.delegateType:f.bindType)||h,p=u[h]||[],a=a[2]&&new RegExp("(^|\\.)"+d.join("\\.(?:.*\\.|)")+"(\\.|$)"),s=i=p.length;i--;)l=p[i],!o&&g!==l.origType||n&&n.guid!==l.guid||a&&!a.test(l.namespace)||r&&r!==l.selector&&("**"!==r||!l.selector)||(p.splice(i,1),l.selector&&p.delegateCount--,f.remove&&f.remove.call(e,l));s&&!p.length&&(f.teardown&&f.teardown.call(e,d,m.handle)!==!1||de.removeEvent(e,h,m.handle),delete u[h])}else for(h in u)de.event.remove(e,h+t[c],n,r,!0);de.isEmptyObject(u)&&Fe.remove(e,"handle events")}},dispatch:function(e){var t,n,r,o,i,s,a=de.event.fix(e),u=new Array(arguments.length),c=(Fe.get(this,"events")||{})[a.type]||[],l=de.event.special[a.type]||{};for(u[0]=a,t=1;t=1))for(;c!==this;c=c.parentNode||this)if(1===c.nodeType&&("click"!==e.type||c.disabled!==!0)){for(i=[],s={},n=0;n-1:de.find(o,this,null,[c]).length),s[o]&&i.push(r);i.length&&a.push({elem:c,handlers:i})}return c=this,u\x20\t\r\n\f]*)[^>]*)\/>/gi,tt=/\s*$/g;de.extend({htmlPrefilter:function(e){return e.replace(et,"<$1>")},clone:function(e,t,n){var r,o,i,s,a=e.cloneNode(!0),u=de.contains(e.ownerDocument,e);if(!(pe.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||de.isXMLDoc(e)))for(s=v(a),i=v(e),r=0,o=i.length;r0&&y(s,!u&&v(e,"script")),a},cleanData:function(e){for(var t,n,r,o=de.event.special,i=0;void 0!==(n=e[i]);i++)if(He(n)){if(t=n[Fe.expando]){if(t.events)for(r in t.events)o[r]?de.event.remove(n,r):de.removeEvent(n,r,t.handle);n[Fe.expando]=void 0}n[Re.expando]&&(n[Re.expando]=void 0)}}}),de.fn.extend({detach:function(e){return q(this,e,!0)},remove:function(e){return q(this,e)},text:function(e){return Le(this,function(e){return void 0===e?de.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return A(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=j(this,e);t.appendChild(e)}})},prepend:function(){return A(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=j(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return A(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return A(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(de.cleanData(v(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return de.clone(this,e,t)})},html:function(e){return Le(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!tt.test(e)&&!Ge[(Xe.exec(e)||["",""])[1].toLowerCase()]){e=de.htmlPrefilter(e);try{for(;n1)}}),de.Tween=I,I.prototype={constructor:I,init:function(e,t,n,r,o,i){this.elem=e,this.prop=n,this.easing=o||de.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=i||(de.cssNumber[n]?"":"px")},cur:function(){var e=I.propHooks[this.prop];return e&&e.get?e.get(this):I.propHooks._default.get(this)},run:function(e){var t,n=I.propHooks[this.prop];return this.options.duration?this.pos=t=de.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):I.propHooks._default.set(this),this}},I.prototype.init.prototype=I.prototype,I.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=de.css(e.elem,e.prop,""),t&&"auto"!==t?t:0)},set:function(e){de.fx.step[e.prop]?de.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[de.cssProps[e.prop]]&&!de.cssHooks[e.prop]?e.elem[e.prop]=e.now:de.style(e.elem,e.prop,e.now+e.unit)}}},I.propHooks.scrollTop=I.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},de.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},de.fx=I.prototype.init,de.fx.step={};var ht,dt,gt=/^(?:toggle|show|hide)$/,mt=/queueHooks$/;de.Animation=de.extend(U,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return d(n.elem,e,$e.exec(t),n),n}]},tweener:function(e,t){de.isFunction(e)?(t=e,e=["*"]):e=e.match(qe);for(var n,r=0,o=e.length;r1)},removeAttr:function(e){return this.each(function(){de.removeAttr(this,e)})}}),de.extend({attr:function(e,t,n){var r,o,i=e.nodeType;if(3!==i&&8!==i&&2!==i)return"undefined"==typeof e.getAttribute?de.prop(e,t,n):(1===i&&de.isXMLDoc(e)||(o=de.attrHooks[t.toLowerCase()]||(de.expr.match.bool.test(t)?vt:void 0)),void 0!==n?null===n?void de.removeAttr(e,t):o&&"set"in o&&void 0!==(r=o.set(e,n,t))?r:(e.setAttribute(t,n+""),n):o&&"get"in o&&null!==(r=o.get(e,t))?r:(r=de.find.attr(e,t),null==r?void 0:r))},attrHooks:{type:{set:function(e,t){if(!pe.radioValue&&"radio"===t&&de.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,o=t&&t.match(qe);if(o&&1===e.nodeType)for(;n=o[r++];)e.removeAttribute(n)}}),vt={set:function(e,t,n){return t===!1?de.removeAttr(e,n):e.setAttribute(n,n),n}},de.each(de.expr.match.bool.source.match(/\w+/g),function(e,t){var n=yt[t]||de.find.attr;yt[t]=function(e,t,r){var o,i,s=t.toLowerCase();return r||(i=yt[s],yt[s]=o,o=null!=n(e,t,r)?s:null,yt[s]=i),o}});var xt=/^(?:input|select|textarea|button)$/i,bt=/^(?:a|area)$/i;de.fn.extend({prop:function(e,t){return Le(this,de.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[de.propFix[e]||e]})}}),de.extend({prop:function(e,t,n){var r,o,i=e.nodeType;if(3!==i&&8!==i&&2!==i)return 1===i&&de.isXMLDoc(e)||(t=de.propFix[t]||t,o=de.propHooks[t]),void 0!==n?o&&"set"in o&&void 0!==(r=o.set(e,n,t))?r:e[t]=n:o&&"get"in o&&null!==(r=o.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=de.find.attr(e,"tabindex");return t?parseInt(t,10):xt.test(e.nodeName)||bt.test(e.nodeName)&&e.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),pe.optSelected||(de.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),de.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){de.propFix[this.toLowerCase()]=this}),de.fn.extend({addClass:function(e){var t,n,r,o,i,s,a,u=0;if(de.isFunction(e))return this.each(function(t){de(this).addClass(e.call(this,t,X(this)))});if("string"==typeof e&&e)for(t=e.match(qe)||[];n=this[u++];)if(o=X(n),r=1===n.nodeType&&" "+z(o)+" "){for(s=0;i=t[s++];)r.indexOf(" "+i+" ")<0&&(r+=i+" ");a=z(r),o!==a&&n.setAttribute("class",a)}return this},removeClass:function(e){var t,n,r,o,i,s,a,u=0;if(de.isFunction(e))return this.each(function(t){de(this).removeClass(e.call(this,t,X(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof e&&e)for(t=e.match(qe)||[];n=this[u++];)if(o=X(n),r=1===n.nodeType&&" "+z(o)+" "){for(s=0;i=t[s++];)for(;r.indexOf(" "+i+" ")>-1;)r=r.replace(" "+i+" "," ");a=z(r),o!==a&&n.setAttribute("class",a)}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):de.isFunction(e)?this.each(function(n){de(this).toggleClass(e.call(this,n,X(this),t),t)}):this.each(function(){var t,r,o,i;if("string"===n)for(r=0,o=de(this),i=e.match(qe)||[];t=i[r++];)o.hasClass(t)?o.removeClass(t):o.addClass(t);else void 0!==e&&"boolean"!==n||(t=X(this),t&&Fe.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||e===!1?"":Fe.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;for(t=" "+e+" ";n=this[r++];)if(1===n.nodeType&&(" "+z(X(n))+" ").indexOf(t)>-1)return!0;return!1}});var wt=/\r/g;de.fn.extend({val:function(e){var t,n,r,o=this[0];{if(arguments.length)return r=de.isFunction(e),this.each(function(n){var o;1===this.nodeType&&(o=r?e.call(this,n,de(this).val()):e,null==o?o="":"number"==typeof o?o+="":de.isArray(o)&&(o=de.map(o,function(e){return null==e?"":e+""})),t=de.valHooks[this.type]||de.valHooks[this.nodeName.toLowerCase()],t&&"set"in t&&void 0!==t.set(this,o,"value")||(this.value=o))});if(o)return t=de.valHooks[o.type]||de.valHooks[o.nodeName.toLowerCase()],t&&"get"in t&&void 0!==(n=t.get(o,"value"))?n:(n=o.value,"string"==typeof n?n.replace(wt,""):null==n?"":n)}}}),de.extend({valHooks:{option:{get:function(e){var t=de.find.attr(e,"value");return null!=t?t:z(de.text(e))}},select:{get:function(e){var t,n,r,o=e.options,i=e.selectedIndex,s="select-one"===e.type,a=s?null:[],u=s?i+1:o.length;for(r=i<0?u:s?i:0;r-1)&&(n=!0);return n||(e.selectedIndex=-1),i}}}}),de.each(["radio","checkbox"],function(){de.valHooks[this]={set:function(e,t){if(de.isArray(t))return e.checked=de.inArray(de(e).val(),t)>-1}},pe.checkOn||(de.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Tt=/^(?:focusinfocus|focusoutblur)$/;de.extend(de.event,{trigger:function(t,n,r,o){var i,s,a,u,c,l,f,p=[r||te],h=ce.call(t,"type")?t.type:t,d=ce.call(t,"namespace")?t.namespace.split("."):[];if(s=a=r=r||te,3!==r.nodeType&&8!==r.nodeType&&!Tt.test(h+de.event.triggered)&&(h.indexOf(".")>-1&&(d=h.split("."),h=d.shift(),d.sort()),c=h.indexOf(":")<0&&"on"+h,t=t[de.expando]?t:new de.Event(h,"object"==typeof t&&t),t.isTrigger=o?2:3,t.namespace=d.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+d.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=r),n=null==n?[t]:de.makeArray(n,[t]),f=de.event.special[h]||{},o||!f.trigger||f.trigger.apply(r,n)!==!1)){if(!o&&!f.noBubble&&!de.isWindow(r)){for(u=f.delegateType||h,Tt.test(u+h)||(s=s.parentNode);s;s=s.parentNode)p.push(s),a=s;a===(r.ownerDocument||te)&&p.push(a.defaultView||a.parentWindow||e)}for(i=0;(s=p[i++])&&!t.isPropagationStopped();)t.type=i>1?u:f.bindType||h,l=(Fe.get(s,"events")||{})[t.type]&&Fe.get(s,"handle"),l&&l.apply(s,n),l=c&&s[c],l&&l.apply&&He(s)&&(t.result=l.apply(s,n),t.result===!1&&t.preventDefault());return t.type=h,o||t.isDefaultPrevented()||f._default&&f._default.apply(p.pop(),n)!==!1||!He(r)||c&&de.isFunction(r[h])&&!de.isWindow(r)&&(a=r[c],a&&(r[c]=null),de.event.triggered=h,r[h](),de.event.triggered=void 0,a&&(r[c]=a)),t.result}},simulate:function(e,t,n){var r=de.extend(new de.Event,n,{type:e,isSimulated:!0});de.event.trigger(r,null,t)}}),de.fn.extend({trigger:function(e,t){return this.each(function(){de.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return de.event.trigger(e,t,n,!0)}}),de.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,t){de.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),de.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),pe.focusin="onfocusin"in e,pe.focusin||de.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){de.event.simulate(t,e.target,de.event.fix(e))};de.event.special[t]={setup:function(){var r=this.ownerDocument||this,o=Fe.access(r,t);o||r.addEventListener(e,n,!0),Fe.access(r,t,(o||0)+1)},teardown:function(){var r=this.ownerDocument||this,o=Fe.access(r,t)-1;o?Fe.access(r,t,o):(r.removeEventListener(e,n,!0),Fe.remove(r,t))}}});var Ct=e.location,jt=de.now(),kt=/\?/;de.parseXML=function(t){var n;if(!t||"string"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,"text/xml")}catch(e){n=void 0}return n&&!n.getElementsByTagName("parsererror").length||de.error("Invalid XML: "+t),n};var Et=/\[\]$/,St=/\r?\n/g,Nt=/^(?:submit|button|image|reset|file)$/i,At=/^(?:input|select|textarea|keygen)/i;de.param=function(e,t){var n,r=[],o=function(e,t){var n=de.isFunction(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(de.isArray(e)||e.jquery&&!de.isPlainObject(e))de.each(e,function(){o(this.name,this.value)});else for(n in e)V(n,e[n],t,o);return r.join("&")},de.fn.extend({serialize:function(){return de.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=de.prop(this,"elements");return e?de.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!de(this).is(":disabled")&&At.test(this.nodeName)&&!Nt.test(e)&&(this.checked||!ze.test(e))}).map(function(e,t){var n=de(this).val();return null==n?null:de.isArray(n)?de.map(n,function(e){return{name:t.name,value:e.replace(St,"\r\n")}}):{name:t.name,value:n.replace(St,"\r\n")}}).get()}});var qt=/%20/g,Dt=/#.*$/,Ot=/([?&])_=[^&]*/,Lt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Ht=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Ft=/^(?:GET|HEAD)$/,Rt=/^\/\//,It={},Pt={},Mt="*/".concat("*"),$t=te.createElement("a");$t.href=Ct.href,de.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ct.href,type:"GET",isLocal:Ht.test(Ct.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Mt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":de.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Q(Q(e,de.ajaxSettings),t):Q(de.ajaxSettings,e)},ajaxPrefilter:G(It),ajaxTransport:G(Pt),ajax:function(t,n){function r(t,n,r,a){var c,p,h,b,w,T=n;l||(l=!0,u&&e.clearTimeout(u),o=void 0,s=a||"",C.readyState=t>0?4:0,c=t>=200&&t<300||304===t,r&&(b=J(d,C,r)),b=K(d,b,C,c),c?(d.ifModified&&(w=C.getResponseHeader("Last-Modified"),w&&(de.lastModified[i]=w),w=C.getResponseHeader("etag"),w&&(de.etag[i]=w)),204===t||"HEAD"===d.type?T="nocontent":304===t?T="notmodified":(T=b.state,p=b.data,h=b.error,c=!h)):(h=T,!t&&T||(T="error",t<0&&(t=0))),C.status=t,C.statusText=(n||T)+"",c?v.resolveWith(g,[p,T,C]):v.rejectWith(g,[C,T,h]),C.statusCode(x),x=void 0,f&&m.trigger(c?"ajaxSuccess":"ajaxError",[C,d,c?p:h]),y.fireWith(g,[C,T]),f&&(m.trigger("ajaxComplete",[C,d]),--de.active||de.event.trigger("ajaxStop")))}"object"==typeof t&&(n=t,t=void 0),n=n||{};var o,i,s,a,u,c,l,f,p,h,d=de.ajaxSetup({},n),g=d.context||d,m=d.context&&(g.nodeType||g.jquery)?de(g):de.event,v=de.Deferred(),y=de.Callbacks("once memory"),x=d.statusCode||{},b={},w={},T="canceled",C={readyState:0,getResponseHeader:function(e){var t;if(l){if(!a)for(a={};t=Lt.exec(s);)a[t[1].toLowerCase()]=t[2];t=a[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return l?s:null},setRequestHeader:function(e,t){return null==l&&(e=w[e.toLowerCase()]=w[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==l&&(d.mimeType=e),this},statusCode:function(e){var t;if(e)if(l)C.always(e[C.status]);else for(t in e)x[t]=[x[t],e[t]];return this},abort:function(e){var t=e||T;return o&&o.abort(t),r(0,t),this}};if(v.promise(C),d.url=((t||d.url||Ct.href)+"").replace(Rt,Ct.protocol+"//"),d.type=n.method||n.type||d.method||d.type,d.dataTypes=(d.dataType||"*").toLowerCase().match(qe)||[""],null==d.crossDomain){c=te.createElement("a");try{c.href=d.url,c.href=c.href,d.crossDomain=$t.protocol+"//"+$t.host!=c.protocol+"//"+c.host}catch(e){d.crossDomain=!0}}if(d.data&&d.processData&&"string"!=typeof d.data&&(d.data=de.param(d.data,d.traditional)),Y(It,d,n,C),l)return C;f=de.event&&d.global,f&&0===de.active++&&de.event.trigger("ajaxStart"),d.type=d.type.toUpperCase(),d.hasContent=!Ft.test(d.type),i=d.url.replace(Dt,""),d.hasContent?d.data&&d.processData&&0===(d.contentType||"").indexOf("application/x-www-form-urlencoded")&&(d.data=d.data.replace(qt,"+")):(h=d.url.slice(i.length),d.data&&(i+=(kt.test(i)?"&":"?")+d.data,delete d.data),d.cache===!1&&(i=i.replace(Ot,"$1"),h=(kt.test(i)?"&":"?")+"_="+jt++ +h),d.url=i+h),d.ifModified&&(de.lastModified[i]&&C.setRequestHeader("If-Modified-Since",de.lastModified[i]),de.etag[i]&&C.setRequestHeader("If-None-Match",de.etag[i])),(d.data&&d.hasContent&&d.contentType!==!1||n.contentType)&&C.setRequestHeader("Content-Type",d.contentType),C.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+("*"!==d.dataTypes[0]?", "+Mt+"; q=0.01":""):d.accepts["*"]);for(p in d.headers)C.setRequestHeader(p,d.headers[p]);if(d.beforeSend&&(d.beforeSend.call(g,C,d)===!1||l))return C.abort();if(T="abort",y.add(d.complete),C.done(d.success),C.fail(d.error),o=Y(Pt,d,n,C)){if(C.readyState=1,f&&m.trigger("ajaxSend",[C,d]),l)return C;d.async&&d.timeout>0&&(u=e.setTimeout(function(){C.abort("timeout")},d.timeout));try{l=!1,o.send(b,r)}catch(e){if(l)throw e;r(-1,e)}}else r(-1,"No Transport");return C},getJSON:function(e,t,n){return de.get(e,t,n,"json")},getScript:function(e,t){return de.get(e,void 0,t,"script")}}),de.each(["get","post"],function(e,t){de[t]=function(e,n,r,o){return de.isFunction(n)&&(o=o||r,r=n,n=void 0),de.ajax(de.extend({url:e,type:t,dataType:o,data:n,success:r},de.isPlainObject(e)&&e))}}),de._evalUrl=function(e){return de.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,throws:!0})},de.fn.extend({wrapAll:function(e){var t;return this[0]&&(de.isFunction(e)&&(e=e.call(this[0])),t=de(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){for(var e=this;e.firstElementChild;)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return de.isFunction(e)?this.each(function(t){de(this).wrapInner(e.call(this,t))}):this.each(function(){var t=de(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=de.isFunction(e);return this.each(function(n){de(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){de(this).replaceWith(this.childNodes)}),this}}),de.expr.pseudos.hidden=function(e){return!de.expr.pseudos.visible(e)},de.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},de.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Wt={0:200,1223:204},Bt=de.ajaxSettings.xhr();pe.cors=!!Bt&&"withCredentials"in Bt,pe.ajax=Bt=!!Bt,de.ajaxTransport(function(t){var n,r;if(pe.cors||Bt&&!t.crossDomain)return{send:function(o,i){var s,a=t.xhr();if(a.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(s in t.xhrFields)a[s]=t.xhrFields[s];t.mimeType&&a.overrideMimeType&&a.overrideMimeType(t.mimeType),t.crossDomain||o["X-Requested-With"]||(o["X-Requested-With"]="XMLHttpRequest");for(s in o)a.setRequestHeader(s,o[s]);n=function(e){return function(){n&&(n=r=a.onload=a.onerror=a.onabort=a.onreadystatechange=null,"abort"===e?a.abort():"error"===e?"number"!=typeof a.status?i(0,"error"):i(a.status,a.statusText):i(Wt[a.status]||a.status,a.statusText,"text"!==(a.responseType||"text")||"string"!=typeof a.responseText?{binary:a.response}:{text:a.responseText},a.getAllResponseHeaders()))}},a.onload=n(),r=a.onerror=n("error"),void 0!==a.onabort?a.onabort=r:a.onreadystatechange=function(){4===a.readyState&&e.setTimeout(function(){n&&r()})},n=n("abort");try{a.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}}),de.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),de.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return de.globalEval(e),e}}}),de.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),de.ajaxTransport("script",function(e){if(e.crossDomain){var t,n;return{send:function(r,o){t=de(" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_book/programing-manual/base/framework.html b/_book/programing-manual/base/framework.html new file mode 100644 index 0000000000000000000000000000000000000000..cad651700f968ef2fd2a3601d8fa66ad63a33cb4 --- /dev/null +++ b/_book/programing-manual/base/framework.html @@ -0,0 +1,824 @@ + + + + + + + 整体框架 · book for nxos + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +
    + + + + + + + + +
    + +
    + +
    + + + + + + + + +
    +
    + +
    +
    + +
    + +

    NXOS 框架

    +

    一、混合内核框架

    +

    NXOS 采用混合内核框架,也就是结合宏内核和微内核。这样的系统有 Windows NT 内核、苹果 XNU 内核,还有国产开源系统 RT-Thread Smart

    +
    +-----------------------------------+
    +|  app                              |
    ++-----------------------------------+
    +| (fatfs, extfs, netstack)          |
    ++-----------------------------------+
    +|  nxbase | udrivers | userverce    |
    ++-----------------------------------+
    +/ syscall                           /
    ++-----------------------------------+
    +| vfs | hub system                  |
    ++-----------------------------------+
    +| kdrivers | kservice               |
    ++-----------------------------------+
    +| thread | vmm | irq | timer        |
    ++-----------------------------------+
    +| arch (x86, arm, riscv, ...)       | 
    ++-----------------------------------+
    +| hardware                          |
    ++-----------------------------------+
    +

    二、目录框架

    +

    1. 项目目录

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    目录描述
    .vscodevscode的一些配置文件,有gdb调试配置
    configs平台配置文件,配置了支持的平台
    docs内核一些功能的文档说明
    scripts用到的xbuild脚本和kconfig脚本等
    srcnxos 内核的源码
    +

    2. 内核源码目录

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    目录描述
    arch架构相关代码,x86, riscv64等
    drivers驱动程序,磁盘,输入输出设备等
    fs文件系统框架以及各种文件系统支持
    include头文件
    init内核初始化以及main核心
    ioI/O驱动框架和中断管理
    ipc进程间通信
    kernel内核其余模块
    mm内存管理模块
    platform平台支持,存放具体的平台,比如pc平台或者一个开发板
    process进程管理,系统调用相关内容
    sched调度模块,线程和SMP的内容,以及同步机制
    test测试模块,测试框架和测试代码
    time时间模块,时钟和定时器
    utils常用的功能组件,小工具,log显示以及字符串操作等
    +

    3. 平台框架

    +

    NXOS 采取架构和平台分离的措施,其原因在于,一个架构可能有多个平台,分离后可以服用架构的代码。

    + + + + + + + + + + + + + + + + + +
    架构平台
    x86i386, pc
    riscv64virt riscv64, k210, d1
    + + +
    + +
    +
    +
    + +

    results matching ""

    +
      + +
      +
      + +

      No results matching ""

      + +
      +
      +
      + +
      +
      + +
      + + + + + + + + + + +
      + + +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_book/programing-manual/base/start.html b/_book/programing-manual/base/start.html new file mode 100644 index 0000000000000000000000000000000000000000..44248c56b16c3464f92d33cf1a293c8646eb5f74 --- /dev/null +++ b/_book/programing-manual/base/start.html @@ -0,0 +1,700 @@ + + + + + + + 启动流程 · book for nxos + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +
      + + + + + + + + +
      + +
      + +
      + + + + + + + + +
      +
      + +
      +
      + +
      + +

      NXOS 启动流程

      +

      在设备开机后,处理器会跳到一个地址去执行代码,一般都是固定的,然后再从这些固定代码跳转到程序员自己编写的程序。程序员自己写的程序就是裸机,rtos或者操作系统。
      在nxos中,不同的平台会有不同的执行地址,所以我们需要指定内核程序的入口地址,在链接的时候指定一个标签 _Start,当执行到这个地方的时候,内核就开始运行了。

      +

      内核执行路径

      +
      -> _Start
      +    -> NX_Main (内核的主函数)
      +        -> NX_SMP_Preload
      +        -> NX_HalPlatformInit (平台初始化, 不能使用内核的功能: 平台开发者实现)
      +        -> ShowLogVersion
      +        -> ... 内核功能初始化 ...
      +        -> NX_CallsInit (初始化调用)
      +        -> NX_HalPlatformStage2 (平台初始化二阶段,可以使用内核的功能: 平台开发者实现) 
      +
      +        -> NX_SMP_Main (SMP初始化)
      +        -> NX_SchedToFirstThread (调度第一个线程)
      +            -> NX_HalPlatformMain (平台的主函数,什么都可以使用: 平台开发者实现)
      +
      + +
      + +
      +
      +
      + +

      results matching ""

      +
        + +
        +
        + +

        No results matching ""

        + +
        +
        +
        + +
        +
        + +
        + + + + + + + + + + + + + + +
        + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_book/programing-manual/interrupt/delay_queue.html b/_book/programing-manual/interrupt/delay_queue.html new file mode 100644 index 0000000000000000000000000000000000000000..2ae9cc7e98bbdc8b46abee4e81d4d3ad15ae5aa9 --- /dev/null +++ b/_book/programing-manual/interrupt/delay_queue.html @@ -0,0 +1,730 @@ + + + + + + + 延迟队列 · book for nxos + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        +
        + + + + + + + + +
        + +
        + +
        + + + + + + + + +
        +
        + +
        +
        + +
        + +

        中断延迟队列

        +

        一、描述

        +

        中断延迟队列是一种延迟处理中断的机制,类似于 linux 中断机制中的中断下半部分,用来进行具体的中断处理。 +中断的要求是快速地响应中断,并且是关闭了全局中断的,然后回到之前的工作。而延迟队列就是来完成这个工作的,产生了中断后,只进行最少的工作, +然后激活中断队列工作,然后就返回,完成了本次中断。等到没有中断的时候,再去从延迟队列中获取一个工作来处理其对应的中断下半部分处理工作。

        +

        二、原理

        +

        中断延迟队列在某个驱动或者内核组件中会进行初始化。当产生中断的时候,在中断处理函数中,只对中断产生时的数据进行保存,不对中断产生时的数据进行处理, +而是处理中断延迟工作,然后就直接返回。等到响应了该中断之后,再去调用延迟队列中的工作。

        +

        由于中断是具有一定优先级的,有的中断需要先处理,而有的中断则可以后处理,因此就有了多个中断队列,每个队列的优先级是不同的。至于需要加入哪种队列, +是在该延迟中断工作初始化的时候设定的。

        +

        工作队列的优先级如下,其中 NX_IRQ_FAST_QUEUE 优先级最高, NX_IRQ_SLOW_QUEUE 优先级最低。

        +
        enum NX_IRQ_DelayQueue 
        +{
        +    NX_IRQ_FAST_QUEUE = 0,
        +    NX_IRQ_NORMAL_QUEUE,
        +    NX_IRQ_PERIOD_QUEUE,
        +    NX_IRQ_SCHED_QUEUE,
        +    NX_IRQ_SLOW_QUEUE,
        +    NX_IRQ_QUEUE_NR,
        +};
        +
        +

        内核的定时器属于 NX_IRQ_FAST_QUEUE ,这样才能保证时间的精度。 +而内核的任务调度属于 NX_IRQ_SCHED_QUEUE ,及时调度的精度低一点也没有太大影响。

        +

        三、框架图

        +

        框架图

        +

        四、接口

        +

        创建一个延迟的中断工作,需要传入中断工作处理函数入口,以及函数执行时的参数,就可以创建一个延迟的工作对象。

        +
        NX_IRQ_DelayWork *NX_IRQ_DelayWorkCreate(NX_IRQ_WorkHandler handler, void *arg, NX_U32 flags);
        +
        +

        如果是一个静态对象,不需要创建,那么可以直接调用初始化,并传入该对象的地址即可,参数同上。

        +
        NX_Error NX_IRQ_DelayWorkInit(NX_IRQ_DelayWork *work, NX_IRQ_WorkHandler handler, void *arg, NX_U32 flags);
        +
        +

        有创建工作,那么就有销毁工作,只需要传入工作对象的地址即可。

        +
        NX_Error NX_IRQ_DelayWorkDestroy(NX_IRQ_DelayWork *work);
        +
        +

        创建了一个中断工作对象,就需要将其加入到某个延迟队列中,只需要传入队列和工作对象的地址即可。

        +
        NX_Error NX_IRQ_DelayQueueEnter(NX_IRQ_DelayQueue queue, NX_IRQ_DelayWork *work);
        +
        +

        和加入延迟队列相反,有离开延迟队列,那么和加入的参数一样,只是意思相反而已。

        +
        NX_Error NX_IRQ_DelayQueueLeave(NX_IRQ_DelayQueue queue, NX_IRQ_DelayWork *work);
        +
        +

        最后,当有中断产生的时候,就可以去激活中断工作,那么则需要调用 NX_IRQ_DelayWorkHandle 来处理工作 +对象即可,传入工作对象的地址即可。

        +
        NX_Error NX_IRQ_DelayWorkHandle(NX_IRQ_DelayWork *work);
        +
        + + +
        + +
        +
        +
        + +

        results matching ""

        +
          + +
          +
          + +

          No results matching ""

          + +
          +
          +
          + +
          +
          + +
          + + + + + + + + + + + + + + +
          + + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_book/programing-manual/interrupt/figures/delay_queue.png b/_book/programing-manual/interrupt/figures/delay_queue.png new file mode 100644 index 0000000000000000000000000000000000000000..7db6f4c32d8b873a7fc1b0061d48daadb82e234f Binary files /dev/null and b/_book/programing-manual/interrupt/figures/delay_queue.png differ diff --git a/_book/programing-manual/interrupt/figures/interrupt.png b/_book/programing-manual/interrupt/figures/interrupt.png new file mode 100644 index 0000000000000000000000000000000000000000..2f343db312be8dd4bbe218cb147681e5a2b7c070 Binary files /dev/null and b/_book/programing-manual/interrupt/figures/interrupt.png differ diff --git a/_book/programing-manual/interrupt/irq.html b/_book/programing-manual/interrupt/irq.html new file mode 100644 index 0000000000000000000000000000000000000000..a1d0a0f17c1d286669d02f682239cf57bcd1a808 --- /dev/null +++ b/_book/programing-manual/interrupt/irq.html @@ -0,0 +1,716 @@ + + + + + + + 中断系统 · book for nxos + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          +
          + + + + + + + + +
          + +
          + +
          + + + + + + + + +
          +
          + +
          +
          + +
          + +

          中断管理

          +

          一、描述

          +

          中断是由处理器支持的一个临时打断当前执行流的功能,可分为设备中断和处理器异常。设备中断就是当网卡设备收到数据后会产生一个中断,打断处理器当前在处理的事情,去处理网络数据包。异常中断就是当处理器执行了一个不存在的指令或者访问了一个没有权限的内存地址,处理器就会中断当前的执行流,去对异常做一个处理,一般都是 kill 当前的进程。

          +

          二、原理

          +

          中断管理的实现是基于处理器的中断管理机制的,不同的架构具体实现机制可能有差别,但是在大体逻辑上都是一致的,因此可以抽象出一套统一的接口来供上层使用。

          +

          由于中断数量会比较多,因此,都会有一个中断表来注册中断。然后由一个寄存器或者多个寄存器来记录该表的地址。产生中断的时候会去查表,根据具体的中断号去找对应的中断处理函数,简单来说就是去调用中断的回调函数。

          +

          中断是可以全局打开和关闭的,打开后才会响应中断。除此之外,对于每一个具体的中断,都可以打开和关闭,在禁止了网卡中断后,即使打开了全局中断,也收不到网络数据包了。但是,异常是不可以屏蔽的,异常是来告诉内核出现一些问题了,需要根据具体的异常做处理。有的异常是不可以修复的,会导致系统死机,有的异常时可以修复的,比如页故障,可以拿来实现页面延迟映射, COW 等机制。

          +

          三、框架图

          +

          框架图

          +

          四、接口

          +

          需要注册某个中断的时候,需要传入中断号,绑定中断处理函数,设置中断的参数数据,设置中断的名字。

          +
          NX_Error NX_IRQ_Bind(NX_IRQ_Number irqno,
          +                         NX_IRQ_Handler handler,
          +                         void *data,
          +                         char *name,
          +                         NX_U32 flags);
          +
          +

          当需要注销某个中断的时候,只需要传入中断号以及注册时的数据即可。相当于解除了中断函数的绑定。

          +
          NX_Error NX_IRQ_Unbind(NX_IRQ_Number irqno, void *data);
          +
          +

          注册了中断后,并不能产生中断,还需要解除中断的屏蔽(unmask),相当于打开中断。除此之外,如果不希望产生该中断,则需要屏蔽某个中断(mask),相当于关闭中断。

          +
          NX_Error NX_IRQ_Unmask(NX_IRQ_Number irqno);
          +NX_Error NX_IRQ_Mask(NX_IRQ_Number irqno);
          +
          +

          前面有讲到关于全局中断的打开和关闭,全局中断的打开是 NX_IRQ_Enable 函数,相反关闭则是 + NX_IRQ_Disable 。由于有的时候只是为了暂时关闭中断,处理完后需要恢复中断的状态,于是则需要使用保存中断的状态和恢复中断的状态,即 NX_IRQ_SaveLevelNX_IRQ_RestoreLevel

          +
          #define NX_IRQ_Enable()            NX_IRQ_ControllerInterface.enable()
          +#define NX_IRQ_Disable()           NX_IRQ_ControllerInterface.disable()
          +#define NX_IRQ_SaveLevel()         NX_IRQ_ControllerInterface.saveLevel()
          +#define NX_IRQ_RestoreLevel(level) NX_IRQ_ControllerInterface.restoreLevel(level)
          +
          + + +
          + +
          +
          +
          + +

          results matching ""

          +
            + +
            +
            + +

            No results matching ""

            + +
            +
            +
            + +
            +
            + +
            + + + + + + + + + + + + + + +
            + + +
            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_book/programing-manual/mm/buddy.html b/_book/programing-manual/mm/buddy.html new file mode 100644 index 0000000000000000000000000000000000000000..abe58234bbb75429d3913ee807d9db1833769067 --- /dev/null +++ b/_book/programing-manual/mm/buddy.html @@ -0,0 +1,745 @@ + + + + + + + buddy伙伴算法 · book for nxos + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
            +
            + + + + + + + + +
            + +
            + +
            + + + + + + + + +
            +
            + +
            +
            + +
            + +

            物理内存分配/释放管理之伙伴算法(buddy)

            +

            一. 描述

            +

            内存是操作系统运行的根基,处理器从内存中取出指令来执行,在进入操作系统之前,一般会有引导器 bootloader 把内核加载到内核中,然后跳转进去执行。 +这样的话,内核也就占用了一部分的内存,那么我们应该去管理哪部分内存呢? +我们需要管理的物理内存是除了保留地址和操作系统占用以外的空闲的内存,这部分内存就是需要在操作系统运行的过程中进行静态/动态分配的内存。 +nxosqemuriscv64 虚拟平台中,内存布局如下:

            +
            /**
            + * Physical memory layout:
            + *
            + * +------------------------+ <- MAX PHY SIZE (TOP to 4GB)
            + * | L3 PAGES               |
            + * +------------------------+ <- KERNEL PAGES (TOP to 2GB + 128MB)
            + * | L3(K) & L0/1/2  PAGES  |
            + * +------------------------+ <- 0x82000000 (2GB + 32MB)
            + * | KERNEL                 |
            + * +------------------------+ <- 0x80200000 (2GB + 2MB)
            + * | OPENSBI                |
            + * +------------------------+ <- 0x80000000 (2GB)
            + * | MMIO/UNMAPPED          |
            + * +------------------------+ <- 0x00000000
            + */
            +
            +

            我们需要管理的内存就是 0x82000000-TOP 之间的这部分内存。简单的说就是对一段或者多段空闲的内存地址进行管理,可以进行分配与释放,让操作系统去使用。

            +

            二. 原理

            +

            nxos 中使用 buddy 伙伴内存管理算法。为了便于页面的维护,将多个页面组成内存块,每个内存块都有2的方幂个页,方幂的指数被称为阶。在操作内存时,经常将这些内存块分成大小相等的两个块,分成的两个内存块被称为伙伴块,采用一位二进制数来表示它们的伙伴关系。当这个位为1,表示其中一块在使用;当这个位为0,表示两个页面块都空闲或者都在使用。系统根据该位为0或位为1来决定是否使用或者分配该页面块。系统每次分配和回收伙伴块时都要对它们的伙伴位跟1进行异或运算。所谓异或是指刚开始时,两个伙伴块都空闲,它们的伙伴位为0,如果其中一块被使用,异或后得1;如果另一块也被使用,异或后得0;如果前面一块回收了异或后得1;如果另一块也回收了异或后得0。

            +

            算法的具体实现不进行讲解,除非你需要来优化这部分代码,才需要了解到,如果只是去使用,那么就只需要熟悉接口即可。

            +
              +
            • 优缺点

              +
            • +
            • 尽管伙伴内存算法在内存碎片问题上已经做的相当出色,但是该算法中,一个很小的块往往会阻碍一个大块的合并,一个系统中,对内存块的分配,大小是随机的,一片内存中仅一个小的内存块没有释放,旁边两个大的就不能合并。

              +
            • +
            • 算法中有一定的浪费现象,伙伴算法是按2的幂次方大小进行分配内存块,当然这样做是有原因的,即为了避免把大的内存块拆的太碎,更重要的是使分配和释放过程迅速。但是他也带来了不利的一面,如果所需内存大小不是2的幂次方,就会有部分页面浪费。有时还很严重。比如原来是1024个块,申请了16个块,再申请600个块就申请不到了,因为已经被分割了。

              +
            • +
            • 另外拆分和合并涉及到 较多的链表和位图操作,开销还是比较大的。

              +
            • +
            +

            三、框架图

            +

            框架图

            +

            四. 接口

            +

            内存管理最基本的接口就是分配和释放。为了能够支持分页机制,为页表映射提供内存的支持,将内存分为页面大小进行管理会比较合适。 +所以,分配和释放的基础单位就是页面。通常来说,页面大小是4kb,也可以更大,但是由于4kb在32位操作系统中可以很好地对4GB内存进行映射, +所以,4kb也就延续到64位系统了。所以,我们使用4kb作为一个页面的大小。

            +

            在初始化的时候,会创建一个 buddy system 来管理一段连续的物理内存。需要制定物理内存地址和物理内存大小。

            +
            NX_BuddySystem* NX_BuddyCreate(void *mem, NX_Size size);
            +
            +

            页面分配函数,可以从一个 buddy system 里面分配 count 个页面。在MMU映射和虚拟内存管理器中会使用到。 +有必要的时候,也会在需要物理内存的时候,直接调用该分配。

            +
            void *NX_BuddyAllocPage(NX_BuddySystem* system, NX_Size count);
            +
            +

            页面释放函数,从一个 buddy system 里面释放某个地址指针,该指针必须是从 buddy 系统中分配的页面。 +在释放页面的时候,需要引用计数为0的时候,才会去正在释放这个页面。

            +
            NX_Error NX_BuddyFreePage(NX_BuddySystem* system, void *ptr);
            +
            +

            有的情况下,当一个页面被多次使用的时候,需要去增加其引用计数,来避免被释放掉。

            +
            NX_Error NX_BuddyIncreasePage(NX_BuddySystem* system, void *ptr);
            +
            +

            在使用页面的过程中,可能会需要把一个地砖转换成其对应的页面结构,来访问该结构里面的成员,这在虚拟内存管理器 +实现的时候有使用到。

            +
            NX_Page* NX_PageFromPtr(NX_BuddySystem* system, void *ptr);
            +
            + + +
            + +
            +
            +
            + +

            results matching ""

            +
              + +
              +
              + +

              No results matching ""

              + +
              +
              +
              + +
              +
              + +
              + + + + + + + + + + + + + + +
              + + +
              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_book/programing-manual/mm/figures/buddy.png b/_book/programing-manual/mm/figures/buddy.png new file mode 100644 index 0000000000000000000000000000000000000000..341ad4973009493584388b3f6e5d57ded899fa7b Binary files /dev/null and b/_book/programing-manual/mm/figures/buddy.png differ diff --git a/_book/programing-manual/mm/figures/heap-cache.png b/_book/programing-manual/mm/figures/heap-cache.png new file mode 100644 index 0000000000000000000000000000000000000000..d6a2ff64c4aea824401caa150266376fc7295e1e Binary files /dev/null and b/_book/programing-manual/mm/figures/heap-cache.png differ diff --git a/_book/programing-manual/mm/figures/vmspace.png b/_book/programing-manual/mm/figures/vmspace.png new file mode 100644 index 0000000000000000000000000000000000000000..99e015ec9c867dea882b54fb609a244b96a5410d Binary files /dev/null and b/_book/programing-manual/mm/figures/vmspace.png differ diff --git a/_book/programing-manual/mm/heap.html b/_book/programing-manual/mm/heap.html new file mode 100644 index 0000000000000000000000000000000000000000..1b88c4edb7de8c593d5bb75312bb6fc8c93477b7 --- /dev/null +++ b/_book/programing-manual/mm/heap.html @@ -0,0 +1,715 @@ + + + + + + + heapCache虚拟内存管理 · book for nxos + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
              +
              + + + + + + + + +
              + +
              + +
              + + + + + + + + +
              +
              + +
              +
              + +
              + +

              内核虚拟内存管理之堆内存

              +

              一、描述

              +

              对于应用程序来说,可以使用 mallocfree 来动态地分配内存,那么,对于内核来说,也需要这样的功能。 +所以,需要在内核中实现同样的功能,在 nxos 里面,它们是 NX_MemAllocNX_MemFree

              +

              我们是使用基于缓存的链表来管理堆,这种方式的原理是,在释放一个页面后,会放到一个链表上面,下次分配的时候,直接从链表获取内存对象即可。

              +

              二、原理

              +

              heap cache 算法中,每个小的对象都有一个对应的链表来管理内存对象,分配的时候先去链表上获取对象, +没有对象才重新从物理内存管理器中分配,有的话就直接从链表上面摘取。 +释放的时候,也是先释放到链表上面,当链表超出了最大链表长度阈值的时候,才会释放到物理内存分配器中。

              +

              heap cache 中,内存对象被划分成3类,小(16byte <= size <= 256kb)、中(256kb < size <= 1mb)、大(size > 1mb)内存对象。 +对于小内存对象,会划分得比较细,如:16, 32, 48, 64, 80, 96, 112, 128等。 +对于中内存对象,就是使用一个链表来管理。 +对于大内存对象,就直接从物理内存管理器分配和释放,不使用链表管理。

              +

              三、框架图

              +

              框架图

              +

              四、接口

              +

              内核分配堆内存的接口,需要传入待分配内存的大小,即可获取一个内存地址,如果为空,那么就是分配失败了。 +通常,内核会使用 NX_MemAlloc 去分配内存。

              +
              void *NX_HeapAlloc(NX_Size size);
              +#define NX_MemAlloc(size) NX_HeapAlloc(size)
              +
              +

              内存释放堆内存的时候,需要传入内存对象地址,并返回释放的状态。 +通常,内核会使用 NX_MemFree 去释放内存。

              +
              NX_Error NX_HeapFree(void *object);
              +#define NX_MemFree(ptr) NX_HeapFree(ptr)
              +
              +

              除此之外,还提供了一个获取某个内存对象大小的功能,传入地址即可获取内存对象所在的 cache 的大小。 +使用的时候需要注意,必须是通过 NX_HeapAlloc 分配的内存对象。

              +
              NX_Size NX_HeapGetObjectSize(void *object);
              +
              + + +
              + +
              +
              +
              + +

              results matching ""

              +
                + +
                +
                + +

                No results matching ""

                + +
                +
                +
                + +
                +
                + +
                + + + + + + + + + + + + + + +
                + + +
                + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_book/programing-manual/mm/mm.html b/_book/programing-manual/mm/mm.html new file mode 100644 index 0000000000000000000000000000000000000000..29de4401ad8c872e4cd3064cfceaaf87a96ae327 --- /dev/null +++ b/_book/programing-manual/mm/mm.html @@ -0,0 +1,691 @@ + + + + + + + 内存管理 · book for nxos + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                +
                + + + + + + + + +
                + +
                + +
                + + + + + + + + +
                +
                + +
                +
                + +
                + +

                内存管理

                +

                内存管理是操作系统中最为核心和重要的部分,这是由于很多其它模块的运行都需要内存的分配和释放。

                +

                内存管理分为物理内存管理、虚拟内存管理、进程虚拟内存管理这三个大模块。

                +

                一. 物理内存管理,使用伙伴算法实现。

                +

                二. 内核虚拟堆内存管理,使用基于缓存的链表实现

                +

                三. 进程虚拟内存管理,基于线性链表实现

                + + +
                + +
                +
                +
                + +

                results matching ""

                +
                  + +
                  +
                  + +

                  No results matching ""

                  + +
                  +
                  +
                  + +
                  +
                  + +
                  + + + + + + + + + + + + + + +
                  + + +
                  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_book/programing-manual/mm/vmspace.html b/_book/programing-manual/mm/vmspace.html new file mode 100644 index 0000000000000000000000000000000000000000..a2a1bd09791a3591454c6d52fae15d042dfe574d --- /dev/null +++ b/_book/programing-manual/mm/vmspace.html @@ -0,0 +1,727 @@ + + + + + + + vmspace虚拟地址空间 · book for nxos + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                  +
                  + + + + + + + + +
                  + +
                  + +
                  + + + + + + + + +
                  +
                  + +
                  +
                  + +
                  + +

                  进程虚拟内存管理之虚拟空间

                  +

                  一、描述

                  +

                  进程在启动前,需要加载对应的代码、数据到内存中,然后才开始执行。 +在进程的运行过程中也会涉及到堆的分配,栈的扩展等。 +对进程的内存管理,是对它的虚拟地址进行管理。由于会有多个进程的存在,所以会对每个进程的虚拟地址 +进行独立的管理,于是进程地址空间就出现了。

                  +

                  进程地址空间(vmspace)就是用来管理进程的虚拟地址的。由于不同地址会有不同的用途,于是会有虚拟地址节点(vmnode)来管理 +不同用法的地址。

                  +

                  二、原理

                  +

                  进程地址空间的管理使用链表来维护每一个节点,节点是根据虚拟地址的值来进行线性排序,低地址在链表的开头,高地址在链表的结尾。 +地址空间通过映射和解除映射来进行管理,类似于分配和释放的操作。

                  +

                  映射某段空间的时候,会先检测地址是否被使用,如果已经被使用了,就不能直接使用这块地址。没有被使用,就可以在地址空间中添加一个 +vmnode,节点记录了地址的信息以及这段地址的属性。 +值得注意的是,映射的时候,还会去对内存进行物理内存映射,只有映射后,进程才能访问该地址。

                  +

                  解除映射的时候,会先判断该地址是否映射,已经映射才能解除。会先解除物理内存映射,然后再把 vmnode 删除。

                  +

                  三、框架图

                  +

                  框架图

                  +

                  四、接口

                  +

                  虚拟地址在映射的时候,需要指定对应的地址空间,然后就是传入一个想要映射的地址,如果为0,那么就会自动分配一个地址。 +以及这个地址对应的内存大小,内存节点的属性,已经一些扩展的标志。

                  +

                  在解析 elf 格式的可执行程序的时候,需要映射一段内存来储存代码和数据,就会用到映射功能。 +以及在做进程的堆分配和栈扩展的时候,都会使用到。

                  +
                  NX_Error NX_VmspaceMap(NX_Vmspace *space,
                  +    NX_Addr addr,
                  +    NX_Size size,
                  +    NX_U32 attr,
                  +    NX_U32 flags,
                  +    void **outAddr);
                  +
                  +/* 指定了虚拟地址需要映射到的物理地址,映射的时候,就把虚拟地址映射到该物理地址(未来做共享内存的时候会用到) */
                  +NX_Error NX_VmspaceMapWithPhy(NX_Vmspace *space,
                  +    NX_Addr vaddr,
                  +    NX_Addr paddr,
                  +    NX_Size size,
                  +    NX_U32 attr,
                  +    NX_U32 flags,
                  +    void **outAddr);
                  +
                  +

                  解除地址映射的时候,需要制定虚拟地址和内存大小,如果在已经映射的内存空间中匹配到vmnode,就可以将其解除映射,并释放其 +映射的物理内存。

                  +
                  NX_Error NX_VmspaceUnmap(NX_Vmspace *space, NX_Addr addr, NX_Size size);
                  +
                  + + +
                  + +
                  +
                  +
                  + +

                  results matching ""

                  +
                    + +
                    +
                    + +

                    No results matching ""

                    + +
                    +
                    +
                    + +
                    +
                    + +
                    + + + + + + + + + + + + + + +
                    + + +
                    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_book/programing-manual/port/riscv/figures/call.png b/_book/programing-manual/port/riscv/figures/call.png new file mode 100644 index 0000000000000000000000000000000000000000..e2c4e4b00443d858f97bf98b20cdf1414ccbf42a Binary files /dev/null and b/_book/programing-manual/port/riscv/figures/call.png differ diff --git a/_book/programing-manual/port/riscv/figures/extension.png b/_book/programing-manual/port/riscv/figures/extension.png new file mode 100644 index 0000000000000000000000000000000000000000..c8066515c213786f25dd118285312745ae587dfa Binary files /dev/null and b/_book/programing-manual/port/riscv/figures/extension.png differ diff --git a/_book/programing-manual/port/riscv/figures/interrupt_class.png b/_book/programing-manual/port/riscv/figures/interrupt_class.png new file mode 100644 index 0000000000000000000000000000000000000000..ba270c0cb1ec4c690026182d76c3cab9857a7797 Binary files /dev/null and b/_book/programing-manual/port/riscv/figures/interrupt_class.png differ diff --git a/_book/programing-manual/port/riscv/figures/mstatus(rv32).jpg b/_book/programing-manual/port/riscv/figures/mstatus(rv32).jpg new file mode 100644 index 0000000000000000000000000000000000000000..f2f2b7d28cc49cf33525180f58a78be235d165d2 Binary files /dev/null and b/_book/programing-manual/port/riscv/figures/mstatus(rv32).jpg differ diff --git a/_book/programing-manual/port/riscv/figures/mstatus(rv64).jpg b/_book/programing-manual/port/riscv/figures/mstatus(rv64).jpg new file mode 100644 index 0000000000000000000000000000000000000000..59e2b0df9aa7bbd38c6d4913c04758bd63cf0e2d Binary files /dev/null and b/_book/programing-manual/port/riscv/figures/mstatus(rv64).jpg differ diff --git a/_book/programing-manual/port/riscv/figures/privilege_level.png b/_book/programing-manual/port/riscv/figures/privilege_level.png new file mode 100644 index 0000000000000000000000000000000000000000..c06dae4dd975e692c5f29c367de64815dcb3b91e Binary files /dev/null and b/_book/programing-manual/port/riscv/figures/privilege_level.png differ diff --git a/_book/programing-manual/port/riscv/figures/register.png b/_book/programing-manual/port/riscv/figures/register.png new file mode 100644 index 0000000000000000000000000000000000000000..1ef4dfaf5d7e8191f278c04a1ce61d9ae8dce30f Binary files /dev/null and b/_book/programing-manual/port/riscv/figures/register.png differ diff --git a/_book/programing-manual/port/riscv/figures/satp.png b/_book/programing-manual/port/riscv/figures/satp.png new file mode 100644 index 0000000000000000000000000000000000000000..74e11c99d375dc2e5c74c121c357b67d5060dcdc Binary files /dev/null and b/_book/programing-manual/port/riscv/figures/satp.png differ diff --git a/_book/programing-manual/port/riscv/riscv.html b/_book/programing-manual/port/riscv/riscv.html new file mode 100644 index 0000000000000000000000000000000000000000..5daf7a45a30fdff238315381550d3ea82ca7e016 --- /dev/null +++ b/_book/programing-manual/port/riscv/riscv.html @@ -0,0 +1,1838 @@ + + + + + + + riscv架构移植 · book for nxos + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                    +
                    + + + + + + + + +
                    + +
                    + +
                    + + + + + + + + +
                    +
                    + +
                    +
                    + +
                    + +

                    RISC-V架构移植

                    +

                    一、描述

                    +

                    RISC-V(发音为“risk-five”)是一个基于精简指令集(RISC)原则的开源指令集架构(ISA)。

                    +

                    与大多数指令集相比,RISC-V指令集可以自由地用于任何目的,允许任何人设计、制造和销售RISC-V芯片和软件。虽然这不是第一个开源指令集,但它具有重要意义,因为其设计使其适用于现代计算设备(如仓库规模云计算机、高端移动电话和微小嵌入式系统)。设计者考虑到了这些用途中的性能与功率效率。该指令集还具有众多支持的软件,这解决了新指令集通常的弱点。

                    +

                    该项目2010年始于加州大学伯克利分校,但许多贡献者是该大学以外的志愿者和行业工作者。 +RISC-V指令集的设计考虑了小型、快速、低功耗的现实情况来实做,但并没有对特定的微架构做过度的设计。

                    +

                    截至2017年5月,RISC-V已经确立了版本2.22的用户空间的指令集(userspace ISA),而特权指令集(privileged ISA)也处在草案版本1.10。

                    +

                    (以上摘自百度百科)

                    +

                    二、架构简述

                    +

                    1. 指令集

                    +

                    RISC-V被设计成可扩展的,可以配置的,根据不同的应用场景可以生产带有不同功能扩展的处理器。

                    +

                    特权级

                    +

                    2. 特权模式

                    +

                    RISC-V目前有4种特权模式(Machine, Hypervisor,Supervisor, User)。

                    +

                    机器模式用于固件程序代码执行,例如 OpenSBI, RustSBI 等,但是在 rtos 和裸机开发种,很多时候都是直接使用机器模式。

                    +

                    Hypervisor 虚拟化模式用于使用虚拟化的场景,目前还在开发阶段。

                    +

                    操作系统更多运行在 Supervisor 监管者模式,这样可以和 User 更贴近,也不用管太多机器模式需要做的事情。通常, OpenSBIRustSBI 初始化完成后,会跳转到 Supervisor 模式,进入内核。内核只需要链接到 SBI 指定的地址就行了。使用 SBI 的好处是,可以直接使用串口的输入输出,很方便调试,不用自己从机器模式跳转到 Supervisor 模式,降低开发的复杂度。

                    +

                    User 用户模式就是应用程序执行的模式,需要通过系统调用进入到 Supervisor 模式去调用内核提供的服务。

                    +

                    特权级

                    +

                    3. 寄存器

                    +

                    RISCV(RV32)具有32个整数寄存器组(取名为:x0~x31),其中31个是通用寄存器(x1~x31),它们存储整数数值,寄存器x0是硬件连线的常数0。当你设计的RISCV架构处理器实现了浮点扩展时,还必须有32个浮点寄存器f0~f31。对于RV32,其x寄存器是32位宽度的,XLEN=32,对于RV64,它们是64位宽度的,XLEN=64。

                    +

                    寄存器 +调用约定

                    +

                    特权级寄存器的命名规则,特权模式+寄存器名字,表示只能在该特权级使用。比如status寄存器,在机器模式有mstatus,监管模式有sstatus。

                    +

                    机器模式状态寄存器(rv64).jpg) +上图为机器模式状态寄存器(rv64)

                    +

                    机器模式状态寄存器(rv32).jpg) +上图为机器模式状态寄存器(rv32)

                    +

                    3. 中断管理

                    +

                    RISC-V中断分为两种类型,一种是同步中断,即ECALL、EBREAK等指令所产生的中断,另一种是异步中断,即GPIO、UART等外设产生的中断。

                    +

                    RISC-V的中断管理由处理器核局部中断CLINT(CoreLocalInterrupt)和平台级中断控制器PLIC(PlatformLevelInterruptController)组成。CLINT分为软件中断核计时器中断,负责响应处理器的异常核和计时器中断。PLIC负责处理外设的中断。

                    +

                    中断类型

                    +

                    中断表地址需要写入管理者模式的向量基址寄存器 STVEC ,产生中断后,就去该寄存器保存的中断向量表地址找中断号对应的中断服务。

                    +

                    Supervisor模式的中断的打开与关闭是由状态寄存器 SSTATUS 中的 SIE 控制的,置为1则表示使能中断,置为0则表示禁用中断。

                    +

                    4. MMU内存管理单元

                    +

                    RISC-V的MMU支持多种模式,有Sv32/Sv39/Sv48/Sv57/Sv64等。不同的模式映射的页面等级,页面大小是有差异的。在64位处理器种最常用的是Sv39,它是3级4KB页面大小映射。

                    +

                    监管者模式的页表的地址是由地址转换寄存器 SATP 保存的,其格式如下: +地址转换

                    +

                    具体字段的解析如下:

                    +
                      +
                    • Mode - MMU 地址翻译模式
                    • +
                    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                    ValueNameDescription
                    0BareNo translation or protection
                    1-7-Reserved
                    8Sv39Page-based 39-bit virtual addressing
                    9Sv48Page-based 48-bit virtual addressing
                    10Sv57Reserved for page-based 57-bit virtual addressing
                    11Sv64Reserved for page-based 64-bit virtual addressing
                    12-15-Reserved
                    +

                    当 Mode 为 0 时,MMU 关闭。

                    +
                      +
                    • ASID – 当前 ASID。表示当前程序的 ASID 号。
                    • +
                    • PPN – 硬件回填根 PPN。第一级硬件回填使用的 PPN (Phsical Page Number)。
                    • +
                    +

                    三、代码移植

                    +

                    移植一个新的平台需要实现如下内容: +|内容 |描述 | +| ------- | ---------- | +| 内核入口 | 不同的架构内核入口代码有差异,需要根据架构来实现 | +| 平台初始化 | 调用平台的初始化代码 | +| 原子操作 | 原子操作用于对数据的加减运算不会被打断,以及一些原子级别的数据交换等 | +| 内存屏障 | 内存屏障前的所有读写操作完成后才能执行屏障后的读写操作 | +| 计时器时钟 | 计时器时钟用于驱动多线程的切换和内核定时器 | +| 线程上下文 | 上下文切换是多线程实现的根基 | +| 中断管理 | 中断管理接口对内核以及驱动都是至关重要的 | +| MMU虚拟内存管理 | 虚拟地址的实现和访问,MMU的切换,映射和解除页面映射 | +| 进程管理 | 进程管理相关操作是实现进程的必要条件 | +| SMP多核 | 对处理器多核的启动和初始化 |

                    +

                    所有需要对接的接口都存放在 src/arch/riscv64/port 目录下面,新的平台只需要支持这些接口的功能即可。

                    +

                    1. 内核入口

                    +

                    nxos 中,使用了 OpenSBIRustSBI 作为机器模式的固件,qemu_riscv64平台选择了 OpenSBI ,其内核的入口地址为 0x80200000, +k210 选择了 RustSBI,其内核的入口地址为 0x80020000RustSBI 针对 k210 做了一些兼容,使用起来比较简单。

                    +

                    SBI 执行结束后,会从机器模式跳转到位于监护者模式的内核中,并且寄存器 a0 记录了当前处理器核心的 id ,可以根据寄存器的值来判断处理器 id

                    +

                    入口地址在链接脚本中写的是 _Start 这个符号,因此会进入 sbi_entry.S_Start 执行。

                    +
                      +
                    • 文件:src/arch/riscv64/kernel/sbi_entry.S
                    • +
                    +
                    /**
                    + * Copyright (c) 2018-2022, NXOS Development Team
                    + * SPDX-License-Identifier: Apache-2.0
                    + * 
                    + * Contains: Riscv64 entry 
                    + * 
                    + * Change Logs:
                    + * Date           Author            Notes
                    + * 2021-10-1      JasonHu           Init
                    + */
                    +
                    +    .section .text.start
                    +    .extern NX_Main
                    +
                    +    .globl CPU_StackTop0
                    +    .globl CPU_StackTop1
                    +    .globl CPU_StackTop2
                    +    .globl CPU_StackTop3
                    +
                    +    .global _Start
                    +_Start:
                    +    li t0, 0
                    +    beq a0, t0, _SetSP0
                    +    li t0, 1
                    +    beq a0, t0, _SetSP1
                    +    li t0, 2
                    +    beq a0, t0, _SetSP2
                    +    li t0, 3
                    +    beq a0, t0, _SetSP3
                    +
                    +    j _EnterMain
                    +
                    +_SetSP0:
                    +    la sp, CPU_StackTop0
                    +    j _EnterMain
                    +
                    +_SetSP1:
                    +    la sp, CPU_StackTop1
                    +    j _EnterMain
                    +
                    +_SetSP2:
                    +    la sp, CPU_StackTop2
                    +    j _EnterMain
                    +
                    +_SetSP3:
                    +    la sp, CPU_StackTop3
                    +    j _EnterMain
                    +
                    +_EnterMain:
                    +    csrw sscratch, sp /* first set sscrach as cpu stack here */
                    +    csrc sstatus, 0x2 /* disable interrupt */
                    +    call NX_Main
                    +
                    +loop:
                    +    j loop
                    +
                    +    /* set in data seciton, avoid clear bss to clean stack */
                    +    .section .data.stack
                    +    .align 12
                    +
                    +CPU_Stack0:
                    +    .space 8192
                    +CPU_StackTop0:
                    +
                    +CPU_Stack1:
                    +    .space 8192
                    +CPU_StackTop1:
                    +
                    +CoreStack2:
                    +    .space 8192
                    +CPU_StackTop2:
                    +
                    +CoreStack3:
                    +    .space 8192
                    +CPU_StackTop3:
                    +
                    +

                    该代码简单地设置了栈就进入了 NX_Main 执行,那么入口程序的移植就完成了。

                    +

                    2. 平台初始化

                    +

                    在平台初始化 NX_HalPlatformInit 中,进行初始化,初始化完串口后,就能使用打印功能了。 +然后再初始化中断,初始化物理内存管理。

                    +

                    NX_HalPlatformStage2中,可以使用内核的功能,内存分配,中断注册等。 +因此 NX_HalDirectUartStage2 就注册了串口中断,可以接受输入。

                    +
                      +
                    • 文件:src/platform/qemu_riscv64/hal/init.c
                    • +
                    +
                    /**
                    + * Copyright (c) 2018-2022, NXOS Development Team
                    + * SPDX-License-Identifier: Apache-2.0
                    + * 
                    + * Contains: Init Riscv64 Qemu platfrom 
                    + * 
                    + * Change Logs:
                    + * Date           Author            Notes
                    + * 2021-10-1      JasonHu           Init
                    + */
                    +
                    +#include <xbook.h>
                    +#include <trap.h>
                    +#include <clock.h>
                    +#include <page_zone.h>
                    +#include <platform.h>
                    +#include <plic.h>
                    +#include <sbi.h>
                    +#include <regs.h>
                    +#include <drivers/direct_uart.h>
                    +#include <sched/smp.h>
                    +#include <utils/log.h>
                    +
                    +#define NX_LOG_LEVEL NX_LOG_INFO
                    +#define NX_LOG_NAME "INIT"
                    +#include <xbook/debug.h>
                    +
                    +NX_INTERFACE NX_Error NX_HalPlatformInit(NX_UArch coreId)
                    +{
                    +    NX_HalClearBSS();
                    +
                    +    /* NOTE: init trap first before do anything */
                    +    CPU_InitTrap(coreId);
                    +
                    +    NX_HalDirectUartInit();
                    +
                    +    sbi_init();
                    +    sbi_print_version();
                    +
                    +    NX_LOG_I("Hello, QEMU Riscv64!");
                    +
                    +    PLIC_Init(NX_True);
                    +
                    +    NX_HalPageZoneInit();
                    +
                    +    return NX_EOK;
                    +}
                    +
                    +NX_INTERFACE NX_Error NX_HalPlatformStage2(void)
                    +{
                    +    NX_LOG_I("stage2!");
                    +
                    +    NX_HalDirectUartStage2();
                    +
                    +    return NX_EOK;
                    +}
                    +
                    +

                    串口可以配置为调用 SBI 实现输出,也可以通过自己操作寄存器实现。在早期,调用 SBI 串口来输出是非常方便的。 +实现 NX_HalConsoleOutChar 函数后,就可以使用 NX_PrintfNX_LOG_* 函数来打印消息。

                    +
                      +
                    • 文件:src/platform/qemu_riscv64/drivers/direct_uart.c
                    • +
                    +
                    /**
                    + * Copyright (c) 2018-2022, NXOS Development Team
                    + * SPDX-License-Identifier: Apache-2.0
                    + * 
                    + * Contains: Direct uart driver 
                    + * low-level driver routines for 16550a UART.
                    + * 
                    + * Change Logs:
                    + * Date           Author            Notes
                    + * 2021-10-1      JasonHu           Init
                    + */
                    +
                    +#include <xbook.h>
                    +#include <io/delay_irq.h>
                    +#include <drivers/direct_uart.h>
                    +#include <utils/log.h>
                    +#include <xbook/debug.h>
                    +
                    +#ifdef CONFIG_NX_UART0_FROM_SBI
                    +#include <sbi.h>
                    +#endif
                    +
                    +#include <regs.h>
                    +
                    +// the UART control registers.
                    +// some have different meanings for
                    +// read vs write.
                    +// see http://byterunner.com/16550.html
                    +#define RHR 0                  // receive holding register (for input bytes)
                    +#define THR 0                  // transmit holding register (for output bytes)
                    +#define IER 1                  // interrupt enable register
                    +#define IER_RX_ENABLE (1 << 0) // receiver ready interrupt.
                    +#define IER_TX_ENABLE (1 << 1) // transmitter empty interrupt.
                    +#define FCR 2                  // FIFO control register
                    +#define FCR_FIFO_ENABLE (1 << 0)
                    +#define FCR_FIFO_CLEAR (3 << 1) // clear the content of the two FIFOs
                    +#define ISR 2                   // interrupt status register
                    +#define LCR 3                   // line control register
                    +#define LCR_EIGHT_BITS (3 << 0)
                    +#define LCR_BAUD_LATCH (1 << 7) // special mode to set baud rate
                    +#define LSR 5                   // line status register
                    +#define LSR_RX_READY (1 << 0)   // input is waiting to be read from RHR
                    +#define LSR_TX_IDLE (1 << 5)    // THR can accept another character to send
                    +
                    +void NX_HalDirectUartPutc(char ch)
                    +{
                    +#ifdef CONFIG_NX_UART0_FROM_SBI
                    +    sbi_console_putchar(ch);
                    +#else
                    +    if ((Read8(UART0_PHY_ADDR + LSR) & LSR_TX_IDLE) == 0)
                    +    {
                    +        // the UART transmit holding register is full,
                    +        return;
                    +    }
                    +    Write8(UART0_PHY_ADDR + THR, ch);
                    +#endif
                    +}
                    +
                    +int NX_HalDirectUartGetc(void)
                    +{
                    +#ifdef CONFIG_NX_UART0_FROM_SBI
                    +    return sbi_console_getchar();
                    +#else
                    +    if (Read8(UART0_PHY_ADDR + LSR) & 0x01)
                    +    {
                    +        // input data is ready.
                    +        return Read8(UART0_PHY_ADDR + RHR);
                    +    }
                    +    else
                    +    {
                    +        return -1;
                    +    }
                    +#endif
                    +}
                    +
                    +NX_INTERFACE void NX_HalConsoleOutChar(char ch)
                    +{
                    +    NX_HalDirectUartPutc(ch);
                    +}
                    +
                    +void NX_HalDirectUartInit(void)
                    +{
                    +    // disable interrupts.
                    +    Write8(UART0_PHY_ADDR + IER, 0x00);
                    +    // special mode to set baud rate.
                    +    Write8(UART0_PHY_ADDR + LCR, LCR_BAUD_LATCH);
                    +    // LSB for baud rate of 115.2K.
                    +    Write8(UART0_PHY_ADDR + 0, 0x01);
                    +    // MSB for baud rate of 115.2K.
                    +    Write8(UART0_PHY_ADDR + 1, 0x00);
                    +    // leave set-baud mode,
                    +    // and set word length to 8 bits, no parity.
                    +    Write8(UART0_PHY_ADDR + LCR, LCR_EIGHT_BITS);
                    +    // reset and enable FIFOs.
                    +    Write8(UART0_PHY_ADDR + FCR, FCR_FIFO_ENABLE | FCR_FIFO_CLEAR);
                    +}
                    +
                    +/**
                    + * default handler
                    +*/
                    +NX_WEAK_SYM void NX_HalDirectUartGetcHandler(char data)
                    +{
                    +    NX_LOG_I("Deafult uart handler:%x/%c\n", data, data);
                    +}
                    +
                    +NX_PRIVATE NX_Error UartIrqHandler(NX_IRQ_Number irqno, void *arg)
                    +{
                    +    int data = NX_HalDirectUartGetc();
                    +    if (data != -1)
                    +    {
                    +        if (NX_HalDirectUartGetcHandler != NX_NULL)
                    +        {
                    +            NX_HalDirectUartGetcHandler(data);
                    +        }
                    +    }
                    +    return data != -1 ? NX_EOK : NX_EIO;
                    +}
                    +
                    +void NX_HalDirectUartStage2(void)
                    +{
                    +    /* enable receive interrupts. */
                    +    Write8(UART0_PHY_ADDR + IER, IER_RX_ENABLE);
                    +
                    +    NX_ASSERT(NX_IRQ_Bind(UART0_IRQ, UartIrqHandler, NX_NULL, "Uart", 0) == NX_EOK);
                    +    NX_ASSERT(NX_IRQ_Unmask(UART0_IRQ) == NX_EOK);
                    +}
                    +
                    +

                    3. 原子操作

                    +

                    原子操作需要实现对数据的原子设置,获取,加法,减法,数据交换等。由于 gcc 内置了原子操作的函数, +这里只需要调用 gcc 内置的原子操作即可。

                    +
                      +
                    • 文件:src/arch/riscv64/port/atomic.c
                    • +
                    +
                    /**
                    + * Copyright (c) 2018-2022, NXOS Development Team
                    + * SPDX-License-Identifier: Apache-2.0
                    + * 
                    + * Contains: HAL NX_Atomic  
                    + * 
                    + * Change Logs:
                    + * Date           Author            Notes
                    + * 2021-12-1      JasonHu           Init
                    + */
                    +
                    +#include <xbook/atomic.h>
                    +
                    +NX_PRIVATE void NX_HalAtomicSet(NX_Atomic *atomic, long value)
                    +{
                    +    atomic->value = value;
                    +}
                    +
                    +NX_PRIVATE long NX_HalAtomicGet(NX_Atomic *atomic)
                    +{
                    +    return atomic->value;
                    +}
                    +
                    +NX_PRIVATE void NX_HalAtomicAdd(NX_Atomic *atomic, long value)
                    +{
                    +    /* gcc build-in functions */
                    +    __sync_fetch_and_add(&atomic->value, value);
                    +}
                    +
                    +NX_PRIVATE void NX_HalAtomicSub(NX_Atomic *atomic, long value)
                    +{
                    +    __sync_fetch_and_sub(&atomic->value, value);
                    +}
                    +
                    +NX_PRIVATE void NX_HalAtomicInc(NX_Atomic *atomic)
                    +{
                    +    __sync_fetch_and_add(&atomic->value, 1);
                    +}
                    +
                    +NX_PRIVATE void NX_HalAtomicDec(NX_Atomic *atomic)
                    +{
                    +    __sync_fetch_and_sub(&atomic->value, 1);
                    +}
                    +
                    +NX_PRIVATE void NX_HalAtomicSetMask(NX_Atomic *atomic, long mask)
                    +{
                    +    __sync_fetch_and_or(&atomic->value, mask);
                    +}
                    +
                    +NX_PRIVATE void NX_HalAtomicClearMask(NX_Atomic *atomic, long mask)
                    +{    
                    +    __sync_fetch_and_and(&atomic->value, ~mask);
                    +}
                    +
                    +NX_PRIVATE long NX_HalAtomicSwap(NX_Atomic *atomic, long newValue)
                    +{
                    +    return __sync_lock_test_and_set(&((atomic)->value), newValue);
                    +}
                    +
                    +NX_PRIVATE long NX_HalAtomicCAS(NX_Atomic *atomic, long old, long newValue)
                    +{
                    +    return __sync_val_compare_and_swap(&atomic->value, old, newValue);
                    +}
                    +
                    +NX_INTERFACE struct NX_AtomicOps NX_AtomicOpsInterface = 
                    +{
                    +    .set        = NX_HalAtomicSet,
                    +    .get        = NX_HalAtomicGet,
                    +    .add        = NX_HalAtomicAdd,
                    +    .sub        = NX_HalAtomicSub,
                    +    .inc        = NX_HalAtomicInc,
                    +    .dec        = NX_HalAtomicDec,
                    +    .setMask    = NX_HalAtomicSetMask,
                    +    .clearMask  = NX_HalAtomicClearMask,
                    +    .swap       = NX_HalAtomicSwap,
                    +    .cas        = NX_HalAtomicCAS,
                    +};
                    +
                    +

                    4. 内存屏障

                    +

                    risc-v 架构中,内存全(读和写)屏障使用 gcc 内置函数 __sync_synchronize 实现, +内存读/写屏障使用 fence 指令去实现。内存指令屏障使用 fence.i 指令实现。

                    +
                      +
                    • 文件:src/arch/riscv64/port/barrier.c
                    • +
                    +
                    /**
                    + * Copyright (c) 2018-2022, NXOS Development Team
                    + * SPDX-License-Identifier: Apache-2.0
                    + * 
                    + * Contains: HAL Memory Barrier
                    + * 
                    + * Change Logs:
                    + * Date           Author            Notes
                    + * 2021-12-9      JasonHu           Init
                    + */
                    +
                    +#include <mm/barrier.h>
                    +
                    +NX_PRIVATE void NX_HalMemBarrier(void)
                    +{
                    +    __sync_synchronize();
                    +}
                    +
                    +NX_PRIVATE void NX_HalMemBarrierRead(void)
                    +{
                    +    NX_CASM("fence":::"memory");
                    +}
                    +
                    +NX_PRIVATE void NX_HalMemBarrierWrite(void)
                    +{
                    +    NX_CASM("fence":::"memory");
                    +}
                    +
                    +NX_PRIVATE void NX_HalMemBarrierInstruction(void)
                    +{
                    +    NX_CASM("fence.i":::"memory");
                    +}
                    +
                    +NX_INTERFACE struct NX_MemBarrierOps NX_MemBarrierOpsInterface = 
                    +{
                    +    .barrier            = NX_HalMemBarrier,
                    +    .barrierRead        = NX_HalMemBarrierRead,
                    +    .barrierWrite       = NX_HalMemBarrierWrite,
                    +    .barrierInstruction = NX_HalMemBarrierInstruction,
                    +};
                    +
                    +

                    5. 计时器时钟

                    +

                    硬件时钟会按照一定的频率去增长当前定时器寄存器的值,在 qemu 中这个频率是 10MHZ 。 +如果当前定时器的值超过了超时定时器寄存器的值的时候,就会触发一个中断。注意:前提是打开了定时器中断。

                    +

                    在做时钟定时器初始化的时候,需要先关闭 Supervisor 模式的定时器中断,然后再设置超时定时器的值。 +这是操作需要通过 SBI 去实现,而获取操作可以直接通过 rdtime 指令获取。

                    +

                    由于我们想实现1秒钟产生 NX_TICKS_PER_SECOND (一般在100~1000)次定时器中断的效果, +所以需要计算出产生一次中断,需要间隔多少个tick即可。

                    +

                    当超时后,就会产生一个中断,于是就设置下一个中断产生时的超时值。

                    +
                      +
                    • 文件:src/arch/riscv64/port/clock.c
                    • +
                    +
                    /**
                    + * Copyright (c) 2018-2022, NXOS Development Team
                    + * SPDX-License-Identifier: Apache-2.0
                    + * 
                    + * Contains: Clock for system 
                    + * 
                    + * Change Logs:
                    + * Date           Author            Notes
                    + * 2021-10-16     JasonHu           Init
                    + */
                    +
                    +#include <time/clock.h>
                    +#include <io/irq.h>
                    +#include <io/delay_irq.h>
                    +
                    +#include <clock.h>
                    +#include <regs.h>
                    +#include <sbi.h>
                    +
                    +#define NX_LOG_NAME "Clock"
                    +#include <utils/log.h>
                    +
                    +#define NX_TIMER_CLK_FREQ 10000000  /* qemu has 10MHZ clock frequency */
                    +
                    +NX_PRIVATE NX_U64 TickDelta = NX_TIMER_CLK_FREQ / NX_TICKS_PER_SECOND;
                    +
                    +NX_PRIVATE NX_U64 GetTimerCounter()
                    +{
                    +    NX_U64 ret;
                    +    NX_CASM ("rdtime %0" : "=r"(ret));
                    +    return ret;
                    +}
                    +
                    +void NX_HalClockHandler(void)
                    +{
                    +    NX_ClockTickGo();
                    +    /* update timer */
                    +    sbi_set_timer(GetTimerCounter() + TickDelta);
                    +}
                    +
                    +NX_INTERFACE NX_Error NX_HalInitClock(void)
                    +{
                    +    /* Clear the Supervisor-Timer bit in SIE */
                    +    ClearCSR(sie, SIE_STIE);
                    +
                    +    /* Set timer */
                    +    sbi_set_timer(GetTimerCounter() + TickDelta);
                    +
                    +    /* Enable the Supervisor-Timer bit in SIE */
                    +    SetCSR(sie, SIE_STIE);
                    +    return NX_EOK;
                    +}
                    +
                    +

                    6. 线程上下文

                    +

                    上下文的切换分为上下文的初始化,从当前线程切换到下一个线程,直接切换到下一个线程。

                    +

                    初始化线程上下文是在栈上构建一个线程的上下文,当第一次切换到该线程的时候,寄存器就会使用栈中的值。 +在函数 NX_HalContextInit 中,需要构建的上下文参数是线程的入口 startEntry 和线程结束时执行的函数 exitEntry, +以及线程运行时的参数 arg ,以及将这些数据构建在栈顶 stackTop 之下,最后返回栈低。

                    +

                    预留一个上下文空间后,设置参数为 a0 ,因为risc-v中c语言函数参数是 a0~a7 。 +入口地址使用 epc 保存,因为上下文切换的时候会模拟一次异常返回,返回后就到这个异常地址处执行。 +结束时执行的函数使用 ra 保存,它是返回地址的意思,表示线程返回后就去执行该函数。 +线程栈使用 sp 寄存器保存。

                    +

                    还有一个很重要的地方就是对状态寄存器 sstatus 的设置, +需要能够访问用户态的内存,需要在返回后开启中断以及设置为 Supervisor 模式(因为线程的切换是在内核中完成的)。

                    +
                      +
                    • 文件:src/arch/riscv64/port/context.c
                    • +
                    +
                    /**
                    + * Copyright (c) 2018-2022, NXOS Development Team
                    + * SPDX-License-Identifier: Apache-2.0
                    + * 
                    + * Contains: NX_Thread context 
                    + * 
                    + * Change Logs:
                    + * Date           Author            Notes
                    + * 2021-10-16     JasonHu           Init
                    + */
                    +
                    +#include <sched/context.h>
                    +#include <utils/memory.h>
                    +#include <utils/log.h>
                    +#include <io/irq.h>
                    +#include <context.h>
                    +#include <regs.h>
                    +
                    +NX_IMPORT void NX_HalContextSwitchNext(NX_Addr nextSP);
                    +NX_IMPORT void NX_HalContextSwitchPrevNext(NX_Addr prevSP, NX_Addr nextSP);
                    +
                    +NX_PRIVATE void *NX_HalContextInit(void *startEntry, void *exitEntry, void *arg, void *stackTop)
                    +{
                    +    NX_U8 *stack = NX_NULL;
                    +    NX_HalContext *context = NX_NULL;
                    +
                    +    stack = (NX_U8 *)stackTop;
                    +    stack = (NX_U8 *)NX_ALIGN_DOWN((NX_UArch)stack, sizeof(NX_UArch));
                    +
                    +    stack -= sizeof(NX_HalContext);
                    +    context = (NX_HalContext *)stack;
                    +
                    +    NX_MemZero(context, sizeof(NX_HalContext));
                    +
                    +    context->a0 = (NX_UArch)arg;
                    +    context->epc = (NX_UArch)startEntry;
                    +    context->sp = (NX_UArch)(((NX_UArch)stack) + sizeof(NX_HalContext));
                    +    context->ra = (NX_UArch)exitEntry;
                    +
                    +    /**
                    +     * allow to access user space memory,
                    +     * return to supervisor mode,
                    +     * enable interrupt
                    +     */
                    +#ifdef CONFIG_NX_PLATFORM_K210
                    +    /* NOTICE: in k210, SSTATUS_SUM mean disable Supervisor Access User memroy */
                    +    context->sstatus = SSTATUS_SPP | SSTATUS_SPIE;
                    +#else
                    +    context->sstatus = SSTATUS_SUM | SSTATUS_SPP | SSTATUS_SPIE;
                    +#endif
                    +    return (void *)stack;
                    +}
                    +
                    +NX_INTERFACE struct NX_ContextOps NX_ContextOpsInterface = 
                    +{
                    +    .init           = NX_HalContextInit,
                    +    .switchNext     = NX_HalContextSwitchNext,
                    +    .switchPrevNext = NX_HalContextSwitchPrevNext,
                    +};
                    +
                    +

                    在上下文切换的时候,需要注意的是,传入的是线程的栈的地址,可以从地址中取出线程当前栈的值。 +使用这种方式的话,就非常方便移植到其它架构上。

                    +

                    NX_HalContextSwitchNext 中,获取了栈的值后,就从栈中恢复寄存器上下文,然后调用 sret 返回。 +由于 epc 设置了线程的入口地址,那么 sret 返回后就可以让 pc 等于 epc ,那么就切换到线程里面去了。

                    +

                    至于在 NX_HalContextSwitchPrevNext 中,多了对当前线程的上下文的保存的工作,然后切换到下一个线程。

                    +
                      +
                    • 文件:src/arch/riscv64/kernel/context.S
                    • +
                    +
                    /**
                    + * Copyright (c) 2018-2022, NXOS Development Team
                    + * SPDX-License-Identifier: Apache-2.0
                    + * 
                    + * Contains: NX_Thread context 
                    + * 
                    + * Change Logs:
                    + * Date           Author            Notes
                    + * 2021-12-01     JasonHu           Init
                    + */
                    +
                    +.text
                    +
                    +#define __ASSEMBLY__
                    +#include <context.h>
                    +#include <regs.h>
                    +
                    +/**
                    + * void NX_HalContextSwitchNext(NX_Addr nextSP);
                    + */
                    +.globl NX_HalContextSwitchNext
                    +NX_HalContextSwitchNext:
                    +    LOAD sp, (a0)   /* sp = *nextSP */
                    +
                    +    RESTORE_CONTEXT
                    +    sret
                    +
                    +/**
                    + * void NX_HalContextSwitchPrevNext(NX_Addr prevSP, NX_Addr nextSP);
                    + */
                    +.globl NX_HalContextSwitchPrevNext
                    +NX_HalContextSwitchPrevNext:
                    +    mv t0, sp
                    +
                    +    /**
                    +     * set as supervisor mode and enable interupt 
                    +     * make sure kernel mode thread do context switch
                    +     */
                    +    li t1, SSTATUS_SPP | SSTATUS_SPIE | SSTATUS_SUM
                    +    csrs sstatus, t1
                    +
                    +    /**
                    +     * set `sepc` as `ra`, `ra` saved return address of NX_HalContextSwitchPrevNext
                    +     * when do `sret`, will return from NX_HalContextSwitchPrevNext
                    +     */
                    +    csrw sepc, ra
                    +
                    +    /* save context to stack */
                    +    SAVE_CONTEXT
                    +
                    +    /* save old sp to stack, instead the sp in sscratch */
                    +    STORE t0, CTX_SP_OFF * REGBYTES(sp)
                    +
                    +    /* save sp to from thread, *from = `sp` */
                    +    STORE sp, (a0)
                    +
                    +    LOAD sp, (a1)   /* sp = *nextSP */
                    +
                    +    /* restore context from stack */
                    +    RESTORE_CONTEXT
                    +
                    +    /* supervisor return, `pc` = `sepc` */
                    +    sret
                    +
                    +

                    7. 中断管理

                    +

                    在中断中,使能 NX_HalIrqEnable 和禁用 NX_HalIrqDisable 中断只需要对 sstatus 寄存器的 SSTATUS_SIE 位做置位和清理的操作即可。

                    +

                    除此之外,还提供了对当前中断状态保存和恢复的操作 NX_HalIrqSaveLevelNX_HalIrqRestoreLevel。 +该操作只是多了对 sstatus 寄存器的 SSTATUS_SIE 位保存和恢复。

                    +

                    除此之外就是对某个中断的使能 NX_HalIrqUnmask 和禁用 NX_HalIrqMask ,以及中断处理完后的应答处理 NX_HalIrqAck。 +这3个接口都是对 PLIC 的封装。

                    +
                      +
                    • 文件:src/arch/riscv64/port/interrupt.c
                    • +
                    +
                    /**
                    + * Copyright (c) 2018-2022, NXOS Development Team
                    + * SPDX-License-Identifier: Apache-2.0
                    + * 
                    + * Contains: interrupt manage
                    + * 
                    + * Change Logs:
                    + * Date           Author            Notes
                    + * 2021-10-31     JasonHu           Init
                    + */
                    +
                    +#include <xbook.h>
                    +#include <regs.h>
                    +#include <io/irq.h>
                    +#include <plic.h>
                    +#include <sched/smp.h>
                    +
                    +NX_PRIVATE NX_Error NX_HalIrqUnmask(NX_IRQ_Number irqno)
                    +{
                    +    if (irqno < 0 || irqno >= NX_NR_IRQS)
                    +    {
                    +        return NX_EINVAL;
                    +    }
                    +
                    +    return PLIC_EnableIRQ(NX_SMP_GetBootCore(), irqno);
                    +}
                    +
                    +NX_PRIVATE NX_Error NX_HalIrqMask(NX_IRQ_Number irqno)
                    +{
                    +    if (irqno < 0 || irqno >= NX_NR_IRQS)
                    +    {
                    +        return NX_EINVAL;
                    +    }
                    +
                    +    return PLIC_DisableIRQ(NX_SMP_GetBootCore(), irqno);
                    +}
                    +
                    +NX_PRIVATE NX_Error NX_HalIrqAck(NX_IRQ_Number irqno)
                    +{
                    +    if (irqno < 0 || irqno >= NX_NR_IRQS)
                    +    {
                    +        return NX_EINVAL;
                    +    }
                    +
                    +    return PLIC_Complete(NX_SMP_GetBootCore(), irqno);
                    +}
                    +
                    +NX_PRIVATE void NX_HalIrqEnable(void)
                    +{
                    +    WriteCSR(sstatus, ReadCSR(sstatus) | SSTATUS_SIE);
                    +}
                    +
                    +NX_PRIVATE void NX_HalIrqDisable(void)
                    +{
                    +    WriteCSR(sstatus, ReadCSR(sstatus) & ~SSTATUS_SIE);
                    +}
                    +
                    +NX_PRIVATE NX_UArch NX_HalIrqSaveLevel(void)
                    +{
                    +    NX_UArch level = 0;
                    +    level = ReadCSR(sstatus);
                    +    WriteCSR(sstatus, level & ~SSTATUS_SIE);
                    +    return level & SSTATUS_SIE;
                    +}
                    +
                    +NX_PRIVATE void NX_HalIrqRestoreLevel(NX_UArch level)
                    +{
                    +    WriteCSR(sstatus, ReadCSR(sstatus) | (level & SSTATUS_SIE));
                    +}
                    +
                    +NX_INTERFACE NX_IRQ_Controller NX_IRQ_ControllerInterface = 
                    +{
                    +    .unmask = NX_HalIrqUnmask,
                    +    .mask = NX_HalIrqMask,
                    +    .ack = NX_HalIrqAck,
                    +    .enable = NX_HalIrqEnable,
                    +    .disable = NX_HalIrqDisable,
                    +    .saveLevel = NX_HalIrqSaveLevel,
                    +    .restoreLevel = NX_HalIrqRestoreLevel,
                    +};
                    +
                    +

                    8. MMU虚拟内存管理

                    +

                    目前支持的是mmu-sv39,3级页表,页表和物理页都是4kb大小。

                    +

                    NX_HalMapPage 是映射虚拟地址,会自动分配物理地址并映射页面。

                    +

                    NX_HalMapPageWithPhy 映射虚拟地址,但是会指定物理地址,就不用自动分配物理地址了。

                    +

                    NX_HalUnmapPage 解除地址映射,解除后就不能访问了。

                    +

                    NX_HalVir2Phy 可以通过虚拟地址找到其映射的物理地址。

                    +

                    NX_HalSetPageTable 设置页表的地址到硬件寄存器中,当访问虚拟地址的时候,会根据设置的页表进行地址转换。

                    +

                    NX_HalGetPageTable 可以获取页表的地址。

                    +

                    NX_HalEnable 是使能 MMU ,所有地址都变成虚拟地址了。

                    +
                      +
                    • 文件:src/arch/riscv64/port/mmu.c
                    • +
                    +
                    NX_PRIVATE void *NX_HalMapPage(NX_Mmu *mmu, NX_Addr virAddr, NX_Size size, NX_UArch attr)
                    +{
                    +    NX_ASSERT(mmu);
                    +    if (!attr)
                    +    {
                    +        return NX_NULL;
                    +    }
                    +
                    +    virAddr = virAddr & NX_PAGE_ADDR_MASK;
                    +    size = NX_PAGE_ALIGNUP(size);
                    +
                    +    NX_UArch level = NX_IRQ_SaveLevel();
                    +    void *addr = __MapPage(mmu, virAddr, size, attr);
                    +    NX_IRQ_RestoreLevel(level);
                    +    return addr;
                    +}
                    +
                    +NX_PRIVATE void *NX_HalMapPageWithPhy(NX_Mmu *mmu, NX_Addr virAddr, NX_Addr phyAddr, NX_Size size, NX_UArch attr)
                    +{
                    +    NX_ASSERT(mmu);
                    +    if (!attr)
                    +    {
                    +        return NX_NULL;
                    +    }
                    +
                    +    virAddr = virAddr & NX_PAGE_ADDR_MASK;
                    +    phyAddr = phyAddr & NX_PAGE_ADDR_MASK;
                    +    size = NX_PAGE_ALIGNUP(size);
                    +
                    +    NX_UArch level = NX_IRQ_SaveLevel();
                    +    void *addr = __MapPageWithPhy(mmu, virAddr, phyAddr, size, attr);
                    +    NX_IRQ_RestoreLevel(level);
                    +    return addr;
                    +}
                    +
                    +NX_PRIVATE NX_Error NX_HalUnmapPage(NX_Mmu *mmu, NX_Addr virAddr, NX_Size size)
                    +{
                    +    NX_ASSERT(mmu);
                    +
                    +    virAddr = virAddr & NX_PAGE_ADDR_MASK;
                    +    size = NX_PAGE_ALIGNUP(size);
                    +
                    +    NX_Addr addrStart = virAddr;
                    +    NX_Addr addrEnd = virAddr + size - 1;
                    +    NX_Size pages = GET_PF_ID(addrEnd) - GET_PF_ID(addrStart) + 1;
                    +
                    +    NX_UArch level = NX_IRQ_SaveLevel();
                    +    NX_Error err = __UnmapPage(mmu, virAddr, pages);
                    +    NX_IRQ_RestoreLevel(level);
                    +    return err;
                    +}
                    +
                    +NX_PRIVATE void *NX_HalVir2Phy(NX_Mmu *mmu, NX_Addr virAddr)
                    +{
                    +    NX_ASSERT(mmu);
                    +
                    +    NX_Addr pagePhy;
                    +    NX_Addr pageOffset;
                    +
                    +    MMU_PDE *pageTable = (MMU_PDE *)mmu->table;
                    +
                    +    MMU_PTE *pte = PageWalk(pageTable, virAddr, NX_False);
                    +    if (pte == NX_NULL)
                    +    {
                    +        NX_PANIC("vir2phy walk fault!");
                    +    }
                    +
                    +    if (!PTE_USED(*pte))
                    +    {
                    +        NX_PANIC("vir2phy pte not used!");
                    +    }
                    +
                    +    pagePhy = PTE2PADDR(*pte);
                    +    pageOffset = virAddr % NX_PAGE_SIZE;
                    +    return (void *)(pagePhy + pageOffset);
                    +}
                    +
                    +NX_PRIVATE void NX_HalSetPageTable(NX_Addr addr)
                    +{
                    +    WriteCSR(satp, MAKE_SATP(addr));
                    +    MMU_FlushTLB();
                    +}
                    +
                    +NX_PRIVATE NX_Addr NX_HalGetPageTable(void)
                    +{
                    +    NX_Addr addr = ReadCSR(satp);
                    +    return (NX_Addr)GET_ADDR_FROM_SATP(addr);
                    +}
                    +
                    +NX_PRIVATE void NX_HalEnable(void)
                    +{
                    +    MMU_FlushTLB();
                    +}
                    +
                    +NX_INTERFACE struct NX_MmuOps NX_MmuOpsInterface = 
                    +{
                    +    .setPageTable   = NX_HalSetPageTable,
                    +    .getPageTable   = NX_HalGetPageTable,
                    +    .enable         = NX_HalEnable,
                    +    .mapPage        = NX_HalMapPage,
                    +    .mapPageWithPhy = NX_HalMapPageWithPhy,
                    +    .unmapPage      = NX_HalUnmapPage,
                    +    .vir2Phy        = NX_HalVir2Phy,
                    +};
                    +
                    +

                    9. 进程管理

                    +

                    NX_HalProcessInitUserSpace 用于在进程创建的时候,创建进程的页表 ,并复制内核的页表项。

                    +

                    NX_HalProcessFreePageTable 用于在进程退出的时候释放页表。

                    +

                    NX_HalProcessSwitchPageTable 用于在进程切换的时候切换页表。

                    +

                    NX_HalProcessSyscallDispatch 用于分发系统调用,不同的架构传参数的方式会有区别,因此需要特殊处理。

                    +

                    NX_HalProcessExecuteUser 用于进程从内核跳到用户态执行。

                    +

                    NX_HalProcessGetKernelPageTable 用于获取内核的页表。

                    +
                      +
                    • 文件:src/arch/riscv64/port/process.c
                    • +
                    +
                    /**
                    + * Copyright (c) 2018-2022, NXOS Development Team
                    + * SPDX-License-Identifier: Apache-2.0
                    + * 
                    + * Contains: Process for RISCV64
                    + * 
                    + * Change Logs:
                    + * Date           Author            Notes
                    + * 2022-1-16      JasonHu           Init
                    + */
                    +
                    +#include <process/process.h>
                    +#include <process/syscall.h>
                    +#include <mm/alloc.h>
                    +#include <utils/memory.h>
                    +#include <mm/page.h>
                    +#define NX_LOG_NAME "syscall"
                    +#define NX_LOG_LEVEL NX_LOG_INFO
                    +#include <utils/log.h>
                    +#include <xbook/debug.h>
                    +#include <platform.h>
                    +#include <mm/mmu.h>
                    +#include <interrupt.h>
                    +
                    +NX_PRIVATE NX_Error NX_HalProcessInitUserSpace(NX_Process *process, NX_Addr virStart, NX_Size size)
                    +{
                    +    void *table = NX_MemAlloc(NX_PAGE_SIZE);
                    +    if (table == NX_NULL)
                    +    {
                    +        return NX_ENOMEM;
                    +    }
                    +    NX_MemZero(table, NX_PAGE_SIZE);
                    +    NX_MemCopy(table, NX_HalGetKernelPageTable(), NX_PAGE_SIZE);
                    +    NX_MmuInit(&process->vmspace.mmu, table, virStart, size, 0);
                    +    return NX_EOK;
                    +}
                    +
                    +NX_PRIVATE NX_Error NX_HalProcessFreePageTable(NX_Vmspace *vmspace)
                    +{
                    +    NX_ASSERT(vmspace);
                    +    if(vmspace->mmu.table == NX_NULL)
                    +    {
                    +        return NX_EFAULT;
                    +    }
                    +    NX_MemFree(vmspace->mmu.table);
                    +    return NX_EOK;
                    +}
                    +
                    +NX_PRIVATE NX_Error NX_HalProcessSwitchPageTable(void *pageTableVir)
                    +{
                    +    NX_Addr pageTablePhy = (NX_Addr)NX_Virt2Phy(pageTableVir);
                    +    /* no need switch same page table */
                    +    if (pageTablePhy != NX_MmuGetPageTable())
                    +    {
                    +        NX_MmuSetPageTable(pageTablePhy);
                    +    }
                    +    return NX_EOK;
                    +}
                    +
                    +void NX_HalProcessSyscallDispatch(NX_HalTrapFrame *frame)
                    +{
                    +    NX_SyscallWithArgHandler handler = (NX_SyscallWithArgHandler)NX_SyscallGetHandler((NX_SyscallApi)frame->a7);
                    +    NX_ASSERT(handler);
                    +
                    +    NX_LOG_D("riscv64 syscall api: %x, arg0:%x, arg1:%x, arg2:%x, arg3:%x, arg4:%x, arg5:%x, arg6:%x",
                    +        frame->a7, frame->a0, frame->a1, frame->a2, frame->a3, frame->a4, frame->a5, frame->a6);
                    +
                    +    frame->a0 = handler(frame->a0, frame->a1, frame->a2, frame->a3, frame->a4, frame->a5, frame->a6);
                    +    frame->a7 = 0; /* clear syscall api */
                    +    frame->epc += 4; /* skip ecall instruction */
                    +
                    +    NX_LOG_D("riscv64 syscall return: %x", frame->a0);
                    +}
                    +
                    +NX_IMPORT void NX_HalProcessEnterUserMode(void *args, const void *text, void *userStack);
                    +NX_PRIVATE void NX_HalProcessExecuteUser(const void *text, void *userStack, void *kernelStack, void *args)
                    +{
                    +    NX_LOG_D("riscv64 process enter user: %p, user stack %p", text, userStack);
                    +    NX_HalProcessEnterUserMode(args, text, userStack);
                    +    NX_PANIC("should never return after into user");
                    +}
                    +
                    +NX_PRIVATE void *NX_HalProcessGetKernelPageTable(void)
                    +{
                    +    return NX_HalGetKernelPageTable();
                    +}
                    +
                    +NX_INTERFACE struct NX_ProcessOps NX_ProcessOpsInterface = 
                    +{
                    +    .initUserSpace      = NX_HalProcessInitUserSpace,
                    +    .switchPageTable    = NX_HalProcessSwitchPageTable,
                    +    .getKernelPageTable = NX_HalProcessGetKernelPageTable,
                    +    .executeUser        = NX_HalProcessExecuteUser,
                    +    .freePageTable      = NX_HalProcessFreePageTable,
                    +};
                    +
                    +

                    10. SMP多核

                    +

                    引导核初始化完成后,会初始化内核,在内核初始化完成后,就会进入启动应用核的阶段 NX_HalCoreBootApp。 +如果支持多核,就可以在这个时候去唤醒其他核。不支持的话返回 NX_ENORES 没有资源即可。

                    +

                    唤醒应用核只需要调用 SBI 提供的唤醒核心功能即可。

                    +

                    唤醒后,应用核会进入 NX_HalCoreEnterApp, 应用核只需要设置中断表地址,初始化自己的中断控制器即可。

                    +

                    还有值得注意的是,获取处理器的索引 NX_HalCoreGetIndex。该索引是在处理器数组中的索引,不管什么处理器 id 值, +都会被映射成索引,相当于是处理器 idhash 值,其返回值范围为 0~NX_MULTI_CORES_NR - 1

                    +
                      +
                    • 文件:src/arch/riscv64/port/smp.c
                    • +
                    +
                    /**
                    + * Copyright (c) 2018-2022, NXOS Development Team
                    + * SPDX-License-Identifier: Apache-2.0
                    + * 
                    + * Contains: HAL Multi Core support
                    + * 
                    + * Change Logs:
                    + * Date           Author            Notes
                    + * 2021-12-9      JasonHu           Init
                    + */
                    +
                    +#include <xbook.h>
                    +#include <sched/smp.h>
                    +#include <mm/barrier.h>
                    +#include <platform.h>
                    +#define NX_LOG_NAME "Multi Core"
                    +#include <utils/log.h>
                    +
                    +#include <sbi.h>
                    +#include <trap.h>
                    +#include <clock.h>
                    +#include <plic.h>
                    +#include <regs.h>
                    +
                    +NX_IMPORT NX_Addr TrapEntry0;
                    +NX_IMPORT NX_Addr TrapEntry1;
                    +NX_IMPORT NX_Addr TrapEntry2;
                    +NX_IMPORT NX_Addr TrapEntry3;
                    +
                    +/**
                    + * Within SBI, we can't read mhartid, so I try to use `trap entry` to see who am I.
                    + */
                    +NX_PRIVATE NX_UArch NX_HalCoreGetIndex(void)
                    +{
                    +    NX_Addr trapEntry = ReadCSR(stvec);
                    +
                    +    if (trapEntry == (NX_Addr)&TrapEntry0)
                    +    {
                    +        return 0;
                    +    }
                    +    else if (trapEntry == (NX_Addr)&TrapEntry1)
                    +    {
                    +        return 1;
                    +    }
                    +    else if (trapEntry == (NX_Addr)&TrapEntry2)
                    +    {
                    +        return 2;
                    +    }
                    +    else if (trapEntry == (NX_Addr)&TrapEntry3)
                    +    {
                    +        return 3;
                    +    }
                    +    /* should never be here */
                    +    while (1);
                    +}
                    +
                    +NX_PRIVATE NX_Error NX_HalCoreBootApp(NX_UArch bootCoreId)
                    +{
                    +
                    +    NX_LOG_I("boot core is:%d", bootCoreId);
                    +    NX_UArch coreId;
                    +    for (coreId = 0; coreId < NX_MULTI_CORES_NR; coreId++)
                    +    {
                    +#ifndef CONFIG_NX_PLATFORM_K210
                    +        NX_LOG_I("core#%d state:%d", coreId, sbi_hsm_hart_status(coreId));
                    +#endif
                    +        if (bootCoreId == coreId) /* skip boot core */
                    +        {
                    +            NX_LOG_I("core#%d is boot core, skip it", coreId);
                    +            continue;
                    +        }
                    +        NX_LOG_I("wakeup app core:%d", coreId);
                    +#ifdef CONFIG_NX_PLATFORM_K210
                    +        NX_UArch mask = 1 << coreId;
                    +        sbi_send_ipi(&mask);
                    +#else
                    +        sbi_hsm_hart_start(coreId, MEM_KERNEL_BASE, 0);    
                    +#endif
                    +        NX_MemoryBarrier();
                    +#ifndef CONFIG_NX_PLATFORM_K210
                    +        NX_LOG_I("core#%d state:%d after wakeup", coreId, sbi_hsm_hart_status(coreId));
                    +#endif
                    +    }
                    +    return NX_EOK;
                    +}
                    +
                    +NX_PRIVATE NX_Error NX_HalCoreEnterApp(NX_UArch appCoreId)
                    +{
                    +    /* NOTE: init trap first before do anything */
                    +    CPU_InitTrap(appCoreId);
                    +    NX_LOG_I("core#%d enter application!", appCoreId);
                    +    PLIC_Init(NX_False);
                    +
                    +    return NX_EOK;
                    +}
                    +
                    +NX_INTERFACE struct NX_SMP_Ops NX_SMP_OpsInterface = 
                    +{
                    +    .getIdx = NX_HalCoreGetIndex,
                    +    .bootApp = NX_HalCoreBootApp,
                    +    .enterApp = NX_HalCoreEnterApp,
                    +};
                    +
                    +

                    四、移植总结

                    +

                    对于 nxos 新架构的移植,都是按照一套统一的接口去实现的。 +在调试过程中会遇到很多问题,需要耐心地调试。

                    +

                    通常,都是在启动后尽快地实现串口调试,以便能够知道自己跑到什么地方了。 +最开始是可以不开启 MMU 的,最开始不需要跑进程, +只需要实现 atomic.cbarrier.cclock.ccontext.cinterrupt.c即可。 +如果只是需要运行起来,不需要线程环境,那么就只需要 atomic.cbarrier.c即可。

                    +

                    移植过程是需要慢慢琢磨,长期积累,才能实现更好的代码。

                    + + +
                    + +
                    +
                    +
                    + +

                    results matching ""

                    +
                      + +
                      +
                      + +

                      No results matching ""

                      + +
                      +
                      +
                      + +
                      +
                      + +
                      + + + + + + +
                      + + +
                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_book/programing-manual/process/figures/process.png b/_book/programing-manual/process/figures/process.png new file mode 100644 index 0000000000000000000000000000000000000000..1ab337f5ceb84393c02172973dd04620c434e209 Binary files /dev/null and b/_book/programing-manual/process/figures/process.png differ diff --git a/_book/programing-manual/process/figures/syscall.png b/_book/programing-manual/process/figures/syscall.png new file mode 100644 index 0000000000000000000000000000000000000000..7a8a49f0f8037a5cf1677333db5da5b3648e3906 Binary files /dev/null and b/_book/programing-manual/process/figures/syscall.png differ diff --git a/_book/programing-manual/process/process.html b/_book/programing-manual/process/process.html new file mode 100644 index 0000000000000000000000000000000000000000..70714a5f41013570ec18159d304ce54c8db64481 --- /dev/null +++ b/_book/programing-manual/process/process.html @@ -0,0 +1,710 @@ + + + + + + + 进程管理 · book for nxos + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                      +
                      + + + + + + + + +
                      + +
                      + +
                      + + + + + + + + +
                      +
                      + +
                      +
                      + +
                      + +

                      进程管理

                      +

                      一. 描述

                      +

                      进程是具有独立的线性地址空间的线程集合,是线程的容器。在现代操作系统中,硬件的 MMU (内存管理单元)为虚拟内存的实现奠定基础。 +线程 + MMU 就可以升级为进程。除此之外,还会有一些其它进程独有的资源。

                      +

                      进程执行独立的程序,程序运行出故障也不会导致系统出现故障。因此可以把一些服务程序放到用户态作为进程执行,当服务出错的时候不会导致 +内核崩溃。

                      +

                      二. 原理

                      +

                      进程的实现依赖于 MMU ,来实现进程的虚拟地址空间。每个进程都有一个 MMU 映射表,切换进程的时候需要修改硬件 MMU 寄存器,访问的地址都是新的 MMU 映射的虚拟地址。

                      +

                      由于切换了 MMU 后,访问的地址会发生变化。因此,为了能够保证访问内核的时候是正确的,在映射 MMU 的时候,每个进程都会把部分 +页表项映射到内核,并设置权限为内核才能访问,这样就能实现切换 MMU 的时候,内核也能够正常运行,新进程的地址访问也不会出错。

                      +

                      那么 MMU 究竟是何物?MMU 是虚拟地址转换成为物理地址的硬件机制。在开启 MMU 前,访问的地址都是物理地址, +即直接访问的是内存的地址。比如内存只有 32MB ,那么访问的地址就只能是在 32MB 以内进行数据存取。 +当开启 MMU 后,访问的地址就是虚拟地址了。此时访问的地址,会通过 MMU 转换成那 32MB 内的物理地址, +再去对物理地址进行存取。比如虚拟地址是 0xF0000000 ,显然超过了 32MB 的内存范围,但是,只要在访问前映射 0xF0000000 到 + 32MB 内的物理地址,就能正确地进行数据存取,不然,则会产生页面故障。

                      +

                      三、框架图

                      +

                      进程原理

                      +

                      四. 接口

                      +

                      创建进程的时候,需要从文件系统上加载程序的代码和数据,然后再去执行进程的代码。 +启动进程的时候,需要传入进程的名字 name ,要加载程序的路径 path ,以及进程标志 flags

                      +
                      NX_Error NX_ProcessLaunch(char *name, char *path, NX_U32 flags);
                      +
                      +

                      进程执行结束的时候,需要退出,并传入退出时候的状态码。

                      +
                      void NX_ProcessExit(int exitCode);
                      +
                      + + +
                      + +
                      +
                      +
                      + +

                      results matching ""

                      +
                        + +
                        +
                        + +

                        No results matching ""

                        + +
                        +
                        +
                        + +
                        +
                        + +
                        + + + + + + + + + + + + + + +
                        + + +
                        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_book/programing-manual/process/syscall.html b/_book/programing-manual/process/syscall.html new file mode 100644 index 0000000000000000000000000000000000000000..f32e725ecd55beda4fc391aff7414899c97fa22c --- /dev/null +++ b/_book/programing-manual/process/syscall.html @@ -0,0 +1,701 @@ + + + + + + + 系统调用 · book for nxos + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                        +
                        + + + + + + + + +
                        + +
                        + +
                        + + + + + + + + +
                        +
                        + +
                        +
                        + +
                        + +

                        系统调用

                        +

                        一. 描述

                        +

                        在现代操作系统中,分为了内核态和用户态。内核态是内核程序本身,可以对设备资源进行管理核控制。而用户态只能够去调用内核提供的服务,不能够直接对资源进行访问。 +这么做的目的是为了避免用户恶意程序对系统的损坏,对设备进行恶意操作。于是用户态核与内核态之间的接口就出现了,它就是系统调用。

                        +

                        系统调用是指用户态程序通过特殊的指令陷入到内核态,执行内核态提供的服务程序,然后再返回到用户态。

                        +

                        支持特权保护的处理器架构中,都提供了模式切换的指令。至少需要有两个特权级,一个用于内核态,特权更高,可以直接访问硬件。另外一个用于用户态, +只能通过系统调用执行内核提供好的服务。在 x86 架构中,有4个特权级(ring0, ring1, ring2, ring3),在 riscv 架构中,有3个特权级(Machine, Supervisor, User)。

                        +

                        二. 原理

                        +

                        系统调用的实现,是基于特权级切换指令实现的,一般都是中断或者异常。用户态通过调用这些指令,就会产生一个中断或者异常,处理器会去中断表中查找系统调用指令对应的处理函数,然后就根据系统调用的 API 进行内核服务的分发,去调用对应的内核函数。

                        +

                        值得注意的是,在执行系统调用期间,需要打开中断,避免在系统调用时出现死循环,导致内核卡死。

                        +

                        三、框架图

                        +

                        系统调用

                        +

                        四. 接口

                        +

                        系统调用表是在内核固定下来的,不同的架构只要根据固定的 API 值,就能获取到对应的内核服务功能,然后以函数指针的方式去调用执行即可。

                        +
                        NX_SyscallHandler NX_SyscallGetHandler(NX_SyscallApi api);
                        +
                        + + +
                        + +
                        +
                        +
                        + +

                        results matching ""

                        +
                          + +
                          +
                          + +

                          No results matching ""

                          + +
                          +
                          +
                          + +
                          +
                          + +
                          + + + + + + + + + + + + + + +
                          + + +
                          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_book/programing-manual/sched/figures/multi-threading_principle.png b/_book/programing-manual/sched/figures/multi-threading_principle.png new file mode 100644 index 0000000000000000000000000000000000000000..e649b5e468491288f0a4a5ffa833442e3e830596 Binary files /dev/null and b/_book/programing-manual/sched/figures/multi-threading_principle.png differ diff --git a/_book/programing-manual/sched/figures/smp_load_balancing.png b/_book/programing-manual/sched/figures/smp_load_balancing.png new file mode 100644 index 0000000000000000000000000000000000000000..7e193599ed95f0df0db3a8560378b39a79d5494b Binary files /dev/null and b/_book/programing-manual/sched/figures/smp_load_balancing.png differ diff --git a/_book/programing-manual/sched/figures/smp_start.png b/_book/programing-manual/sched/figures/smp_start.png new file mode 100644 index 0000000000000000000000000000000000000000..ff32ba8aea5afb936ce4c78a94358796619f9532 Binary files /dev/null and b/_book/programing-manual/sched/figures/smp_start.png differ diff --git a/_book/programing-manual/sched/figures/thread_framework.png b/_book/programing-manual/sched/figures/thread_framework.png new file mode 100644 index 0000000000000000000000000000000000000000..cfdcfad39fde4f7407421ac2a9d05b3941be3b2d Binary files /dev/null and b/_book/programing-manual/sched/figures/thread_framework.png differ diff --git a/_book/programing-manual/sched/sched.html b/_book/programing-manual/sched/sched.html new file mode 100644 index 0000000000000000000000000000000000000000..22a89122d28c25baccb33679e42340a24b0f5946 --- /dev/null +++ b/_book/programing-manual/sched/sched.html @@ -0,0 +1,694 @@ + + + + + + + 调度管理 · book for nxos + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                          +
                          + + + + + + + + +
                          + +
                          + +
                          + + + + + + + + +
                          +
                          + +
                          +
                          + +
                          + +

                          调度管理

                          +

                          在现代操作系统中,多任务已成为标配,也就是一个处理器可以“同时”执行多个任务,这样可以最大化利用处理器,并且支持更多的功能。

                          +

                          由于任务数量众多,如何管理它们,是要做到公平运行还是谁先谁后,这和应用场景密切相关。

                          +

                          在嵌入式领域,rtos的实时性是非常重要的。简单来说,就是一个优先级最高的任务在执行的时候,低优先级的任务得不到执行,如果有更高 +的任务被唤醒,就得立即切换过去执行。

                          +

                          而在桌面和服务器领域,需要保证任务的公平性,即使优先级比较低,也要能够得到运行。

                          +

                          在内核中,涉及到多任务的是线程管理,调度算法,多核调度。

                          +

                          一. 线程管理

                          +

                          二. 多核调度

                          + + +
                          + +
                          +
                          +
                          + +

                          results matching ""

                          +
                            + +
                            +
                            + +

                            No results matching ""

                            + +
                            +
                            +
                            + +
                            +
                            + +
                            + + + + + + + + + + + + + + +
                            + + +
                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_book/programing-manual/sched/smp.html b/_book/programing-manual/sched/smp.html new file mode 100644 index 0000000000000000000000000000000000000000..3a3662e352f3f5d376366cbfc89ac04897c7c725 --- /dev/null +++ b/_book/programing-manual/sched/smp.html @@ -0,0 +1,708 @@ + + + + + + + SMP多核调度 · book for nxos + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            +
                            + + + + + + + + +
                            + +
                            + +
                            + + + + + + + + +
                            +
                            + +
                            +
                            + +
                            + +

                            多核调度

                            +

                            一. 描述

                            +

                            自从进入21世纪,处理器的性能就有了瓶颈,不再迅猛增长。此时就有人提出多个处理器一起工作的方式,来弥补处理器性能的问题。

                            +

                            二. 原理

                            +

                            多核的实现是需要硬件支持的,操作系统内核只是根据硬件做一定的抽象,做好多核间的同步与互斥。

                            +

                            多核中很重要的一个机制就是自旋锁,当需要访问公共资源的时候,就需要自旋锁来上锁,才能保证多个核同时访问数据的正确性。自旋锁依赖于原子操作,而原子操作又需要硬件做支持。

                            +

                            一般情况下,第一个引导处理器(Boot Processor)启动后,进入内核,完成初始化,再由引导处理器去唤醒其它处理器,通常称为应用处理器(Application Processor)。 AP 启动后,会进行一些初始化,然后参加到调度工作中。而调度队列的实现就需要依赖于原子操作来保证对公共队列访问的正确性。

                            +

                            三、框架图

                            +
                            +
                            + SMP多核启动 +
                            + SMP多核启动流程 +
                            +
                            + +
                            +
                            + SMP负载均衡 +
                            + SMP负载均衡 +
                            +
                            + + +
                            + +
                            +
                            +
                            + +

                            results matching ""

                            +
                              + +
                              +
                              + +

                              No results matching ""

                              + +
                              +
                              +
                              + +
                              +
                              + +
                              + + + + + + + + + + + + + + +
                              + + +
                              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_book/programing-manual/sched/thread.html b/_book/programing-manual/sched/thread.html new file mode 100644 index 0000000000000000000000000000000000000000..42994e4a788c7eacb42d9c7333b8e72f14d07120 --- /dev/null +++ b/_book/programing-manual/sched/thread.html @@ -0,0 +1,783 @@ + + + + + + + 线程管理 · book for nxos + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                              +
                              + + + + + + + + +
                              + +
                              + +
                              + + + + + + + + +
                              +
                              + +
                              +
                              + +
                              + +

                              线程管理

                              +

                              一. 描述

                              +

                              内核的最小调度单位是线程,每个线程都有自己独立的栈,寄存器组,以及一些运行信息等。 +以线程为最小调度单元的好处是可以很方便支持内核态以及用户态的多线程,并且层次框架也比较好,容易实现。

                              +

                              每个线程都有一个其对应的线程结构体,使用其来记录线程的信息,比如线程链表,线程状态,线程栈等基础信息。 +在创建一个线程后,可以运行该线程,可以让线程去完成一些独立的工作。内核中的 idle 线程, deamon 线程等都有自己独立的工作任务。

                              +

                              二. 原理

                              +

                              当前实现的线程结构体如下:

                              +
                              struct NX_Thread
                              +{
                              +    /* thread list */
                              +    NX_List list;
                              +    NX_List globalList;
                              +    NX_List exitList;
                              +    NX_List processList;    /* list for process */
                              +
                              +    NX_Spin lock;  /* lock for thread */
                              +
                              +    /* thread info */
                              +    NX_ThreadState state;
                              +    NX_I32 tid;     /* thread id, -1 means no alloc failed */
                              +    NX_ThreadHandler handler;
                              +    void *threadArg;
                              +    char name[NX_THREAD_NAME_LEN];
                              +
                              +    /* thread stack */
                              +    NX_U8 *stackBase;  /* stack base */
                              +    NX_Size stackSize; 
                              +    NX_U8 *stack;      /* stack top */
                              +
                              +    /* thread sched */
                              +    NX_U32 timeslice;
                              +    NX_U32 ticks;
                              +    NX_U32 fixedPriority;  /* fixed priority, does not change dynamically  */
                              +    NX_U32 priority;    /* dynamic priority, or in the case of time-sharing scheduling priority will change dynamically */
                              +    NX_U32 needSched;
                              +    NX_U32 isTerminated;
                              +    NX_UArch onCore;        /* thread on which core */
                              +    NX_UArch coreAffinity;  /* thread would like to run on the core */
                              +
                              +    /* thread resource */
                              +    NX_ThreadResource resource;
                              +};
                              +typedef struct NX_Thread NX_Thread;
                              +
                              +

                              在线程结构体中,有链表,基础信息,栈信息,调度信息,以及内核的资源。

                              +

                              最开始,内核是没有线程概念的,处理器只有一个执行流。 +在完成内核的初始化后,会创建 idle 线程,来保证处理器至少能够 +拿到1个线程执行,避免内核跑飞。 +当处理器调用 NX_SchedToFirstThread 的时候,就去获取一个线程来运行。 +此时,处理器就进入线程环境,开启线程调度生涯。

                              +

                              每个线程执行一段时间后,就会切换到其它线程执行。这个切换可能是主动的,也可能是被动的。线程在阻塞(block)和让出(yield)的时候是属于线程主动发起切换。在 +产生时钟中断的时候,会去减少线程的时间片,时间片为0后,再去切换线程,这是属于线程被动切换。

                              +

                              由于线程的切换速度非常快,一般在 1ms~100ms 就会发起一次切换。这样,在人看来,就是多个任务在 +同时运行。比如你一边听歌,一边写代码,其实就是音乐播放器和代码编辑器这两个任务在快速切换而形成的效果。

                              +

                              多线程原理

                              +

                              线程是具有优先级的,优先级高的线程先运行,优先级低的线程后运行。在 nxos 中,分为实时优先级和分时优先级。实时优先级是,只要有高的优先级,就不能运行低的优先级。而分时优先级是高低优先级线程都能得到运行,只是低优先级线程运行的时间更少而已。优先级 [0, 6] 属于分时优先级,优先级 [7, MAX - 1] 属于实时优先级。在使用过程中,通常使用宏,而不是直接使用数字。优先级宏如下:

                              +
                              
                              +/* time-sharing priority */
                              +#define NX_THREAD_PRIORITY_IDLE     0   /* idle thread priority */
                              +#define NX_THREAD_PRIORITY_LOW      1   /* low level priority */
                              +#define NX_THREAD_PRIORITY_NORMAL   3   /* normal level priority */
                              +#define NX_THREAD_PRIORITY_HIGH     6   /* high level priority */
                              +
                              +#define NX_THREAD_PRIORITY_RT_MIN (NX_THREAD_PRIORITY_HIGH + 1)     /* real time min priority */
                              +#define NX_THREAD_PRIORITY_RT_MAX (NX_THREAD_MAX_PRIORITY_NR - 1)   /* real time max priority */
                              +
                              +

                              三、框架图

                              +

                              多线程框架

                              +

                              四. 接口

                              +

                              线程的创建是 NX_ThreadCreate , 传入线程的名字 name ,线程处理函数 handler 以及参数 arg , 还有重要的优先级 priority,即可创建一个线程,返回线程的地址。 +但是注意,此时只是创建了线程,还没有启动线程。

                              +
                              NX_Thread *NX_ThreadCreate(const char *name, NX_ThreadHandler handler, void *arg, NX_U32 priority);
                              +
                              +

                              销毁一个线程是只需要传入线程地址即可。注意,销毁不代表把线程从运行队列中摘除,只是释放线程占用的内存。

                              +
                              NX_Error NX_ThreadDestroy(NX_Thread *thread);
                              +
                              +

                              在线程创建后,如果需要把线程绑定到某个处理器,则可以设置处理器亲和性,使得该线程被绑定在指定的线程上运行。

                              +
                              NX_Error NX_ThreadSetAffinity(NX_Thread *thread, NX_UArch coreId);
                              +
                              +

                              线程创建好后,需要启动线程,调用 NX_ThreadStart 就可以启动线程,线程就可以开始运行了。

                              +
                              NX_Error NX_ThreadStart(NX_Thread *thread);
                              +
                              +

                              有时候需要终止某个线程的运行,就需要使用 NX_ThreadTerminate 去终止线程,传入线程指针即可。

                              +
                              NX_Error NX_ThreadTerminate(NX_Thread *thread);
                              +
                              +

                              线程完成了自己的工作后,可以主动退出运行,调用 NX_ThreadExit 函数即可退出当前线程的运行。

                              +
                              void NX_ThreadExit(void);
                              +
                              +

                              很多情况下,需要获取当前线程,可以使用 NX_ThreadSelf 获取自己的线程指针。

                              +
                              NX_Thread *NX_ThreadSelf(void);
                              +
                              +

                              线程有一个让出当前执行的操作,就是暂时不允许,希望把运行机会让给其它线程,做一个"好人",此时调用 NX_ThreadYield 就可以让出执行权。值得注意的是,本线程不会阻塞,会在下一个时机再次被调度。

                              +
                              void NX_ThreadYield(void);
                              +
                              +

                              当线程需要休眠的时候,就需要传入休眠的时间, 在 nxos 内核中,休眠的单位是毫秒,休眠 microseconds 时间长度后,就会被唤醒,继续往后执行。

                              +
                              NX_Error NX_ThreadSleep(NX_UArch microseconds);
                              +
                              + + +
                              + +
                              +
                              +
                              + +

                              results matching ""

                              +
                                + +
                                +
                                + +

                                No results matching ""

                                + +
                                +
                                +
                                + +
                                +
                                + +
                                + + + + + + + + + + + + + + +
                                + + +
                                + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_book/programing-manual/timer/figures/timer.png b/_book/programing-manual/timer/figures/timer.png new file mode 100644 index 0000000000000000000000000000000000000000..42c718ee0947b886239cdb5a828a56d9451b5660 Binary files /dev/null and b/_book/programing-manual/timer/figures/timer.png differ diff --git a/_book/programing-manual/timer/timer.html b/_book/programing-manual/timer/timer.html new file mode 100644 index 0000000000000000000000000000000000000000..bb8d6b992181ea29d53a92e94afefb790db632b3 --- /dev/null +++ b/_book/programing-manual/timer/timer.html @@ -0,0 +1,716 @@ + + + + + + + 定时器 · book for nxos + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                +
                                + + + + + + + + +
                                + +
                                + +
                                + + + + + + + + +
                                +
                                + +
                                +
                                + +
                                + +

                                定时器

                                +

                                一、描述

                                +

                                定时器是基于系统时钟实现的,精度比较低(1ms~10ms),可以用于线程的休眠,以及对于休眠精度不高的场景。

                                +

                                二、原理

                                +

                                当时钟中断产生的时候,会改变ticks的值,与此同时也会去检测是否有定时器超时,如果有定时器超时,则会去处理定时器超时函数。

                                +

                                有一个定时器链表来记录所有等待超时的定时器,值得注意的是,它们是通过线性的方式插入到链表中的。 +最先超时的定时器会插入到链表头,超时时间比较久的定时器会被加入到链表的末尾。

                                +

                                除此之外,还有一个最近超时的时间变量,来记录下一个即将超时的定时器,可以用它来检测是否需要去检测定时器链表。

                                +

                                当有一个定时器的ticks到达了最近超时定时器的ticks值的时候,就去检测定时器链表,如果有多个同样超时的定时器, +就会将他们全部处理,调用定时器超时处理函数,然后更新最近超时定时器的ticks。

                                +

                                三、框架图

                                +

                                框架图

                                +

                                四、接口

                                +

                                创建定时器需要指定需要超时的时间 milliseconds ,超时后调用的处理函数 handler ,处理函数参数 arg, +以及定时器的标志 flags。 +标志有多重,表明不同类型的定时器。 ONESHOT 表示只超时一次, PERIOD 表示周期性地按照 milliseconds 来进行超时。

                                +
                                #define NX_TIMER_ONESHOT   0x01    /* timer type is one shot */
                                +#define NX_TIMER_PERIOD    0x02    /* timer type is period */
                                +
                                +NX_Timer *NX_TimerCreate(NX_UArch milliseconds, 
                                +                          NX_Bool (*handler)(struct NX_Timer *, void *arg), void *arg, 
                                +                          int flags);
                                +
                                +

                                如果是对静态的定时器进行初始化,只需要调用 NX_TimerInit 并传入定时器的地址即可。

                                +
                                NX_Error NX_TimerInit(NX_Timer *timer, NX_UArch milliseconds, 
                                +                          NX_Bool (*handler)(struct NX_Timer *, void *arg), void *arg, 
                                +                          int flags);
                                +
                                +

                                在定时器还没开始运行的时候,可以销毁一个定时器,调用 NX_TimerDestroy, 只需要传入定时器对象地址即可。

                                +
                                NX_Error NX_TimerDestroy(NX_Timer *timer);
                                +
                                +

                                创建定时器后需要调用 NX_TimerStart 启动它,才可以在超时后调用回调函数。

                                +
                                NX_Error NX_TimerStart(NX_Timer *timer);
                                +
                                +

                                当需要停止定时器的时候,调用 NX_TimerStop 即可。

                                +
                                NX_Error NX_TimerStop(NX_Timer *timer);
                                +
                                + + +
                                + +
                                +
                                +
                                + +

                                results matching ""

                                +
                                  + +
                                  +
                                  + +

                                  No results matching ""

                                  + +
                                  +
                                  +
                                  + +
                                  +
                                  + +
                                  + + + + + + + + + + +
                                  + + +
                                  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_book/programing-manual/user/api.html b/_book/programing-manual/user/api.html new file mode 100644 index 0000000000000000000000000000000000000000..074f4e5611cff739ecbc22d220e7cd65d4bf9231 --- /dev/null +++ b/_book/programing-manual/user/api.html @@ -0,0 +1,1105 @@ + + + + + + + API设计 · book for nxos + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                  +
                                  + + + + + + + + +
                                  + +
                                  + +
                                  + + + + + + + + +
                                  +
                                  + +
                                  +
                                  + +
                                  + +

                                  API应用程序接口

                                  +

                                  本文档存放的是用户程序的编程接口的设计说明。

                                  +

                                  NXOS的API接口分为几个大类。进程,线程,内存管理,时间管理,枢纽系统,文件系统,设备管理,网络管理,图形管理,安全管理,用户态驱动框架。

                                  +

                                  进程管理

                                  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                  功能函数
                                  创建进程int ProcessCreate(char name, char path, int flags, char cmd, void env)
                                  退出进程void ProcessExit(int exitCode)
                                  终止进程int ProcessTerminate(int pid)
                                  获取进程IDint ProcessGetId(void)
                                  等待进程退出int ProcessWait(int pid, int timeout, int flags)
                                  +

                                  线程管理

                                  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                  功能函数
                                  创建线程int ThreadCreate(ThreadHandler handler, void *arg, USize stackSize, int flags)
                                  退出线程void ThreadExit(int exitCode)
                                  获取线程IDint ThreadGetId(void)
                                  终止线程int ThreadTerminate(int tid)
                                  挂起线程int ThreadSuspend(int tid)
                                  恢复线程int ThreadResume(int tid)
                                  等待线程退出int ThreadWait(int tid, int timeout, int flags)
                                  创建互斥体Mutex MutexCreate(int attr, char name)
                                  删除互斥体int MutexDelete(Mutex *mutex)
                                  初始化互斥体int MutexInit(Mutex mutex, int attr, char name)
                                  获取互斥体int MutexAcquire(Mutex *mutex)
                                  释放互斥体int MutexRelease(Mutex *mutex)
                                  尝试获取互斥体int MutexTryAcquire(Mutex *mutex)
                                  创建条件变量Condition ConditionCreate(int attr, char name)
                                  删除条件变量int ConditionDelete(Condition *cond)
                                  初始化条件变量int ConditionInit(Condition cond, int attr, char name)
                                  休眠等待条件变量int ConditionSleep(Condition cond, Mutex mutex)
                                  唤醒休眠等待条件的单个线程int ConditionWake(Condition *cond)
                                  唤醒休眠等待条件的全部线程int ConditionWakeAll(Condition *cond)
                                  分配一个tlsint TlsAlloc(void)
                                  释放一个tlsint TlsFree(int tlsIndex)
                                  设置tls的值int TlsSetValue(int tlsIndex, void *value)
                                  获取tls的值void TlsGetValue(int tlsIndex)
                                  +

                                  内存管理

                                  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                  功能函数
                                  分配内存void *MemAlloc(USize size)
                                  释放内存int MemFree(void *object)
                                  映射内存void MemMap(void addr, USize size, int attr)
                                  解除映射内存int MemUnmap(void *addr)
                                  复制内存void MemCopy(void dest, void src, USize size)
                                  移动内存void MemMove(void dest, void src, USize size)
                                  填充内存void MemFill(void *addr, USize size, U8 value)
                                  清空内存void MemZero(void *addr, USize size)
                                  +

                                  时间管理

                                  + + + + + + + + + + + + + + + + + + + + + +
                                  功能函数
                                  获取当前的时间void TimeGetCurrent(TimeSytem *time)
                                  设置当前的时间void TimeSetCurrent(TimeSytem *time)
                                  获取系统运行的时间USize TimeGetClock(void)
                                  +

                                  文件系统

                                  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                  功能函数
                                  创建文件NX_Error NX_FileCreate(char *path, int attr)
                                  删除文件NX_Error NX_FileDelete(char *path)
                                  打开文件NX_FD NX_FileOpen(char *path, int flags, int attr)
                                  关闭文件NX_Error NX_FileClose(NX_FD fd)
                                  读取文件SSize NX_FileRead(NX_FD fd, void *buf, USize bytes)
                                  写入文件SSize NX_FileWrite(NX_FD fd, void *buf, USize bytes)
                                  索引文件Offset NX_FileSeek(NX_FD fd, Offset offset, int seekMethod)
                                  获取文件偏移Offset NX_FileTellOffset(NX_FD fd)
                                  检查文件结束NX_Bool NX_FileIsEnd(NX_FD fd)
                                  检查文件结束NX_Bool NX_FileAccess(char *path, int attr)
                                  创建目录NX_Bool NX_DirectoryCreate(char *path, int attr)
                                  删除目录NX_Bool NX_DirectoryDelete(char *path)
                                  打开目录NX_Dir DirectoryOpen(char *path, int flags)
                                  关闭目录NX_Error DirectoryClose(NX_Dir dir)
                                  读取目录NX_DirEntry *DirectoryRead(NX_Dir dir)
                                  重置读取位置NX_Error DirectoryRewind(NX_Dir dir)
                                  +

                                  网络系统

                                  +

                                  参考socket套接字接口设计

                                  + + + + + + + + + + + + + + + + + + + + +
                                  功能函数
                                  +

                                  设备管理

                                  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                  功能函数
                                  创建设备int DeviceCreate(char *path, int attr)
                                  删除设备int DeviceDelete(char *path)
                                  打开设备int DeviceOpen(char *path, int flags)
                                  关闭设备int DeviceClose(int dev)
                                  读取设备ISize DeviceRead(int dev, void *buf, USize len, Offset offset)
                                  写入设备ISize DeviceWrite(int dev, void *buf, USize len, Offset offset)
                                  写入设备ISize DeviceControl(int dev, int cmd, void *arg)
                                  +

                                  枢纽系统

                                  +

                                  等hub system设计好了再设计接口,目前还没有概念

                                  + + + + + + + + + + + + + + + + + + + + +
                                  功能函数
                                  +

                                  图形系统

                                  +

                                  暂不设计,等内核基本功能完成后再设计

                                  + + + + + + + + + + + + + + + + + + + + +
                                  功能函数
                                  +

                                  安全管理

                                  +

                                  暂不需要

                                  + + + + + + + + + + + + + + + + + + + + +
                                  功能函数
                                  +

                                  用户态驱动框架

                                  +

                                  等内核基础功能完成后实现

                                  + + + + + + + + + + + + + + + + + + + + +
                                  功能函数
                                  + + +
                                  + +
                                  +
                                  +
                                  + +

                                  results matching ""

                                  +
                                    + +
                                    +
                                    + +

                                    No results matching ""

                                    + +
                                    +
                                    +
                                    + +
                                    +
                                    + +
                                    + + + + + + +
                                    + + +
                                    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_book/search_index.json b/_book/search_index.json new file mode 100644 index 0000000000000000000000000000000000000000..a4f04e84c8385990b83f9ce7da868c78b111dc54 --- /dev/null +++ b/_book/search_index.json @@ -0,0 +1 @@ +{"index":{"version":"0.5.12","fields":[{"name":"title","boost":10},{"name":"keywords","boost":15},{"name":"body","boost":1}],"ref":"url","documentStore":{"store":{"./":["2.0",":","apach","develop","doc","issus","linux","mmu","nxo","nxos是next","nxos是一个分时多进程/多线程(也支持实时优先级),支持","nxos采用","nxos采用混合内核架构,即宏内核和微内核相结合。优势是减小内核代码,增加功能可扩展性,功能模块是独立的进程,添加和删除模块就是进程的创建和关闭。","oper","pr","system的意思,是一个跨平台的简洁、高性能、高稳定性的支持多核的混合内核,它将应用于桌面操作系统领域,服务器操作系统领域以及移动终端操作系统领域。","v0.1","windowsnt","xbook","内核是同一个数量级的。","内核,","分支","基于","如果您在文档中发现了问题或者想参与文档的编写,可以在文档仓库提出","开源协议,可以自由的复制和修改代码,只需要保留版权说明即可,无潜在的商业风险。","我们以简洁、高效、稳定为核心,用比较简洁且高效的方式去实现一些功能,去掉一些复杂,冗杂的功能,化繁为简。","或者提交","文档版本","概述","的架构","的现代操作系统,它和","简介","许可协议","访问文档目录"],"tutorial/quick-start.html":["#","&&","(cmder)","(git)下载后安装即可。","(python)下载后安装即可。","1.","2.","2.04","3.","a.","apt","b.","clean","ctrl+a","ctrl+d","defconfig","gdb","genisoimag","git","grub2","hat/fedora/centos:","i386","instal","linux:","linux下设置i386环境并设置platform=x86","linux下设置riscv64环境platform=riscv64","linux环境","make","menuconfig","mkf","mtool","nxo","prepar","python","qemu","qemu_riscv64","red","riscv64","run","saveconfig","setup.bat","setup.sh","sourc","sudo","system","tools/","tools/genisoimag","tools/grub","tools/mkf","tools/mtool","tools服务器下载(速度较慢,请耐心等待)","truncat","ubuntu/kali","window","windows下设置i386环境并设置platform=x86","windows下设置riscv64环境platform=riscv64","windows环境","x","yum","一、开发环境搭建","下载后需要解压出来,然后将每一个目录配置到path系统环境变量中(最好是配置到环境变量的最前面,避免和其它系统已经存在的工具冲突),解压后您将会有:","下载链接:https://qemu.weilnetz.de/w64/","为了方便,我们将其他比较小的工具已经打包在一个工具包里面了,下载解压后,手动添加对应的工具到系统环境变量即可。","为选中的平台做初始化(仅仅第一次编译的时候需要),会为每一个平台下载平台特别需要的工具到平台中。","二、编译和运行","仅仅编译源码","使用菜单配置进行个性化剪裁。可以选择打开或者关闭某些功能,设置一些变量等。配置完成后需要按esc键退出,退出后会生成新的配置头文件。","其他工具","其他涉及到的工具:python","加载平台的默认配置,会读取选中的平台的默认menuconfig配置到工作区中。","可以直接在终端中输入命令安装:","在获取nxos的系统源码后,您需要下载编译nxos的工具链(点我跳转),下载好后,进行环境变量的配置。","快速体验","快速入门","我们采用的是世界上最流行的qemu虚拟机,各种平台都有支持,刚好有我们需要的版本。","推荐的一个不错的终端(非必须)下载后安装即可。","本文档将带您从入门到劝退。","欢迎来到nxos内核!nxos是一个跨平台的简洁的高性能,高稳定性的操作系统内核,它将应用于桌面操作系统领域,服务器操作系统领域以及移动终端操作系统领域。","步骤拆解","第一次执行时,为平台做初始化","第一次编译一个新的平台的时候需要clean一下","编译器工具链","编译源码并运行","编译源码并运行,默认使用qemu虚拟机模拟运行,按下小写的ctrl+x后再按下a则可以退出qemu运行。","虚拟平台运行","虚拟机","设置临时环境变量,在目录中有脚本来设置,直接运行即可。windows使用bat,linux使用sh。","设置环境变量","调试完成后,需要将配置信息和文件保存到对应平台中,使得配置永久生效。","输入","进入到nxos目录中,在目录中打开一个终端。","退出","选择最新版本下载即可。下载后,安装到一个路径,再把路径配置到path系统环境变量中即可。","配置环境并运行"],"programing-manual/base/framework.html":["(fatfs,","(x86,","+","...)",".vscode","/","1.","2.","3.","app","arch","arm,","config","d1","doc","driver","extfs,","fs","hardwar","hub","i/o驱动框架和中断管理","i386,","includ","init","io","ipc","irq","k210,","kdriver","kernel","kservic","mm","netstack)","nt","nxbase","nxo","pc","platform","process","riscv,","riscv64","riscv64,","riscv64等","rt","sched","script","smart。","src","syscal","system","test","thread","time","timer","udriv","userverc","util","vf","virt","vmm","vscode的一些配置文件,有gdb调试配置","window","x86","xnu","|","一、混合内核框架","二、目录框架","内存管理模块","内核、苹果","内核一些功能的文档说明","内核其余模块","内核初始化以及main核心","内核源码目录","内核的源码","内核,还有国产开源系统","头文件","常用的功能组件,小工具,log显示以及字符串操作等","平台","平台支持,存放具体的平台,比如pc平台或者一个开发板","平台框架","平台配置文件,配置了支持的平台","描述","整体框架","文件系统框架以及各种文件系统支持","时间模块,时钟和定时器","架构","架构相关代码,x86,","框架","测试模块,测试框架和测试代码","用到的xbuild脚本和kconfig脚本等","目录","调度模块,线程和smp的内容,以及同步机制","进程管理,系统调用相关内容","进程间通信","采取架构和平台分离的措施,其原因在于,一个架构可能有多个平台,分离后可以服用架构的代码。","采用混合内核框架,也就是结合宏内核和微内核。这样的系统有","项目目录","驱动程序,磁盘,输入输出设备等"],"programing-manual/base/start.html":["(smp初始化)","(内核的主函数)","(初始化调用)","(平台初始化,","(平台初始化二阶段,可以使用内核的功能:","(平台的主函数,什么都可以使用:","(调度第一个线程)","...",">","_start","_start,当执行到这个地方的时候,内核就开始运行了。","nx_callsinit","nx_halplatforminit","nx_halplatformmain","nx_halplatformstage2","nx_main","nx_schedtofirstthread","nx_smp_main","nx_smp_preload","nxo","showlogvers","不能使用内核的功能:","内核功能初始化","内核执行路径","启动流程","在设备开机后,处理器会跳到一个地址去执行代码,一般都是固定的,然后再从这些固定代码跳转到程序员自己编写的程序。程序员自己写的程序就是裸机,rtos或者操作系统。在nxos中,不同的平台会有不同的执行地址,所以我们需要指定内核程序的入口地址,在链接的时候指定一个标签","平台开发者实现)"],"programing-manual/mm/mm.html":["一.","三.","二.","内存管理","内存管理分为物理内存管理、虚拟内存管理、进程虚拟内存管理这三个大模块。","内存管理是操作系统中最为核心和重要的部分,这是由于很多其它模块的运行都需要内存的分配和释放。","内核虚拟堆内存管理,使用基于缓存的链表实现","物理内存管理,使用伙伴算法实现。","进程虚拟内存管理,基于线性链表实现"],"programing-manual/mm/buddy.html":["*","*mem,","*nx_buddyallocpage(nx_buddysystem*","*ptr);","+","/**","0x82000000","bootload","buddi","buddy伙伴算法","count","count);","layout:","memori","nx_buddycreate(void","nx_buddyfreepage(nx_buddysystem*","nx_buddyincreasepage(nx_buddysystem*","nx_buddysystem*","nx_error","nx_page*","nx_pagefromptr(nx_buddysystem*","nx_size","nxo","physic","qemu","riscv64","size);","system","system,","top","void","一.","三、框架图","个页面。在mmu映射和虚拟内存管理器中会使用到。","中使用","之间的这部分内存。简单的说就是对一段或者多段空闲的内存地址进行管理,可以进行分配与释放,让操作系统去使用。","二.","优缺点","伙伴内存管理算法。为了便于页面的维护,将多个页面组成内存块,每个内存块都有2的方幂个页,方幂的指数被称为阶。在操作内存时,经常将这些内存块分成大小相等的两个块,分成的两个内存块被称为伙伴块,采用一位二进制数来表示它们的伙伴关系。当这个位为1,表示其中一块在使用;当这个位为0,表示两个页面块都空闲或者都在使用。系统根据该位为0或位为1来决定是否使用或者分配该页面块。系统每次分配和回收伙伴块时都要对它们的伙伴位跟1进行异或运算。所谓异或是指刚开始时,两个伙伴块都空闲,它们的伙伴位为0,如果其中一块被使用,异或后得1;如果另一块也被使用,异或后得0;如果前面一块回收了异或后得1;如果另一块也回收了异或后得0。","内存是操作系统运行的根基,处理器从内存中取出指令来执行,在进入操作系统之前,一般会有引导器","内存管理最基本的接口就是分配和释放。为了能够支持分页机制,为页表映射提供内存的支持,将内存分为页面大小进行管理会比较合适。","原理","另外拆分和合并涉及到","四.","在","在使用页面的过程中,可能会需要把一个地砖转换成其对应的页面结构,来访问该结构里面的成员,这在虚拟内存管理器","在初始化的时候,会创建一个","在释放页面的时候,需要引用计数为0的时候,才会去正在释放这个页面。","实现的时候有使用到。","尽管伙伴内存算法在内存碎片问题上已经做的相当出色,但是该算法中,一个很小的块往往会阻碍一个大块的合并,一个系统中,对内存块的分配,大小是随机的,一片内存中仅一个小的内存块没有释放,旁边两个大的就不能合并。","我们需要管理的内存就是","我们需要管理的物理内存是除了保留地址和操作系统占用以外的空闲的内存,这部分内存就是需要在操作系统运行的过程中进行静态/动态分配的内存。","所以,4kb也就延续到64位系统了。所以,我们使用4kb作为一个页面的大小。","所以,分配和释放的基础单位就是页面。通常来说,页面大小是4kb,也可以更大,但是由于4kb在32位操作系统中可以很好地对4gb内存进行映射,","把内核加载到内核中,然后跳转进去执行。","接口","描述","有必要的时候,也会在需要物理内存的时候,直接调用该分配。","有的情况下,当一个页面被多次使用的时候,需要去增加其引用计数,来避免被释放掉。","来管理一段连续的物理内存。需要制定物理内存地址和物理内存大小。","物理内存分配/释放管理之伙伴算法(buddy)","的","算法中有一定的浪费现象,伙伴算法是按2的幂次方大小进行分配内存块,当然这样做是有原因的,即为了避免把大的内存块拆的太碎,更重要的是使分配和释放过程迅速。但是他也带来了不利的一面,如果所需内存大小不是2的幂次方,就会有部分页面浪费。有时还很严重。比如原来是1024个块,申请了16个块,再申请600个块就申请不到了,因为已经被分割了。","算法的具体实现不进行讲解,除非你需要来优化这部分代码,才需要了解到,如果只是去使用,那么就只需要熟悉接口即可。","系统中分配的页面。","虚拟平台中,内存布局如下:","较多的链表和位图操作,开销还是比较大的。","这样的话,内核也就占用了一部分的内存,那么我们应该去管理哪部分内存呢?","里面分配","里面释放某个地址指针,该指针必须是从","页面分配函数,可以从一个","页面释放函数,从一个"],"programing-manual/mm/heap.html":["#defin","*nx_heapalloc(nx_s","*object);","112,","128等。","1mb)内存对象。","32,","48,","64,","80,","96,",">","cach","free","heap","heapcache虚拟内存管理","malloc","nx_error","nx_heapalloc","nx_heapalloc(size)","nx_heapfree(ptr)","nx_heapfree(void","nx_heapgetobjectsize(void","nx_memalloc","nx_memalloc(size)","nx_memfre","nx_memfree(ptr)","nx_memfree。","nx_size","nxo","size","size);","void","一、描述","三、框架图","中,内存对象被划分成3类,小(16byte","二、原理","使用的时候需要注意,必须是通过","内存释放堆内存的时候,需要传入内存对象地址,并返回释放的状态。","内核分配堆内存的接口,需要传入待分配内存的大小,即可获取一个内存地址,如果为空,那么就是分配失败了。","内核虚拟内存管理之堆内存","分配的内存对象。","去分配内存。","去释放内存。","和","四、接口","在","对于中内存对象,就是使用一个链表来管理。","对于大内存对象,就直接从物理内存管理器分配和释放,不使用链表管理。","对于小内存对象,会划分得比较细,如:16,","对于应用程序来说,可以使用","我们是使用基于缓存的链表来管理堆,这种方式的原理是,在释放一个页面后,会放到一个链表上面,下次分配的时候,直接从链表获取内存对象即可。","所以,需要在内核中实现同样的功能,在","来动态地分配内存,那么,对于内核来说,也需要这样的功能。","没有对象才重新从物理内存管理器中分配,有的话就直接从链表上面摘取。","的大小。","算法中,每个小的对象都有一个对应的链表来管理内存对象,分配的时候先去链表上获取对象,","通常,内核会使用","释放的时候,也是先释放到链表上面,当链表超出了最大链表长度阈值的时候,才会释放到物理内存分配器中。","里面,它们是","除此之外,还提供了一个获取某个内存对象大小的功能,传入地址即可获取内存对象所在的"],"programing-manual/mm/vmspace.html":["**outaddr);","*/","*space,","/*","addr,","attr,","elf","flags,","nx_addr","nx_error","nx_size","nx_u32","nx_vmspacemap(nx_vmspac","nx_vmspacemapwithphy(nx_vmspac","nx_vmspaceunmap(nx_vmspac","paddr,","size);","size,","vaddr,","vmnode","vmnode,节点记录了地址的信息以及这段地址的属性。","vmspace虚拟地址空间","void","一、描述","三、框架图","不同用法的地址。","二、原理","以及在做进程的堆分配和栈扩展的时候,都会使用到。","以及这个地址对应的内存大小,内存节点的属性,已经一些扩展的标志。","值得注意的是,映射的时候,还会去对内存进行物理内存映射,只有映射后,进程才能访问该地址。","删除。","四、接口","在解析","在进程的运行过程中也会涉及到堆的分配,栈的扩展等。","地址空间通过映射和解除映射来进行管理,类似于分配和释放的操作。","对进程的内存管理,是对它的虚拟地址进行管理。由于会有多个进程的存在,所以会对每个进程的虚拟地址","指定了虚拟地址需要映射到的物理地址,映射的时候,就把虚拟地址映射到该物理地址(未来做共享内存的时候会用到)","映射某段空间的时候,会先检测地址是否被使用,如果已经被使用了,就不能直接使用这块地址。没有被使用,就可以在地址空间中添加一个","映射的物理内存。","格式的可执行程序的时候,需要映射一段内存来储存代码和数据,就会用到映射功能。","虚拟地址在映射的时候,需要指定对应的地址空间,然后就是传入一个想要映射的地址,如果为0,那么就会自动分配一个地址。","解除地址映射的时候,需要制定虚拟地址和内存大小,如果在已经映射的内存空间中匹配到vmnode,就可以将其解除映射,并释放其","解除映射的时候,会先判断该地址是否映射,已经映射才能解除。会先解除物理内存映射,然后再把","进程在启动前,需要加载对应的代码、数据到内存中,然后才开始执行。","进程地址空间(vmspace)就是用来管理进程的虚拟地址的。由于不同地址会有不同的用途,于是会有虚拟地址节点(vmnode)来管理","进程地址空间的管理使用链表来维护每一个节点,节点是根据虚拟地址的值来进行线性排序,低地址在链表的开头,高地址在链表的结尾。","进程虚拟内存管理之虚拟空间","进行独立的管理,于是进程地址空间就出现了。"],"programing-manual/sched/sched.html":["一.","二.","在内核中,涉及到多任务的是线程管理,调度算法,多核调度。","在嵌入式领域,rtos的实时性是非常重要的。简单来说,就是一个优先级最高的任务在执行的时候,低优先级的任务得不到执行,如果有更高","在现代操作系统中,多任务已成为标配,也就是一个处理器可以“同时”执行多个任务,这样可以最大化利用处理器,并且支持更多的功能。","多核调度","由于任务数量众多,如何管理它们,是要做到公平运行还是谁先谁后,这和应用场景密切相关。","的任务被唤醒,就得立即切换过去执行。","线程管理","而在桌面和服务器领域,需要保证任务的公平性,即使优先级比较低,也要能够得到运行。","调度管理"],"programing-manual/sched/thread.html":["#defin","(nx_thread_max_priority_nr","(nx_thread_priority_high","*/","*arg,","*name,","*nx_threadcreate(const","*nx_threadself(void);","*stack;","*stackbase;","*thread);","*thread,","*threadarg;","+",",","/*","0","1","1)","1]","1ms~100m","3","6","6]","[0,","[7,","alloc","arg","base","case","chang","char","core","coreaffinity;","coreid);","deamon","dynam","exitlist;","fail","fix","fixedpriority;","globallist;","handler","handler,","handler;","high","id,","idl","info","isterminated;","level","list","list;","lock","lock;","low","max","mean","microsecond","microseconds);","min","name","name[nx_thread_name_len];","needsched;","normal","nx_error","nx_i32","nx_list","nx_schedtofirstthread","nx_size","nx_spin","nx_thread","nx_thread;","nx_thread_priority_high","nx_thread_priority_idl","nx_thread_priority_low","nx_thread_priority_norm","nx_thread_priority_rt_max","nx_thread_priority_rt_min","nx_threadcreat","nx_threaddestroy(nx_thread","nx_threadexit","nx_threadexit(void);","nx_threadhandl","nx_threadresourc","nx_threadself","nx_threadsetaffinity(nx_thread","nx_threadsleep(nx_uarch","nx_threadstart","nx_threadstart(nx_thread","nx_threadstat","nx_threadtermin","nx_threadterminate(nx_thread","nx_threadyield","nx_threadyield(void);","nx_u32","nx_u8","nx_uarch","nxo","oncore;","prioriti","priority);","priority,","priority;","priority,即可创建一个线程,返回线程的地址。","process","processlist;","real","resourc","resource;","run","sched","schedul","share","stack","stacksize;","state;","struct","thread","ticks;","tid;","time","timeslice;","top","typedef","void","{","};","一.","三、框架图","中,分为实时优先级和分时优先级。实时优先级是,只要有高的优先级,就不能运行低的优先级。而分时优先级是高低优先级线程都能得到运行,只是低优先级线程运行的时间更少而已。优先级","二.","产生时钟中断的时候,会去减少线程的时间片,时间片为0后,再去切换线程,这是属于线程被动切换。","以及参数","以线程为最小调度单元的好处是可以很方便支持内核态以及用户态的多线程,并且层次框架也比较好,容易实现。","传入线程的名字","但是注意,此时只是创建了线程,还没有启动线程。","内核中,休眠的单位是毫秒,休眠","内核的最小调度单位是线程,每个线程都有自己独立的栈,寄存器组,以及一些运行信息等。","函数即可退出当前线程的运行。","原理","去终止线程,传入线程指针即可。","同时运行。比如你一边听歌,一边写代码,其实就是音乐播放器和代码编辑器这两个任务在快速切换而形成的效果。","四.","在","在创建一个线程后,可以运行该线程,可以让线程去完成一些独立的工作。内核中的","在完成内核的初始化后,会创建","在线程创建后,如果需要把线程绑定到某个处理器,则可以设置处理器亲和性,使得该线程被绑定在指定的线程上运行。","在线程结构体中,有链表,基础信息,栈信息,调度信息,以及内核的资源。","就会发起一次切换。这样,在人看来,就是多个任务在","就可以启动线程,线程就可以开始运行了。","就可以让出执行权。值得注意的是,本线程不会阻塞,会在下一个时机再次被调度。","属于分时优先级,优先级","属于实时优先级。在使用过程中,通常使用宏,而不是直接使用数字。优先级宏如下:","当前实现的线程结构体如下:","当处理器调用","当线程需要休眠的时候,就需要传入休眠的时间,","很多情况下,需要获取当前线程,可以使用","拿到1个线程执行,避免内核跑飞。","接口","描述","时间长度后,就会被唤醒,继续往后执行。","最开始,内核是没有线程概念的,处理器只有一个执行流。","有时候需要终止某个线程的运行,就需要使用","此时,处理器就进入线程环境,开启线程调度生涯。","每个线程执行一段时间后,就会切换到其它线程执行。这个切换可能是主动的,也可能是被动的。线程在阻塞(block)和让出(yield)的时候是属于线程主动发起切换。在","每个线程都有一个其对应的线程结构体,使用其来记录线程的信息,比如线程链表,线程状态,线程栈等基础信息。","由于线程的切换速度非常快,一般在","的时候,就去获取一个线程来运行。","线程创建好后,需要启动线程,调用","线程完成了自己的工作后,可以主动退出运行,调用","线程是具有优先级的,优先级高的线程先运行,优先级低的线程后运行。在","线程有一个让出当前执行的操作,就是暂时不允许,希望把运行机会让给其它线程,做一个\"好人\",此时调用","线程的创建是","线程等都有自己独立的工作任务。","线程管理","线程,","线程,来保证处理器至少能够","获取自己的线程指针。","还有重要的优先级","销毁一个线程是只需要传入线程地址即可。注意,销毁不代表把线程从运行队列中摘除,只是释放线程占用的内存。",",线程处理函数"],"programing-manual/sched/smp.html":["ap","processor)。","processor)启动后,进入内核,完成初始化,再由引导处理器去唤醒其它处理器,通常称为应用处理器(appl","smp多核启动流程","smp多核调度","smp负载均衡","一.","一般情况下,第一个引导处理器(boot","三、框架图","二.","原理","启动后,会进行一些初始化,然后参加到调度工作中。而调度队列的实现就需要依赖于原子操作来保证对公共队列访问的正确性。","多核中很重要的一个机制就是自旋锁,当需要访问公共资源的时候,就需要自旋锁来上锁,才能保证多个核同时访问数据的正确性。自旋锁依赖于原子操作,而原子操作又需要硬件做支持。","多核的实现是需要硬件支持的,操作系统内核只是根据硬件做一定的抽象,做好多核间的同步与互斥。","多核调度","描述","自从进入21世纪,处理器的性能就有了瓶颈,不再迅猛增长。此时就有人提出多个处理器一起工作的方式,来弥补处理器性能的问题。"],"programing-manual/process/process.html":["*name,","*path,","+","0xf0000000","32mb","char","exitcode);","flags);","flags。","mmu","name","nx_error","nx_processexit(int","nx_processlaunch(char","nx_u32","path","void","一.","三、框架图","二.","以内进行数据存取。","内核崩溃。","内的物理地址,","内的物理地址,就能正确地进行数据存取,不然,则会产生页面故障。","再去对物理地址进行存取。比如虚拟地址是","创建进程的时候,需要从文件系统上加载程序的代码和数据,然后再去执行进程的代码。","到","前,访问的地址都是物理地址,","即直接访问的是内存的地址。比如内存只有","原理","后,访问的地址会发生变化。因此,为了能够保证访问内核的时候是正确的,在映射","后,访问的地址就是虚拟地址了。此时访问的地址,会通过","启动进程的时候,需要传入进程的名字","四.","寄存器,访问的地址都是新的","就可以升级为进程。除此之外,还会有一些其它进程独有的资源。","当开启","接口","描述","映射的虚拟地址。","映射表,切换进程的时候需要修改硬件","是虚拟地址转换成为物理地址的硬件机制。在开启","由于切换了","的内存范围,但是,只要在访问前映射","的时候,内核也能够正常运行,新进程的地址访问也不会出错。","的时候,每个进程都会把部分","究竟是何物?mmu","线程","转换成那","进程执行独立的程序,程序运行出故障也不会导致系统出现故障。因此可以把一些服务程序放到用户态作为进程执行,当服务出错的时候不会导致","进程执行结束的时候,需要退出,并传入退出时候的状态码。","进程是具有独立的线性地址空间的线程集合,是线程的容器。在现代操作系统中,硬件的","进程的实现依赖于","进程管理","那么","页表项映射到内核,并设置权限为内核才能访问,这样就能实现切换","(内存管理单元)为虚拟内存的实现奠定基础。",",以及进程标志",",显然超过了",",来实现进程的虚拟地址空间。每个进程都有一个",",要加载程序的路径",",那么访问的地址就只能是在"],"programing-manual/process/syscall.html":["api","api);","nx_syscallgethandler(nx_syscallapi","nx_syscallhandl","ring1,","ring2,","ring3),在","riscv","supervisor,","user)。","x86","一.","三、框架图","二.","值得注意的是,在执行系统调用期间,需要打开中断,避免在系统调用时出现死循环,导致内核卡死。","值,就能获取到对应的内核服务功能,然后以函数指针的方式去调用执行即可。","原理","只能通过系统调用执行内核提供好的服务。在","四.","在现代操作系统中,分为了内核态和用户态。内核态是内核程序本身,可以对设备资源进行管理核控制。而用户态只能够去调用内核提供的服务,不能够直接对资源进行访问。","接口","描述","支持特权保护的处理器架构中,都提供了模式切换的指令。至少需要有两个特权级,一个用于内核态,特权更高,可以直接访问硬件。另外一个用于用户态,","架构中,有3个特权级(machine,","架构中,有4个特权级(ring0,","系统调用","系统调用是指用户态程序通过特殊的指令陷入到内核态,执行内核态提供的服务程序,然后再返回到用户态。","系统调用的实现,是基于特权级切换指令实现的,一般都是中断或者异常。用户态通过调用这些指令,就会产生一个中断或者异常,处理器会去中断表中查找系统调用指令对应的处理函数,然后就根据系统调用的","系统调用表是在内核固定下来的,不同的架构只要根据固定的","这么做的目的是为了避免用户恶意程序对系统的损坏,对设备进行恶意操作。于是用户态核与内核态之间的接口就出现了,它就是系统调用。","进行内核服务的分发,去调用对应的内核函数。"],"programing-manual/interrupt/irq.html":["#defin","*data);","*data,","*name,","char","cow","flags);","handler,","irqno);","irqno,","kill","nx_error","nx_irq_bind(nx_irq_numb","nx_irq_controllerinterface.disable()","nx_irq_controllerinterface.enable()","nx_irq_controllerinterface.restorelevel(level)","nx_irq_controllerinterface.savelevel()","nx_irq_dis","nx_irq_disable()","nx_irq_en","nx_irq_enable()","nx_irq_handl","nx_irq_mask(nx_irq_numb","nx_irq_restorelevel","nx_irq_restorelevel(level)","nx_irq_savelevel","nx_irq_savelevel()","nx_irq_unbind(nx_irq_numb","nx_irq_unmask(nx_irq_numb","nx_u32","void","。","。由于有的时候只是为了暂时关闭中断,处理完后需要恢复中断的状态,于是则需要使用保存中断的状态和恢复中断的状态,即","一、描述","三、框架图","中断是可以全局打开和关闭的,打开后才会响应中断。除此之外,对于每一个具体的中断,都可以打开和关闭,在禁止了网卡中断后,即使打开了全局中断,也收不到网络数据包了。但是,异常是不可以屏蔽的,异常是来告诉内核出现一些问题了,需要根据具体的异常做处理。有的异常是不可以修复的,会导致系统死机,有的异常时可以修复的,比如页故障,可以拿来实现页面延迟映射,","中断是由处理器支持的一个临时打断当前执行流的功能,可分为设备中断和处理器异常。设备中断就是当网卡设备收到数据后会产生一个中断,打断处理器当前在处理的事情,去处理网络数据包。异常中断就是当处理器执行了一个不存在的指令或者访问了一个没有权限的内存地址,处理器就会中断当前的执行流,去对异常做一个处理,一般都是","中断管理","中断管理的实现是基于处理器的中断管理机制的,不同的架构具体实现机制可能有差别,但是在大体逻辑上都是一致的,因此可以抽象出一套统一的接口来供上层使用。","中断系统","二、原理","函数,相反关闭则是","前面有讲到关于全局中断的打开和关闭,全局中断的打开是","和","四、接口","当前的进程。","当需要注销某个中断的时候,只需要传入中断号以及注册时的数据即可。相当于解除了中断函数的绑定。","注册了中断后,并不能产生中断,还需要解除中断的屏蔽(unmask),相当于打开中断。除此之外,如果不希望产生该中断,则需要屏蔽某个中断(mask),相当于关闭中断。","由于中断数量会比较多,因此,都会有一个中断表来注册中断。然后由一个寄存器或者多个寄存器来记录该表的地址。产生中断的时候会去查表,根据具体的中断号去找对应的中断处理函数,简单来说就是去调用中断的回调函数。","等机制。","需要注册某个中断的时候,需要传入中断号,绑定中断处理函数,设置中断的参数数据,设置中断的名字。"],"programing-manual/interrupt/delay_queue.html":["*arg,","*nx_irq_delayworkcreate(nx_irq_workhandl","*work);","*work,","0,","=","enum","flags);","handler,","linux","nx_error","nx_irq_delayqueu","nx_irq_delayqueueenter(nx_irq_delayqueu","nx_irq_delayqueueleave(nx_irq_delayqueu","nx_irq_delaywork","nx_irq_delayworkdestroy(nx_irq_delaywork","nx_irq_delayworkhandl","nx_irq_delayworkhandle(nx_irq_delaywork","nx_irq_delayworkinit(nx_irq_delaywork","nx_irq_fast_queu","nx_irq_normal_queue,","nx_irq_period_queue,","nx_irq_queue_nr,","nx_irq_sched_queu","nx_irq_sched_queue,","nx_irq_slow_queu","nx_irq_slow_queue,","nx_irq_workhandl","nx_u32","queue,","void","{","};","一、描述","三、框架图","中断延迟队列","中断延迟队列在某个驱动或者内核组件中会进行初始化。当产生中断的时候,在中断处理函数中,只对中断产生时的数据进行保存,不对中断产生时的数据进行处理,","中断延迟队列是一种延迟处理中断的机制,类似于","中断机制中的中断下半部分,用来进行具体的中断处理。","中断的要求是快速地响应中断,并且是关闭了全局中断的,然后回到之前的工作。而延迟队列就是来完成这个工作的,产生了中断后,只进行最少的工作,","二、原理","优先级最低。","优先级最高,","内核的定时器属于","创建一个延迟的中断工作,需要传入中断工作处理函数入口,以及函数执行时的参数,就可以创建一个延迟的工作对象。","创建了一个中断工作对象,就需要将其加入到某个延迟队列中,只需要传入队列和工作对象的地址即可。","和加入延迟队列相反,有离开延迟队列,那么和加入的参数一样,只是意思相反而已。","四、接口","如果是一个静态对象,不需要创建,那么可以直接调用初始化,并传入该对象的地址即可,参数同上。","对象即可,传入工作对象的地址即可。","工作队列的优先级如下,其中","延迟队列","是在该延迟中断工作初始化的时候设定的。","最后,当有中断产生的时候,就可以去激活中断工作,那么则需要调用","有创建工作,那么就有销毁工作,只需要传入工作对象的地址即可。","来处理工作","然后激活中断队列工作,然后就返回,完成了本次中断。等到没有中断的时候,再去从延迟队列中获取一个工作来处理其对应的中断下半部分处理工作。","由于中断是具有一定优先级的,有的中断需要先处理,而有的中断则可以后处理,因此就有了多个中断队列,每个队列的优先级是不同的。至于需要加入哪种队列,","而内核的任务调度属于","而是处理中断延迟工作,然后就直接返回。等到响应了该中断之后,再去调用延迟队列中的工作。",",及时调度的精度低一点也没有太大影响。",",这样才能保证时间的精度。"],"programing-manual/timer/timer.html":["#defin","(*handler)(struct","*,","*/","*arg),","*arg,","*nx_timercreate(nx_uarch","*timer);","*timer,","/*","0x01","0x02","arg,","flags);","flags。","handler","int","millisecond","milliseconds,","nx_bool","nx_error","nx_timer","nx_timer_oneshot","nx_timer_period","nx_timerdestroy(nx_tim","nx_timerdestroy,","nx_timerinit","nx_timerinit(nx_tim","nx_timerstart","nx_timerstart(nx_tim","nx_timerstop","nx_timerstop(nx_tim","nx_uarch","on","oneshot","period","shot","timer","type","void","一、描述","三、框架图","二、原理","以及定时器的标志","创建定时器后需要调用","创建定时器需要指定需要超时的时间","即可。","只需要传入定时器对象地址即可。","启动它,才可以在超时后调用回调函数。","四、接口","在定时器还没开始运行的时候,可以销毁一个定时器,调用","如果是对静态的定时器进行初始化,只需要调用","定时器","定时器是基于系统时钟实现的,精度比较低(1ms~10ms),可以用于线程的休眠,以及对于休眠精度不高的场景。","就会将他们全部处理,调用定时器超时处理函数,然后更新最近超时定时器的ticks。","并传入定时器的地址即可。","当时钟中断产生的时候,会改变ticks的值,与此同时也会去检测是否有定时器超时,如果有定时器超时,则会去处理定时器超时函数。","当有一个定时器的ticks到达了最近超时定时器的ticks值的时候,就去检测定时器链表,如果有多个同样超时的定时器,","当需要停止定时器的时候,调用","最先超时的定时器会插入到链表头,超时时间比较久的定时器会被加入到链表的末尾。","有一个定时器链表来记录所有等待超时的定时器,值得注意的是,它们是通过线性的方式插入到链表中的。","来进行超时。","标志有多重,表明不同类型的定时器。","表示只超时一次,","表示周期性地按照","除此之外,还有一个最近超时的时间变量,来记录下一个即将超时的定时器,可以用它来检测是否需要去检测定时器链表。",",处理函数参数",",超时后调用的处理函数"],"programing-manual/port/riscv/riscv.html":["!=","\"=r\"(ret));","\"clock\"","\"init\"","\"multi","\"syscall\"","#defin","#els","#endif","#ifdef","#includ","%","%0\"","%p\",","%p,","%x\",","%x,","&","(!attr)","(!pte_used(*pte))","(\"rdtime","(1","(1);","(a0)","(a1)","(c)","(coreid","(for","(irqno","(level","(mmu_pd","(nx_addr)&trapentry0)","(nx_addr)&trapentry1)","(nx_addr)&trapentry2)","(nx_addr)&trapentry3)","(nx_addr)get_addr_from_satp(addr);","(nx_addr)nx_virt2phy(pagetablevir);","(nx_halcontext","(nx_syscallwitharghandler)nx_syscallgethandler((nx_syscallapi)fram","(nx_u8","(nx_uarch)(((nx_uarch)stack)","(nx_uarch)arg;","(nx_uarch)exitentry;","(nx_uarch)startentry;","(pagetablephi","(phsical","(pte","(tabl","(trapentri","(void","*","*)(pagephi","*)mmu","*)nx_align_down((nx_uarch)stack,","*)stack;","*)stacktop;","*/","*addr","*arg,","*args)","*args,","*atomic)","*atomic,","*context","*exitentry,","*frame)","*from","*kernelstack,","*mmu,","*nextsp","*nx_halcontextinit(void","*nx_halmappage(nx_mmu","*nx_halmappagewithphy(nx_mmu","*nx_halprocessgetkernelpagetable(void)","*nx_halvir2phy(nx_mmu","*paget","*pagetablevir)","*process,","*pte","*stack","*stacktop)","*startentry,","*tabl","*text,","*userstack);","*userstack,","*vmspace)","+","+=",".ack",".add",".align",".barrier",".barrierinstruct",".barrierread",".barrierwrit",".ca",".clearmask",".data.stack",".dec",".disabl",".enabl",".executeus",".extern",".freepaget",".get",".getkernelpaget",".getpaget",".global",".globl",".inc",".init",".inituserspac",".jpg)",".mappag",".mappagewithphi",".mask",".restorelevel",".savelevel",".section",".set",".setmask",".setpaget",".space",".sub",".swap",".switchnext",".switchpaget",".switchprevnext",".text",".text.start",".unmappag",".unmask",".vir2phi","/","/*","/**","//","0","0);","01","0;","0x2","0x80020000,","0x80200000,","0~nx_multi_cores_nr","1","1);","1.","10","10.","10000000","10mhz","11","12","15","16","16550a","1;","1。","2","2.","2.0","2018","2021","2022","2022,","2;","3","3.","31","39","3;","4.","48","4;","5.","57","6.","64","7","7.","8","8.","8192","9","9.",":","=","==",">a0",">a0);",">a0,",">a1,",">a2,",">a3,",">a4,",">a5,",">a6);",">a7",">a7);",">a7,",">epc",">mmu.tabl",">mmu.table);",">ra",">sp",">sstatu",">table;",">valu",">value),",">value,",">value;",">vmspace.mmu,","__assembly__","__mappage(mmu,","__mappagewithphy(mmu,","__sync_fetch_and_add(&atom","__sync_fetch_and_and(&atom","__sync_fetch_and_or(&atom","__sync_fetch_and_sub(&atom","__sync_lock_test_and_set(&((atomic)","__sync_synchron","__sync_synchronize();","__sync_val_compare_and_swap(&atom","__unmappage(mmu,","_entermain","_entermain:","_setsp0","_setsp0:","_setsp1","_setsp1:","_setsp2","_setsp2:","_setsp3","_setsp3:","_start","_start:","`pc`","`ra`","`ra`,","`sepc`","`sp`","`sret`,","`trap","a0","a0,","a0~a7","access","addr","addr)","addr;","addrend","address","addrstart","allow","anyth","apach","api","api:","arg","arg0:%x,","arg1:%x,","arg2:%x,","arg3:%x,","arg4:%x,","arg5:%x,","arg6:%x\",","asid","asid。表示当前程序的","atom","atomic.c、barrier.c、clock.c、context.c、interrupt.c即可。","atomic.c、barrier.c即可。","attr)","attr);","author","avoid","bare","barrier","base","befor","beq","bit","bootcoreid)","bootcoreid);","bss","build","bytes)","call","can't","chang","clean","clear","clearcsr(sie,","clock","config_nx_platform_k210","config_nx_uart0_from_sbi","const","contains:","context","control","copyright","core","core\"","coreid","coreid)","coreid;","corestack2:","corestack3:","cpu","cpu_inittrap(coreid);","cpu_stack0:","cpu_stack1:","cpu_stacktop0","cpu_stacktop0:","cpu_stacktop1","cpu_stacktop1:","cpu_stacktop2","cpu_stacktop2:","cpu_stacktop3","cpu_stacktop3:","csr","csrc","csrw","ctx_sp_off","data","date","descript","develop","differ","direct","disabl","driver","ecal","enabl","enter","entri","entry`","epc","err","err;","exitentry,","fault!\");","fenc","fence.i","first","five”)是一个基于精简指令集(risc)原则的开源指令集架构(isa)。","frame","frequenc","function","gcc","get_pf_id(addrend)","get_pf_id(addrstart)","gettimercounter()","hal","handler","handler(fram","hash","here","hold","http://byterunner.com/16550.html","hypervisor","hypervisor,supervisor,","i.","id","identifier:","id。","ier","ier_rx_en","if(vmspac","init","input","instead","instruct","interrupt","interupt","irqno)","irqno);","is:%d\",","isa)也处在草案版本1.10。","isa),而特权指令集(privileg","j","jasonhu","k210","k210,","kernel","la","level","level)","li","licens","load","logs:","long","loop","loop:","low","make","make_satp(addr));","manag","mask)","mask);","mean","memori","memory,","memroy","mhartid,","mmu","mmu_flushtlb();","mmu_pd","mmu_pt","mmu内存管理单元","mmu虚拟内存管理","mode","mode,","multi","mv","name","need","never","newvalue)","newvalue);","nextsp);","note","note:","notice:","number)。","nx_addr","nx_assert(handler);","nx_assert(mmu);","nx_assert(vmspace);","nx_atom","nx_atomicop","nx_atomicopsinterfac","nx_casm","nx_casm(\"fence\":::\"memory\");","nx_casm(\"fence.i\":::\"memory\");","nx_clocktickgo();","nx_contextop","nx_contextopsinterfac","nx_efault;","nx_einval;","nx_enomem;","nx_enor","nx_eok;","nx_error","nx_false);","nx_halatomicadd(nx_atom","nx_halatomicadd,","nx_halatomiccas(nx_atom","nx_halatomiccas,","nx_halatomicclearmask(nx_atom","nx_halatomicclearmask,","nx_halatomicdec(nx_atom","nx_halatomicdec,","nx_halatomicget(nx_atom","nx_halatomicget,","nx_halatomicinc(nx_atom","nx_halatomicinc,","nx_halatomicset(nx_atom","nx_halatomicset,","nx_halatomicsetmask(nx_atom","nx_halatomicsetmask,","nx_halatomicsub(nx_atom","nx_halatomicsub,","nx_halatomicswap(nx_atom","nx_halatomicswap,","nx_halclearbss();","nx_halclockhandler(void)","nx_halconsoleoutchar","nx_halcontext","nx_halcontextinit","nx_halcontextinit,","nx_halcontextswitchnext","nx_halcontextswitchnext(nx_addr","nx_halcontextswitchnext,","nx_halcontextswitchnext:","nx_halcontextswitchprevnext","nx_halcontextswitchprevnext(nx_addr","nx_halcontextswitchprevnext,","nx_halcontextswitchprevnext:","nx_halcorebootapp(nx_uarch","nx_halcorebootapp。","nx_halcoreenterapp,","nx_halcoregetindex(void)","nx_halcoregetindex。该索引是在处理器数组中的索引,不管什么处理器","nx_haldirectuartinit();","nx_haldirectuartstage2","nx_haldirectuartstage2();","nx_halen","nx_halenable(void)","nx_halenable,","nx_halgetkernelpagetable(),","nx_halgetkernelpagetable();","nx_halgetpaget","nx_halgetpagetable(void)","nx_halgetpagetable,","nx_halinitclock(void)","nx_halirqack(nx_irq_numb","nx_halirqack,","nx_halirqack。","nx_halirqdis","nx_halirqdisable(void)","nx_halirqdisable,","nx_halirqen","nx_halirqenable(void)","nx_halirqenable,","nx_halirqmask","nx_halirqmask(nx_irq_numb","nx_halirqmask,","nx_halirqrestorelevel(nx_uarch","nx_halirqrestorelevel,","nx_halirqrestorelevel。","nx_halirqsavelevel","nx_halirqsavelevel(void)","nx_halirqsavelevel,","nx_halirqunmask","nx_halirqunmask(nx_irq_numb","nx_halirqunmask,","nx_halmappag","nx_halmappage,","nx_halmappagewithphi","nx_halmappagewithphy,","nx_halmembarrier(void)","nx_halmembarrier,","nx_halmembarrierinstruction(void)","nx_halmembarrierinstruction,","nx_halmembarrierread(void)","nx_halmembarrierread,","nx_halmembarrierwrite(void)","nx_halmembarrierwrite,","nx_halpagezoneinit();","nx_halplatforminit","nx_halplatforminit(nx_uarch","nx_halplatformstage2(void)","nx_halplatformstage2中,可以使用内核的功能,内存分配,中断注册等。","nx_halprocessenterusermode(args,","nx_halprocessenterusermode(void","nx_halprocessexecuteus","nx_halprocessexecuteuser(const","nx_halprocessexecuteuser,","nx_halprocessfreepaget","nx_halprocessfreepagetable(nx_vmspac","nx_halprocessfreepagetable,","nx_halprocessgetkernelpaget","nx_halprocessgetkernelpagetable,","nx_halprocessinituserspac","nx_halprocessinituserspace(nx_process","nx_halprocessinituserspace,","nx_halprocessswitchpaget","nx_halprocessswitchpagetable(void","nx_halprocessswitchpagetable,","nx_halprocesssyscalldispatch","nx_halprocesssyscalldispatch(nx_haltrapfram","nx_halsetpaget","nx_halsetpagetable(nx_addr","nx_halsetpagetable,","nx_halunmappag","nx_halunmappage(nx_mmu","nx_halunmappage,","nx_halvir2phi","nx_halvir2phy,","nx_import","nx_interfac","nx_irq_control","nx_irq_controllerinterfac","nx_irq_restorelevel(level);","nx_irq_savelevel();","nx_log_*","nx_log_d(\"riscv64","nx_log_i(\"boot","nx_log_i(\"hello,","nx_log_i(\"stage2!\");","nx_log_info","nx_log_level","nx_log_nam","nx_main","nx_memalloc(nx_page_size);","nx_membarrierop","nx_membarrieropsinterfac","nx_memcopy(table,","nx_memfree(vmspac","nx_memzero(context,","nx_memzero(table,","nx_mmugetpagetable())","nx_mmuinit(&process","nx_mmuop","nx_mmuopsinterfac","nx_mmusetpagetable(pagetablephy);","nx_nr_irqs)","nx_null)","nx_null;","nx_page_addr_mask;","nx_page_alignup(size);","nx_page_size);","nx_page_size;","nx_panic(\"should","nx_panic(\"vir2phi","nx_printf","nx_privat","nx_processop","nx_processopsinterfac","nx_size","nx_syscallwitharghandl","nx_thread","nx_ticks_per_second","nx_ticks_per_second;","nx_timer_clk_freq","nx_u64","nx_u8","nx_uarch","nxo","old","old,","opensbi","opensbi,","output","page","pageoffset","pageoffset);","pageoffset;","pagephi","pagephy;","pages);","pagetablephi","pagewalk(pagetable,","pc","phyaddr","phyaddr,","platfrom","plic","plic_complete(nx_smp_getbootcore(),","plic_disableirq(nx_smp_getbootcore(),","plic_enableirq(nx_smp_getbootcore(),","plic_init(nx_true);","ppn","ppn。第一级硬件回填使用的","prevsp,","process","protect","pte","pte2paddr(*pte);","qemu","ra","rdtime","read","readcsr(satp);","readcsr(sstatus)","readcsr(sstatus);","readcsr(stvec);","receiv","regbytes(sp)","regist","registers.","reserv","restor","restore_context","ret;","return","return,","return:","rhr","risc","riscv(rv32)具有32个整数寄存器组(取名为:x0~x31),其中31个是通用寄存器(x1~x31),它们存储整数数值,寄存器x0是硬件连线的常数0。当你设计的riscv架构处理器实现了浮点扩展时,还必须有32个浮点寄存器f0~f31。对于rv32,其x寄存器是32位宽度的,xlen=32,对于rv64,它们是64位宽度的,xlen=64。","riscv64","riscv64!\");","riscv架构移植","routin","rto","rustsbi","rustsbi,其内核的入口地址为","same","satp","save","save_context","sbi","sbi,","sbi_entry.","sbi_init();","sbi_print_version();","sbi_set_timer(gettimercounter()","seciton,","see","sepc,","set","setcsr(sie,","sie","sie_stie);","size","size)","size,","sizeof(nx_halcontext));","sizeof(nx_halcontext);","sizeof(nx_uarch));","skip","smp多核","sp","sp,","space","spdx","src/arch/riscv64/port","sret","sscrach","sscratch","sscratch,","sstatu","sstatus,","sstatus_si","sstatus_sie));","sstatus_sie);","sstatus_sie;","sstatus_spi","sstatus_spie;","sstatus_spp","sstatus_sum","stack","stack,","stacktop","startentri","store","struct","stvec","supervisor","supervisor模式的中断的打开与关闭是由状态寄存器","support","sure","sv39","sv39,3级页表,页表和物理页都是4kb大小。","sv48","sv57","sv64","switch","syscal","system","t0,","t1","t1,","tabl","table,","team","text,","thr","thread","thread,","tickdelta","tickdelta);","timer","translat","transmit","trap","trapentri","trapentry0;","trapentry1;","trapentry2;","trapentry3;","tri","uart","uart.","updat","us","used!\");","user","user\");","user:","userstack);","user)。","v","valu","value)","value);","value;","viraddr","viraddr)","viraddr,","viraddr;","virstart,","virtual","void","vs","v中c语言函数参数是","v中断分为两种类型,一种是同步中断,即ecall、ebreak等指令所产生的中断,另一种是异步中断,即gpio、uart等外设产生的中断。","v已经确立了版本2.22的用户空间的指令集(userspac","v指令集可以自由地用于任何目的,允许任何人设计、制造和销售risc","v指令集的设计考虑了小型、快速、低功耗的现实情况来实做,但并没有对特定的微架构做过度的设计。","v架构移植","v的mmu支持多种模式,有sv32/sv39/sv48/sv57/sv64等。不同的模式映射的页面等级,页面大小是有差异的。在64位处理器种最常用的是sv39,它是3级4kb页面大小映射。","v的中断管理由处理器核局部中断clint(corelocalinterrupt)和平台级中断控制器plic(platformlevelinterruptcontroller)组成。clint分为软件中断核计时器中断,负责响应处理器的异常核和计时器中断。plic负责处理外设的中断。","v目前有4种特权模式(machine,","v芯片和软件。虽然这不是第一个开源指令集,但它具有重要意义,因为其设计使其适用于现代计算设备(如仓库规模云计算机、高端移动电话和微小嵌入式系统)。设计者考虑到了这些用途中的性能与功率效率。该指令集还具有众多支持的软件,这解决了新指令集通常的弱点。","v被设计成可扩展的,可以配置的,根据不同的应用场景可以生产带有不同功能扩展的处理器。","v(发音为“risk","walk","within","write.","writecsr(satp,","writecsr(sstatus,","{","|","|内容","|描述","}","};","~mask);","~sstatus_sie);","–","。","一、描述","三、代码移植","上下文切换是多线程实现的根基","上下文的切换分为上下文的初始化,从当前线程切换到下一个线程,直接切换到下一个线程。","上图为机器模式状态寄存器(rv32)","上图为机器模式状态寄存器(rv64)","不同的架构内核入口代码有差异,需要根据架构来实现","与大多数指令集相比,risc","中断只需要对","中断管理","中断管理接口对内核以及驱动都是至关重要的","中断表地址需要写入管理者模式的向量基址寄存器","中的","中这个频率是","中,使用了","中,多了对当前线程的上下文的保存的工作,然后切换到下一个线程。","中,获取了栈的值后,就从栈中恢复寄存器上下文,然后调用","中,进行初始化,初始化完串口后,就能使用打印功能了。","中,需要构建的上下文参数是线程的入口","串口可以配置为调用","串口来输出是非常方便的。","为","之下,最后返回栈低。","二、架构简述","以及线程运行时的参数","位保存和恢复。","位做置位和清理的操作即可。","作为机器模式的固件,qemu_riscv64平台选择了","使用这种方式的话,就非常方便移植到其它架构上。","保存的,其格式如下:","保存,因为上下文切换的时候会模拟一次异常返回,返回后就到这个异常地址处执行。","保存,它是返回地址的意思,表示线程返回后就去执行该函数。","值,","值,其返回值范围为","做了一些兼容,使用起来比较简单。","入口地址使用","入口地址在链接脚本中写的是","关闭。","具体字段的解析如下:","内存屏障","内存屏障前的所有读写操作完成后才能执行屏障后的读写操作","内存读/写屏障使用","内核入口","内置了原子操作的函数,","内置函数","内置的原子操作即可。","函数后,就可以使用","函数来打印消息。","初始化完成后,会跳转到","初始化线程上下文是在栈上构建一个线程的上下文,当第一次切换到该线程的时候,寄存器就会使用栈中的值。","原子操作","原子操作用于对数据的加减运算不会被打断,以及一些原子级别的数据交换等","原子操作需要实现对数据的原子设置,获取,加法,减法,数据交换等。由于","去实现,而获取操作可以直接通过","只需要实现","可以获取页表的地址。","可以通过虚拟地址找到其映射的物理地址。","号。","和","和禁用","和线程结束时执行的函数","和裸机开发种,很多时候都是直接使用机器模式。","唤醒后,应用核会进入","唤醒应用核只需要调用","四、移植总结","因此","在","在上下文切换的时候,需要注意的是,传入的是线程的栈的地址,可以从地址中取出线程当前栈的值。","在中断中,使能","在做时钟定时器初始化的时候,需要先关闭","在函数","在平台初始化","在调试过程中会遇到很多问题,需要耐心地调试。","地址翻译模式","如果只是需要运行起来,不需要线程环境,那么就只需要","如果当前定时器的值超过了超时定时器寄存器的值的时候,就会触发一个中断。注意:前提是打开了定时器中断。","如果支持多核,就可以在这个时候去唤醒其他核。不支持的话返回","实现","实现输出,也可以通过自己操作寄存器实现。在早期,调用","实现,","寄存器","寄存器保存。","寄存器的","对于","对处理器多核的启动和初始化","就注册了串口中断,可以接受输入。","平台初始化","应用核只需要设置中断表地址,初始化自己的中断控制器即可。","引导核初始化完成后,会初始化内核,在内核初始化完成后,就会进入启动应用核的阶段","当","当前","当超时后,就会产生一个中断,于是就设置下一个中断产生时的超时值。","截至2017年5月,risc","所以需要计算出产生一次中断,需要间隔多少个tick即可。","所有需要对接的接口都存放在","执行。","执行结束后,会从机器模式跳转到位于监护者模式的内核中,并且寄存器","执行,那么入口程序的移植就完成了。","指令去实现。内存指令屏障使用","指令实现。","指令获取。","指令集","指定的地址就行了。使用","控制的,置为1则表示使能中断,置为0则表示禁用中断。","提供的唤醒核心功能即可。","操作系统更多运行在","文件:src/arch/riscv64/kernel/context.","文件:src/arch/riscv64/kernel/sbi_entry.","文件:src/arch/riscv64/port/atomic.c","文件:src/arch/riscv64/port/barrier.c","文件:src/arch/riscv64/port/clock.c","文件:src/arch/riscv64/port/context.c","文件:src/arch/riscv64/port/interrupt.c","文件:src/arch/riscv64/port/mmu.c","文件:src/arch/riscv64/port/process.c","文件:src/arch/riscv64/port/smp.c","文件:src/platform/qemu_riscv64/drivers/direct_uart.c","文件:src/platform/qemu_riscv64/hal/init.c","新架构的移植,都是按照一套统一的接口去实现的。","时,mmu","映射虚拟地址,但是会指定物理地址,就不用自动分配物理地址了。","是使能","是映射虚拟地址,会自动分配物理地址并映射页面。","更贴近,也不用管太多机器模式需要做的事情。通常,","最开始是可以不开启","机器模式用于固件程序代码执行,例如","架构中,内存全(读和写)屏障使用","模式去调用内核提供的服务。","模式的定时器中断,然后再设置超时定时器的值。","模式(因为线程的切换是在内核中完成的)。","模式,进入内核。内核只需要链接到","模式,降低开发的复杂度。","没有资源即可。","然后再初始化中断,初始化物理内存管理。","特权模式","特权级寄存器的命名规则,特权模式+寄存器名字,表示只能在该特权级使用。比如status寄存器,在机器模式有mstatus,监管模式有sstatus。","用于分发系统调用,不同的架构传参数的方式会有区别,因此需要特殊处理。","用于在进程切换的时候切换页表。","用于在进程创建的时候,创建进程的页表","用于在进程退出的时候释放页表。","用于获取内核的页表。","用于进程从内核跳到用户态执行。","用户模式就是应用程序执行的模式,需要通过系统调用进入到","由于","由于我们想实现1秒钟产生","的","的好处是,可以直接使用串口的输入输出,很方便调试,不用自己从机器模式跳转到","的封装。","的设置,","的,最开始不需要跑进程,","监管者模式的页表的地址是由地址转换寄存器","监管者模式,这样可以和","目前支持的是mmu","目录下面,新的平台只需要支持这些接口的功能即可。","硬件回填根","硬件时钟会按照一定的频率去增长当前定时器寄存器的值,在","移植一个新的平台需要实现如下内容:","移植过程是需要慢慢琢磨,长期积累,才能实现更好的代码。","等于","等,但是在","线程上下文","线程栈使用","结束时执行的函数使用","至于在","虚拟化模式用于使用虚拟化的场景,目前还在开发阶段。","虚拟地址的实现和访问,mmu的切换,映射和解除页面映射","解除地址映射,解除后就不能访问了。","计时器时钟","计时器时钟用于驱动多线程的切换和内核定时器","记录了当前处理器核心的","设置了线程的入口地址,那么","设置页表的地址到硬件寄存器中,当访问虚拟地址的时候,会根据设置的页表进行地址转换。","该代码简单地设置了栈就进入了","该操作只是多了对","该项目2010年始于加州大学伯克利分校,但许多贡献者是该大学以外的志愿者和行业工作者。","调用平台的初始化代码","返回。","返回后就可以让","还有一个很重要的地方就是对状态寄存器","还有值得注意的是,获取处理器的索引","这3个接口都是对","这个符号,因此会进入","这是操作需要通过","这里只需要调用","进程管理","进程管理相关操作是实现进程的必要条件","选择了","通常,都是在启动后尽快地实现串口调试,以便能够知道自己跑到什么地方了。","都会被映射成索引,相当于是处理器","针对","除此之外就是对某个中断的使能","除此之外,还提供了对当前中断状态保存和恢复的操作","需要能够访问用户态的内存,需要在返回后开启中断以及设置为","预留一个上下文空间后,设置参数为","(一般在100~1000)次定时器中断的效果,","(以上摘自百度百科)",",产生中断后,就去该寄存器保存的中断向量表地址找中断号对应的中断服务。",",以及中断处理完后的应答处理",",以及将这些数据构建在栈顶",",其内核的入口地址为",",可以根据寄存器的值来判断处理器",",因为risc",",并复制内核的页表项。",",所有地址都变成虚拟地址了。",",那么就切换到线程里面去了。"],"programing-manual/user/api.html":["*addr)","*addr,","*arg)","*arg,","*buf,","*cond)","*directoryread(nx_dir","*memalloc(us","*mutex)","*object)","*path)","*path,","*time)","*value)","addr,","api应用程序接口","api设计","attr)","attr,","bytes)","char","cmd,","cond,","condit","conditioncreate(int","conditiondelete(condit","conditioninit(condit","conditionsleep(condit","conditionwake(condit","conditionwakeall(condit","dest,","dev)","dev,","deviceclose(int","devicecontrol(int","devicecreate(char","devicedelete(char","deviceopen(char","deviceread(int","devicewrite(int","dir)","directoryclose(nx_dir","directoryopen(char","directoryrewind(nx_dir","env)","exitcode)","fd)","fd,","flags)","flags,","handler,","int","isiz","len,","memcopy(void","memfill(void","memfree(void","memmap(void","memmove(void","memunmap(void","memzero(void","mutex","mutex)","mutex,","mutexacquire(mutex","mutexcreate(int","mutexdelete(mutex","mutexinit(mutex","mutexrelease(mutex","mutextryacquire(mutex","name)","name,","nx_bool","nx_dir","nx_directorycreate(char","nx_directorydelete(char","nx_direntri","nx_error","nx_fd","nx_fileaccess(char","nx_fileclose(nx_fd","nx_filecreate(char","nx_filedelete(char","nx_fileisend(nx_fd","nx_fileopen(char","nx_fileread(nx_fd","nx_fileseek(nx_fd","nx_filetelloffset(nx_fd","nx_filewrite(nx_fd","nxos的api接口分为几个大类。进程,线程,内存管理,时间管理,枢纽系统,文件系统,设备管理,网络管理,图形管理,安全管理,用户态驱动框架。","offset","offset)","offset,","path,","pid)","pid,","processcreate(char","processexit(int","processgetid(void)","processterminate(int","processwait(int","seekmethod)","size)","size,","src,","ssize","stacksize,","system设计好了再设计接口,目前还没有概念","threadcreate(threadhandl","threadexit(int","threadgetid(void)","threadresume(int","threadsuspend(int","threadterminate(int","threadwait(int","tid)","tid,","timegetclock(void)","timegetcurrent(timesytem","timeout,","timesetcurrent(timesytem","tlsalloc(void)","tlsfree(int","tlsgetvalue(int","tlsindex)","tlsindex,","tlssetvalue(int","u8","usiz","value)","void","休眠等待条件变量","关闭文件","关闭目录","关闭设备","内存管理","写入文件","写入设备","函数","分配一个tl","分配内存","创建互斥体","创建文件","创建条件变量","创建目录","创建线程","创建设备","创建进程","初始化互斥体","初始化条件变量","删除互斥体","删除文件","删除条件变量","删除目录","删除设备","功能","参考socket套接字接口设计","唤醒休眠等待条件的全部线程","唤醒休眠等待条件的单个线程","图形系统","填充内存","复制内存","安全管理","尝试获取互斥体","恢复线程","打开文件","打开目录","打开设备","挂起线程","文件系统","时间管理","映射内存","暂不设计,等内核基本功能完成后再设计","暂不需要","本文档存放的是用户程序的编程接口的设计说明。","枢纽系统","检查文件结束","清空内存","用户态驱动框架","移动内存","等hub","等内核基础功能完成后实现","等待线程退出","等待进程退出","索引文件","线程管理","终止线程","终止进程","网络系统","获取tls的值","获取互斥体","获取当前的时间","获取文件偏移","获取系统运行的时间","获取线程id","获取进程id","解除映射内存","设备管理","设置tls的值","设置当前的时间","读取文件","读取目录","读取设备","进程管理","退出线程","退出进程","释放一个tl","释放互斥体","释放内存","重置读取位置"],"tutorial/code-style.html":["\"\"","\"_\"","\"{\"","#defin","#els","#else,","#endif","#endif这种时,需要在开头和结尾后面写上注释来帮助开发这快速找到对应的宏。","#ifdef","#ifndef","(","(*soundcallbackhandler)(void","(*write)(void","(c)","(condition)","(data)","(x","*","*/","*buffer,","*cpugetcurrent(void)","*deviceptr;","*param,","*stackbase,","*threadname,","...","/*","/**","//","1","1.目录名称","10","10.注释编写","11.缩进以及分行","12","12.大括号与空格","13.函数指针类型定义","14.函数参数太多","15.宏条件定义","16;","2.0","2.文件名称","2018","2021","2021,","3.头文件定义","32","4","4.头文件注释","5.变量命名","6.函数命名","7.结构体定义","8.枚举定义","9","9.宏定义","=","\\","__driver_keyboard__","__file__","add","apach","author","bad!!!","booko","break;","buffer","bufsiz","case","chang","char","code","comment","consoleprint(str);","consoleprintcolor(color,","consolerestorecolor()","consolesetcolor(color);","contains:","content","copyright","cpu","c语言头文件为了避免多次重复包含,需要定义一个符号。这个符号的定义形式请采用如下的风格:","data1:","data2:","date","default:","develop","devic","device_name_len","enum","exampl","file","header","identifier:","if、for、while、switch","init","int","jasonhu","len);","licens","line","line1","line2","log","logs:","multi","mythread,","name[sound_device_name_len];","note","nx_createthread(char","nx_has_onecor","nx_has_smp","nx_size","nx_thread","nxo","priority)","reference;","set","singl","size","sndhandler;","sound_ac97,","sound_hd,","sound_pc,","soundcallbackhandl","sounddevic","sounddevice;","soundtyp","soundtype;","spdx","stacksize,","str)","struct","style","switch","team","threadfindbynam","threadhandl","threadhandler,","tmpfilebuff","typedef","vfs_createfil","void","x","x:","xxx","yyi","{","}","};","个空格的方式。如果没有什么特殊意义,请在","从代码阅读角度,建议每个大括号单独占用一行,而不是跟在语句的后面,例如:","代码风格","以避免重名,另外也可以根据文件名中是否包含多个词语而采用","使用大写作为名字,单词间使用\"_\"隔开,例如:","例如采用如上的形式。","例如:","其中\"{\"和\"}\"需要单独使用一行。","函数采用大驼峰命名风格,即每个单词的首字母都大写,如果单词是用的缩写,那么单词之间需要用\"_\"隔开,例如:","匹配的大括号单独占用一行,代码阅读起来就会有相应的层次而不会容易出现混淆的情况。空格建议在非函数方式的括号调用前留一个空格以和前面的进行区分,例如:","即定义的符号两侧采用","变量采用小驼峰命名风格,即首字母小写,后续单词首字母大写,例如:","后进行分行,并在下一行都采用缩进的方式,例如:","唯一的例外是","在使用函数指针类型定义的时候,需要使用handler后缀,来表示是一个处理函数。","在每个源文件文件头上,应该包括相应的版权信息,文件描述,chang","如果函数参数为空,必须使用void作为入口函数,例如:","如果需要在类型定义中使用指针,则需要使用ptr后缀或者其他可以表达意思的单词指明。","对齐的方式,","建议在括号前留出一个空格(涉及的包括","当使用宏条件#if,","当函数参数过多的时候,一行写不下,那么就需要把每个参数写成一行。","当宏需要使用多行的时候,则使用空格+\"\\\"的形式进行换行,例如:","总结","文件名称也是使用首字母大写,如果有缩写,可以全部都大写。文件命名尽量不要使用通用化、使用频率高的名称。例如:mutexlock.c","有一个例外,就是如果遇到循环函数,里面不会执行代码的情况,括号就直接写在右边。","本文档是关于nxos的代码编程风格的描述。开发者必须遵守本文档规范进行开发。nxos系统内核使用c语言作为主要开发语言,因此以下规则仅仅适用于c语言代码。","枚举结构名也是用大驼峰,枚举成员使用全大写,单词间用\"_\"隔开。","注意,\"//\"注释只能放到右边。","源代码的注释不应该过多,更多的说明应该是代码做了什么,仅当个别关键点才需要一些相应提示性的注释以解释一段复杂的算法它是如何工作的。对语句的注释只能写在它的上方或右方,其他位置都是非法的。","目录名称采用首字母大写的形式,子目录应该是属于父目录的内容,需要有相关性。例如:drivers/disk/","相信看到最后,您已经对我们的编程规范有了一定的了解,那么就开始您的nxos开发之旅吧!","结构体命名使用大驼峰风格,结构体成员使用小驼峰命名,如果成员是函数指针,则使用大驼峰。","结构体的类型定义是为了消除struct关键字,可以和结构体名一致。","编程风格","缩进请采用","记录:","语句),而运算表达式中,运算符与字符串间留一个空格。另外,不要在括号的表达式两侧留空格,例如:","语句与","语句采用","语句,switch","请使用英文做为注释,使用中文注释将意味着在编写代码时需要来回不停的切换中英文输入法从而打断编写代码的思路。并且使用英文注释也能够比较好的与中国以外的技术者进行交流。除非必须引用原来的文本的时候,就可以写中文。","连接起来。例如:"],"tutorial/commit-rule.html":["():",":","add","alloc","bodi","buddi","bug","build","chang","chore","code,","commit","doc","docs(mm):","docs:文档(documentation)","exfat.","fat12,","fat12:","fat16,","fat32,","fat32:","fatfs,","feat(mm):","feat:新功能(feature)","fix(mm):","fix:修补bug","floppi","function","header","header部分只有一行,包括三个字段:type(必需)、scope(可选)和subject(必需)。","kernel","log","log,建议是不要。","messag","nx_","page","prefix","refactor(mm):","refactor:重构(即不是新增功能,也不是修改bug的代码变动)","revert","revert:","scope","scope用于说明","sdcard/harddisk","simpl","style(*):","style:","subject","subject是","suport","system","test(mm):","test:增加测试","type","updat","us","utest","weel.","work","xbuild改成了xmak","不管是哪一个部分,任何一行都不得超过72个字符(或100个字符)。这是为了避免自动换行影响美观。","举例","之中。其他情况(docs、chore、style、refactor、test)由你决定,要不要放入","代码提交日志规则commitrul","以动词开头,使用第一人称现在时,比如change,而不是changed或chang","使用第一人称现在时,比如使用change而不是changed或changes。","例如在mm,thread,fs等。","其中,header","其他注意事项:","可以省略。","如","如果type为feat和fix,则该","如果你的修改影响了不止一个scope,你可以使用*代替。","将肯定出现在","应该说明代码变动的动机,以及与以前行为的对比。","当我们添加代码要提交到git仓库中时,我们需要统一下规范,这样不会显得整个项目乱糟糟的,当然是需要花点时间来学习和改变的。每次提交的代码尽量短小,涉及范围不要太广,专注于某个领域。","影响的范围,比如文件系统,进程管理,内存管理等等,视项目不同而不同。","提交规则","撤销上一次的","改变了build工具","是必需的,bodi","有两个注意点:","构建过程或辅助工具的变动,比如把grub改成了uefi。","格式(不影响代码运行的变动)","每次提交,commit","永远别忘了第2行是空行","用于说明","的类别,只允许使用下面7个标识。","的详细描述,可以分成多行。下面是一个范例。","目的的简短描述,不超过50个字符。","第一个字母小写","结尾不加句号(.)","部分是对本次","都包括两个部分:header和body。"],"tutorial/menuconfig.html":["#","defconfig","make","menuconfig","menuconfig是一个可以在终端显示的图形化配置界面,他不仅可以极大的方便我们对于配置文件的修改,","menuconfig简介","nxos使用了一个python开发的menuconfig,它的跨平台性以及易用性成为了我们的首选。","run","saveconfig","只编译","在nxos中使用menuconfig","在根目录中,打开一个终端,在配置了环境变量之后,就可以使用配置了。","完成配置后,就可以进行编译了,编译的时候就会根据最新的配置进行编译。","对于开发者而言,我们已经做好了配置,你只需要知道如何去使用即可。","当你要使用某个平台的配置时,需要通过设置默认配置来进行选择。","更新配置文件","最后,如果想要保存当前的配置到选中的平台,则需要在执行save操作才行。操作完后,你所修改的配置就保存了,当切换到其它平台后,这个配置依然存在,只需要重复第一步,更新一下配置即可。","编译并运行","菜单配置","还能自动处理依赖关系。","进行菜单配置,就可以选择你想要的功能或者进行某些功能的配置。配置完后,可以根据菜单的提示进行退出或者保存。"],"tutorial/toolchains.html":["64/i386工具链:","64/i386工具链:apt","apt","elf","gcc","gcc\\bin","instal","linux工具链只需要从软件包管理器下载安装即可:","risc","riscv64","toolchains\\x86_64","unknown","v64/32工具链:","v64工具链:","x86","一、windows环境工具","下载到本地后,需要手动解压到一个目录下面,然后对工具链的bin路径配置环境变量。","下载工具链","二、linux环境工具","例如:","工具链","服务器下载(较慢)","本文档存放了工具链的下载地址,搭建编译环境的时候需要下载工具链后再进行编译。","百度网盘链接,提取码:nxo","解压到工具目录下面","解压到路径:nxo","配置环境变量时的路径:nxo"],"tutorial/utest.html":["\"hello!\";","\"hello\");","\"world!\");","\"world!\";","\"world\");","#","(char","*)","*/","*p","*q","*s","/*","0,","0x1000;","0x20,","0x30,};","0x50,","0x60,};","1);","1,","2,","3);","32);","4);","5);","=","assert_false(...)","assert_true(...)","buf0[32]","buf1,","buf1[32]","buf2,","buf2[32]","char","except_false(...)","except_true(...)","make","nx_assert_bufeq(buf0,","nx_assert_bufne(buf1,","nx_assert_eq(1,","nx_assert_false(0);","nx_assert_false(nx_false);","nx_assert_ge(3,","nx_assert_gt(4,","nx_assert_in_range(1,","nx_assert_in_range(4,","nx_assert_in_range(5,","nx_assert_le(3,","nx_assert_lt(3,","nx_assert_ne(0,","nx_assert_ni_range(0,","nx_assert_ni_range(1,","nx_assert_ni_range(5,","nx_assert_ni_range(6,","nx_assert_not_null(q);","nx_assert_null(p);","nx_assert_streq(\"hello\",","nx_assert_streq(s,","nx_assert_strne(\"hello\",","nx_assert_strne(s,","nx_assert_true(1);","nx_assert_true(nx_true);","nx_eok;","nx_null;","nx_test(test)","nx_test(test1)","nx_test(test2)","nx_test(test3)","nx_test(testunitname)","nx_test(yyy)","nx_test_case(testcasename);","nx_test_case(utest);","nx_test_case(xxx);","nx_test_case_clean(testcasename)","nx_test_case_clean(utest)","nx_test_case_setup(testcasename)","nx_test_case_setup(utest)","nx_test_clean(test)","nx_test_clean(testunitname)","nx_test_setup(test)","nx_test_setup(testunitname)","nx_test_table(testcasename)","nx_test_table(utest)","nx_test_table(xxx)","nx_test_unit(test),","nx_test_unit(test1),","nx_test_unit(test2),","nx_test_unit(test3),","nx_test_unit(testunitname),","nx_test_unit(yyy),","nx_test_unit_clean(testunitname),","nx_test_unit_setup(testunitname),","nx_test_unit_setup_clean(test),","nx_test_unit_setup_clean(testunitname),","return","run","s","tc=i","tc是testcase的缩写,表示启用测试案例。","{","{0x10,","{0x40,","}","};","不带setup和clean的单元","举例:单元测试自身测试","使用方法","单元测试","单元测试表,填写要测试的单元","在menuconfig中,打开单元测试功能,选取需要测试的单元,退出保存。","在命令行中输入命令即可开始测试:","定义一个单元测试","带clean的单元","带setup和clean的单元","带setup的单元","最小的单元测试","最精简框架:","测试","着重点:参数,返回值,功能。","进入一个单元测试时执行","进入单元时执行","退出一个单元测试时执行","退出单元时执行","针对函数单元进行测试,测试函数的基本功能,稳定性,健壮性,覆盖率。"]},"length":23},"tokenStore":{"root":{"0":{"1":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}},"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.00209819555182543}},"x":{"0":{"1":{"docs":{"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.010752688172043012}}},"2":{"docs":{"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.010752688172043012}}},"docs":{}},"1":{"0":{"0":{"0":{"docs":{},";":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}},"docs":{}},"docs":{}},"docs":{}},"2":{"0":{"docs":{},",":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.00909090909090909}}}},"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}},"3":{"0":{"docs":{},",":{"docs":{},"}":{"docs":{},";":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.00909090909090909}}}}}},"docs":{}},"5":{"0":{"docs":{},",":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}},"docs":{}},"6":{"0":{"docs":{},",":{"docs":{},"}":{"docs":{},";":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}}}},"docs":{}},"8":{"0":{"0":{"2":{"0":{"0":{"0":{"0":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"2":{"0":{"0":{"0":{"0":{"0":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"2":{"0":{"0":{"0":{"0":{"0":{"0":{"docs":{"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.010869565217391304}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{},"f":{"0":{"0":{"0":{"0":{"0":{"0":{"0":{"docs":{"programing-manual/process/process.html":{"ref":"programing-manual/process/process.html","tf":0.02531645569620253}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},",":{"docs":{"programing-manual/interrupt/delay_queue.html":{"ref":"programing-manual/interrupt/delay_queue.html","tf":0.01282051282051282},"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.00909090909090909}}},")":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.001678556441460344}}},"~":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"m":{"docs":{},"u":{"docs":{},"l":{"docs":{},"t":{"docs":{},"i":{"docs":{},"_":{"docs":{},"c":{"docs":{},"o":{"docs":{},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"_":{"docs":{},"n":{"docs":{},"r":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}},"1":{"0":{"0":{"0":{"0":{"0":{"0":{"0":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.0029374737725556023},"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}},".":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"注":{"docs":{},"释":{"docs":{},"编":{"docs":{},"写":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}},"m":{"docs":{},"h":{"docs":{},"z":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}}}}},"1":{"2":{"docs":{},",":{"docs":{"programing-manual/mm/heap.html":{"ref":"programing-manual/mm/heap.html","tf":0.014084507042253521}}}},"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},".":{"docs":{},"缩":{"docs":{},"进":{"docs":{},"以":{"docs":{},"及":{"docs":{},"分":{"docs":{},"行":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}}},"2":{"8":{"docs":{},"等":{"docs":{},"。":{"docs":{"programing-manual/mm/heap.html":{"ref":"programing-manual/mm/heap.html","tf":0.014084507042253521}}}}},"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.002517834662190516},"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}},".":{"docs":{},"大":{"docs":{},"括":{"docs":{},"号":{"docs":{},"与":{"docs":{},"空":{"docs":{},"格":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}}},"3":{"docs":{},".":{"docs":{},"函":{"docs":{},"数":{"docs":{},"指":{"docs":{},"针":{"docs":{},"类":{"docs":{},"型":{"docs":{},"定":{"docs":{},"义":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}}}}},"4":{"docs":{},".":{"docs":{},"函":{"docs":{},"数":{"docs":{},"参":{"docs":{},"数":{"docs":{},"太":{"docs":{},"多":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}}},"5":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},".":{"docs":{},"宏":{"docs":{},"条":{"docs":{},"件":{"docs":{},"定":{"docs":{},"义":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}},"6":{"5":{"5":{"0":{"docs":{},"a":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},"docs":{}},"docs":{}},"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.001258917331095258}},";":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}},"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.00684931506849315},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.003357112882920688},"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}},".":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.01507537688442211},"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}},"目":{"docs":{},"录":{"docs":{},"名":{"docs":{},"称":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}},"m":{"docs":{},"b":{"docs":{},")":{"docs":{},"内":{"docs":{},"存":{"docs":{},"对":{"docs":{},"象":{"docs":{},"。":{"docs":{"programing-manual/mm/heap.html":{"ref":"programing-manual/mm/heap.html","tf":0.014084507042253521}}}}}}}}},"s":{"docs":{},"~":{"1":{"0":{"0":{"docs":{},"m":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}},"docs":{}},"docs":{}},"docs":{}}}},")":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.00684931506849315}},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172},"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.00909090909090909}}}},"]":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.001258917331095258}}},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}},",":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.022727272727272728}}}},"2":{"0":{"1":{"8":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.004616030214015947},"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}},"docs":{}},"2":{"1":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.00419639110365086},"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.007352941176470588}},",":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}},"2":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.004616030214015947}}}},"docs":{}},"docs":{}},"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},".":{"0":{"4":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.005025125628140704}}},"docs":{"./":{"ref":"./","tf":0.02631578947368421},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.004616030214015947},"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}},"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.01507537688442211},"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}},"文":{"docs":{},"件":{"docs":{},"名":{"docs":{},"称":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}},",":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}},"3":{"1":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}},"2":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}},",":{"docs":{"programing-manual/mm/heap.html":{"ref":"programing-manual/mm/heap.html","tf":0.014084507042253521}}},"m":{"docs":{},"b":{"docs":{"programing-manual/process/process.html":{"ref":"programing-manual/process/process.html","tf":0.06329113924050633}}}},")":{"docs":{},";":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.00909090909090909}}}}},"9":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}},"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},".":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.005025125628140704},"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.001258917331095258}},"头":{"docs":{},"文":{"docs":{},"件":{"docs":{},"定":{"docs":{},"义":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}},")":{"docs":{},";":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.013636363636363636}}}}},"4":{"8":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},",":{"docs":{"programing-manual/mm/heap.html":{"ref":"programing-manual/mm/heap.html","tf":0.014084507042253521}}}},"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}},".":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}},"头":{"docs":{},"文":{"docs":{},"件":{"docs":{},"注":{"docs":{},"释":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}},")":{"docs":{},";":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.00909090909090909}}}}},"5":{"7":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}},"docs":{},".":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"变":{"docs":{},"量":{"docs":{},"命":{"docs":{},"名":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}},")":{"docs":{},";":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.03636363636363636}}}}},"6":{"4":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},",":{"docs":{"programing-manual/mm/heap.html":{"ref":"programing-manual/mm/heap.html","tf":0.014084507042253521}}},"/":{"docs":{},"i":{"3":{"8":{"6":{"docs":{},"工":{"docs":{},"具":{"docs":{},"链":{"docs":{},":":{"docs":{"tutorial/toolchains.html":{"ref":"tutorial/toolchains.html","tf":0.02702702702702703}},"a":{"docs":{},"p":{"docs":{},"t":{"docs":{"tutorial/toolchains.html":{"ref":"tutorial/toolchains.html","tf":0.02702702702702703}}}}}}}}}},"docs":{}},"docs":{}},"docs":{}}}},"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}},"]":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}},".":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"函":{"docs":{},"数":{"docs":{},"命":{"docs":{},"名":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}},"7":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},".":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"定":{"docs":{},"义":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}},"8":{"0":{"docs":{},",":{"docs":{"programing-manual/mm/heap.html":{"ref":"programing-manual/mm/heap.html","tf":0.014084507042253521}}}},"1":{"9":{"2":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.001678556441460344}}},"docs":{}},"docs":{}},"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},".":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"枚":{"docs":{},"举":{"docs":{},"定":{"docs":{},"义":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}},"9":{"6":{"docs":{},",":{"docs":{"programing-manual/mm/heap.html":{"ref":"programing-manual/mm/heap.html","tf":0.014084507042253521}}}},"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.001258917331095258},"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}},".":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"宏":{"docs":{},"定":{"docs":{},"义":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}},"docs":{},":":{"docs":{"./":{"ref":"./","tf":0.02631578947368421},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086},"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.024793388429752067}}},"a":{"0":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.001678556441460344}}},"~":{"docs":{},"a":{"7":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}},"docs":{}}}},"docs":{},"p":{"docs":{"programing-manual/sched/smp.html":{"ref":"programing-manual/sched/smp.html","tf":0.0625}},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{"./":{"ref":"./","tf":0.02631578947368421},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.004616030214015947},"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}},"t":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.01507537688442211},"tutorial/toolchains.html":{"ref":"tutorial/toolchains.html","tf":0.02702702702702703}}},"p":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}}},"i":{"docs":{"programing-manual/process/syscall.html":{"ref":"programing-manual/process/syscall.html","tf":0.0625},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},")":{"docs":{},";":{"docs":{"programing-manual/process/syscall.html":{"ref":"programing-manual/process/syscall.html","tf":0.03125}}}},":":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}},"应":{"docs":{},"用":{"docs":{},"程":{"docs":{},"序":{"docs":{},"接":{"docs":{},"口":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}},"设":{"docs":{},"计":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":10}}}}}},".":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.010050251256281407}}},"r":{"docs":{},"c":{"docs":{},"h":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.0136986301369863}}}},"m":{"docs":{},",":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}}}},"g":{"0":{"docs":{},":":{"docs":{},"%":{"docs":{},"x":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}},"1":{"docs":{},":":{"docs":{},"%":{"docs":{},"x":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}},"2":{"docs":{},":":{"docs":{},"%":{"docs":{},"x":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}},"3":{"docs":{},":":{"docs":{},"%":{"docs":{},"x":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}},"4":{"docs":{},":":{"docs":{},"%":{"docs":{},"x":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}},"5":{"docs":{},":":{"docs":{},"%":{"docs":{},"x":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}},"6":{"docs":{},":":{"docs":{},"%":{"docs":{},"x":{"docs":{},"\"":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}},"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},",":{"docs":{"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.010752688172043012}}}}},"d":{"docs":{},"d":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294},"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.05785123966942149}},"r":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},",":{"docs":{"programing-manual/mm/vmspace.html":{"ref":"programing-manual/mm/vmspace.html","tf":0.03076923076923077},"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}},")":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}},"e":{"docs":{},"n":{"docs":{},"d":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},"s":{"docs":{},"s":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.00209819555182543}}}}},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}},"t":{"docs":{},"t":{"docs":{},"r":{"docs":{},",":{"docs":{"programing-manual/mm/vmspace.html":{"ref":"programing-manual/mm/vmspace.html","tf":0.03076923076923077},"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.010362694300518135}}},")":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172},"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.015544041450777202}},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}}}}},"o":{"docs":{},"m":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}},"i":{"docs":{},"c":{"docs":{},".":{"docs":{},"c":{"docs":{},"、":{"docs":{},"b":{"docs":{},"a":{"docs":{},"r":{"docs":{},"r":{"docs":{},"i":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"c":{"docs":{},"、":{"docs":{},"c":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},".":{"docs":{},"c":{"docs":{},"、":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},".":{"docs":{},"c":{"docs":{},"、":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"u":{"docs":{},"p":{"docs":{},"t":{"docs":{},".":{"docs":{},"c":{"docs":{},"即":{"docs":{},"可":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"即":{"docs":{},"可":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575},"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}},"w":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}},"c":{"docs":{},"c":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}}}}}},"n":{"docs":{},"y":{"docs":{},"t":{"docs":{},"h":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}},"s":{"docs":{},"i":{"docs":{},"d":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}},"。":{"docs":{},"表":{"docs":{},"示":{"docs":{},"当":{"docs":{},"前":{"docs":{},"程":{"docs":{},"序":{"docs":{},"的":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"t":{"docs":{},"_":{"docs":{},"f":{"docs":{},"a":{"docs":{},"l":{"docs":{},"s":{"docs":{},"e":{"docs":{},"(":{"docs":{},".":{"docs":{},".":{"docs":{},".":{"docs":{},")":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}}}}}}}}}},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{},"e":{"docs":{},"(":{"docs":{},".":{"docs":{},".":{"docs":{},".":{"docs":{},")":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}}}}}}}}}}}}}}},"u":{"docs":{},"t":{"docs":{},"h":{"docs":{},"o":{"docs":{},"r":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.004616030214015947},"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}},"v":{"docs":{},"o":{"docs":{},"i":{"docs":{},"d":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}},"d":{"1":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}}},"docs":{},"e":{"docs":{},"v":{"docs":{},"e":{"docs":{},"l":{"docs":{},"o":{"docs":{},"p":{"docs":{"./":{"ref":"./","tf":0.02631578947368421},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.004616030214015947},"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}},")":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}},",":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.007772020725388601}}},"i":{"docs":{},"c":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}},"e":{"docs":{},"c":{"docs":{},"l":{"docs":{},"o":{"docs":{},"s":{"docs":{},"e":{"docs":{},"(":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"r":{"docs":{},"o":{"docs":{},"l":{"docs":{},"(":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"(":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"r":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}}}}},"d":{"docs":{},"e":{"docs":{},"l":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},"(":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"r":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}}}}},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{},"n":{"docs":{},"(":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"r":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"(":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}},"w":{"docs":{},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"(":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}}},"_":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"_":{"docs":{},"l":{"docs":{},"e":{"docs":{},"n":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}}}}}}}},"f":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.010050251256281407},"tutorial/menuconfig.html":{"ref":"tutorial/menuconfig.html","tf":0.038461538461538464}}}}}}}},"a":{"docs":{},"u":{"docs":{},"l":{"docs":{},"t":{"docs":{},":":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}},"a":{"docs":{},"m":{"docs":{},"o":{"docs":{},"n":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}},"s":{"docs":{},"c":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},"t":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}},"t":{"docs":{},",":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0051813471502590676}}}}}},"o":{"docs":{},"c":{"docs":{"./":{"ref":"./","tf":0.02631578947368421},"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315},"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}},"s":{"docs":{},"(":{"docs":{},"m":{"docs":{},"m":{"docs":{},")":{"docs":{},":":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}}}},":":{"docs":{},"文":{"docs":{},"档":{"docs":{},"(":{"docs":{},"d":{"docs":{},"o":{"docs":{},"c":{"docs":{},"u":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},")":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"i":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}}}}}},"y":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.010273972602739725}}}}}},"a":{"docs":{},"t":{"docs":{},"a":{"1":{"docs":{},":":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}},"2":{"docs":{},":":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}},"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}},"e":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.004616030214015947},"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}},"i":{"docs":{},"f":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},"c":{"docs":{},"l":{"docs":{},"o":{"docs":{},"s":{"docs":{},"e":{"docs":{},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"d":{"docs":{},"i":{"docs":{},"r":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}}}}}},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{},"n":{"docs":{},"(":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"r":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"w":{"docs":{},"i":{"docs":{},"n":{"docs":{},"d":{"docs":{},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"d":{"docs":{},"i":{"docs":{},"r":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}}}}}}}}}}}}},")":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.007772020725388601}}}},"s":{"docs":{},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}}}}}}},"i":{"3":{"8":{"6":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.020100502512562814}},",":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}}}},"docs":{}},"docs":{}},"docs":{},"s":{"docs":{},"s":{"docs":{},"u":{"docs":{},"s":{"docs":{"./":{"ref":"./","tf":0.02631578947368421}}}}},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"m":{"docs":{},"i":{"docs":{},"n":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"d":{"docs":{},";":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}}}}}}}},":":{"docs":{},"%":{"docs":{},"d":{"docs":{},"\"":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}},"a":{"docs":{},")":{"docs":{},"也":{"docs":{},"处":{"docs":{},"在":{"docs":{},"草":{"docs":{},"案":{"docs":{},"版":{"docs":{},"本":{"1":{"docs":{},".":{"1":{"0":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},"docs":{}},"docs":{}}},"docs":{}}}}}}}},",":{"docs":{},"而":{"docs":{},"特":{"docs":{},"权":{"docs":{},"指":{"docs":{},"令":{"docs":{},"集":{"docs":{},"(":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"v":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"g":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"z":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.007772020725388601}}}}},"n":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"l":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.03015075376884422},"tutorial/toolchains.html":{"ref":"tutorial/toolchains.html","tf":0.05405405405405406}}}},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}},"r":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"d":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}}}}}},"i":{"docs":{},"t":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.005455308434746118},"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}},"f":{"docs":{},"o":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}},"t":{"docs":{"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.021505376344086023},"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.12435233160621761},"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.007352941176470588}},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"u":{"docs":{},"p":{"docs":{},"t":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.001678556441460344}}}}}},"u":{"docs":{},"p":{"docs":{},"t":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}},"/":{"docs":{},"o":{"docs":{},"驱":{"docs":{},"动":{"docs":{},"框":{"docs":{},"架":{"docs":{},"和":{"docs":{},"中":{"docs":{},"断":{"docs":{},"管":{"docs":{},"理":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}}}}}}}}}}}}},"o":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}}},"p":{"docs":{},"c":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}}}},"r":{"docs":{},"q":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}},"n":{"docs":{},"o":{"docs":{},")":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.001258917331095258}},";":{"docs":{"programing-manual/interrupt/irq.html":{"ref":"programing-manual/interrupt/irq.html","tf":0.03389830508474576},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.001258917331095258}}}},",":{"docs":{"programing-manual/interrupt/irq.html":{"ref":"programing-manual/interrupt/irq.html","tf":0.03389830508474576}}}}}}},"d":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.001258917331095258}},",":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}},"l":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.010273972602739725}}},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"i":{"docs":{},"f":{"docs":{},"i":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.004616030214015947},"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}}}},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},".":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}},"e":{"docs":{},"r":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"_":{"docs":{},"r":{"docs":{},"x":{"docs":{},"_":{"docs":{},"e":{"docs":{},"n":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}},"f":{"docs":{},"(":{"docs":{},"v":{"docs":{},"m":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}},"、":{"docs":{},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{},"、":{"docs":{},"w":{"docs":{},"h":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"、":{"docs":{},"s":{"docs":{},"w":{"docs":{},"i":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"i":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.00209819555182543}},"n":{"docs":{},"u":{"docs":{},"x":{"docs":{"./":{"ref":"./","tf":0.02631578947368421},"programing-manual/interrupt/delay_queue.html":{"ref":"programing-manual/interrupt/delay_queue.html","tf":0.01282051282051282}},":":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.010050251256281407}}},"下":{"docs":{},"设":{"docs":{},"置":{"docs":{},"i":{"3":{"8":{"6":{"docs":{},"环":{"docs":{},"境":{"docs":{},"并":{"docs":{},"设":{"docs":{},"置":{"docs":{},"p":{"docs":{},"l":{"docs":{},"a":{"docs":{},"t":{"docs":{},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{},"m":{"docs":{},"=":{"docs":{},"x":{"8":{"6":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.005025125628140704}}},"docs":{}},"docs":{}}}}}}}}}}}}}}}}},"docs":{}},"docs":{}},"docs":{}},"r":{"docs":{},"i":{"docs":{},"s":{"docs":{},"c":{"docs":{},"v":{"6":{"4":{"docs":{},"环":{"docs":{},"境":{"docs":{},"p":{"docs":{},"l":{"docs":{},"a":{"docs":{},"t":{"docs":{},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{},"m":{"docs":{},"=":{"docs":{},"r":{"docs":{},"i":{"docs":{},"s":{"docs":{},"c":{"docs":{},"v":{"6":{"4":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.005025125628140704}}},"docs":{}},"docs":{}}}}}}}}}}}}}}}}}},"docs":{}},"docs":{}}}}}}}}},"环":{"docs":{},"境":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.01507537688442211}}}},"工":{"docs":{},"具":{"docs":{},"链":{"docs":{},"只":{"docs":{},"需":{"docs":{},"要":{"docs":{},"从":{"docs":{},"软":{"docs":{},"件":{"docs":{},"包":{"docs":{},"管":{"docs":{},"理":{"docs":{},"器":{"docs":{},"下":{"docs":{},"载":{"docs":{},"安":{"docs":{},"装":{"docs":{},"即":{"docs":{},"可":{"docs":{},":":{"docs":{"tutorial/toolchains.html":{"ref":"tutorial/toolchains.html","tf":0.02702702702702703}}}}}}}}}}}}}}}}}}}}}}}},"e":{"1":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}},"2":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}},"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.007352941176470588}}}},"s":{"docs":{},"t":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.00684931506849315}},";":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}},"c":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.004616030214015947},"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}},"a":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.001678556441460344}},"y":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},":":{"docs":{"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.010869565217391304}}}}}}}},"e":{"docs":{},"v":{"docs":{},"e":{"docs":{},"l":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.010273972602739725},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.003357112882920688}},")":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}},"n":{"docs":{},",":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0051813471502590676}}},")":{"docs":{},";":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.007352941176470588}}}}}},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}},";":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}},"w":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}},"a":{"docs":{},"d":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}}},"g":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294},"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}},"s":{"docs":{},":":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.004616030214015947},"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}},",":{"docs":{},"建":{"docs":{},"议":{"docs":{},"是":{"docs":{},"不":{"docs":{},"要":{"docs":{},"。":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}}}}}}},"n":{"docs":{},"g":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.004616030214015947}}}},"o":{"docs":{},"p":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},":":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}},"m":{"docs":{},"m":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}},"u":{"docs":{"./":{"ref":"./","tf":0.02631578947368421},"programing-manual/process/process.html":{"ref":"programing-manual/process/process.html","tf":0.16455696202531644},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.001258917331095258}},"_":{"docs":{},"f":{"docs":{},"l":{"docs":{},"u":{"docs":{},"s":{"docs":{},"h":{"docs":{},"t":{"docs":{},"l":{"docs":{},"b":{"docs":{},"(":{"docs":{},")":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}}}}}}}}}}}},"p":{"docs":{},"d":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}},"t":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}},"内":{"docs":{},"存":{"docs":{},"管":{"docs":{},"理":{"docs":{},"单":{"docs":{},"元":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}},"虚":{"docs":{},"拟":{"docs":{},"内":{"docs":{},"存":{"docs":{},"管":{"docs":{},"理":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}}}}}}}}},"a":{"docs":{},"k":{"docs":{},"e":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.06532663316582915},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086},"tutorial/menuconfig.html":{"ref":"tutorial/menuconfig.html","tf":0.19230769230769232},"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}},"_":{"docs":{},"s":{"docs":{},"a":{"docs":{},"t":{"docs":{},"p":{"docs":{},"(":{"docs":{},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"r":{"docs":{},")":{"docs":{},")":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}},"l":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{"programing-manual/mm/heap.html":{"ref":"programing-manual/mm/heap.html","tf":0.014084507042253521}}}}}},"x":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.00684931506849315}}},"n":{"docs":{},"a":{"docs":{},"g":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}},"s":{"docs":{},"k":{"docs":{},")":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}},"e":{"docs":{},"n":{"docs":{},"u":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.005025125628140704},"tutorial/menuconfig.html":{"ref":"tutorial/menuconfig.html","tf":0.038461538461538464}},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"可":{"docs":{},"以":{"docs":{},"在":{"docs":{},"终":{"docs":{},"端":{"docs":{},"显":{"docs":{},"示":{"docs":{},"的":{"docs":{},"图":{"docs":{},"形":{"docs":{},"化":{"docs":{},"配":{"docs":{},"置":{"docs":{},"界":{"docs":{},"面":{"docs":{},",":{"docs":{},"他":{"docs":{},"不":{"docs":{},"仅":{"docs":{},"可":{"docs":{},"以":{"docs":{},"极":{"docs":{},"大":{"docs":{},"的":{"docs":{},"方":{"docs":{},"便":{"docs":{},"我":{"docs":{},"们":{"docs":{},"对":{"docs":{},"于":{"docs":{},"配":{"docs":{},"置":{"docs":{},"文":{"docs":{},"件":{"docs":{},"的":{"docs":{},"修":{"docs":{},"改":{"docs":{},",":{"docs":{"tutorial/menuconfig.html":{"ref":"tutorial/menuconfig.html","tf":0.038461538461538464}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"简":{"docs":{},"介":{"docs":{"tutorial/menuconfig.html":{"ref":"tutorial/menuconfig.html","tf":0.038461538461538464}}}}}}}}}}}},"m":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.010869565217391304},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}},"y":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}},"r":{"docs":{},"o":{"docs":{},"y":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}},"c":{"docs":{},"o":{"docs":{},"p":{"docs":{},"y":{"docs":{},"(":{"docs":{},"v":{"docs":{},"o":{"docs":{},"i":{"docs":{},"d":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}}},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"l":{"docs":{},"(":{"docs":{},"v":{"docs":{},"o":{"docs":{},"i":{"docs":{},"d":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"e":{"docs":{},"(":{"docs":{},"v":{"docs":{},"o":{"docs":{},"i":{"docs":{},"d":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}}},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{},"(":{"docs":{},"v":{"docs":{},"o":{"docs":{},"i":{"docs":{},"d":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}},"o":{"docs":{},"v":{"docs":{},"e":{"docs":{},"(":{"docs":{},"v":{"docs":{},"o":{"docs":{},"i":{"docs":{},"d":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}}},"u":{"docs":{},"n":{"docs":{},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{},"(":{"docs":{},"v":{"docs":{},"o":{"docs":{},"i":{"docs":{},"d":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}}}},"z":{"docs":{},"e":{"docs":{},"r":{"docs":{},"o":{"docs":{},"(":{"docs":{},"v":{"docs":{},"o":{"docs":{},"i":{"docs":{},"d":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}}}},"a":{"docs":{},"n":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}}},"s":{"docs":{},"s":{"docs":{},"a":{"docs":{},"g":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}}}},"k":{"docs":{},"f":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.01507537688442211}}}},"t":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.01507537688442211}}}}}},"i":{"docs":{},"c":{"docs":{},"r":{"docs":{},"o":{"docs":{},"s":{"docs":{},"e":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"d":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}},"s":{"docs":{},")":{"docs":{},";":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}}}}}}}}},"n":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}},"l":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"e":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"d":{"docs":{"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.021505376344086023}},"s":{"docs":{},",":{"docs":{"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.021505376344086023}}}}}}}}}}}}}},"h":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{},"i":{"docs":{},"d":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.001678556441460344}},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}},"u":{"docs":{},"l":{"docs":{},"t":{"docs":{},"i":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086},"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0051813471502590676}},")":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}},",":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}},"a":{"docs":{},"c":{"docs":{},"q":{"docs":{},"u":{"docs":{},"i":{"docs":{},"r":{"docs":{},"e":{"docs":{},"(":{"docs":{},"m":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}}}}}}},"c":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"(":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}}}},"d":{"docs":{},"e":{"docs":{},"l":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},"(":{"docs":{},"m":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"(":{"docs":{},"m":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"l":{"docs":{},"e":{"docs":{},"a":{"docs":{},"s":{"docs":{},"e":{"docs":{},"(":{"docs":{},"m":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}}}}}}},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},"a":{"docs":{},"c":{"docs":{},"q":{"docs":{},"u":{"docs":{},"i":{"docs":{},"r":{"docs":{},"e":{"docs":{},"(":{"docs":{},"m":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}}}}}}}}}}}}}},"v":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}},"y":{"docs":{},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},",":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}}}},"n":{"docs":{},"x":{"docs":{},"o":{"docs":{"./":{"ref":"./","tf":5.131578947368421},"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.03015075376884422},"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.0273972602739726},"programing-manual/base/start.html":{"ref":"programing-manual/base/start.html","tf":0.025},"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.021739130434782608},"programing-manual/mm/heap.html":{"ref":"programing-manual/mm/heap.html","tf":0.014084507042253521},"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.00684931506849315},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.005455308434746118},"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}},"s":{"docs":{},"是":{"docs":{},"n":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{"./":{"ref":"./","tf":0.02631578947368421}}}}}},"一":{"docs":{},"个":{"docs":{},"分":{"docs":{},"时":{"docs":{},"多":{"docs":{},"进":{"docs":{},"程":{"docs":{},"/":{"docs":{},"多":{"docs":{},"线":{"docs":{},"程":{"docs":{},"(":{"docs":{},"也":{"docs":{},"支":{"docs":{},"持":{"docs":{},"实":{"docs":{},"时":{"docs":{},"优":{"docs":{},"先":{"docs":{},"级":{"docs":{},")":{"docs":{},",":{"docs":{},"支":{"docs":{},"持":{"docs":{"./":{"ref":"./","tf":0.02631578947368421}}}}}}}}}}}}}}}}}}}}}}}}}}},"采":{"docs":{},"用":{"docs":{"./":{"ref":"./","tf":0.02631578947368421}},"混":{"docs":{},"合":{"docs":{},"内":{"docs":{},"核":{"docs":{},"架":{"docs":{},"构":{"docs":{},",":{"docs":{},"即":{"docs":{},"宏":{"docs":{},"内":{"docs":{},"核":{"docs":{},"和":{"docs":{},"微":{"docs":{},"内":{"docs":{},"核":{"docs":{},"相":{"docs":{},"结":{"docs":{},"合":{"docs":{},"。":{"docs":{},"优":{"docs":{},"势":{"docs":{},"是":{"docs":{},"减":{"docs":{},"小":{"docs":{},"内":{"docs":{},"核":{"docs":{},"代":{"docs":{},"码":{"docs":{},",":{"docs":{},"增":{"docs":{},"加":{"docs":{},"功":{"docs":{},"能":{"docs":{},"可":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"性":{"docs":{},",":{"docs":{},"功":{"docs":{},"能":{"docs":{},"模":{"docs":{},"块":{"docs":{},"是":{"docs":{},"独":{"docs":{},"立":{"docs":{},"的":{"docs":{},"进":{"docs":{},"程":{"docs":{},",":{"docs":{},"添":{"docs":{},"加":{"docs":{},"和":{"docs":{},"删":{"docs":{},"除":{"docs":{},"模":{"docs":{},"块":{"docs":{},"就":{"docs":{},"是":{"docs":{},"进":{"docs":{},"程":{"docs":{},"的":{"docs":{},"创":{"docs":{},"建":{"docs":{},"和":{"docs":{},"关":{"docs":{},"闭":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.02631578947368421}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"a":{"docs":{},"p":{"docs":{},"i":{"docs":{},"接":{"docs":{},"口":{"docs":{},"分":{"docs":{},"为":{"docs":{},"几":{"docs":{},"个":{"docs":{},"大":{"docs":{},"类":{"docs":{},"。":{"docs":{},"进":{"docs":{},"程":{"docs":{},",":{"docs":{},"线":{"docs":{},"程":{"docs":{},",":{"docs":{},"内":{"docs":{},"存":{"docs":{},"管":{"docs":{},"理":{"docs":{},",":{"docs":{},"时":{"docs":{},"间":{"docs":{},"管":{"docs":{},"理":{"docs":{},",":{"docs":{},"枢":{"docs":{},"纽":{"docs":{},"系":{"docs":{},"统":{"docs":{},",":{"docs":{},"文":{"docs":{},"件":{"docs":{},"系":{"docs":{},"统":{"docs":{},",":{"docs":{},"设":{"docs":{},"备":{"docs":{},"管":{"docs":{},"理":{"docs":{},",":{"docs":{},"网":{"docs":{},"络":{"docs":{},"管":{"docs":{},"理":{"docs":{},",":{"docs":{},"图":{"docs":{},"形":{"docs":{},"管":{"docs":{},"理":{"docs":{},",":{"docs":{},"安":{"docs":{},"全":{"docs":{},"管":{"docs":{},"理":{"docs":{},",":{"docs":{},"用":{"docs":{},"户":{"docs":{},"态":{"docs":{},"驱":{"docs":{},"动":{"docs":{},"框":{"docs":{},"架":{"docs":{},"。":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"使":{"docs":{},"用":{"docs":{},"了":{"docs":{},"一":{"docs":{},"个":{"docs":{},"p":{"docs":{},"y":{"docs":{},"t":{"docs":{},"h":{"docs":{},"o":{"docs":{},"n":{"docs":{},"开":{"docs":{},"发":{"docs":{},"的":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"u":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{},",":{"docs":{},"它":{"docs":{},"的":{"docs":{},"跨":{"docs":{},"平":{"docs":{},"台":{"docs":{},"性":{"docs":{},"以":{"docs":{},"及":{"docs":{},"易":{"docs":{},"用":{"docs":{},"性":{"docs":{},"成":{"docs":{},"为":{"docs":{},"了":{"docs":{},"我":{"docs":{},"们":{"docs":{},"的":{"docs":{},"首":{"docs":{},"选":{"docs":{},"。":{"docs":{"tutorial/menuconfig.html":{"ref":"tutorial/menuconfig.html","tf":0.038461538461538464}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"b":{"docs":{},"a":{"docs":{},"s":{"docs":{},"e":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}}}}}},"_":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}},"c":{"docs":{},"a":{"docs":{},"l":{"docs":{},"l":{"docs":{},"s":{"docs":{},"i":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{"programing-manual/base/start.html":{"ref":"programing-manual/base/start.html","tf":0.025}}}}}}}}},"s":{"docs":{},"m":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"(":{"docs":{},"\"":{"docs":{},"f":{"docs":{},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{},"e":{"docs":{},"\"":{"docs":{},":":{"docs":{},":":{"docs":{},":":{"docs":{},"\"":{"docs":{},"m":{"docs":{},"e":{"docs":{},"m":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},"\"":{"docs":{},")":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}}}}}}}}}}}}}}},".":{"docs":{},"i":{"docs":{},"\"":{"docs":{},":":{"docs":{},":":{"docs":{},":":{"docs":{},"\"":{"docs":{},"m":{"docs":{},"e":{"docs":{},"m":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},"\"":{"docs":{},")":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"t":{"docs":{},"i":{"docs":{},"c":{"docs":{},"k":{"docs":{},"g":{"docs":{},"o":{"docs":{},"(":{"docs":{},")":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"o":{"docs":{},"p":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"s":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"(":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"r":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}}}}}}}}}}}},"h":{"docs":{},"a":{"docs":{},"l":{"docs":{},"p":{"docs":{},"l":{"docs":{},"a":{"docs":{},"t":{"docs":{},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{},"m":{"docs":{},"i":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{"programing-manual/base/start.html":{"ref":"programing-manual/base/start.html","tf":0.025},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"u":{"docs":{},"a":{"docs":{},"r":{"docs":{},"c":{"docs":{},"h":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}},"m":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"programing-manual/base/start.html":{"ref":"programing-manual/base/start.html","tf":0.025}}}}}},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"2":{"docs":{"programing-manual/base/start.html":{"ref":"programing-manual/base/start.html","tf":0.025}},"(":{"docs":{},"v":{"docs":{},"o":{"docs":{},"i":{"docs":{},"d":{"docs":{},")":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}},"中":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"使":{"docs":{},"用":{"docs":{},"内":{"docs":{},"核":{"docs":{},"的":{"docs":{},"功":{"docs":{},"能":{"docs":{},",":{"docs":{},"内":{"docs":{},"存":{"docs":{},"分":{"docs":{},"配":{"docs":{},",":{"docs":{},"中":{"docs":{},"断":{"docs":{},"注":{"docs":{},"册":{"docs":{},"等":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}}}}},"docs":{}}}}}}}}}}}}},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"z":{"docs":{},"o":{"docs":{},"n":{"docs":{},"e":{"docs":{},"i":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}},"r":{"docs":{},"o":{"docs":{},"c":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"u":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"m":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},"(":{"docs":{},"a":{"docs":{},"r":{"docs":{},"g":{"docs":{},"s":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}},"v":{"docs":{},"o":{"docs":{},"i":{"docs":{},"d":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}},"x":{"docs":{},"e":{"docs":{},"c":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"u":{"docs":{},"s":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"s":{"docs":{},"t":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}},"f":{"docs":{},"r":{"docs":{},"e":{"docs":{},"e":{"docs":{},"p":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{},"e":{"docs":{},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"v":{"docs":{},"m":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"n":{"docs":{},"e":{"docs":{},"l":{"docs":{},"p":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{},"e":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"e":{"docs":{},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"c":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}},"s":{"docs":{},"w":{"docs":{},"i":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{},"p":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{},"e":{"docs":{},"(":{"docs":{},"v":{"docs":{},"o":{"docs":{},"i":{"docs":{},"d":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}},"y":{"docs":{},"s":{"docs":{},"c":{"docs":{},"a":{"docs":{},"l":{"docs":{},"l":{"docs":{},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"h":{"docs":{},"a":{"docs":{},"l":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"p":{"docs":{},"f":{"docs":{},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"t":{"docs":{},"o":{"docs":{},"m":{"docs":{},"i":{"docs":{},"c":{"docs":{},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"a":{"docs":{},"t":{"docs":{},"o":{"docs":{},"m":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}},"c":{"docs":{},"a":{"docs":{},"s":{"docs":{},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"a":{"docs":{},"t":{"docs":{},"o":{"docs":{},"m":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}},"l":{"docs":{},"e":{"docs":{},"a":{"docs":{},"r":{"docs":{},"m":{"docs":{},"a":{"docs":{},"s":{"docs":{},"k":{"docs":{},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"a":{"docs":{},"t":{"docs":{},"o":{"docs":{},"m":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}},"d":{"docs":{},"e":{"docs":{},"c":{"docs":{},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"a":{"docs":{},"t":{"docs":{},"o":{"docs":{},"m":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"a":{"docs":{},"t":{"docs":{},"o":{"docs":{},"m":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}},"i":{"docs":{},"n":{"docs":{},"c":{"docs":{},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"a":{"docs":{},"t":{"docs":{},"o":{"docs":{},"m":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"a":{"docs":{},"t":{"docs":{},"o":{"docs":{},"m":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}},"m":{"docs":{},"a":{"docs":{},"s":{"docs":{},"k":{"docs":{},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"a":{"docs":{},"t":{"docs":{},"o":{"docs":{},"m":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}},"u":{"docs":{},"b":{"docs":{},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"a":{"docs":{},"t":{"docs":{},"o":{"docs":{},"m":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}},"w":{"docs":{},"a":{"docs":{},"p":{"docs":{},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"a":{"docs":{},"t":{"docs":{},"o":{"docs":{},"m":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}},"c":{"docs":{},"l":{"docs":{},"e":{"docs":{},"a":{"docs":{},"r":{"docs":{},"b":{"docs":{},"s":{"docs":{},"s":{"docs":{},"(":{"docs":{},")":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"v":{"docs":{},"o":{"docs":{},"i":{"docs":{},"d":{"docs":{},")":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"n":{"docs":{},"s":{"docs":{},"o":{"docs":{},"l":{"docs":{},"e":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"r":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"i":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}},"s":{"docs":{},"w":{"docs":{},"i":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{},"n":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"r":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}}}}}}}}},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}},":":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}},"p":{"docs":{},"r":{"docs":{},"e":{"docs":{},"v":{"docs":{},"n":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.001678556441460344}},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"r":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}}}}}}}}},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}},":":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"b":{"docs":{},"o":{"docs":{},"o":{"docs":{},"t":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"u":{"docs":{},"a":{"docs":{},"r":{"docs":{},"c":{"docs":{},"h":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"i":{"docs":{},"n":{"docs":{},"d":{"docs":{},"e":{"docs":{},"x":{"docs":{},"(":{"docs":{},"v":{"docs":{},"o":{"docs":{},"i":{"docs":{},"d":{"docs":{},")":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}},"。":{"docs":{},"该":{"docs":{},"索":{"docs":{},"引":{"docs":{},"是":{"docs":{},"在":{"docs":{},"处":{"docs":{},"理":{"docs":{},"器":{"docs":{},"数":{"docs":{},"组":{"docs":{},"中":{"docs":{},"的":{"docs":{},"索":{"docs":{},"引":{"docs":{},",":{"docs":{},"不":{"docs":{},"管":{"docs":{},"什":{"docs":{},"么":{"docs":{},"处":{"docs":{},"理":{"docs":{},"器":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"i":{"docs":{},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"u":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{},"i":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"2":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"(":{"docs":{},")":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}},"docs":{}}}}}}}}}}}}}}}},"e":{"docs":{},"n":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{},"e":{"docs":{},"(":{"docs":{},"v":{"docs":{},"o":{"docs":{},"i":{"docs":{},"d":{"docs":{},")":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"n":{"docs":{},"e":{"docs":{},"l":{"docs":{},"p":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{},"e":{"docs":{},"(":{"docs":{},"v":{"docs":{},"o":{"docs":{},"i":{"docs":{},"d":{"docs":{},")":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"c":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},"v":{"docs":{},"o":{"docs":{},"i":{"docs":{},"d":{"docs":{},")":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}},"r":{"docs":{},"q":{"docs":{},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"i":{"docs":{},"r":{"docs":{},"q":{"docs":{},"_":{"docs":{},"n":{"docs":{},"u":{"docs":{},"m":{"docs":{},"b":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{},"e":{"docs":{},"(":{"docs":{},"v":{"docs":{},"o":{"docs":{},"i":{"docs":{},"d":{"docs":{},")":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}},"e":{"docs":{},"n":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{},"e":{"docs":{},"(":{"docs":{},"v":{"docs":{},"o":{"docs":{},"i":{"docs":{},"d":{"docs":{},")":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}},"m":{"docs":{},"a":{"docs":{},"s":{"docs":{},"k":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"i":{"docs":{},"r":{"docs":{},"q":{"docs":{},"_":{"docs":{},"n":{"docs":{},"u":{"docs":{},"m":{"docs":{},"b":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"e":{"docs":{},"l":{"docs":{},"e":{"docs":{},"v":{"docs":{},"e":{"docs":{},"l":{"docs":{},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"u":{"docs":{},"a":{"docs":{},"r":{"docs":{},"c":{"docs":{},"h":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}},"s":{"docs":{},"a":{"docs":{},"v":{"docs":{},"e":{"docs":{},"l":{"docs":{},"e":{"docs":{},"v":{"docs":{},"e":{"docs":{},"l":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"(":{"docs":{},"v":{"docs":{},"o":{"docs":{},"i":{"docs":{},"d":{"docs":{},")":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}},"u":{"docs":{},"n":{"docs":{},"m":{"docs":{},"a":{"docs":{},"s":{"docs":{},"k":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"i":{"docs":{},"r":{"docs":{},"q":{"docs":{},"_":{"docs":{},"n":{"docs":{},"u":{"docs":{},"m":{"docs":{},"b":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{},"a":{"docs":{},"g":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"e":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}},"w":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"p":{"docs":{},"h":{"docs":{},"i":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}},"y":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}},"e":{"docs":{},"m":{"docs":{},"b":{"docs":{},"a":{"docs":{},"r":{"docs":{},"r":{"docs":{},"i":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"v":{"docs":{},"o":{"docs":{},"i":{"docs":{},"d":{"docs":{},")":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}},"i":{"docs":{},"n":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"(":{"docs":{},"v":{"docs":{},"o":{"docs":{},"i":{"docs":{},"d":{"docs":{},")":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"(":{"docs":{},"v":{"docs":{},"o":{"docs":{},"i":{"docs":{},"d":{"docs":{},")":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}},"w":{"docs":{},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"(":{"docs":{},"v":{"docs":{},"o":{"docs":{},"i":{"docs":{},"d":{"docs":{},")":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{},"p":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{},"e":{"docs":{},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"r":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}},"u":{"docs":{},"n":{"docs":{},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{},"a":{"docs":{},"g":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"e":{"docs":{},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"m":{"docs":{},"m":{"docs":{},"u":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}},"v":{"docs":{},"i":{"docs":{},"r":{"2":{"docs":{},"p":{"docs":{},"h":{"docs":{},"i":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}},"y":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}},"docs":{}}}}},"s":{"docs":{},"_":{"docs":{},"o":{"docs":{},"n":{"docs":{},"e":{"docs":{},"c":{"docs":{},"o":{"docs":{},"r":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.007352941176470588}}}}}}}},"s":{"docs":{},"m":{"docs":{},"p":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.007352941176470588}}}}}}}},"e":{"docs":{},"a":{"docs":{},"p":{"docs":{},"a":{"docs":{},"l":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{"programing-manual/mm/heap.html":{"ref":"programing-manual/mm/heap.html","tf":0.014084507042253521}},"(":{"docs":{},"s":{"docs":{},"i":{"docs":{},"z":{"docs":{},"e":{"docs":{},")":{"docs":{"programing-manual/mm/heap.html":{"ref":"programing-manual/mm/heap.html","tf":0.014084507042253521}}}}}}}}}}}}},"f":{"docs":{},"r":{"docs":{},"e":{"docs":{},"e":{"docs":{},"(":{"docs":{},"p":{"docs":{},"t":{"docs":{},"r":{"docs":{},")":{"docs":{"programing-manual/mm/heap.html":{"ref":"programing-manual/mm/heap.html","tf":0.014084507042253521}}}}}},"v":{"docs":{},"o":{"docs":{},"i":{"docs":{},"d":{"docs":{"programing-manual/mm/heap.html":{"ref":"programing-manual/mm/heap.html","tf":0.014084507042253521}}}}}}}}}}},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"o":{"docs":{},"b":{"docs":{},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"s":{"docs":{},"i":{"docs":{},"z":{"docs":{},"e":{"docs":{},"(":{"docs":{},"v":{"docs":{},"o":{"docs":{},"i":{"docs":{},"d":{"docs":{"programing-manual/mm/heap.html":{"ref":"programing-manual/mm/heap.html","tf":0.014084507042253521}}}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"programing-manual/base/start.html":{"ref":"programing-manual/base/start.html","tf":0.025},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.001258917331095258}}}}},"e":{"docs":{},"m":{"docs":{},"a":{"docs":{},"l":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{"programing-manual/mm/heap.html":{"ref":"programing-manual/mm/heap.html","tf":0.028169014084507043}},"(":{"docs":{},"s":{"docs":{},"i":{"docs":{},"z":{"docs":{},"e":{"docs":{},")":{"docs":{"programing-manual/mm/heap.html":{"ref":"programing-manual/mm/heap.html","tf":0.014084507042253521}}}}}}},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"p":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"_":{"docs":{},"s":{"docs":{},"i":{"docs":{},"z":{"docs":{},"e":{"docs":{},")":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}},"f":{"docs":{},"r":{"docs":{},"e":{"docs":{"programing-manual/mm/heap.html":{"ref":"programing-manual/mm/heap.html","tf":0.014084507042253521}},"e":{"docs":{},"(":{"docs":{},"p":{"docs":{},"t":{"docs":{},"r":{"docs":{},")":{"docs":{"programing-manual/mm/heap.html":{"ref":"programing-manual/mm/heap.html","tf":0.014084507042253521}}}}}},"v":{"docs":{},"m":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}},"。":{"docs":{"programing-manual/mm/heap.html":{"ref":"programing-manual/mm/heap.html","tf":0.014084507042253521}}}}}}},"b":{"docs":{},"a":{"docs":{},"r":{"docs":{},"r":{"docs":{},"i":{"docs":{},"e":{"docs":{},"r":{"docs":{},"o":{"docs":{},"p":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"s":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"o":{"docs":{},"p":{"docs":{},"y":{"docs":{},"(":{"docs":{},"t":{"docs":{},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{},"e":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}},"z":{"docs":{},"e":{"docs":{},"r":{"docs":{},"o":{"docs":{},"(":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}},"t":{"docs":{},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{},"e":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}},"m":{"docs":{},"u":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"p":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{},")":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"(":{"docs":{},"&":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"c":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}},"o":{"docs":{},"p":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"s":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{},"p":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{},"e":{"docs":{},"(":{"docs":{},"p":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{},"e":{"docs":{},"p":{"docs":{},"h":{"docs":{},"y":{"docs":{},")":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"d":{"docs":{},"t":{"docs":{},"o":{"docs":{},"f":{"docs":{},"i":{"docs":{},"r":{"docs":{},"s":{"docs":{},"t":{"docs":{},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{"programing-manual/base/start.html":{"ref":"programing-manual/base/start.html","tf":0.025},"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"p":{"docs":{},"_":{"docs":{},"m":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"programing-manual/base/start.html":{"ref":"programing-manual/base/start.html","tf":0.025}}}}}},"p":{"docs":{},"r":{"docs":{},"e":{"docs":{},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{"programing-manual/base/start.html":{"ref":"programing-manual/base/start.html","tf":0.025}}}}}}}}}}}},"i":{"docs":{},"z":{"docs":{},"e":{"docs":{"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.021739130434782608},"programing-manual/mm/heap.html":{"ref":"programing-manual/mm/heap.html","tf":0.014084507042253521},"programing-manual/mm/vmspace.html":{"ref":"programing-manual/mm/vmspace.html","tf":0.046153846153846156},"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.00209819555182543},"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.011029411764705883}}}}},"p":{"docs":{},"i":{"docs":{},"n":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}},"y":{"docs":{},"s":{"docs":{},"c":{"docs":{},"a":{"docs":{},"l":{"docs":{},"l":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"s":{"docs":{},"y":{"docs":{},"s":{"docs":{},"c":{"docs":{},"a":{"docs":{},"l":{"docs":{},"l":{"docs":{},"a":{"docs":{},"p":{"docs":{},"i":{"docs":{"programing-manual/process/syscall.html":{"ref":"programing-manual/process/syscall.html","tf":0.03125}}}}}}}}}}}}}}}}}}}}}}}}}},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"programing-manual/process/syscall.html":{"ref":"programing-manual/process/syscall.html","tf":0.03125}}}}}}},"w":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"r":{"docs":{},"g":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}},"b":{"docs":{},"u":{"docs":{},"d":{"docs":{},"d":{"docs":{},"y":{"docs":{},"c":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"(":{"docs":{},"v":{"docs":{},"o":{"docs":{},"i":{"docs":{},"d":{"docs":{"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.010869565217391304}}}}}}}}}}}}},"f":{"docs":{},"r":{"docs":{},"e":{"docs":{},"e":{"docs":{},"p":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"b":{"docs":{},"u":{"docs":{},"d":{"docs":{},"d":{"docs":{},"y":{"docs":{},"s":{"docs":{},"y":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{},"*":{"docs":{"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.010869565217391304}}}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"c":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"s":{"docs":{},"e":{"docs":{},"p":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"b":{"docs":{},"u":{"docs":{},"d":{"docs":{},"d":{"docs":{},"y":{"docs":{},"s":{"docs":{},"y":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{},"*":{"docs":{"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.010869565217391304}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"y":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{},"*":{"docs":{"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.010869565217391304}}}}}}}}}}}}},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.021505376344086023},"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.010362694300518135}}}}}},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.021739130434782608},"programing-manual/mm/heap.html":{"ref":"programing-manual/mm/heap.html","tf":0.014084507042253521},"programing-manual/mm/vmspace.html":{"ref":"programing-manual/mm/vmspace.html","tf":0.046153846153846156},"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.017123287671232876},"programing-manual/process/process.html":{"ref":"programing-manual/process/process.html","tf":0.012658227848101266},"programing-manual/interrupt/irq.html":{"ref":"programing-manual/interrupt/irq.html","tf":0.06779661016949153},"programing-manual/interrupt/delay_queue.html":{"ref":"programing-manual/interrupt/delay_queue.html","tf":0.0641025641025641},"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.043010752688172046},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.005035669324381032},"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.012953367875647668}}}}}},"f":{"docs":{},"a":{"docs":{},"u":{"docs":{},"l":{"docs":{},"t":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.001258917331095258}}}}}}}},"n":{"docs":{},"o":{"docs":{},"m":{"docs":{},"e":{"docs":{},"m":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}},"r":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}},"o":{"docs":{},"k":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.002517834662190516},"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.01818181818181818}}}}}},"p":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"*":{"docs":{"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.010869565217391304}}},"f":{"docs":{},"r":{"docs":{},"o":{"docs":{},"m":{"docs":{},"p":{"docs":{},"t":{"docs":{},"r":{"docs":{},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"b":{"docs":{},"u":{"docs":{},"d":{"docs":{},"d":{"docs":{},"y":{"docs":{},"s":{"docs":{},"y":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{},"*":{"docs":{"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.010869565217391304}}}}}}}}}}}}}}}}}}}}}}}}},"_":{"docs":{},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"r":{"docs":{},"_":{"docs":{},"m":{"docs":{},"a":{"docs":{},"s":{"docs":{},"k":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.001678556441460344}}}}}}}}}}},"l":{"docs":{},"i":{"docs":{},"g":{"docs":{},"n":{"docs":{},"u":{"docs":{},"p":{"docs":{},"(":{"docs":{},"s":{"docs":{},"i":{"docs":{},"z":{"docs":{},"e":{"docs":{},")":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.001258917331095258}}}}}}}}}}}}}}}},"s":{"docs":{},"i":{"docs":{},"z":{"docs":{},"e":{"docs":{},")":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}}},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}},"n":{"docs":{},"i":{"docs":{},"c":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"s":{"docs":{},"h":{"docs":{},"o":{"docs":{},"u":{"docs":{},"l":{"docs":{},"d":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}},"v":{"docs":{},"i":{"docs":{},"r":{"2":{"docs":{},"p":{"docs":{},"h":{"docs":{},"i":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}}}}},"docs":{}}}}}}}}}},"r":{"docs":{},"o":{"docs":{},"c":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"e":{"docs":{},"x":{"docs":{},"i":{"docs":{},"t":{"docs":{},"(":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"programing-manual/process/process.html":{"ref":"programing-manual/process/process.html","tf":0.012658227848101266}}}}}}}}}},"l":{"docs":{},"a":{"docs":{},"u":{"docs":{},"n":{"docs":{},"c":{"docs":{},"h":{"docs":{},"(":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"r":{"docs":{"programing-manual/process/process.html":{"ref":"programing-manual/process/process.html","tf":0.012658227848101266}}}}}}}}}}}}},"o":{"docs":{},"p":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"s":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"f":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}},"v":{"docs":{},"a":{"docs":{},"t":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.01594628619387327}}}}}}}},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"r":{"docs":{"programing-manual/mm/vmspace.html":{"ref":"programing-manual/mm/vmspace.html","tf":0.06153846153846154},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.00839278220730172}}}}},"s":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"t":{"docs":{},"(":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},")":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}},"m":{"docs":{},"m":{"docs":{},"u":{"docs":{},")":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.001678556441460344}}}}}}},"v":{"docs":{},"m":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{},")":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}},"_":{"docs":{},"b":{"docs":{},"u":{"docs":{},"f":{"docs":{},"e":{"docs":{},"q":{"docs":{},"(":{"docs":{},"b":{"docs":{},"u":{"docs":{},"f":{"0":{"docs":{},",":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}},"docs":{}}}}}}},"n":{"docs":{},"e":{"docs":{},"(":{"docs":{},"b":{"docs":{},"u":{"docs":{},"f":{"1":{"docs":{},",":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}},"docs":{}}}}}}}}}},"e":{"docs":{},"q":{"docs":{},"(":{"1":{"docs":{},",":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}},"docs":{}}}},"f":{"docs":{},"a":{"docs":{},"l":{"docs":{},"s":{"docs":{},"e":{"docs":{},"(":{"0":{"docs":{},")":{"docs":{},";":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.013636363636363636}}}}},"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"f":{"docs":{},"a":{"docs":{},"l":{"docs":{},"s":{"docs":{},"e":{"docs":{},")":{"docs":{},";":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}}}}}}}}}}}}}}}},"g":{"docs":{},"e":{"docs":{},"(":{"3":{"docs":{},",":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}},"docs":{}}},"t":{"docs":{},"(":{"4":{"docs":{},",":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}},"docs":{}}}},"i":{"docs":{},"n":{"docs":{},"_":{"docs":{},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{},"e":{"docs":{},"(":{"1":{"docs":{},",":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.00909090909090909}}}},"4":{"docs":{},",":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}},"5":{"docs":{},",":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}},"docs":{}}}}}}}}}},"l":{"docs":{},"e":{"docs":{},"(":{"3":{"docs":{},",":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.00909090909090909}}}},"docs":{}}},"t":{"docs":{},"(":{"3":{"docs":{},",":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}},"docs":{}}}},"n":{"docs":{},"e":{"docs":{},"(":{"0":{"docs":{},",":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}},"docs":{}}},"i":{"docs":{},"_":{"docs":{},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{},"e":{"docs":{},"(":{"0":{"docs":{},",":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}},"1":{"docs":{},",":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}},"5":{"docs":{},",":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}},"6":{"docs":{},",":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}},"docs":{}}}}}}}}},"o":{"docs":{},"t":{"docs":{},"_":{"docs":{},"n":{"docs":{},"u":{"docs":{},"l":{"docs":{},"l":{"docs":{},"(":{"docs":{},"q":{"docs":{},")":{"docs":{},";":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}}}}}}}}}}},"u":{"docs":{},"l":{"docs":{},"l":{"docs":{},"(":{"docs":{},"p":{"docs":{},")":{"docs":{},";":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}}}}}}}},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"e":{"docs":{},"q":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"h":{"docs":{},"e":{"docs":{},"l":{"docs":{},"l":{"docs":{},"o":{"docs":{},"\"":{"docs":{},",":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}}}}}}}},"s":{"docs":{},",":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}}}}},"n":{"docs":{},"e":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"h":{"docs":{},"e":{"docs":{},"l":{"docs":{},"l":{"docs":{},"o":{"docs":{},"\"":{"docs":{},",":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}}}}}}}},"s":{"docs":{},",":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}}}}}}}},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{},"e":{"docs":{},"(":{"1":{"docs":{},")":{"docs":{},";":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.013636363636363636}}}}},"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{},"e":{"docs":{},")":{"docs":{},";":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"o":{"docs":{},"m":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"i":{"docs":{},"c":{"docs":{},"o":{"docs":{},"p":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"s":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}},"u":{"3":{"2":{"docs":{"programing-manual/mm/vmspace.html":{"ref":"programing-manual/mm/vmspace.html","tf":0.06153846153846154},"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.023972602739726026},"programing-manual/process/process.html":{"ref":"programing-manual/process/process.html","tf":0.012658227848101266},"programing-manual/interrupt/irq.html":{"ref":"programing-manual/interrupt/irq.html","tf":0.01694915254237288},"programing-manual/interrupt/delay_queue.html":{"ref":"programing-manual/interrupt/delay_queue.html","tf":0.02564102564102564}}},"docs":{}},"6":{"4":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.001258917331095258}}},"docs":{}},"8":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.00684931506849315},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}},"docs":{},"a":{"docs":{},"r":{"docs":{},"c":{"docs":{},"h":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.010273972602739725},"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.010752688172043012},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.0037767519932857744}}}}}}},"v":{"docs":{},"m":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"v":{"docs":{},"m":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{"programing-manual/mm/vmspace.html":{"ref":"programing-manual/mm/vmspace.html","tf":0.015384615384615385}}}}}}}}}}}},"w":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"p":{"docs":{},"h":{"docs":{},"y":{"docs":{},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"v":{"docs":{},"m":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{"programing-manual/mm/vmspace.html":{"ref":"programing-manual/mm/vmspace.html","tf":0.015384615384615385}}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"n":{"docs":{},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"v":{"docs":{},"m":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{"programing-manual/mm/vmspace.html":{"ref":"programing-manual/mm/vmspace.html","tf":0.015384615384615385}}}}}}}}}}}}}}}}}}}}}}}},"i":{"3":{"2":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}},"docs":{}},"docs":{},"r":{"docs":{},"q":{"docs":{},"_":{"docs":{},"b":{"docs":{},"i":{"docs":{},"n":{"docs":{},"d":{"docs":{},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"i":{"docs":{},"r":{"docs":{},"q":{"docs":{},"_":{"docs":{},"n":{"docs":{},"u":{"docs":{},"m":{"docs":{},"b":{"docs":{"programing-manual/interrupt/irq.html":{"ref":"programing-manual/interrupt/irq.html","tf":0.01694915254237288}}}}}}}}}}}}}}}}}},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"r":{"docs":{},"o":{"docs":{},"l":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"e":{"docs":{},".":{"docs":{},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{"programing-manual/interrupt/irq.html":{"ref":"programing-manual/interrupt/irq.html","tf":0.01694915254237288}}}}}}}}}}},"e":{"docs":{},"n":{"docs":{},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{"programing-manual/interrupt/irq.html":{"ref":"programing-manual/interrupt/irq.html","tf":0.01694915254237288}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"e":{"docs":{},"l":{"docs":{},"e":{"docs":{},"v":{"docs":{},"e":{"docs":{},"l":{"docs":{},"(":{"docs":{},"l":{"docs":{},"e":{"docs":{},"v":{"docs":{},"e":{"docs":{},"l":{"docs":{},")":{"docs":{"programing-manual/interrupt/irq.html":{"ref":"programing-manual/interrupt/irq.html","tf":0.01694915254237288}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"a":{"docs":{},"v":{"docs":{},"e":{"docs":{},"l":{"docs":{},"e":{"docs":{},"v":{"docs":{},"e":{"docs":{},"l":{"docs":{},"(":{"docs":{},")":{"docs":{"programing-manual/interrupt/irq.html":{"ref":"programing-manual/interrupt/irq.html","tf":0.01694915254237288}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{"programing-manual/interrupt/irq.html":{"ref":"programing-manual/interrupt/irq.html","tf":0.01694915254237288}},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{"programing-manual/interrupt/irq.html":{"ref":"programing-manual/interrupt/irq.html","tf":0.01694915254237288}}}}}}}}}},"e":{"docs":{},"l":{"docs":{},"a":{"docs":{},"y":{"docs":{},"q":{"docs":{},"u":{"docs":{},"e":{"docs":{},"u":{"docs":{"programing-manual/interrupt/delay_queue.html":{"ref":"programing-manual/interrupt/delay_queue.html","tf":0.01282051282051282}},"e":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"i":{"docs":{},"r":{"docs":{},"q":{"docs":{},"_":{"docs":{},"d":{"docs":{},"e":{"docs":{},"l":{"docs":{},"a":{"docs":{},"y":{"docs":{},"q":{"docs":{},"u":{"docs":{},"e":{"docs":{},"u":{"docs":{"programing-manual/interrupt/delay_queue.html":{"ref":"programing-manual/interrupt/delay_queue.html","tf":0.01282051282051282}}}}}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"e":{"docs":{},"a":{"docs":{},"v":{"docs":{},"e":{"docs":{},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"i":{"docs":{},"r":{"docs":{},"q":{"docs":{},"_":{"docs":{},"d":{"docs":{},"e":{"docs":{},"l":{"docs":{},"a":{"docs":{},"y":{"docs":{},"q":{"docs":{},"u":{"docs":{},"e":{"docs":{},"u":{"docs":{"programing-manual/interrupt/delay_queue.html":{"ref":"programing-manual/interrupt/delay_queue.html","tf":0.01282051282051282}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{"programing-manual/interrupt/delay_queue.html":{"ref":"programing-manual/interrupt/delay_queue.html","tf":0.038461538461538464}},"d":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"o":{"docs":{},"y":{"docs":{},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"i":{"docs":{},"r":{"docs":{},"q":{"docs":{},"_":{"docs":{},"d":{"docs":{},"e":{"docs":{},"l":{"docs":{},"a":{"docs":{},"y":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{"programing-manual/interrupt/delay_queue.html":{"ref":"programing-manual/interrupt/delay_queue.html","tf":0.01282051282051282}}}}}}}}}}}}}}}}}}}}}}}}}},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"programing-manual/interrupt/delay_queue.html":{"ref":"programing-manual/interrupt/delay_queue.html","tf":0.01282051282051282}},"e":{"docs":{},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"i":{"docs":{},"r":{"docs":{},"q":{"docs":{},"_":{"docs":{},"d":{"docs":{},"e":{"docs":{},"l":{"docs":{},"a":{"docs":{},"y":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{"programing-manual/interrupt/delay_queue.html":{"ref":"programing-manual/interrupt/delay_queue.html","tf":0.01282051282051282}}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"i":{"docs":{},"r":{"docs":{},"q":{"docs":{},"_":{"docs":{},"d":{"docs":{},"e":{"docs":{},"l":{"docs":{},"a":{"docs":{},"y":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{"programing-manual/interrupt/delay_queue.html":{"ref":"programing-manual/interrupt/delay_queue.html","tf":0.01282051282051282}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"n":{"docs":{"programing-manual/interrupt/irq.html":{"ref":"programing-manual/interrupt/irq.html","tf":0.01694915254237288}},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{"programing-manual/interrupt/irq.html":{"ref":"programing-manual/interrupt/irq.html","tf":0.01694915254237288}}}}}}}}}},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"programing-manual/interrupt/irq.html":{"ref":"programing-manual/interrupt/irq.html","tf":0.01694915254237288}}}}}}},"m":{"docs":{},"a":{"docs":{},"s":{"docs":{},"k":{"docs":{},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"i":{"docs":{},"r":{"docs":{},"q":{"docs":{},"_":{"docs":{},"n":{"docs":{},"u":{"docs":{},"m":{"docs":{},"b":{"docs":{"programing-manual/interrupt/irq.html":{"ref":"programing-manual/interrupt/irq.html","tf":0.01694915254237288}}}}}}}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"e":{"docs":{},"l":{"docs":{},"e":{"docs":{},"v":{"docs":{},"e":{"docs":{},"l":{"docs":{"programing-manual/interrupt/irq.html":{"ref":"programing-manual/interrupt/irq.html","tf":0.01694915254237288}},"(":{"docs":{},"l":{"docs":{},"e":{"docs":{},"v":{"docs":{},"e":{"docs":{},"l":{"docs":{},")":{"docs":{"programing-manual/interrupt/irq.html":{"ref":"programing-manual/interrupt/irq.html","tf":0.01694915254237288}},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.001258917331095258}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"a":{"docs":{},"v":{"docs":{},"e":{"docs":{},"l":{"docs":{},"e":{"docs":{},"v":{"docs":{},"e":{"docs":{},"l":{"docs":{"programing-manual/interrupt/irq.html":{"ref":"programing-manual/interrupt/irq.html","tf":0.01694915254237288}},"(":{"docs":{},")":{"docs":{"programing-manual/interrupt/irq.html":{"ref":"programing-manual/interrupt/irq.html","tf":0.01694915254237288}},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.001258917331095258}}}}}}}}}}}}},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"d":{"docs":{},"_":{"docs":{},"q":{"docs":{},"u":{"docs":{},"e":{"docs":{},"u":{"docs":{"programing-manual/interrupt/delay_queue.html":{"ref":"programing-manual/interrupt/delay_queue.html","tf":0.01282051282051282}},"e":{"docs":{},",":{"docs":{"programing-manual/interrupt/delay_queue.html":{"ref":"programing-manual/interrupt/delay_queue.html","tf":0.01282051282051282}}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{},"_":{"docs":{},"q":{"docs":{},"u":{"docs":{},"e":{"docs":{},"u":{"docs":{"programing-manual/interrupt/delay_queue.html":{"ref":"programing-manual/interrupt/delay_queue.html","tf":0.01282051282051282}},"e":{"docs":{},",":{"docs":{"programing-manual/interrupt/delay_queue.html":{"ref":"programing-manual/interrupt/delay_queue.html","tf":0.01282051282051282}}}}}}}}}}}}},"u":{"docs":{},"n":{"docs":{},"b":{"docs":{},"i":{"docs":{},"n":{"docs":{},"d":{"docs":{},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"i":{"docs":{},"r":{"docs":{},"q":{"docs":{},"_":{"docs":{},"n":{"docs":{},"u":{"docs":{},"m":{"docs":{},"b":{"docs":{"programing-manual/interrupt/irq.html":{"ref":"programing-manual/interrupt/irq.html","tf":0.01694915254237288}}}}}}}}}}}}}}}}}},"m":{"docs":{},"a":{"docs":{},"s":{"docs":{},"k":{"docs":{},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"i":{"docs":{},"r":{"docs":{},"q":{"docs":{},"_":{"docs":{},"n":{"docs":{},"u":{"docs":{},"m":{"docs":{},"b":{"docs":{"programing-manual/interrupt/irq.html":{"ref":"programing-manual/interrupt/irq.html","tf":0.01694915254237288}}}}}}}}}}}}}}}}}}}},"f":{"docs":{},"a":{"docs":{},"s":{"docs":{},"t":{"docs":{},"_":{"docs":{},"q":{"docs":{},"u":{"docs":{},"e":{"docs":{},"u":{"docs":{"programing-manual/interrupt/delay_queue.html":{"ref":"programing-manual/interrupt/delay_queue.html","tf":0.038461538461538464}}}}}}}}}}},"n":{"docs":{},"o":{"docs":{},"r":{"docs":{},"m":{"docs":{},"a":{"docs":{},"l":{"docs":{},"_":{"docs":{},"q":{"docs":{},"u":{"docs":{},"e":{"docs":{},"u":{"docs":{},"e":{"docs":{},",":{"docs":{"programing-manual/interrupt/delay_queue.html":{"ref":"programing-manual/interrupt/delay_queue.html","tf":0.01282051282051282}}}}}}}}}}}}}}},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"o":{"docs":{},"d":{"docs":{},"_":{"docs":{},"q":{"docs":{},"u":{"docs":{},"e":{"docs":{},"u":{"docs":{},"e":{"docs":{},",":{"docs":{"programing-manual/interrupt/delay_queue.html":{"ref":"programing-manual/interrupt/delay_queue.html","tf":0.01282051282051282}}}}}}}}}}}}}}},"q":{"docs":{},"u":{"docs":{},"e":{"docs":{},"u":{"docs":{},"e":{"docs":{},"_":{"docs":{},"n":{"docs":{},"r":{"docs":{},",":{"docs":{"programing-manual/interrupt/delay_queue.html":{"ref":"programing-manual/interrupt/delay_queue.html","tf":0.01282051282051282}}}}}}}}}}},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"programing-manual/interrupt/delay_queue.html":{"ref":"programing-manual/interrupt/delay_queue.html","tf":0.01282051282051282}}}}}}}}}}}}}},"m":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.0029374737725556023}}}}}}},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.0037767519932857744}}}}}}}}}},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.0136986301369863}}}}},"o":{"docs":{},"g":{"docs":{},"_":{"docs":{},"*":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}},"d":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"r":{"docs":{},"i":{"docs":{},"s":{"docs":{},"c":{"docs":{},"v":{"6":{"4":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.001258917331095258}}},"docs":{}},"docs":{}}}}}}}}},"i":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"b":{"docs":{},"o":{"docs":{},"o":{"docs":{},"t":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}},"h":{"docs":{},"e":{"docs":{},"l":{"docs":{},"l":{"docs":{},"o":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"2":{"docs":{},"!":{"docs":{},"\"":{"docs":{},")":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}},"docs":{}}}}}}}},"n":{"docs":{},"f":{"docs":{},"o":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}}}}},"l":{"docs":{},"e":{"docs":{},"v":{"docs":{},"e":{"docs":{},"l":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}}}}}},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.001678556441460344}}}}}}}}},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.0136986301369863},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172},"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}},";":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}},"_":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"y":{"docs":{},"_":{"docs":{},"h":{"docs":{},"i":{"docs":{},"g":{"docs":{},"h":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}},"i":{"docs":{},"d":{"docs":{},"l":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}},"n":{"docs":{},"o":{"docs":{},"r":{"docs":{},"m":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}},"r":{"docs":{},"t":{"docs":{},"_":{"docs":{},"m":{"docs":{},"a":{"docs":{},"x":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}},"i":{"docs":{},"n":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}}}}}}}}}}}}},"c":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"t":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}},"d":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"o":{"docs":{},"y":{"docs":{},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"i":{"docs":{},"t":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}},"(":{"docs":{},"v":{"docs":{},"o":{"docs":{},"i":{"docs":{},"d":{"docs":{},")":{"docs":{},";":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}}}}}}}},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.00684931506849315}}}}}}},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"o":{"docs":{},"u":{"docs":{},"r":{"docs":{},"c":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"l":{"docs":{},"f":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}},"t":{"docs":{},"a":{"docs":{},"f":{"docs":{},"f":{"docs":{},"i":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"y":{"docs":{},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"e":{"docs":{},"e":{"docs":{},"p":{"docs":{},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"u":{"docs":{},"a":{"docs":{},"r":{"docs":{},"c":{"docs":{},"h":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}}}}}}}}}},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}}}}}}}}},"t":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"m":{"docs":{},"i":{"docs":{},"n":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}}}}}}}}}}}}}}}},"y":{"docs":{},"i":{"docs":{},"e":{"docs":{},"l":{"docs":{},"d":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}},"(":{"docs":{},"v":{"docs":{},"o":{"docs":{},"i":{"docs":{},"d":{"docs":{},")":{"docs":{},";":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.03225806451612903}},"_":{"docs":{},"o":{"docs":{},"n":{"docs":{},"e":{"docs":{},"s":{"docs":{},"h":{"docs":{},"o":{"docs":{},"t":{"docs":{"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.010752688172043012}}}}}}}}},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"o":{"docs":{},"d":{"docs":{"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.010752688172043012}}}}}}}},"c":{"docs":{},"l":{"docs":{},"k":{"docs":{},"_":{"docs":{},"f":{"docs":{},"r":{"docs":{},"e":{"docs":{},"q":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}}}}}}}}}},"d":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"o":{"docs":{},"y":{"docs":{},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.010752688172043012}}}}}}}}},",":{"docs":{"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.010752688172043012}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.010752688172043012}},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.010752688172043012}}}}}}}}}}}}},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.010752688172043012}},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.010752688172043012}}}}}}}}}}}},"o":{"docs":{},"p":{"docs":{"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.010752688172043012}},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.010752688172043012}}}}}}}}}}}}}}}},"c":{"docs":{},"k":{"docs":{},"s":{"docs":{},"_":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"_":{"docs":{},"s":{"docs":{},"e":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"d":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"(":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"1":{"docs":{},")":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}},"2":{"docs":{},")":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}},"3":{"docs":{},")":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}},"docs":{},")":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}},"u":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},")":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}}}}}}}}}}}}},"y":{"docs":{},"y":{"docs":{},"y":{"docs":{},")":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}}}}},"_":{"docs":{},"c":{"docs":{},"a":{"docs":{},"s":{"docs":{},"e":{"docs":{},"(":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"c":{"docs":{},"a":{"docs":{},"s":{"docs":{},"e":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},")":{"docs":{},";":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}}}}}}}}}}}}}},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},")":{"docs":{},";":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}}}}}}},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},")":{"docs":{},";":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}}}}}},"_":{"docs":{},"c":{"docs":{},"l":{"docs":{},"e":{"docs":{},"a":{"docs":{},"n":{"docs":{},"(":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"c":{"docs":{},"a":{"docs":{},"s":{"docs":{},"e":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},")":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}}}}}}}}}}}}},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},")":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}}}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{},"u":{"docs":{},"p":{"docs":{},"(":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"c":{"docs":{},"a":{"docs":{},"s":{"docs":{},"e":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},")":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}}}}}}}}}}}}},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},")":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}}}}}}}}}}}}}}}},"l":{"docs":{},"e":{"docs":{},"a":{"docs":{},"n":{"docs":{},"(":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},")":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}},"u":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},")":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{},"u":{"docs":{},"p":{"docs":{},"(":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},")":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}},"u":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},")":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{},"e":{"docs":{},"(":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"c":{"docs":{},"a":{"docs":{},"s":{"docs":{},"e":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},")":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}}}}}}}}}}}}},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},")":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}}}}}},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},")":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}}}}}}}}}},"u":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"(":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"1":{"docs":{},")":{"docs":{},",":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}}},"2":{"docs":{},")":{"docs":{},",":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}}},"3":{"docs":{},")":{"docs":{},",":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}}},"docs":{},")":{"docs":{},",":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}},"u":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},")":{"docs":{},",":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}}}}}}}}}}}}}},"y":{"docs":{},"y":{"docs":{},"y":{"docs":{},")":{"docs":{},",":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}}}}}},"_":{"docs":{},"c":{"docs":{},"l":{"docs":{},"e":{"docs":{},"a":{"docs":{},"n":{"docs":{},"(":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"u":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},")":{"docs":{},",":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{},"u":{"docs":{},"p":{"docs":{},"(":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"u":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},")":{"docs":{},",":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}}}}}}}}}}}}}}},"_":{"docs":{},"c":{"docs":{},"l":{"docs":{},"e":{"docs":{},"a":{"docs":{},"n":{"docs":{},"(":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},")":{"docs":{},",":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}},"u":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},")":{"docs":{},",":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"f":{"docs":{},"a":{"docs":{},"l":{"docs":{},"s":{"docs":{},"e":{"docs":{},")":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}},"d":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"a":{"docs":{},"c":{"docs":{},"c":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"(":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"r":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}}}}},"c":{"docs":{},"l":{"docs":{},"o":{"docs":{},"s":{"docs":{},"e":{"docs":{},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"f":{"docs":{},"d":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"(":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"r":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}}}}},"d":{"docs":{},"e":{"docs":{},"l":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},"(":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"r":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}}}}},"i":{"docs":{},"s":{"docs":{},"e":{"docs":{},"n":{"docs":{},"d":{"docs":{},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"f":{"docs":{},"d":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}}}}},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{},"n":{"docs":{},"(":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"r":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"f":{"docs":{},"d":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"e":{"docs":{},"k":{"docs":{},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"f":{"docs":{},"d":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}}}},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"l":{"docs":{},"o":{"docs":{},"f":{"docs":{},"f":{"docs":{},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"f":{"docs":{},"d":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}}}}}}}}}},"w":{"docs":{},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"f":{"docs":{},"d":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}}}}}}}}},"n":{"docs":{},"r":{"docs":{},"_":{"docs":{},"i":{"docs":{},"r":{"docs":{},"q":{"docs":{},"s":{"docs":{},")":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.001258917331095258}}}}}}}}},"u":{"docs":{},"l":{"docs":{},"l":{"docs":{},")":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.001258917331095258}}},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.001678556441460344},"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}}}}},"d":{"docs":{},"i":{"docs":{},"r":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},"c":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"(":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"r":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}}}}},"d":{"docs":{},"e":{"docs":{},"l":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},"(":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"r":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}}}}}}}}}},"n":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}}}},"e":{"docs":{},"t":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{},")":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}}}}}}}}},"e":{"docs":{},"d":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"s":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"d":{"docs":{},";":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}}}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}}}},"w":{"docs":{},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"u":{"docs":{},"e":{"docs":{},")":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}}}}}}}}},"x":{"docs":{},"t":{"docs":{},"s":{"docs":{},"p":{"docs":{},")":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.001678556441460344}}}}}}}}},"t":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}}},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575},"programing-manual/process/process.html":{"ref":"programing-manual/process/process.html","tf":0.012658227848101266},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"[":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"_":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"_":{"docs":{},"l":{"docs":{},"e":{"docs":{},"n":{"docs":{},"]":{"docs":{},";":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"d":{"docs":{},"_":{"docs":{},"d":{"docs":{},"e":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"_":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"_":{"docs":{},"l":{"docs":{},"e":{"docs":{},"n":{"docs":{},"]":{"docs":{},";":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}}}}}}}}}}}}}}}}}}},")":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.010362694300518135}}},",":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}},"o":{"docs":{},"r":{"docs":{},"m":{"docs":{},"a":{"docs":{},"l":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}},"t":{"docs":{},"e":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.004616030214015947},"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}},":":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},":":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}},"u":{"docs":{},"m":{"docs":{},"b":{"docs":{},"e":{"docs":{},"r":{"docs":{},")":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{"./":{"ref":"./","tf":0.02631578947368421}}},"n":{"docs":{},"s":{"docs":{},"b":{"docs":{},"i":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.001258917331095258}},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}},"n":{"docs":{"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.010752688172043012}},"c":{"docs":{},"o":{"docs":{},"r":{"docs":{},"e":{"docs":{},";":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}},"e":{"docs":{},"s":{"docs":{},"h":{"docs":{},"o":{"docs":{},"t":{"docs":{"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.010752688172043012}}}}}}}},"l":{"docs":{},"d":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}}}},"u":{"docs":{},"t":{"docs":{},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}},"f":{"docs":{},"f":{"docs":{},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.012953367875647668}},")":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0051813471502590676}}},",":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}},"p":{"docs":{},"r":{"docs":{"./":{"ref":"./","tf":0.02631578947368421}},"e":{"docs":{},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.010050251256281407}}}}},"v":{"docs":{},"s":{"docs":{},"p":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}}}}},"f":{"docs":{},"i":{"docs":{},"x":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}}},"o":{"docs":{},"c":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315},"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},";":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}},"o":{"docs":{},"r":{"docs":{},")":{"docs":{},"。":{"docs":{"programing-manual/sched/smp.html":{"ref":"programing-manual/sched/smp.html","tf":0.0625}}},"启":{"docs":{},"动":{"docs":{},"后":{"docs":{},",":{"docs":{},"进":{"docs":{},"入":{"docs":{},"内":{"docs":{},"核":{"docs":{},",":{"docs":{},"完":{"docs":{},"成":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},",":{"docs":{},"再":{"docs":{},"由":{"docs":{},"引":{"docs":{},"导":{"docs":{},"处":{"docs":{},"理":{"docs":{},"器":{"docs":{},"去":{"docs":{},"唤":{"docs":{},"醒":{"docs":{},"其":{"docs":{},"它":{"docs":{},"处":{"docs":{},"理":{"docs":{},"器":{"docs":{},",":{"docs":{},"通":{"docs":{},"常":{"docs":{},"称":{"docs":{},"为":{"docs":{},"应":{"docs":{},"用":{"docs":{},"处":{"docs":{},"理":{"docs":{},"器":{"docs":{},"(":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{},"l":{"docs":{"programing-manual/sched/smp.html":{"ref":"programing-manual/sched/smp.html","tf":0.0625}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"(":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"r":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"i":{"docs":{},"t":{"docs":{},"(":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"i":{"docs":{},"d":{"docs":{},"(":{"docs":{},"v":{"docs":{},"o":{"docs":{},"i":{"docs":{},"d":{"docs":{},")":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}}}}},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"m":{"docs":{},"i":{"docs":{},"n":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"(":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}}}}}}},"w":{"docs":{},"a":{"docs":{},"i":{"docs":{},"t":{"docs":{},"(":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}}}}}},"t":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}},"i":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"i":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.0273972602739726}}},"y":{"docs":{},")":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}},";":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}},",":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.00684931506849315}}},";":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}},",":{"docs":{},"即":{"docs":{},"可":{"docs":{},"创":{"docs":{},"建":{"docs":{},"一":{"docs":{},"个":{"docs":{},"线":{"docs":{},"程":{"docs":{},",":{"docs":{},"返":{"docs":{},"回":{"docs":{},"线":{"docs":{},"程":{"docs":{},"的":{"docs":{},"地":{"docs":{},"址":{"docs":{},"。":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}}}}}}}}}}}}}}}}}}}}}},"y":{"docs":{},"t":{"docs":{},"h":{"docs":{},"o":{"docs":{},"n":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.010050251256281407}}}}}}},"c":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}},"l":{"docs":{},"a":{"docs":{},"t":{"docs":{},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{},"m":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}}}}},"r":{"docs":{},"o":{"docs":{},"m":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}},"i":{"docs":{},"c":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"_":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"s":{"docs":{},"m":{"docs":{},"p":{"docs":{},"_":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"b":{"docs":{},"o":{"docs":{},"o":{"docs":{},"t":{"docs":{},"c":{"docs":{},"o":{"docs":{},"r":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{},"e":{"docs":{},"i":{"docs":{},"r":{"docs":{},"q":{"docs":{},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"s":{"docs":{},"m":{"docs":{},"p":{"docs":{},"_":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"b":{"docs":{},"o":{"docs":{},"o":{"docs":{},"t":{"docs":{},"c":{"docs":{},"o":{"docs":{},"r":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"n":{"docs":{},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{},"e":{"docs":{},"i":{"docs":{},"r":{"docs":{},"q":{"docs":{},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"s":{"docs":{},"m":{"docs":{},"p":{"docs":{},"_":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"b":{"docs":{},"o":{"docs":{},"o":{"docs":{},"t":{"docs":{},"c":{"docs":{},"o":{"docs":{},"r":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{},"e":{"docs":{},")":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}},"h":{"docs":{},"y":{"docs":{},"s":{"docs":{},"i":{"docs":{},"c":{"docs":{"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.010869565217391304}}}}},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"r":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}}}}}}}},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"r":{"docs":{},",":{"docs":{"programing-manual/mm/vmspace.html":{"ref":"programing-manual/mm/vmspace.html","tf":0.015384615384615385}}}}}},"t":{"docs":{},"h":{"docs":{"programing-manual/process/process.html":{"ref":"programing-manual/process/process.html","tf":0.012658227848101266}},",":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}},"g":{"docs":{},"e":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.0029374737725556023},"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}},"o":{"docs":{},"f":{"docs":{},"f":{"docs":{},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},")":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}},"p":{"docs":{},"h":{"docs":{},"i":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}},"y":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}},"s":{"docs":{},")":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}},"t":{"docs":{},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{},"e":{"docs":{},"p":{"docs":{},"h":{"docs":{},"i":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}},"w":{"docs":{},"a":{"docs":{},"l":{"docs":{},"k":{"docs":{},"(":{"docs":{},"p":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{},"e":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"o":{"docs":{},"d":{"docs":{"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.021505376344086023}}}}}}},"p":{"docs":{},"n":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}},"。":{"docs":{},"第":{"docs":{},"一":{"docs":{},"级":{"docs":{},"硬":{"docs":{},"件":{"docs":{},"回":{"docs":{},"填":{"docs":{},"使":{"docs":{},"用":{"docs":{},"的":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}},"t":{"docs":{},"e":{"2":{"docs":{},"p":{"docs":{},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"r":{"docs":{},"(":{"docs":{},"*":{"docs":{},"p":{"docs":{},"t":{"docs":{},"e":{"docs":{},")":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}},"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},"i":{"docs":{},"d":{"docs":{},")":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}},",":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}},"s":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}},"y":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.020100502512562814},"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315},"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.03260869565217391},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086},"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.049586776859504134}},"的":{"docs":{},"意":{"docs":{},"思":{"docs":{},",":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"跨":{"docs":{},"平":{"docs":{},"台":{"docs":{},"的":{"docs":{},"简":{"docs":{},"洁":{"docs":{},"、":{"docs":{},"高":{"docs":{},"性":{"docs":{},"能":{"docs":{},"、":{"docs":{},"高":{"docs":{},"稳":{"docs":{},"定":{"docs":{},"性":{"docs":{},"的":{"docs":{},"支":{"docs":{},"持":{"docs":{},"多":{"docs":{},"核":{"docs":{},"的":{"docs":{},"混":{"docs":{},"合":{"docs":{},"内":{"docs":{},"核":{"docs":{},",":{"docs":{},"它":{"docs":{},"将":{"docs":{},"应":{"docs":{},"用":{"docs":{},"于":{"docs":{},"桌":{"docs":{},"面":{"docs":{},"操":{"docs":{},"作":{"docs":{},"系":{"docs":{},"统":{"docs":{},"领":{"docs":{},"域":{"docs":{},",":{"docs":{},"服":{"docs":{},"务":{"docs":{},"器":{"docs":{},"操":{"docs":{},"作":{"docs":{},"系":{"docs":{},"统":{"docs":{},"领":{"docs":{},"域":{"docs":{},"以":{"docs":{},"及":{"docs":{},"移":{"docs":{},"动":{"docs":{},"终":{"docs":{},"端":{"docs":{},"操":{"docs":{},"作":{"docs":{},"系":{"docs":{},"统":{"docs":{},"领":{"docs":{},"域":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.02631578947368421}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.043478260869565216}}},"设":{"docs":{},"计":{"docs":{},"好":{"docs":{},"了":{"docs":{},"再":{"docs":{},"设":{"docs":{},"计":{"docs":{},"接":{"docs":{},"口":{"docs":{},",":{"docs":{},"目":{"docs":{},"前":{"docs":{},"还":{"docs":{},"没":{"docs":{},"有":{"docs":{},"概":{"docs":{},"念":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"a":{"docs":{},"l":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.001258917331095258}}}}}}},"a":{"docs":{},"v":{"docs":{},"e":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.001678556441460344}},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.005025125628140704},"tutorial/menuconfig.html":{"ref":"tutorial/menuconfig.html","tf":0.038461538461538464}}}}}}}},"_":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}},"m":{"docs":{},"e":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},"t":{"docs":{},"p":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}},"e":{"docs":{},"t":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.00209819555182543},"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}},"u":{"docs":{},"p":{"docs":{},".":{"docs":{},"b":{"docs":{},"a":{"docs":{},"t":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.01507537688442211}}}}},"s":{"docs":{},"h":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.01507537688442211}}}}}}},"c":{"docs":{},"s":{"docs":{},"r":{"docs":{},"(":{"docs":{},"s":{"docs":{},"i":{"docs":{},"e":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}},"c":{"docs":{},"i":{"docs":{},"t":{"docs":{},"o":{"docs":{},"n":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}},"e":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}},"k":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"o":{"docs":{},"d":{"docs":{},")":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}}},"p":{"docs":{},"c":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}},"o":{"docs":{},"u":{"docs":{},"r":{"docs":{},"c":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.01507537688442211}}}},"n":{"docs":{},"d":{"docs":{},"_":{"docs":{},"a":{"docs":{},"c":{"9":{"7":{"docs":{},",":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}},"docs":{}},"docs":{}}},"h":{"docs":{},"d":{"docs":{},",":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}},"p":{"docs":{},"c":{"docs":{},",":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}},"c":{"docs":{},"a":{"docs":{},"l":{"docs":{},"l":{"docs":{},"b":{"docs":{},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}}}}}}}},"d":{"docs":{},"e":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.007352941176470588}},"e":{"docs":{},";":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.007352941176470588}},"e":{"docs":{},";":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}}}},"u":{"docs":{},"d":{"docs":{},"o":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.03015075376884422}}}},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"s":{"docs":{},"o":{"docs":{},"r":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.005035669324381032}},",":{"docs":{"programing-manual/process/syscall.html":{"ref":"programing-manual/process/syscall.html","tf":0.03125}}},"模":{"docs":{},"式":{"docs":{},"的":{"docs":{},"中":{"docs":{},"断":{"docs":{},"的":{"docs":{},"打":{"docs":{},"开":{"docs":{},"与":{"docs":{},"关":{"docs":{},"闭":{"docs":{},"是":{"docs":{},"由":{"docs":{},"状":{"docs":{},"态":{"docs":{},"寄":{"docs":{},"存":{"docs":{},"器":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}}},"r":{"docs":{},"e":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},"b":{"docs":{},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}},"是":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}}}}}},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"d":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315},"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}},"u":{"docs":{},"l":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},"t":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}}}}}},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}},"用":{"docs":{},"于":{"docs":{},"说":{"docs":{},"明":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}}}}}}},"m":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{},"。":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}}}}}},"p":{"docs":{},"多":{"docs":{},"核":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}},"启":{"docs":{},"动":{"docs":{},"流":{"docs":{},"程":{"docs":{"programing-manual/sched/smp.html":{"ref":"programing-manual/sched/smp.html","tf":0.0625}}}}}},"调":{"docs":{},"度":{"docs":{"programing-manual/sched/smp.html":{"ref":"programing-manual/sched/smp.html","tf":10}}}}}},"负":{"docs":{},"载":{"docs":{},"均":{"docs":{},"衡":{"docs":{"programing-manual/sched/smp.html":{"ref":"programing-manual/sched/smp.html","tf":0.0625}}}}}}}},"r":{"docs":{},"c":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}},"/":{"docs":{},"a":{"docs":{},"r":{"docs":{},"c":{"docs":{},"h":{"docs":{},"/":{"docs":{},"r":{"docs":{},"i":{"docs":{},"s":{"docs":{},"c":{"docs":{},"v":{"6":{"4":{"docs":{},"/":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}},"docs":{}},"docs":{}}}}}}}}}}}},",":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0051813471502590676}}}},"e":{"docs":{},"t":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.001678556441460344}}}}},"h":{"docs":{},"o":{"docs":{},"w":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{"programing-manual/base/start.html":{"ref":"programing-manual/base/start.html","tf":0.025}}}}}}}}}},"t":{"docs":{"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.010752688172043012}}}},"a":{"docs":{},"r":{"docs":{},"e":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.00684931506849315}}}}}},"i":{"docs":{},"z":{"docs":{},"e":{"docs":{"programing-manual/mm/heap.html":{"ref":"programing-manual/mm/heap.html","tf":0.04225352112676056},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.001678556441460344},"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}},")":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172},"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.010362694300518135}},";":{"docs":{"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.010869565217391304},"programing-manual/mm/heap.html":{"ref":"programing-manual/mm/heap.html","tf":0.014084507042253521},"programing-manual/mm/vmspace.html":{"ref":"programing-manual/mm/vmspace.html","tf":0.015384615384615385}}}},",":{"docs":{"programing-manual/mm/vmspace.html":{"ref":"programing-manual/mm/vmspace.html","tf":0.03076923076923077},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.00209819555182543},"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0051813471502590676}}},"o":{"docs":{},"f":{"docs":{},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"h":{"docs":{},"a":{"docs":{},"l":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},")":{"docs":{},")":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}}},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}},"u":{"docs":{},"a":{"docs":{},"r":{"docs":{},"c":{"docs":{},"h":{"docs":{},")":{"docs":{},")":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}},"e":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.001258917331095258}},"_":{"docs":{},"s":{"docs":{},"t":{"docs":{},"i":{"docs":{},"e":{"docs":{},")":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}}}}}}}}},"n":{"docs":{},"g":{"docs":{},"l":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}}},"t":{"docs":{},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.010273972602739725},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.003357112882920688}},"s":{"docs":{},"i":{"docs":{},"z":{"docs":{},"e":{"docs":{},";":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}},",":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338},"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}},"t":{"docs":{},"o":{"docs":{},"p":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}},"t":{"docs":{},"e":{"docs":{},";":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}},"r":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}},"r":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.00684931506849315},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.00209819555182543},"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.011029411764705883}}}}},")":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}},"o":{"docs":{},"r":{"docs":{},"e":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}}}},"v":{"docs":{},"e":{"docs":{},"c":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}},"y":{"docs":{},"l":{"docs":{},"e":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}},"(":{"docs":{},"*":{"docs":{},")":{"docs":{},":":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}}},":":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}}}},"b":{"docs":{},"i":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.0029374737725556023}},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}},"_":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},".":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}},"i":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"_":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"(":{"docs":{},")":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{},"_":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},"c":{"docs":{},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},")":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"k":{"docs":{},"i":{"docs":{},"p":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}},"p":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.003357112882920688}},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.0029374737725556023}}},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}},"d":{"docs":{},"x":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.004616030214015947},"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}},"s":{"docs":{},"c":{"docs":{},"r":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.001678556441460344}},"s":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}},"_":{"docs":{},"s":{"docs":{},"i":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}},"e":{"docs":{},")":{"docs":{},")":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}},"p":{"docs":{},"i":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"e":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}}}},"p":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.001258917331095258}}}},"u":{"docs":{},"m":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.001258917331095258}}}}}}}}}}},"i":{"docs":{},"z":{"docs":{},"e":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0051813471502590676}}}}}},"v":{"3":{"9":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},",":{"3":{"docs":{},"级":{"docs":{},"页":{"docs":{},"表":{"docs":{},",":{"docs":{},"页":{"docs":{},"表":{"docs":{},"和":{"docs":{},"物":{"docs":{},"理":{"docs":{},"页":{"docs":{},"都":{"docs":{},"是":{"4":{"docs":{},"k":{"docs":{},"b":{"docs":{},"大":{"docs":{},"小":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}},"docs":{}}}}}}}}}}}}}},"docs":{}}},"docs":{}},"4":{"8":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}},"docs":{}},"5":{"7":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}},"docs":{}},"6":{"4":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}},"docs":{}},"docs":{}},"w":{"docs":{},"i":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172},"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.011029411764705883}}}}}}},"n":{"docs":{},"d":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}}}}},"d":{"docs":{},"c":{"docs":{},"a":{"docs":{},"r":{"docs":{},"d":{"docs":{},"/":{"docs":{},"h":{"docs":{},"a":{"docs":{},"r":{"docs":{},"d":{"docs":{},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"k":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}}}}}}}}}}}}}},"v":{"0":{"docs":{},".":{"1":{"docs":{"./":{"ref":"./","tf":0.02631578947368421}}},"docs":{}}},"6":{"4":{"docs":{},"/":{"3":{"2":{"docs":{},"工":{"docs":{},"具":{"docs":{},"链":{"docs":{},":":{"docs":{"tutorial/toolchains.html":{"ref":"tutorial/toolchains.html","tf":0.02702702702702703}}}}}}},"docs":{}},"docs":{}},"工":{"docs":{},"具":{"docs":{},"链":{"docs":{},":":{"docs":{"tutorial/toolchains.html":{"ref":"tutorial/toolchains.html","tf":0.02702702702702703}}}}}}},"docs":{}},"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"f":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}},"s":{"docs":{},"_":{"docs":{},"c":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}}}}}}},"i":{"docs":{},"r":{"docs":{},"t":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}},"u":{"docs":{},"a":{"docs":{},"l":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.001678556441460344}}}}}},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"r":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.003357112882920688}},")":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.0029374737725556023}}},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}}}}}}}}},"m":{"docs":{},"m":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}}},"n":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{"programing-manual/mm/vmspace.html":{"ref":"programing-manual/mm/vmspace.html","tf":0.015384615384615385}},",":{"docs":{},"节":{"docs":{},"点":{"docs":{},"记":{"docs":{},"录":{"docs":{},"了":{"docs":{},"地":{"docs":{},"址":{"docs":{},"的":{"docs":{},"信":{"docs":{},"息":{"docs":{},"以":{"docs":{},"及":{"docs":{},"这":{"docs":{},"段":{"docs":{},"地":{"docs":{},"址":{"docs":{},"的":{"docs":{},"属":{"docs":{},"性":{"docs":{},"。":{"docs":{"programing-manual/mm/vmspace.html":{"ref":"programing-manual/mm/vmspace.html","tf":0.015384615384615385}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{},"虚":{"docs":{},"拟":{"docs":{},"地":{"docs":{},"址":{"docs":{},"空":{"docs":{},"间":{"docs":{"programing-manual/mm/vmspace.html":{"ref":"programing-manual/mm/vmspace.html","tf":10}}}}}}}}}}}}}},"s":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},"的":{"docs":{},"一":{"docs":{},"些":{"docs":{},"配":{"docs":{},"置":{"docs":{},"文":{"docs":{},"件":{"docs":{},",":{"docs":{},"有":{"docs":{},"g":{"docs":{},"d":{"docs":{},"b":{"docs":{},"调":{"docs":{},"试":{"docs":{},"配":{"docs":{},"置":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}}}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"i":{"docs":{},"d":{"docs":{"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.043478260869565216},"programing-manual/mm/heap.html":{"ref":"programing-manual/mm/heap.html","tf":0.014084507042253521},"programing-manual/mm/vmspace.html":{"ref":"programing-manual/mm/vmspace.html","tf":0.03076923076923077},"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.0136986301369863},"programing-manual/process/process.html":{"ref":"programing-manual/process/process.html","tf":0.012658227848101266},"programing-manual/interrupt/irq.html":{"ref":"programing-manual/interrupt/irq.html","tf":0.03389830508474576},"programing-manual/interrupt/delay_queue.html":{"ref":"programing-manual/interrupt/delay_queue.html","tf":0.02564102564102564},"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.043010752688172046},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.017205203524968526},"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.054404145077720206},"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.014705882352941176}}}}},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"r":{"docs":{},",":{"docs":{"programing-manual/mm/vmspace.html":{"ref":"programing-manual/mm/vmspace.html","tf":0.015384615384615385}}}}}},"l":{"docs":{},"u":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"e":{"docs":{},")":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.001258917331095258},"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}}},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}},"中":{"docs":{},"c":{"docs":{},"语":{"docs":{},"言":{"docs":{},"函":{"docs":{},"数":{"docs":{},"参":{"docs":{},"数":{"docs":{},"是":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}},"断":{"docs":{},"分":{"docs":{},"为":{"docs":{},"两":{"docs":{},"种":{"docs":{},"类":{"docs":{},"型":{"docs":{},",":{"docs":{},"一":{"docs":{},"种":{"docs":{},"是":{"docs":{},"同":{"docs":{},"步":{"docs":{},"中":{"docs":{},"断":{"docs":{},",":{"docs":{},"即":{"docs":{},"e":{"docs":{},"c":{"docs":{},"a":{"docs":{},"l":{"docs":{},"l":{"docs":{},"、":{"docs":{},"e":{"docs":{},"b":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"k":{"docs":{},"等":{"docs":{},"指":{"docs":{},"令":{"docs":{},"所":{"docs":{},"产":{"docs":{},"生":{"docs":{},"的":{"docs":{},"中":{"docs":{},"断":{"docs":{},",":{"docs":{},"另":{"docs":{},"一":{"docs":{},"种":{"docs":{},"是":{"docs":{},"异":{"docs":{},"步":{"docs":{},"中":{"docs":{},"断":{"docs":{},",":{"docs":{},"即":{"docs":{},"g":{"docs":{},"p":{"docs":{},"i":{"docs":{},"o":{"docs":{},"、":{"docs":{},"u":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{},"等":{"docs":{},"外":{"docs":{},"设":{"docs":{},"产":{"docs":{},"生":{"docs":{},"的":{"docs":{},"中":{"docs":{},"断":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"已":{"docs":{},"经":{"docs":{},"确":{"docs":{},"立":{"docs":{},"了":{"docs":{},"版":{"docs":{},"本":{"2":{"docs":{},".":{"2":{"2":{"docs":{},"的":{"docs":{},"用":{"docs":{},"户":{"docs":{},"空":{"docs":{},"间":{"docs":{},"的":{"docs":{},"指":{"docs":{},"令":{"docs":{},"集":{"docs":{},"(":{"docs":{},"u":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}},"docs":{}},"docs":{}}},"docs":{}}}}}}}},"指":{"docs":{},"令":{"docs":{},"集":{"docs":{},"可":{"docs":{},"以":{"docs":{},"自":{"docs":{},"由":{"docs":{},"地":{"docs":{},"用":{"docs":{},"于":{"docs":{},"任":{"docs":{},"何":{"docs":{},"目":{"docs":{},"的":{"docs":{},",":{"docs":{},"允":{"docs":{},"许":{"docs":{},"任":{"docs":{},"何":{"docs":{},"人":{"docs":{},"设":{"docs":{},"计":{"docs":{},"、":{"docs":{},"制":{"docs":{},"造":{"docs":{},"和":{"docs":{},"销":{"docs":{},"售":{"docs":{},"r":{"docs":{},"i":{"docs":{},"s":{"docs":{},"c":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"设":{"docs":{},"计":{"docs":{},"考":{"docs":{},"虑":{"docs":{},"了":{"docs":{},"小":{"docs":{},"型":{"docs":{},"、":{"docs":{},"快":{"docs":{},"速":{"docs":{},"、":{"docs":{},"低":{"docs":{},"功":{"docs":{},"耗":{"docs":{},"的":{"docs":{},"现":{"docs":{},"实":{"docs":{},"情":{"docs":{},"况":{"docs":{},"来":{"docs":{},"实":{"docs":{},"做":{"docs":{},",":{"docs":{},"但":{"docs":{},"并":{"docs":{},"没":{"docs":{},"有":{"docs":{},"对":{"docs":{},"特":{"docs":{},"定":{"docs":{},"的":{"docs":{},"微":{"docs":{},"架":{"docs":{},"构":{"docs":{},"做":{"docs":{},"过":{"docs":{},"度":{"docs":{},"的":{"docs":{},"设":{"docs":{},"计":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"架":{"docs":{},"构":{"docs":{},"移":{"docs":{},"植":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}},"的":{"docs":{},"m":{"docs":{},"m":{"docs":{},"u":{"docs":{},"支":{"docs":{},"持":{"docs":{},"多":{"docs":{},"种":{"docs":{},"模":{"docs":{},"式":{"docs":{},",":{"docs":{},"有":{"docs":{},"s":{"docs":{},"v":{"3":{"2":{"docs":{},"/":{"docs":{},"s":{"docs":{},"v":{"3":{"9":{"docs":{},"/":{"docs":{},"s":{"docs":{},"v":{"4":{"8":{"docs":{},"/":{"docs":{},"s":{"docs":{},"v":{"5":{"7":{"docs":{},"/":{"docs":{},"s":{"docs":{},"v":{"6":{"4":{"docs":{},"等":{"docs":{},"。":{"docs":{},"不":{"docs":{},"同":{"docs":{},"的":{"docs":{},"模":{"docs":{},"式":{"docs":{},"映":{"docs":{},"射":{"docs":{},"的":{"docs":{},"页":{"docs":{},"面":{"docs":{},"等":{"docs":{},"级":{"docs":{},",":{"docs":{},"页":{"docs":{},"面":{"docs":{},"大":{"docs":{},"小":{"docs":{},"是":{"docs":{},"有":{"docs":{},"差":{"docs":{},"异":{"docs":{},"的":{"docs":{},"。":{"docs":{},"在":{"6":{"4":{"docs":{},"位":{"docs":{},"处":{"docs":{},"理":{"docs":{},"器":{"docs":{},"种":{"docs":{},"最":{"docs":{},"常":{"docs":{},"用":{"docs":{},"的":{"docs":{},"是":{"docs":{},"s":{"docs":{},"v":{"3":{"9":{"docs":{},",":{"docs":{},"它":{"docs":{},"是":{"3":{"docs":{},"级":{"4":{"docs":{},"k":{"docs":{},"b":{"docs":{},"页":{"docs":{},"面":{"docs":{},"大":{"docs":{},"小":{"docs":{},"映":{"docs":{},"射":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}},"docs":{}}},"docs":{}}}}},"docs":{}},"docs":{}}}}}}}}}}}}}},"docs":{}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}}},"docs":{}},"docs":{}}}}},"docs":{}},"docs":{}}}}},"docs":{}},"docs":{}}}}},"docs":{}},"docs":{}}}}},"docs":{}},"docs":{}}}}}}}}}}}}}},"中":{"docs":{},"断":{"docs":{},"管":{"docs":{},"理":{"docs":{},"由":{"docs":{},"处":{"docs":{},"理":{"docs":{},"器":{"docs":{},"核":{"docs":{},"局":{"docs":{},"部":{"docs":{},"中":{"docs":{},"断":{"docs":{},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"(":{"docs":{},"c":{"docs":{},"o":{"docs":{},"r":{"docs":{},"e":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"u":{"docs":{},"p":{"docs":{},"t":{"docs":{},")":{"docs":{},"和":{"docs":{},"平":{"docs":{},"台":{"docs":{},"级":{"docs":{},"中":{"docs":{},"断":{"docs":{},"控":{"docs":{},"制":{"docs":{},"器":{"docs":{},"p":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"(":{"docs":{},"p":{"docs":{},"l":{"docs":{},"a":{"docs":{},"t":{"docs":{},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{},"m":{"docs":{},"l":{"docs":{},"e":{"docs":{},"v":{"docs":{},"e":{"docs":{},"l":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"u":{"docs":{},"p":{"docs":{},"t":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"r":{"docs":{},"o":{"docs":{},"l":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},")":{"docs":{},"组":{"docs":{},"成":{"docs":{},"。":{"docs":{},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"分":{"docs":{},"为":{"docs":{},"软":{"docs":{},"件":{"docs":{},"中":{"docs":{},"断":{"docs":{},"核":{"docs":{},"计":{"docs":{},"时":{"docs":{},"器":{"docs":{},"中":{"docs":{},"断":{"docs":{},",":{"docs":{},"负":{"docs":{},"责":{"docs":{},"响":{"docs":{},"应":{"docs":{},"处":{"docs":{},"理":{"docs":{},"器":{"docs":{},"的":{"docs":{},"异":{"docs":{},"常":{"docs":{},"核":{"docs":{},"和":{"docs":{},"计":{"docs":{},"时":{"docs":{},"器":{"docs":{},"中":{"docs":{},"断":{"docs":{},"。":{"docs":{},"p":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"负":{"docs":{},"责":{"docs":{},"处":{"docs":{},"理":{"docs":{},"外":{"docs":{},"设":{"docs":{},"的":{"docs":{},"中":{"docs":{},"断":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"目":{"docs":{},"前":{"docs":{},"有":{"4":{"docs":{},"种":{"docs":{},"特":{"docs":{},"权":{"docs":{},"模":{"docs":{},"式":{"docs":{},"(":{"docs":{},"m":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"i":{"docs":{},"n":{"docs":{},"e":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}},"docs":{}}}},"芯":{"docs":{},"片":{"docs":{},"和":{"docs":{},"软":{"docs":{},"件":{"docs":{},"。":{"docs":{},"虽":{"docs":{},"然":{"docs":{},"这":{"docs":{},"不":{"docs":{},"是":{"docs":{},"第":{"docs":{},"一":{"docs":{},"个":{"docs":{},"开":{"docs":{},"源":{"docs":{},"指":{"docs":{},"令":{"docs":{},"集":{"docs":{},",":{"docs":{},"但":{"docs":{},"它":{"docs":{},"具":{"docs":{},"有":{"docs":{},"重":{"docs":{},"要":{"docs":{},"意":{"docs":{},"义":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"其":{"docs":{},"设":{"docs":{},"计":{"docs":{},"使":{"docs":{},"其":{"docs":{},"适":{"docs":{},"用":{"docs":{},"于":{"docs":{},"现":{"docs":{},"代":{"docs":{},"计":{"docs":{},"算":{"docs":{},"设":{"docs":{},"备":{"docs":{},"(":{"docs":{},"如":{"docs":{},"仓":{"docs":{},"库":{"docs":{},"规":{"docs":{},"模":{"docs":{},"云":{"docs":{},"计":{"docs":{},"算":{"docs":{},"机":{"docs":{},"、":{"docs":{},"高":{"docs":{},"端":{"docs":{},"移":{"docs":{},"动":{"docs":{},"电":{"docs":{},"话":{"docs":{},"和":{"docs":{},"微":{"docs":{},"小":{"docs":{},"嵌":{"docs":{},"入":{"docs":{},"式":{"docs":{},"系":{"docs":{},"统":{"docs":{},")":{"docs":{},"。":{"docs":{},"设":{"docs":{},"计":{"docs":{},"者":{"docs":{},"考":{"docs":{},"虑":{"docs":{},"到":{"docs":{},"了":{"docs":{},"这":{"docs":{},"些":{"docs":{},"用":{"docs":{},"途":{"docs":{},"中":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"与":{"docs":{},"功":{"docs":{},"率":{"docs":{},"效":{"docs":{},"率":{"docs":{},"。":{"docs":{},"该":{"docs":{},"指":{"docs":{},"令":{"docs":{},"集":{"docs":{},"还":{"docs":{},"具":{"docs":{},"有":{"docs":{},"众":{"docs":{},"多":{"docs":{},"支":{"docs":{},"持":{"docs":{},"的":{"docs":{},"软":{"docs":{},"件":{"docs":{},",":{"docs":{},"这":{"docs":{},"解":{"docs":{},"决":{"docs":{},"了":{"docs":{},"新":{"docs":{},"指":{"docs":{},"令":{"docs":{},"集":{"docs":{},"通":{"docs":{},"常":{"docs":{},"的":{"docs":{},"弱":{"docs":{},"点":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"被":{"docs":{},"设":{"docs":{},"计":{"docs":{},"成":{"docs":{},"可":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"的":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"配":{"docs":{},"置":{"docs":{},"的":{"docs":{},",":{"docs":{},"根":{"docs":{},"据":{"docs":{},"不":{"docs":{},"同":{"docs":{},"的":{"docs":{},"应":{"docs":{},"用":{"docs":{},"场":{"docs":{},"景":{"docs":{},"可":{"docs":{},"以":{"docs":{},"生":{"docs":{},"产":{"docs":{},"带":{"docs":{},"有":{"docs":{},"不":{"docs":{},"同":{"docs":{},"功":{"docs":{},"能":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"的":{"docs":{},"处":{"docs":{},"理":{"docs":{},"器":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"(":{"docs":{},"发":{"docs":{},"音":{"docs":{},"为":{"docs":{},"“":{"docs":{},"r":{"docs":{},"i":{"docs":{},"s":{"docs":{},"k":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}},"w":{"docs":{},"i":{"docs":{},"n":{"docs":{},"d":{"docs":{},"o":{"docs":{},"w":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.03015075376884422},"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}},"s":{"docs":{},"n":{"docs":{},"t":{"docs":{"./":{"ref":"./","tf":0.02631578947368421}}}},"下":{"docs":{},"设":{"docs":{},"置":{"docs":{},"i":{"3":{"8":{"6":{"docs":{},"环":{"docs":{},"境":{"docs":{},"并":{"docs":{},"设":{"docs":{},"置":{"docs":{},"p":{"docs":{},"l":{"docs":{},"a":{"docs":{},"t":{"docs":{},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{},"m":{"docs":{},"=":{"docs":{},"x":{"8":{"6":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.005025125628140704}}},"docs":{}},"docs":{}}}}}}}}}}}}}}}}},"docs":{}},"docs":{}},"docs":{}},"r":{"docs":{},"i":{"docs":{},"s":{"docs":{},"c":{"docs":{},"v":{"6":{"4":{"docs":{},"环":{"docs":{},"境":{"docs":{},"p":{"docs":{},"l":{"docs":{},"a":{"docs":{},"t":{"docs":{},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{},"m":{"docs":{},"=":{"docs":{},"r":{"docs":{},"i":{"docs":{},"s":{"docs":{},"c":{"docs":{},"v":{"6":{"4":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.005025125628140704}}},"docs":{}},"docs":{}}}}}}}}}}}}}}}}}},"docs":{}},"docs":{}}}}}}}}},"环":{"docs":{},"境":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.01507537688442211}}}}}}}}},"t":{"docs":{},"h":{"docs":{},"i":{"docs":{},"n":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}},"a":{"docs":{},"l":{"docs":{},"k":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},".":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}},"c":{"docs":{},"s":{"docs":{},"r":{"docs":{},"(":{"docs":{},"s":{"docs":{},"a":{"docs":{},"t":{"docs":{},"p":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.001678556441460344}}}}}}}}}}}}}}}}}},"e":{"docs":{},"e":{"docs":{},"l":{"docs":{},".":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}}},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}}},"x":{"8":{"6":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315},"programing-manual/process/syscall.html":{"ref":"programing-manual/process/syscall.html","tf":0.03125},"tutorial/toolchains.html":{"ref":"tutorial/toolchains.html","tf":0.05405405405405406}}},"docs":{}},"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.005025125628140704},"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}},"b":{"docs":{},"o":{"docs":{},"o":{"docs":{},"k":{"docs":{"./":{"ref":"./","tf":0.02631578947368421}}}}},"u":{"docs":{},"i":{"docs":{},"l":{"docs":{},"d":{"docs":{},"改":{"docs":{},"成":{"docs":{},"了":{"docs":{},"x":{"docs":{},"m":{"docs":{},"a":{"docs":{},"k":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}}}}}}}}}}},"n":{"docs":{},"u":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}}}},":":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}},"x":{"docs":{},"x":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.014705882352941176}}}}},"内":{"docs":{},"核":{"docs":{},"是":{"docs":{},"同":{"docs":{},"一":{"docs":{},"个":{"docs":{},"数":{"docs":{},"量":{"docs":{},"级":{"docs":{},"的":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.02631578947368421}}}}}}}}}}},",":{"docs":{"./":{"ref":"./","tf":0.02631578947368421}},"还":{"docs":{},"有":{"docs":{},"国":{"docs":{},"产":{"docs":{},"开":{"docs":{},"源":{"docs":{},"系":{"docs":{},"统":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}}}}}}}}}}},"、":{"docs":{},"苹":{"docs":{},"果":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}}}}},"一":{"docs":{},"些":{"docs":{},"功":{"docs":{},"能":{"docs":{},"的":{"docs":{},"文":{"docs":{},"档":{"docs":{},"说":{"docs":{},"明":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}}}}}}}}}}},"其":{"docs":{},"余":{"docs":{},"模":{"docs":{},"块":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}}}}}},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"以":{"docs":{},"及":{"docs":{},"m":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{},"核":{"docs":{},"心":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}}}}}}}}}}}}},"源":{"docs":{},"码":{"docs":{},"目":{"docs":{},"录":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}}}}}},"的":{"docs":{},"源":{"docs":{},"码":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}}}},"最":{"docs":{},"小":{"docs":{},"调":{"docs":{},"度":{"docs":{},"单":{"docs":{},"位":{"docs":{},"是":{"docs":{},"线":{"docs":{},"程":{"docs":{},",":{"docs":{},"每":{"docs":{},"个":{"docs":{},"线":{"docs":{},"程":{"docs":{},"都":{"docs":{},"有":{"docs":{},"自":{"docs":{},"己":{"docs":{},"独":{"docs":{},"立":{"docs":{},"的":{"docs":{},"栈":{"docs":{},",":{"docs":{},"寄":{"docs":{},"存":{"docs":{},"器":{"docs":{},"组":{"docs":{},",":{"docs":{},"以":{"docs":{},"及":{"docs":{},"一":{"docs":{},"些":{"docs":{},"运":{"docs":{},"行":{"docs":{},"信":{"docs":{},"息":{"docs":{},"等":{"docs":{},"。":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"定":{"docs":{},"时":{"docs":{},"器":{"docs":{},"属":{"docs":{},"于":{"docs":{"programing-manual/interrupt/delay_queue.html":{"ref":"programing-manual/interrupt/delay_queue.html","tf":0.01282051282051282}}}}}}}},"功":{"docs":{},"能":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{"programing-manual/base/start.html":{"ref":"programing-manual/base/start.html","tf":0.025}}}}}}},"执":{"docs":{},"行":{"docs":{},"路":{"docs":{},"径":{"docs":{"programing-manual/base/start.html":{"ref":"programing-manual/base/start.html","tf":0.025}}}}}},"虚":{"docs":{},"拟":{"docs":{},"堆":{"docs":{},"内":{"docs":{},"存":{"docs":{},"管":{"docs":{},"理":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"基":{"docs":{},"于":{"docs":{},"缓":{"docs":{},"存":{"docs":{},"的":{"docs":{},"链":{"docs":{},"表":{"docs":{},"实":{"docs":{},"现":{"docs":{"programing-manual/mm/mm.html":{"ref":"programing-manual/mm/mm.html","tf":0.1111111111111111}}}}}}}}}}}}}}}}}}},"内":{"docs":{},"存":{"docs":{},"管":{"docs":{},"理":{"docs":{},"之":{"docs":{},"堆":{"docs":{},"内":{"docs":{},"存":{"docs":{"programing-manual/mm/heap.html":{"ref":"programing-manual/mm/heap.html","tf":0.014084507042253521}}}}}}}}}}}},"分":{"docs":{},"配":{"docs":{},"堆":{"docs":{},"内":{"docs":{},"存":{"docs":{},"的":{"docs":{},"接":{"docs":{},"口":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"传":{"docs":{},"入":{"docs":{},"待":{"docs":{},"分":{"docs":{},"配":{"docs":{},"内":{"docs":{},"存":{"docs":{},"的":{"docs":{},"大":{"docs":{},"小":{"docs":{},",":{"docs":{},"即":{"docs":{},"可":{"docs":{},"获":{"docs":{},"取":{"docs":{},"一":{"docs":{},"个":{"docs":{},"内":{"docs":{},"存":{"docs":{},"地":{"docs":{},"址":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"为":{"docs":{},"空":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"就":{"docs":{},"是":{"docs":{},"分":{"docs":{},"配":{"docs":{},"失":{"docs":{},"败":{"docs":{},"了":{"docs":{},"。":{"docs":{"programing-manual/mm/heap.html":{"ref":"programing-manual/mm/heap.html","tf":0.014084507042253521}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"中":{"docs":{},",":{"docs":{},"休":{"docs":{},"眠":{"docs":{},"的":{"docs":{},"单":{"docs":{},"位":{"docs":{},"是":{"docs":{},"毫":{"docs":{},"秒":{"docs":{},",":{"docs":{},"休":{"docs":{},"眠":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}}}}}}}}}},"崩":{"docs":{},"溃":{"docs":{},"。":{"docs":{"programing-manual/process/process.html":{"ref":"programing-manual/process/process.html","tf":0.012658227848101266}}}}},"入":{"docs":{},"口":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}}}},"存":{"docs":{},"管":{"docs":{},"理":{"docs":{"programing-manual/mm/mm.html":{"ref":"programing-manual/mm/mm.html","tf":10.11111111111111},"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}},"模":{"docs":{},"块":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}}}},"分":{"docs":{},"为":{"docs":{},"物":{"docs":{},"理":{"docs":{},"内":{"docs":{},"存":{"docs":{},"管":{"docs":{},"理":{"docs":{},"、":{"docs":{},"虚":{"docs":{},"拟":{"docs":{},"内":{"docs":{},"存":{"docs":{},"管":{"docs":{},"理":{"docs":{},"、":{"docs":{},"进":{"docs":{},"程":{"docs":{},"虚":{"docs":{},"拟":{"docs":{},"内":{"docs":{},"存":{"docs":{},"管":{"docs":{},"理":{"docs":{},"这":{"docs":{},"三":{"docs":{},"个":{"docs":{},"大":{"docs":{},"模":{"docs":{},"块":{"docs":{},"。":{"docs":{"programing-manual/mm/mm.html":{"ref":"programing-manual/mm/mm.html","tf":0.1111111111111111}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"是":{"docs":{},"操":{"docs":{},"作":{"docs":{},"系":{"docs":{},"统":{"docs":{},"中":{"docs":{},"最":{"docs":{},"为":{"docs":{},"核":{"docs":{},"心":{"docs":{},"和":{"docs":{},"重":{"docs":{},"要":{"docs":{},"的":{"docs":{},"部":{"docs":{},"分":{"docs":{},",":{"docs":{},"这":{"docs":{},"是":{"docs":{},"由":{"docs":{},"于":{"docs":{},"很":{"docs":{},"多":{"docs":{},"其":{"docs":{},"它":{"docs":{},"模":{"docs":{},"块":{"docs":{},"的":{"docs":{},"运":{"docs":{},"行":{"docs":{},"都":{"docs":{},"需":{"docs":{},"要":{"docs":{},"内":{"docs":{},"存":{"docs":{},"的":{"docs":{},"分":{"docs":{},"配":{"docs":{},"和":{"docs":{},"释":{"docs":{},"放":{"docs":{},"。":{"docs":{"programing-manual/mm/mm.html":{"ref":"programing-manual/mm/mm.html","tf":0.1111111111111111}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"最":{"docs":{},"基":{"docs":{},"本":{"docs":{},"的":{"docs":{},"接":{"docs":{},"口":{"docs":{},"就":{"docs":{},"是":{"docs":{},"分":{"docs":{},"配":{"docs":{},"和":{"docs":{},"释":{"docs":{},"放":{"docs":{},"。":{"docs":{},"为":{"docs":{},"了":{"docs":{},"能":{"docs":{},"够":{"docs":{},"支":{"docs":{},"持":{"docs":{},"分":{"docs":{},"页":{"docs":{},"机":{"docs":{},"制":{"docs":{},",":{"docs":{},"为":{"docs":{},"页":{"docs":{},"表":{"docs":{},"映":{"docs":{},"射":{"docs":{},"提":{"docs":{},"供":{"docs":{},"内":{"docs":{},"存":{"docs":{},"的":{"docs":{},"支":{"docs":{},"持":{"docs":{},",":{"docs":{},"将":{"docs":{},"内":{"docs":{},"存":{"docs":{},"分":{"docs":{},"为":{"docs":{},"页":{"docs":{},"面":{"docs":{},"大":{"docs":{},"小":{"docs":{},"进":{"docs":{},"行":{"docs":{},"管":{"docs":{},"理":{"docs":{},"会":{"docs":{},"比":{"docs":{},"较":{"docs":{},"合":{"docs":{},"适":{"docs":{},"。":{"docs":{"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.010869565217391304}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"是":{"docs":{},"操":{"docs":{},"作":{"docs":{},"系":{"docs":{},"统":{"docs":{},"运":{"docs":{},"行":{"docs":{},"的":{"docs":{},"根":{"docs":{},"基":{"docs":{},",":{"docs":{},"处":{"docs":{},"理":{"docs":{},"器":{"docs":{},"从":{"docs":{},"内":{"docs":{},"存":{"docs":{},"中":{"docs":{},"取":{"docs":{},"出":{"docs":{},"指":{"docs":{},"令":{"docs":{},"来":{"docs":{},"执":{"docs":{},"行":{"docs":{},",":{"docs":{},"在":{"docs":{},"进":{"docs":{},"入":{"docs":{},"操":{"docs":{},"作":{"docs":{},"系":{"docs":{},"统":{"docs":{},"之":{"docs":{},"前":{"docs":{},",":{"docs":{},"一":{"docs":{},"般":{"docs":{},"会":{"docs":{},"有":{"docs":{},"引":{"docs":{},"导":{"docs":{},"器":{"docs":{"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.010869565217391304}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"释":{"docs":{},"放":{"docs":{},"堆":{"docs":{},"内":{"docs":{},"存":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"传":{"docs":{},"入":{"docs":{},"内":{"docs":{},"存":{"docs":{},"对":{"docs":{},"象":{"docs":{},"地":{"docs":{},"址":{"docs":{},",":{"docs":{},"并":{"docs":{},"返":{"docs":{},"回":{"docs":{},"释":{"docs":{},"放":{"docs":{},"的":{"docs":{},"状":{"docs":{},"态":{"docs":{},"。":{"docs":{"programing-manual/mm/heap.html":{"ref":"programing-manual/mm/heap.html","tf":0.014084507042253521}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"屏":{"docs":{},"障":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}},"前":{"docs":{},"的":{"docs":{},"所":{"docs":{},"有":{"docs":{},"读":{"docs":{},"写":{"docs":{},"操":{"docs":{},"作":{"docs":{},"完":{"docs":{},"成":{"docs":{},"后":{"docs":{},"才":{"docs":{},"能":{"docs":{},"执":{"docs":{},"行":{"docs":{},"屏":{"docs":{},"障":{"docs":{},"后":{"docs":{},"的":{"docs":{},"读":{"docs":{},"写":{"docs":{},"操":{"docs":{},"作":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}}}}}},"读":{"docs":{},"/":{"docs":{},"写":{"docs":{},"屏":{"docs":{},"障":{"docs":{},"使":{"docs":{},"用":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}},"的":{"docs":{},"物":{"docs":{},"理":{"docs":{},"地":{"docs":{},"址":{"docs":{},",":{"docs":{"programing-manual/process/process.html":{"ref":"programing-manual/process/process.html","tf":0.012658227848101266}},"就":{"docs":{},"能":{"docs":{},"正":{"docs":{},"确":{"docs":{},"地":{"docs":{},"进":{"docs":{},"行":{"docs":{},"数":{"docs":{},"据":{"docs":{},"存":{"docs":{},"取":{"docs":{},",":{"docs":{},"不":{"docs":{},"然":{"docs":{},",":{"docs":{},"则":{"docs":{},"会":{"docs":{},"产":{"docs":{},"生":{"docs":{},"页":{"docs":{},"面":{"docs":{},"故":{"docs":{},"障":{"docs":{},"。":{"docs":{"programing-manual/process/process.html":{"ref":"programing-manual/process/process.html","tf":0.012658227848101266}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"置":{"docs":{},"了":{"docs":{},"原":{"docs":{},"子":{"docs":{},"操":{"docs":{},"作":{"docs":{},"的":{"docs":{},"函":{"docs":{},"数":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}},"函":{"docs":{},"数":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},"的":{"docs":{},"原":{"docs":{},"子":{"docs":{},"操":{"docs":{},"作":{"docs":{},"即":{"docs":{},"可":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}},"分":{"docs":{},"支":{"docs":{"./":{"ref":"./","tf":0.02631578947368421}}},"配":{"docs":{},"的":{"docs":{},"内":{"docs":{},"存":{"docs":{},"对":{"docs":{},"象":{"docs":{},"。":{"docs":{"programing-manual/mm/heap.html":{"ref":"programing-manual/mm/heap.html","tf":0.014084507042253521}}}}}}}},"一":{"docs":{},"个":{"docs":{},"t":{"docs":{},"l":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}},"内":{"docs":{},"存":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}},"基":{"docs":{},"于":{"docs":{"./":{"ref":"./","tf":0.02631578947368421}}}},"如":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}},"果":{"docs":{},"您":{"docs":{},"在":{"docs":{},"文":{"docs":{},"档":{"docs":{},"中":{"docs":{},"发":{"docs":{},"现":{"docs":{},"了":{"docs":{},"问":{"docs":{},"题":{"docs":{},"或":{"docs":{},"者":{"docs":{},"想":{"docs":{},"参":{"docs":{},"与":{"docs":{},"文":{"docs":{},"档":{"docs":{},"的":{"docs":{},"编":{"docs":{},"写":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"在":{"docs":{},"文":{"docs":{},"档":{"docs":{},"仓":{"docs":{},"库":{"docs":{},"提":{"docs":{},"出":{"docs":{"./":{"ref":"./","tf":0.02631578947368421}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"静":{"docs":{},"态":{"docs":{},"对":{"docs":{},"象":{"docs":{},",":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{},"创":{"docs":{},"建":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"可":{"docs":{},"以":{"docs":{},"直":{"docs":{},"接":{"docs":{},"调":{"docs":{},"用":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},",":{"docs":{},"并":{"docs":{},"传":{"docs":{},"入":{"docs":{},"该":{"docs":{},"对":{"docs":{},"象":{"docs":{},"的":{"docs":{},"地":{"docs":{},"址":{"docs":{},"即":{"docs":{},"可":{"docs":{},",":{"docs":{},"参":{"docs":{},"数":{"docs":{},"同":{"docs":{},"上":{"docs":{},"。":{"docs":{"programing-manual/interrupt/delay_queue.html":{"ref":"programing-manual/interrupt/delay_queue.html","tf":0.01282051282051282}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"对":{"docs":{},"静":{"docs":{},"态":{"docs":{},"的":{"docs":{},"定":{"docs":{},"时":{"docs":{},"器":{"docs":{},"进":{"docs":{},"行":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},",":{"docs":{},"只":{"docs":{},"需":{"docs":{},"要":{"docs":{},"调":{"docs":{},"用":{"docs":{"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.010752688172043012}}}}}}}}}}}}}}}}}}}}},"只":{"docs":{},"是":{"docs":{},"需":{"docs":{},"要":{"docs":{},"运":{"docs":{},"行":{"docs":{},"起":{"docs":{},"来":{"docs":{},",":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{},"线":{"docs":{},"程":{"docs":{},"环":{"docs":{},"境":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"就":{"docs":{},"只":{"docs":{},"需":{"docs":{},"要":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}}}},"当":{"docs":{},"前":{"docs":{},"定":{"docs":{},"时":{"docs":{},"器":{"docs":{},"的":{"docs":{},"值":{"docs":{},"超":{"docs":{},"过":{"docs":{},"了":{"docs":{},"超":{"docs":{},"时":{"docs":{},"定":{"docs":{},"时":{"docs":{},"器":{"docs":{},"寄":{"docs":{},"存":{"docs":{},"器":{"docs":{},"的":{"docs":{},"值":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},",":{"docs":{},"就":{"docs":{},"会":{"docs":{},"触":{"docs":{},"发":{"docs":{},"一":{"docs":{},"个":{"docs":{},"中":{"docs":{},"断":{"docs":{},"。":{"docs":{},"注":{"docs":{},"意":{"docs":{},":":{"docs":{},"前":{"docs":{},"提":{"docs":{},"是":{"docs":{},"打":{"docs":{},"开":{"docs":{},"了":{"docs":{},"定":{"docs":{},"时":{"docs":{},"器":{"docs":{},"中":{"docs":{},"断":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"支":{"docs":{},"持":{"docs":{},"多":{"docs":{},"核":{"docs":{},",":{"docs":{},"就":{"docs":{},"可":{"docs":{},"以":{"docs":{},"在":{"docs":{},"这":{"docs":{},"个":{"docs":{},"时":{"docs":{},"候":{"docs":{},"去":{"docs":{},"唤":{"docs":{},"醒":{"docs":{},"其":{"docs":{},"他":{"docs":{},"核":{"docs":{},"。":{"docs":{},"不":{"docs":{},"支":{"docs":{},"持":{"docs":{},"的":{"docs":{},"话":{"docs":{},"返":{"docs":{},"回":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"函":{"docs":{},"数":{"docs":{},"参":{"docs":{},"数":{"docs":{},"为":{"docs":{},"空":{"docs":{},",":{"docs":{},"必":{"docs":{},"须":{"docs":{},"使":{"docs":{},"用":{"docs":{},"v":{"docs":{},"o":{"docs":{},"i":{"docs":{},"d":{"docs":{},"作":{"docs":{},"为":{"docs":{},"入":{"docs":{},"口":{"docs":{},"函":{"docs":{},"数":{"docs":{},",":{"docs":{},"例":{"docs":{},"如":{"docs":{},":":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}}}}}}}}}}}}}}}}}}}},"需":{"docs":{},"要":{"docs":{},"在":{"docs":{},"类":{"docs":{},"型":{"docs":{},"定":{"docs":{},"义":{"docs":{},"中":{"docs":{},"使":{"docs":{},"用":{"docs":{},"指":{"docs":{},"针":{"docs":{},",":{"docs":{},"则":{"docs":{},"需":{"docs":{},"要":{"docs":{},"使":{"docs":{},"用":{"docs":{},"p":{"docs":{},"t":{"docs":{},"r":{"docs":{},"后":{"docs":{},"缀":{"docs":{},"或":{"docs":{},"者":{"docs":{},"其":{"docs":{},"他":{"docs":{},"可":{"docs":{},"以":{"docs":{},"表":{"docs":{},"达":{"docs":{},"意":{"docs":{},"思":{"docs":{},"的":{"docs":{},"单":{"docs":{},"词":{"docs":{},"指":{"docs":{},"明":{"docs":{},"。":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{},"为":{"docs":{},"f":{"docs":{},"e":{"docs":{},"a":{"docs":{},"t":{"docs":{},"和":{"docs":{},"f":{"docs":{},"i":{"docs":{},"x":{"docs":{},",":{"docs":{},"则":{"docs":{},"该":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}}}}}}}}}}}}}}},"你":{"docs":{},"的":{"docs":{},"修":{"docs":{},"改":{"docs":{},"影":{"docs":{},"响":{"docs":{},"了":{"docs":{},"不":{"docs":{},"止":{"docs":{},"一":{"docs":{},"个":{"docs":{},"s":{"docs":{},"c":{"docs":{},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{},",":{"docs":{},"你":{"docs":{},"可":{"docs":{},"以":{"docs":{},"使":{"docs":{},"用":{"docs":{},"*":{"docs":{},"代":{"docs":{},"替":{"docs":{},"。":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"开":{"docs":{},"源":{"docs":{},"协":{"docs":{},"议":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"自":{"docs":{},"由":{"docs":{},"的":{"docs":{},"复":{"docs":{},"制":{"docs":{},"和":{"docs":{},"修":{"docs":{},"改":{"docs":{},"代":{"docs":{},"码":{"docs":{},",":{"docs":{},"只":{"docs":{},"需":{"docs":{},"要":{"docs":{},"保":{"docs":{},"留":{"docs":{},"版":{"docs":{},"权":{"docs":{},"说":{"docs":{},"明":{"docs":{},"即":{"docs":{},"可":{"docs":{},",":{"docs":{},"无":{"docs":{},"潜":{"docs":{},"在":{"docs":{},"的":{"docs":{},"商":{"docs":{},"业":{"docs":{},"风":{"docs":{},"险":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.02631578947368421}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"我":{"docs":{},"们":{"docs":{},"以":{"docs":{},"简":{"docs":{},"洁":{"docs":{},"、":{"docs":{},"高":{"docs":{},"效":{"docs":{},"、":{"docs":{},"稳":{"docs":{},"定":{"docs":{},"为":{"docs":{},"核":{"docs":{},"心":{"docs":{},",":{"docs":{},"用":{"docs":{},"比":{"docs":{},"较":{"docs":{},"简":{"docs":{},"洁":{"docs":{},"且":{"docs":{},"高":{"docs":{},"效":{"docs":{},"的":{"docs":{},"方":{"docs":{},"式":{"docs":{},"去":{"docs":{},"实":{"docs":{},"现":{"docs":{},"一":{"docs":{},"些":{"docs":{},"功":{"docs":{},"能":{"docs":{},",":{"docs":{},"去":{"docs":{},"掉":{"docs":{},"一":{"docs":{},"些":{"docs":{},"复":{"docs":{},"杂":{"docs":{},",":{"docs":{},"冗":{"docs":{},"杂":{"docs":{},"的":{"docs":{},"功":{"docs":{},"能":{"docs":{},",":{"docs":{},"化":{"docs":{},"繁":{"docs":{},"为":{"docs":{},"简":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.02631578947368421}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"采":{"docs":{},"用":{"docs":{},"的":{"docs":{},"是":{"docs":{},"世":{"docs":{},"界":{"docs":{},"上":{"docs":{},"最":{"docs":{},"流":{"docs":{},"行":{"docs":{},"的":{"docs":{},"q":{"docs":{},"e":{"docs":{},"m":{"docs":{},"u":{"docs":{},"虚":{"docs":{},"拟":{"docs":{},"机":{"docs":{},",":{"docs":{},"各":{"docs":{},"种":{"docs":{},"平":{"docs":{},"台":{"docs":{},"都":{"docs":{},"有":{"docs":{},"支":{"docs":{},"持":{"docs":{},",":{"docs":{},"刚":{"docs":{},"好":{"docs":{},"有":{"docs":{},"我":{"docs":{},"们":{"docs":{},"需":{"docs":{},"要":{"docs":{},"的":{"docs":{},"版":{"docs":{},"本":{"docs":{},"。":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.005025125628140704}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"需":{"docs":{},"要":{"docs":{},"管":{"docs":{},"理":{"docs":{},"的":{"docs":{},"内":{"docs":{},"存":{"docs":{},"就":{"docs":{},"是":{"docs":{"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.010869565217391304}}}}}},"物":{"docs":{},"理":{"docs":{},"内":{"docs":{},"存":{"docs":{},"是":{"docs":{},"除":{"docs":{},"了":{"docs":{},"保":{"docs":{},"留":{"docs":{},"地":{"docs":{},"址":{"docs":{},"和":{"docs":{},"操":{"docs":{},"作":{"docs":{},"系":{"docs":{},"统":{"docs":{},"占":{"docs":{},"用":{"docs":{},"以":{"docs":{},"外":{"docs":{},"的":{"docs":{},"空":{"docs":{},"闲":{"docs":{},"的":{"docs":{},"内":{"docs":{},"存":{"docs":{},",":{"docs":{},"这":{"docs":{},"部":{"docs":{},"分":{"docs":{},"内":{"docs":{},"存":{"docs":{},"就":{"docs":{},"是":{"docs":{},"需":{"docs":{},"要":{"docs":{},"在":{"docs":{},"操":{"docs":{},"作":{"docs":{},"系":{"docs":{},"统":{"docs":{},"运":{"docs":{},"行":{"docs":{},"的":{"docs":{},"过":{"docs":{},"程":{"docs":{},"中":{"docs":{},"进":{"docs":{},"行":{"docs":{},"静":{"docs":{},"态":{"docs":{},"/":{"docs":{},"动":{"docs":{},"态":{"docs":{},"分":{"docs":{},"配":{"docs":{},"的":{"docs":{},"内":{"docs":{},"存":{"docs":{},"。":{"docs":{"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.010869565217391304}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"是":{"docs":{},"使":{"docs":{},"用":{"docs":{},"基":{"docs":{},"于":{"docs":{},"缓":{"docs":{},"存":{"docs":{},"的":{"docs":{},"链":{"docs":{},"表":{"docs":{},"来":{"docs":{},"管":{"docs":{},"理":{"docs":{},"堆":{"docs":{},",":{"docs":{},"这":{"docs":{},"种":{"docs":{},"方":{"docs":{},"式":{"docs":{},"的":{"docs":{},"原":{"docs":{},"理":{"docs":{},"是":{"docs":{},",":{"docs":{},"在":{"docs":{},"释":{"docs":{},"放":{"docs":{},"一":{"docs":{},"个":{"docs":{},"页":{"docs":{},"面":{"docs":{},"后":{"docs":{},",":{"docs":{},"会":{"docs":{},"放":{"docs":{},"到":{"docs":{},"一":{"docs":{},"个":{"docs":{},"链":{"docs":{},"表":{"docs":{},"上":{"docs":{},"面":{"docs":{},",":{"docs":{},"下":{"docs":{},"次":{"docs":{},"分":{"docs":{},"配":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},",":{"docs":{},"直":{"docs":{},"接":{"docs":{},"从":{"docs":{},"链":{"docs":{},"表":{"docs":{},"获":{"docs":{},"取":{"docs":{},"内":{"docs":{},"存":{"docs":{},"对":{"docs":{},"象":{"docs":{},"即":{"docs":{},"可":{"docs":{},"。":{"docs":{"programing-manual/mm/heap.html":{"ref":"programing-manual/mm/heap.html","tf":0.014084507042253521}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"或":{"docs":{},"者":{"docs":{},"提":{"docs":{},"交":{"docs":{"./":{"ref":"./","tf":0.02631578947368421}}}}}},"文":{"docs":{},"档":{"docs":{},"版":{"docs":{},"本":{"docs":{"./":{"ref":"./","tf":0.02631578947368421}}}}},"件":{"docs":{},"系":{"docs":{},"统":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}},"框":{"docs":{},"架":{"docs":{},"以":{"docs":{},"及":{"docs":{},"各":{"docs":{},"种":{"docs":{},"文":{"docs":{},"件":{"docs":{},"系":{"docs":{},"统":{"docs":{},"支":{"docs":{},"持":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}}}}}}}}}}}}}}}},":":{"docs":{},"s":{"docs":{},"r":{"docs":{},"c":{"docs":{},"/":{"docs":{},"a":{"docs":{},"r":{"docs":{},"c":{"docs":{},"h":{"docs":{},"/":{"docs":{},"r":{"docs":{},"i":{"docs":{},"s":{"docs":{},"c":{"docs":{},"v":{"6":{"4":{"docs":{},"/":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"n":{"docs":{},"e":{"docs":{},"l":{"docs":{},"/":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},".":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}},"s":{"docs":{},"b":{"docs":{},"i":{"docs":{},"_":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},".":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"/":{"docs":{},"a":{"docs":{},"t":{"docs":{},"o":{"docs":{},"m":{"docs":{},"i":{"docs":{},"c":{"docs":{},".":{"docs":{},"c":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}},"b":{"docs":{},"a":{"docs":{},"r":{"docs":{},"r":{"docs":{},"i":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"c":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}},"c":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},".":{"docs":{},"c":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},".":{"docs":{},"c":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"u":{"docs":{},"p":{"docs":{},"t":{"docs":{},".":{"docs":{},"c":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}},"m":{"docs":{},"m":{"docs":{},"u":{"docs":{},".":{"docs":{},"c":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"c":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},".":{"docs":{},"c":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}},"s":{"docs":{},"m":{"docs":{},"p":{"docs":{},".":{"docs":{},"c":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}},"docs":{}},"docs":{}}}}}}}}}}},"p":{"docs":{},"l":{"docs":{},"a":{"docs":{},"t":{"docs":{},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{},"m":{"docs":{},"/":{"docs":{},"q":{"docs":{},"e":{"docs":{},"m":{"docs":{},"u":{"docs":{},"_":{"docs":{},"r":{"docs":{},"i":{"docs":{},"s":{"docs":{},"c":{"docs":{},"v":{"6":{"4":{"docs":{},"/":{"docs":{},"d":{"docs":{},"r":{"docs":{},"i":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"/":{"docs":{},"d":{"docs":{},"i":{"docs":{},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"_":{"docs":{},"u":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{},".":{"docs":{},"c":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}},"h":{"docs":{},"a":{"docs":{},"l":{"docs":{},"/":{"docs":{},"i":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},".":{"docs":{},"c":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}},"docs":{}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}},"名":{"docs":{},"称":{"docs":{},"也":{"docs":{},"是":{"docs":{},"使":{"docs":{},"用":{"docs":{},"首":{"docs":{},"字":{"docs":{},"母":{"docs":{},"大":{"docs":{},"写":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"有":{"docs":{},"缩":{"docs":{},"写":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"全":{"docs":{},"部":{"docs":{},"都":{"docs":{},"大":{"docs":{},"写":{"docs":{},"。":{"docs":{},"文":{"docs":{},"件":{"docs":{},"命":{"docs":{},"名":{"docs":{},"尽":{"docs":{},"量":{"docs":{},"不":{"docs":{},"要":{"docs":{},"使":{"docs":{},"用":{"docs":{},"通":{"docs":{},"用":{"docs":{},"化":{"docs":{},"、":{"docs":{},"使":{"docs":{},"用":{"docs":{},"频":{"docs":{},"率":{"docs":{},"高":{"docs":{},"的":{"docs":{},"名":{"docs":{},"称":{"docs":{},"。":{"docs":{},"例":{"docs":{},"如":{"docs":{},":":{"docs":{},"m":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},".":{"docs":{},"c":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"概":{"docs":{},"述":{"docs":{"./":{"ref":"./","tf":0.02631578947368421}}}},"的":{"docs":{"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.010869565217391304},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}},"架":{"docs":{},"构":{"docs":{"./":{"ref":"./","tf":0.02631578947368421}}}},"现":{"docs":{},"代":{"docs":{},"操":{"docs":{},"作":{"docs":{},"系":{"docs":{},"统":{"docs":{},",":{"docs":{},"它":{"docs":{},"和":{"docs":{"./":{"ref":"./","tf":0.02631578947368421}}}}}}}}}}},"大":{"docs":{},"小":{"docs":{},"。":{"docs":{"programing-manual/mm/heap.html":{"ref":"programing-manual/mm/heap.html","tf":0.014084507042253521}}}}},"任":{"docs":{},"务":{"docs":{},"被":{"docs":{},"唤":{"docs":{},"醒":{"docs":{},",":{"docs":{},"就":{"docs":{},"得":{"docs":{},"立":{"docs":{},"即":{"docs":{},"切":{"docs":{},"换":{"docs":{},"过":{"docs":{},"去":{"docs":{},"执":{"docs":{},"行":{"docs":{},"。":{"docs":{"programing-manual/sched/sched.html":{"ref":"programing-manual/sched/sched.html","tf":0.09090909090909091}}}}}}}}}}}}}}}}}}},"时":{"docs":{},"候":{"docs":{},",":{"docs":{},"就":{"docs":{},"去":{"docs":{},"获":{"docs":{},"取":{"docs":{},"一":{"docs":{},"个":{"docs":{},"线":{"docs":{},"程":{"docs":{},"来":{"docs":{},"运":{"docs":{},"行":{"docs":{},"。":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}}}}}}}}},"内":{"docs":{},"核":{"docs":{},"也":{"docs":{},"能":{"docs":{},"够":{"docs":{},"正":{"docs":{},"常":{"docs":{},"运":{"docs":{},"行":{"docs":{},",":{"docs":{},"新":{"docs":{},"进":{"docs":{},"程":{"docs":{},"的":{"docs":{},"地":{"docs":{},"址":{"docs":{},"访":{"docs":{},"问":{"docs":{},"也":{"docs":{},"不":{"docs":{},"会":{"docs":{},"出":{"docs":{},"错":{"docs":{},"。":{"docs":{"programing-manual/process/process.html":{"ref":"programing-manual/process/process.html","tf":0.012658227848101266}}}}}}}}}}}}}}}}}}}}}}}}}},"每":{"docs":{},"个":{"docs":{},"进":{"docs":{},"程":{"docs":{},"都":{"docs":{},"会":{"docs":{},"把":{"docs":{},"部":{"docs":{},"分":{"docs":{"programing-manual/process/process.html":{"ref":"programing-manual/process/process.html","tf":0.012658227848101266}}}}}}}}}}}}}},"内":{"docs":{},"存":{"docs":{},"范":{"docs":{},"围":{"docs":{},",":{"docs":{},"但":{"docs":{},"是":{"docs":{},",":{"docs":{},"只":{"docs":{},"要":{"docs":{},"在":{"docs":{},"访":{"docs":{},"问":{"docs":{},"前":{"docs":{},"映":{"docs":{},"射":{"docs":{"programing-manual/process/process.html":{"ref":"programing-manual/process/process.html","tf":0.012658227848101266}}}}}}}}}}}}}}}}}},"好":{"docs":{},"处":{"docs":{},"是":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"直":{"docs":{},"接":{"docs":{},"使":{"docs":{},"用":{"docs":{},"串":{"docs":{},"口":{"docs":{},"的":{"docs":{},"输":{"docs":{},"入":{"docs":{},"输":{"docs":{},"出":{"docs":{},",":{"docs":{},"很":{"docs":{},"方":{"docs":{},"便":{"docs":{},"调":{"docs":{},"试":{"docs":{},",":{"docs":{},"不":{"docs":{},"用":{"docs":{},"自":{"docs":{},"己":{"docs":{},"从":{"docs":{},"机":{"docs":{},"器":{"docs":{},"模":{"docs":{},"式":{"docs":{},"跳":{"docs":{},"转":{"docs":{},"到":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"封":{"docs":{},"装":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}},"设":{"docs":{},"置":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}},",":{"docs":{},"最":{"docs":{},"开":{"docs":{},"始":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{},"跑":{"docs":{},"进":{"docs":{},"程":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}},"类":{"docs":{},"别":{"docs":{},",":{"docs":{},"只":{"docs":{},"允":{"docs":{},"许":{"docs":{},"使":{"docs":{},"用":{"docs":{},"下":{"docs":{},"面":{"7":{"docs":{},"个":{"docs":{},"标":{"docs":{},"识":{"docs":{},"。":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}}}},"docs":{}}}}}}}}}}},"详":{"docs":{},"细":{"docs":{},"描":{"docs":{},"述":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"分":{"docs":{},"成":{"docs":{},"多":{"docs":{},"行":{"docs":{},"。":{"docs":{},"下":{"docs":{},"面":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"范":{"docs":{},"例":{"docs":{},"。":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}}}}}}}}}}}}}}}}}}}},"简":{"docs":{},"介":{"docs":{"./":{"ref":"./","tf":5.026315789473684}}}},"许":{"docs":{},"可":{"docs":{},"协":{"docs":{},"议":{"docs":{"./":{"ref":"./","tf":0.02631578947368421}}}}}},"访":{"docs":{},"问":{"docs":{},"文":{"docs":{},"档":{"docs":{},"目":{"docs":{},"录":{"docs":{"./":{"ref":"./","tf":0.02631578947368421}}}}}}}},"#":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.08040201005025126},"tutorial/menuconfig.html":{"ref":"tutorial/menuconfig.html","tf":0.07692307692307693},"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}},"d":{"docs":{},"e":{"docs":{},"f":{"docs":{},"i":{"docs":{},"n":{"docs":{"programing-manual/mm/heap.html":{"ref":"programing-manual/mm/heap.html","tf":0.028169014084507043},"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.02054794520547945},"programing-manual/interrupt/irq.html":{"ref":"programing-manual/interrupt/irq.html","tf":0.06779661016949153},"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.021505376344086023},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.005035669324381032},"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.011029411764705883}}}}}}},"e":{"docs":{},"l":{"docs":{},"s":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086},"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}},"e":{"docs":{},",":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}},"n":{"docs":{},"d":{"docs":{},"i":{"docs":{},"f":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172},"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.011029411764705883}},"这":{"docs":{},"种":{"docs":{},"时":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"在":{"docs":{},"开":{"docs":{},"头":{"docs":{},"和":{"docs":{},"结":{"docs":{},"尾":{"docs":{},"后":{"docs":{},"面":{"docs":{},"写":{"docs":{},"上":{"docs":{},"注":{"docs":{},"释":{"docs":{},"来":{"docs":{},"帮":{"docs":{},"助":{"docs":{},"开":{"docs":{},"发":{"docs":{},"这":{"docs":{},"快":{"docs":{},"速":{"docs":{},"找":{"docs":{},"到":{"docs":{},"对":{"docs":{},"应":{"docs":{},"的":{"docs":{},"宏":{"docs":{},"。":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"f":{"docs":{},"d":{"docs":{},"e":{"docs":{},"f":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172},"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.007352941176470588}}}}},"n":{"docs":{},"d":{"docs":{},"e":{"docs":{},"f":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}},"n":{"docs":{},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"d":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.025597985732270248}}}}}}}}},"&":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.003357112882920688}},"&":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.010050251256281407}}}},"(":{"1":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},")":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}},"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}},"c":{"docs":{},"m":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.005025125628140704}}}}}}},")":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.004616030214015947},"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}},"o":{"docs":{},"r":{"docs":{},"e":{"docs":{},"i":{"docs":{},"d":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}},"n":{"docs":{},"d":{"docs":{},"i":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},")":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.007352941176470588}}}}}}}}}}},"h":{"docs":{},"a":{"docs":{},"r":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}}}},"g":{"docs":{},"i":{"docs":{},"t":{"docs":{},")":{"docs":{},"下":{"docs":{},"载":{"docs":{},"后":{"docs":{},"安":{"docs":{},"装":{"docs":{},"即":{"docs":{},"可":{"docs":{},"。":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.005025125628140704}}}}}}}}}}}}}},"p":{"docs":{},"y":{"docs":{},"t":{"docs":{},"h":{"docs":{},"o":{"docs":{},"n":{"docs":{},")":{"docs":{},"下":{"docs":{},"载":{"docs":{},"后":{"docs":{},"安":{"docs":{},"装":{"docs":{},"即":{"docs":{},"可":{"docs":{},"。":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.005025125628140704}}}}}}}}}}}}}}}},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{},"e":{"docs":{},"p":{"docs":{},"h":{"docs":{},"i":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}},"h":{"docs":{},"s":{"docs":{},"i":{"docs":{},"c":{"docs":{},"a":{"docs":{},"l":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}},"t":{"docs":{},"e":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}},"f":{"docs":{},"a":{"docs":{},"t":{"docs":{},"f":{"docs":{},"s":{"docs":{},",":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}}}}}}},"o":{"docs":{},"r":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}}}},"x":{"8":{"6":{"docs":{},",":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}}}},"docs":{}},"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.007352941176470588}}},"s":{"docs":{},"m":{"docs":{},"p":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},")":{"docs":{"programing-manual/base/start.html":{"ref":"programing-manual/base/start.html","tf":0.025}}}}}}}}},"内":{"docs":{},"核":{"docs":{},"的":{"docs":{},"主":{"docs":{},"函":{"docs":{},"数":{"docs":{},")":{"docs":{"programing-manual/base/start.html":{"ref":"programing-manual/base/start.html","tf":0.025}}}}}}}}},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"调":{"docs":{},"用":{"docs":{},")":{"docs":{"programing-manual/base/start.html":{"ref":"programing-manual/base/start.html","tf":0.025}}}}}}}},"平":{"docs":{},"台":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},",":{"docs":{"programing-manual/base/start.html":{"ref":"programing-manual/base/start.html","tf":0.025}}},"二":{"docs":{},"阶":{"docs":{},"段":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"使":{"docs":{},"用":{"docs":{},"内":{"docs":{},"核":{"docs":{},"的":{"docs":{},"功":{"docs":{},"能":{"docs":{},":":{"docs":{"programing-manual/base/start.html":{"ref":"programing-manual/base/start.html","tf":0.025}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"主":{"docs":{},"函":{"docs":{},"数":{"docs":{},",":{"docs":{},"什":{"docs":{},"么":{"docs":{},"都":{"docs":{},"可":{"docs":{},"以":{"docs":{},"使":{"docs":{},"用":{"docs":{},":":{"docs":{"programing-manual/base/start.html":{"ref":"programing-manual/base/start.html","tf":0.025}}}}}}}}}}}}}}}}},"调":{"docs":{},"度":{"docs":{},"第":{"docs":{},"一":{"docs":{},"个":{"docs":{},"线":{"docs":{},"程":{"docs":{},")":{"docs":{"programing-manual/base/start.html":{"ref":"programing-manual/base/start.html","tf":0.025}}}}}}}}}},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"_":{"docs":{},"m":{"docs":{},"a":{"docs":{},"x":{"docs":{},"_":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"y":{"docs":{},"_":{"docs":{},"n":{"docs":{},"r":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}}}}}}}}}}}},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"y":{"docs":{},"_":{"docs":{},"h":{"docs":{},"i":{"docs":{},"g":{"docs":{},"h":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"r":{"docs":{},")":{"docs":{},"&":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"p":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"0":{"docs":{},")":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},"1":{"docs":{},")":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},"2":{"docs":{},")":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},"3":{"docs":{},")":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},"docs":{}}}}}}}}}}},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"_":{"docs":{},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"r":{"docs":{},"_":{"docs":{},"f":{"docs":{},"r":{"docs":{},"o":{"docs":{},"m":{"docs":{},"_":{"docs":{},"s":{"docs":{},"a":{"docs":{},"t":{"docs":{},"p":{"docs":{},"(":{"docs":{},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"r":{"docs":{},")":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}}}}}},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"v":{"docs":{},"i":{"docs":{},"r":{"docs":{},"t":{"2":{"docs":{},"p":{"docs":{},"h":{"docs":{},"y":{"docs":{},"(":{"docs":{},"p":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{},"e":{"docs":{},"v":{"docs":{},"i":{"docs":{},"r":{"docs":{},")":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}},"docs":{}}}}}}}}}}}}},"h":{"docs":{},"a":{"docs":{},"l":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}},"s":{"docs":{},"y":{"docs":{},"s":{"docs":{},"c":{"docs":{},"a":{"docs":{},"l":{"docs":{},"l":{"docs":{},"w":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"r":{"docs":{},"g":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},")":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"s":{"docs":{},"y":{"docs":{},"s":{"docs":{},"c":{"docs":{},"a":{"docs":{},"l":{"docs":{},"l":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"s":{"docs":{},"y":{"docs":{},"s":{"docs":{},"c":{"docs":{},"a":{"docs":{},"l":{"docs":{},"l":{"docs":{},"a":{"docs":{},"p":{"docs":{},"i":{"docs":{},")":{"docs":{},"f":{"docs":{},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"u":{"8":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}},"docs":{},"a":{"docs":{},"r":{"docs":{},"c":{"docs":{},"h":{"docs":{},")":{"docs":{},"(":{"docs":{},"(":{"docs":{},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"u":{"docs":{},"a":{"docs":{},"r":{"docs":{},"c":{"docs":{},"h":{"docs":{},")":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{},")":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"r":{"docs":{},"g":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}},"e":{"docs":{},"x":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}},"*":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},")":{"docs":{},"(":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.021505376344086023}}}}}}}}}}}}}}}}},"s":{"docs":{},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"d":{"docs":{},"c":{"docs":{},"a":{"docs":{},"l":{"docs":{},"l":{"docs":{},"b":{"docs":{},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},")":{"docs":{},"(":{"docs":{},"v":{"docs":{},"o":{"docs":{},"i":{"docs":{},"d":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}}}}}}}}}}}}}}}}}}}}},"w":{"docs":{},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},")":{"docs":{},"(":{"docs":{},"v":{"docs":{},"o":{"docs":{},"i":{"docs":{},"d":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}}}}}}},"!":{"docs":{},"a":{"docs":{},"t":{"docs":{},"t":{"docs":{},"r":{"docs":{},")":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}}}}}},"p":{"docs":{},"t":{"docs":{},"e":{"docs":{},"_":{"docs":{},"u":{"docs":{},"s":{"docs":{},"e":{"docs":{},"d":{"docs":{},"(":{"docs":{},"*":{"docs":{},"p":{"docs":{},"t":{"docs":{},"e":{"docs":{},")":{"docs":{},")":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}},"\"":{"docs":{},"r":{"docs":{},"d":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}},"a":{"0":{"docs":{},")":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}}},"1":{"docs":{},")":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},"docs":{}},"i":{"docs":{},"r":{"docs":{},"q":{"docs":{},"n":{"docs":{},"o":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.001258917331095258}}}}}}},"l":{"docs":{},"e":{"docs":{},"v":{"docs":{},"e":{"docs":{},"l":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}},"m":{"docs":{},"m":{"docs":{},"u":{"docs":{},"_":{"docs":{},"p":{"docs":{},"d":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}},"t":{"docs":{},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}},"r":{"docs":{},"a":{"docs":{},"p":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.001678556441460344}}}}}}}}}}},"v":{"docs":{},"o":{"docs":{},"i":{"docs":{},"d":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}}}}},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{},")":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}},")":{"docs":{},":":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}},"b":{"docs":{},".":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.010050251256281407}}},"o":{"docs":{},"o":{"docs":{},"t":{"docs":{},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.010869565217391304}}}}}},"c":{"docs":{},"o":{"docs":{},"r":{"docs":{},"e":{"docs":{},"i":{"docs":{},"d":{"docs":{},")":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}},"k":{"docs":{},"o":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}},"d":{"docs":{},"i":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.01652892561983471}}}}},"u":{"docs":{},"d":{"docs":{},"d":{"docs":{},"i":{"docs":{"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.05434782608695652},"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.05785123966942149}}},"y":{"docs":{},"伙":{"docs":{},"伴":{"docs":{},"算":{"docs":{},"法":{"docs":{"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":10}}}}}}}}},"i":{"docs":{},"l":{"docs":{},"d":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086},"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}},"f":{"0":{"docs":{},"[":{"3":{"2":{"docs":{},"]":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}},"docs":{}},"docs":{}}},"1":{"docs":{},",":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}},"[":{"3":{"2":{"docs":{},"]":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}},"docs":{}},"docs":{}}},"2":{"docs":{},",":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}},"[":{"3":{"2":{"docs":{},"]":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}},"docs":{}},"docs":{}}},"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}},"s":{"docs":{},"i":{"docs":{},"z":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}},"g":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}},"a":{"docs":{},"s":{"docs":{},"e":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.001678556441460344}}}},"r":{"docs":{},"e":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}},"r":{"docs":{},"i":{"docs":{},"e":{"docs":{},"r":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}},"d":{"docs":{},"!":{"docs":{},"!":{"docs":{},"!":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}},"e":{"docs":{},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}},"q":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.001678556441460344}}}},"i":{"docs":{},"t":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.002517834662190516}}}},"s":{"docs":{},"s":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},"y":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},")":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172},"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0051813471502590676}}}}}}},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"k":{"docs":{},";":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.011029411764705883}}}}}}}},"c":{"docs":{},"l":{"docs":{},"e":{"docs":{},"a":{"docs":{},"n":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.005025125628140704},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}},"r":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.001258917331095258}},"c":{"docs":{},"s":{"docs":{},"r":{"docs":{},"(":{"docs":{},"s":{"docs":{},"i":{"docs":{},"e":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}}}}},"t":{"docs":{},"r":{"docs":{},"l":{"docs":{},"+":{"docs":{},"a":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.005025125628140704}}},"d":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.005025125628140704}}}}}},"x":{"docs":{},"_":{"docs":{},"s":{"docs":{},"p":{"docs":{},"_":{"docs":{},"o":{"docs":{},"f":{"docs":{},"f":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}},"_":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"p":{"docs":{},"l":{"docs":{},"a":{"docs":{},"t":{"docs":{},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{},"m":{"docs":{},"_":{"docs":{},"k":{"2":{"1":{"0":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}},"docs":{}},"docs":{}},"docs":{}}}}}}}}}}},"u":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"0":{"docs":{},"_":{"docs":{},"f":{"docs":{},"r":{"docs":{},"o":{"docs":{},"m":{"docs":{},"_":{"docs":{},"s":{"docs":{},"b":{"docs":{},"i":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}},"docs":{}}}}}}}}}}}},"s":{"docs":{},"t":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}},"o":{"docs":{},"l":{"docs":{},"e":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"(":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},")":{"docs":{},";":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{},"o":{"docs":{},"r":{"docs":{},"(":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{},"o":{"docs":{},"r":{"docs":{},",":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{},"o":{"docs":{},"r":{"docs":{},"(":{"docs":{},")":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{},"o":{"docs":{},"r":{"docs":{},"(":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{},"o":{"docs":{},"r":{"docs":{},")":{"docs":{},";":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{},"s":{"docs":{},":":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.004616030214015947},"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.005035669324381032}}}},"n":{"docs":{},"t":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}},"r":{"docs":{},"o":{"docs":{},"l":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}},"d":{"docs":{},",":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0051813471502590676}}},"i":{"docs":{},"t":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"c":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"(":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}}}},"d":{"docs":{},"e":{"docs":{},"l":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},"(":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"d":{"docs":{},"i":{"docs":{},"t":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"(":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"d":{"docs":{},"i":{"docs":{},"t":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}}}}},"s":{"docs":{},"l":{"docs":{},"e":{"docs":{},"e":{"docs":{},"p":{"docs":{},"(":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"d":{"docs":{},"i":{"docs":{},"t":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}}}}}},"w":{"docs":{},"a":{"docs":{},"k":{"docs":{},"e":{"docs":{},"(":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"d":{"docs":{},"i":{"docs":{},"t":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}},"a":{"docs":{},"l":{"docs":{},"l":{"docs":{},"(":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"d":{"docs":{},"i":{"docs":{},"t":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.010869565217391304}},")":{"docs":{},";":{"docs":{"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.010869565217391304}}}}}}},"r":{"docs":{},"e":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.00684931506849315},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}},"a":{"docs":{},"f":{"docs":{},"f":{"docs":{},"i":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"y":{"docs":{},";":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}}}}}},"i":{"docs":{},"d":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},")":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},";":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}},"\"":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"c":{"docs":{},"k":{"2":{"docs":{},":":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},"3":{"docs":{},":":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},"docs":{}}}}}}}},"w":{"docs":{"programing-manual/interrupt/irq.html":{"ref":"programing-manual/interrupt/irq.html","tf":0.01694915254237288}}},"p":{"docs":{},"y":{"docs":{},"r":{"docs":{},"i":{"docs":{},"g":{"docs":{},"h":{"docs":{},"t":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.004616030214015947},"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}},"d":{"docs":{},"e":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}},",":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}},"m":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.007352941176470588}}}}},"i":{"docs":{},"t":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.049586776859504134}}}}}}},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{"programing-manual/mm/heap.html":{"ref":"programing-manual/mm/heap.html","tf":0.04225352112676056}}}},"s":{"docs":{},"e":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575},"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.014705882352941176}}}},"l":{"docs":{},"l":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},"n":{"docs":{},"'":{"docs":{},"t":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.00684931506849315},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.004616030214015947},"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294},"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.01652892561983471}}}},"r":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.00684931506849315},"programing-manual/process/process.html":{"ref":"programing-manual/process/process.html","tf":0.012658227848101266},"programing-manual/interrupt/irq.html":{"ref":"programing-manual/interrupt/irq.html","tf":0.01694915254237288},"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.015544041450777202},"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294},"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.02727272727272727}}}},"o":{"docs":{},"r":{"docs":{},"e":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}}},"p":{"docs":{},"u":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086},"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}},"_":{"docs":{},"i":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"p":{"docs":{},"(":{"docs":{},"c":{"docs":{},"o":{"docs":{},"r":{"docs":{},"e":{"docs":{},"i":{"docs":{},"d":{"docs":{},")":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"c":{"docs":{},"k":{"0":{"docs":{},":":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},"1":{"docs":{},":":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},"docs":{},"t":{"docs":{},"o":{"docs":{},"p":{"0":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}},":":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},"1":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}},":":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},"2":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}},":":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},"3":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}},":":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},"docs":{}}}}}}}}}}}},"s":{"docs":{},"r":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"c":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}},"w":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}}}},"m":{"docs":{},"d":{"docs":{},",":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0051813471502590676}}}}},"语":{"docs":{},"言":{"docs":{},"头":{"docs":{},"文":{"docs":{},"件":{"docs":{},"为":{"docs":{},"了":{"docs":{},"避":{"docs":{},"免":{"docs":{},"多":{"docs":{},"次":{"docs":{},"重":{"docs":{},"复":{"docs":{},"包":{"docs":{},"含":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"定":{"docs":{},"义":{"docs":{},"一":{"docs":{},"个":{"docs":{},"符":{"docs":{},"号":{"docs":{},"。":{"docs":{},"这":{"docs":{},"个":{"docs":{},"符":{"docs":{},"号":{"docs":{},"的":{"docs":{},"定":{"docs":{},"义":{"docs":{},"形":{"docs":{},"式":{"docs":{},"请":{"docs":{},"采":{"docs":{},"用":{"docs":{},"如":{"docs":{},"下":{"docs":{},"的":{"docs":{},"风":{"docs":{},"格":{"docs":{},":":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"g":{"docs":{},"d":{"docs":{},"b":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.005025125628140704}}}},"e":{"docs":{},"n":{"docs":{},"i":{"docs":{},"s":{"docs":{},"o":{"docs":{},"i":{"docs":{},"m":{"docs":{},"a":{"docs":{},"g":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.01507537688442211}}}}}}}}}},"t":{"docs":{},"_":{"docs":{},"p":{"docs":{},"f":{"docs":{},"_":{"docs":{},"i":{"docs":{},"d":{"docs":{},"(":{"docs":{},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"r":{"docs":{},"e":{"docs":{},"n":{"docs":{},"d":{"docs":{},")":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{},")":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},"c":{"docs":{},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},")":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}},"i":{"docs":{},"t":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.01507537688442211}}}},"r":{"docs":{},"u":{"docs":{},"b":{"2":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.01507537688442211}}},"docs":{}}}},"l":{"docs":{},"o":{"docs":{},"b":{"docs":{},"a":{"docs":{},"l":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},";":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}}}}}}},"c":{"docs":{},"c":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.001678556441460344},"tutorial/toolchains.html":{"ref":"tutorial/toolchains.html","tf":0.08108108108108109}},"\\":{"docs":{},"b":{"docs":{},"i":{"docs":{},"n":{"docs":{"tutorial/toolchains.html":{"ref":"tutorial/toolchains.html","tf":0.02702702702702703}}}}}}}}},"h":{"docs":{},"a":{"docs":{},"t":{"docs":{},"/":{"docs":{},"f":{"docs":{},"e":{"docs":{},"d":{"docs":{},"o":{"docs":{},"r":{"docs":{},"a":{"docs":{},"/":{"docs":{},"c":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"o":{"docs":{},"s":{"docs":{},":":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.010050251256281407}}}}}}}}}}}}}}}}}},"r":{"docs":{},"d":{"docs":{},"w":{"docs":{},"a":{"docs":{},"r":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}}}}}}},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575},"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.010752688172043012},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},",":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575},"programing-manual/interrupt/irq.html":{"ref":"programing-manual/interrupt/irq.html","tf":0.01694915254237288},"programing-manual/interrupt/delay_queue.html":{"ref":"programing-manual/interrupt/delay_queue.html","tf":0.02564102564102564},"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}},";":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}},"(":{"docs":{},"f":{"docs":{},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}},"l":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.001258917331095258}}},"s":{"docs":{},"h":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}},"u":{"docs":{},"b":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}}}},"e":{"docs":{},"a":{"docs":{},"p":{"docs":{"programing-manual/mm/heap.html":{"ref":"programing-manual/mm/heap.html","tf":0.028169014084507043}},"c":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"虚":{"docs":{},"拟":{"docs":{},"内":{"docs":{},"存":{"docs":{},"管":{"docs":{},"理":{"docs":{"programing-manual/mm/heap.html":{"ref":"programing-manual/mm/heap.html","tf":10}}}}}}}}}}}}}},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294},"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}},"部":{"docs":{},"分":{"docs":{},"只":{"docs":{},"有":{"docs":{},"一":{"docs":{},"行":{"docs":{},",":{"docs":{},"包":{"docs":{},"括":{"docs":{},"三":{"docs":{},"个":{"docs":{},"字":{"docs":{},"段":{"docs":{},":":{"docs":{},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{},"(":{"docs":{},"必":{"docs":{},"需":{"docs":{},")":{"docs":{},"、":{"docs":{},"s":{"docs":{},"c":{"docs":{},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{},"(":{"docs":{},"可":{"docs":{},"选":{"docs":{},")":{"docs":{},"和":{"docs":{},"s":{"docs":{},"u":{"docs":{},"b":{"docs":{},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"(":{"docs":{},"必":{"docs":{},"需":{"docs":{},")":{"docs":{},"。":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}}}},"i":{"docs":{},"g":{"docs":{},"h":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}},"o":{"docs":{},"l":{"docs":{},"d":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}}}},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"b":{"docs":{},"y":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"u":{"docs":{},"n":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"/":{"1":{"6":{"5":{"5":{"0":{"docs":{},".":{"docs":{},"h":{"docs":{},"t":{"docs":{},"m":{"docs":{},"l":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}}}}}}}}}}}}}}}}}}}}},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"s":{"docs":{},"o":{"docs":{},"r":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},",":{"docs":{},"s":{"docs":{},"u":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"s":{"docs":{},"o":{"docs":{},"r":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}}},"q":{"docs":{},"e":{"docs":{},"m":{"docs":{},"u":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.02512562814070352},"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.010869565217391304},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.001678556441460344}},"_":{"docs":{},"r":{"docs":{},"i":{"docs":{},"s":{"docs":{},"c":{"docs":{},"v":{"6":{"4":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.020100502512562814}}},"docs":{}},"docs":{}}}}}}}}}},"u":{"docs":{},"e":{"docs":{},"u":{"docs":{},"e":{"docs":{},",":{"docs":{"programing-manual/interrupt/delay_queue.html":{"ref":"programing-manual/interrupt/delay_queue.html","tf":0.02564102564102564}}}}}}}},"r":{"docs":{},"e":{"docs":{},"d":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.010050251256281407}}},"a":{"docs":{},"l":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.00684931506849315}}},"d":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}},"c":{"docs":{},"s":{"docs":{},"r":{"docs":{},"(":{"docs":{},"s":{"docs":{},"a":{"docs":{},"t":{"docs":{},"p":{"docs":{},")":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},")":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.001258917331095258}},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}},"t":{"docs":{},"v":{"docs":{},"e":{"docs":{},"c":{"docs":{},")":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}},"s":{"docs":{},"o":{"docs":{},"u":{"docs":{},"r":{"docs":{},"c":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}},"e":{"docs":{},";":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}}},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.001678556441460344}}}}},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"e":{"docs":{},"_":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}}}}}}}}}}}}}},"c":{"docs":{},"e":{"docs":{},"i":{"docs":{},"v":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}},"g":{"docs":{},"b":{"docs":{},"y":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"(":{"docs":{},"s":{"docs":{},"p":{"docs":{},")":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.001258917331095258}},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},".":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}},"t":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}},"u":{"docs":{},"r":{"docs":{},"n":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.015107007973143098},"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.01818181818181818}},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}},":":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{},"e":{"docs":{},";":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"(":{"docs":{},"m":{"docs":{},"m":{"docs":{},")":{"docs":{},":":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}}}},":":{"docs":{},"重":{"docs":{},"构":{"docs":{},"(":{"docs":{},"即":{"docs":{},"不":{"docs":{},"是":{"docs":{},"新":{"docs":{},"增":{"docs":{},"功":{"docs":{},"能":{"docs":{},",":{"docs":{},"也":{"docs":{},"不":{"docs":{},"是":{"docs":{},"修":{"docs":{},"改":{"docs":{},"b":{"docs":{},"u":{"docs":{},"g":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},"变":{"docs":{},"动":{"docs":{},")":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"t":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}},":":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}}}}},"i":{"docs":{},"s":{"docs":{},"c":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.0037767519932857744},"tutorial/toolchains.html":{"ref":"tutorial/toolchains.html","tf":0.05405405405405406}},"v":{"6":{"4":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.020100502512562814},"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315},"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.010869565217391304},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.001258917331095258},"tutorial/toolchains.html":{"ref":"tutorial/toolchains.html","tf":0.02702702702702703}},",":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}}},"等":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}}},"!":{"docs":{},"\"":{"docs":{},")":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}},"docs":{}},"docs":{"programing-manual/process/syscall.html":{"ref":"programing-manual/process/syscall.html","tf":0.03125}},",":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}}},"(":{"docs":{},"r":{"docs":{},"v":{"3":{"2":{"docs":{},")":{"docs":{},"具":{"docs":{},"有":{"3":{"2":{"docs":{},"个":{"docs":{},"整":{"docs":{},"数":{"docs":{},"寄":{"docs":{},"存":{"docs":{},"器":{"docs":{},"组":{"docs":{},"(":{"docs":{},"取":{"docs":{},"名":{"docs":{},"为":{"docs":{},":":{"docs":{},"x":{"0":{"docs":{},"~":{"docs":{},"x":{"3":{"1":{"docs":{},")":{"docs":{},",":{"docs":{},"其":{"docs":{},"中":{"3":{"1":{"docs":{},"个":{"docs":{},"是":{"docs":{},"通":{"docs":{},"用":{"docs":{},"寄":{"docs":{},"存":{"docs":{},"器":{"docs":{},"(":{"docs":{},"x":{"1":{"docs":{},"~":{"docs":{},"x":{"3":{"1":{"docs":{},")":{"docs":{},",":{"docs":{},"它":{"docs":{},"们":{"docs":{},"存":{"docs":{},"储":{"docs":{},"整":{"docs":{},"数":{"docs":{},"数":{"docs":{},"值":{"docs":{},",":{"docs":{},"寄":{"docs":{},"存":{"docs":{},"器":{"docs":{},"x":{"0":{"docs":{},"是":{"docs":{},"硬":{"docs":{},"件":{"docs":{},"连":{"docs":{},"线":{"docs":{},"的":{"docs":{},"常":{"docs":{},"数":{"0":{"docs":{},"。":{"docs":{},"当":{"docs":{},"你":{"docs":{},"设":{"docs":{},"计":{"docs":{},"的":{"docs":{},"r":{"docs":{},"i":{"docs":{},"s":{"docs":{},"c":{"docs":{},"v":{"docs":{},"架":{"docs":{},"构":{"docs":{},"处":{"docs":{},"理":{"docs":{},"器":{"docs":{},"实":{"docs":{},"现":{"docs":{},"了":{"docs":{},"浮":{"docs":{},"点":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"时":{"docs":{},",":{"docs":{},"还":{"docs":{},"必":{"docs":{},"须":{"docs":{},"有":{"3":{"2":{"docs":{},"个":{"docs":{},"浮":{"docs":{},"点":{"docs":{},"寄":{"docs":{},"存":{"docs":{},"器":{"docs":{},"f":{"0":{"docs":{},"~":{"docs":{},"f":{"3":{"1":{"docs":{},"。":{"docs":{},"对":{"docs":{},"于":{"docs":{},"r":{"docs":{},"v":{"3":{"2":{"docs":{},",":{"docs":{},"其":{"docs":{},"x":{"docs":{},"寄":{"docs":{},"存":{"docs":{},"器":{"docs":{},"是":{"3":{"2":{"docs":{},"位":{"docs":{},"宽":{"docs":{},"度":{"docs":{},"的":{"docs":{},",":{"docs":{},"x":{"docs":{},"l":{"docs":{},"e":{"docs":{},"n":{"docs":{},"=":{"3":{"2":{"docs":{},",":{"docs":{},"对":{"docs":{},"于":{"docs":{},"r":{"docs":{},"v":{"6":{"4":{"docs":{},",":{"docs":{},"它":{"docs":{},"们":{"docs":{},"是":{"6":{"4":{"docs":{},"位":{"docs":{},"宽":{"docs":{},"度":{"docs":{},"的":{"docs":{},",":{"docs":{},"x":{"docs":{},"l":{"docs":{},"e":{"docs":{},"n":{"docs":{},"=":{"6":{"4":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},"docs":{}},"docs":{}}}}}}}}}}}},"docs":{}},"docs":{}}}}}},"docs":{}},"docs":{}}}}}}},"docs":{}},"docs":{}}}}}}}}}}}},"docs":{}},"docs":{}}}}}}}}},"docs":{}},"docs":{}}}}}}},"docs":{}},"docs":{}}}},"docs":{}}}}}}}}},"docs":{}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"docs":{}}}}}}}}}},"docs":{}}}}}}}}}}}}}}}}},"docs":{}},"docs":{}}}},"docs":{}}}}}}}}}}},"docs":{}},"docs":{}}}}}},"docs":{}},"docs":{}}}},"docs":{}}}}}}}}}}}}}}},"docs":{}},"docs":{}}}}},"docs":{}},"docs":{}}}},"架":{"docs":{},"构":{"docs":{},"移":{"docs":{},"植":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":10}}}}}}}}},"n":{"docs":{},"g":{"1":{"docs":{},",":{"docs":{"programing-manual/process/syscall.html":{"ref":"programing-manual/process/syscall.html","tf":0.03125}}}},"2":{"docs":{},",":{"docs":{"programing-manual/process/syscall.html":{"ref":"programing-manual/process/syscall.html","tf":0.03125}}}},"3":{"docs":{},")":{"docs":{},",":{"docs":{},"在":{"docs":{"programing-manual/process/syscall.html":{"ref":"programing-manual/process/syscall.html","tf":0.03125}}}}}},"docs":{}}}},"u":{"docs":{},"n":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.010050251256281407},"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575},"tutorial/menuconfig.html":{"ref":"tutorial/menuconfig.html","tf":0.038461538461538464},"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}},"s":{"docs":{},"t":{"docs":{},"s":{"docs":{},"b":{"docs":{},"i":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.001678556441460344}},",":{"docs":{},"其":{"docs":{},"内":{"docs":{},"核":{"docs":{},"的":{"docs":{},"入":{"docs":{},"口":{"docs":{},"地":{"docs":{},"址":{"docs":{},"为":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}},"t":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}},"o":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},"a":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}},"d":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}},"h":{"docs":{},"r":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"i":{"docs":{},"n":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}},"t":{"0":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.00419639110365086}}}},"1":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{},"s":{"docs":{},"/":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.005025125628140704}},"g":{"docs":{},"e":{"docs":{},"n":{"docs":{},"i":{"docs":{},"s":{"docs":{},"o":{"docs":{},"i":{"docs":{},"m":{"docs":{},"a":{"docs":{},"g":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.005025125628140704}}}}}}}}}}},"r":{"docs":{},"u":{"docs":{},"b":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.005025125628140704}}}}}},"m":{"docs":{},"k":{"docs":{},"f":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.005025125628140704}}}},"t":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.005025125628140704}}}}}}}},"服":{"docs":{},"务":{"docs":{},"器":{"docs":{},"下":{"docs":{},"载":{"docs":{},"(":{"docs":{},"速":{"docs":{},"度":{"docs":{},"较":{"docs":{},"慢":{"docs":{},",":{"docs":{},"请":{"docs":{},"耐":{"docs":{},"心":{"docs":{},"等":{"docs":{},"待":{"docs":{},")":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.005025125628140704}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{},"s":{"docs":{},"\\":{"docs":{},"x":{"8":{"6":{"docs":{},"_":{"6":{"4":{"docs":{"tutorial/toolchains.html":{"ref":"tutorial/toolchains.html","tf":0.05405405405405406}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}}}}}}}}}},"p":{"docs":{"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.010869565217391304},"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}},"r":{"docs":{},"u":{"docs":{},"n":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.010050251256281407}}}}}}},"a":{"docs":{},"n":{"docs":{},"s":{"docs":{},"l":{"docs":{},"a":{"docs":{},"t":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}},"m":{"docs":{},"i":{"docs":{},"t":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}},"p":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}},"y":{"0":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},"1":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},"2":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},"3":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},"docs":{}}}}}}}},"i":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}},"(":{"docs":{},"m":{"docs":{},"m":{"docs":{},")":{"docs":{},":":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}}}},":":{"docs":{},"增":{"docs":{},"加":{"docs":{},"测":{"docs":{},"试":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}}}}}},"a":{"docs":{},"m":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.004616030214015947},"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}},"x":{"docs":{},"t":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}}}}},"h":{"docs":{},"r":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.0136986301369863},"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.03424657534246575},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}},"c":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"(":{"docs":{},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"i":{"docs":{},"t":{"docs":{},"(":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"i":{"docs":{},"d":{"docs":{},"(":{"docs":{},"v":{"docs":{},"o":{"docs":{},"i":{"docs":{},"d":{"docs":{},")":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"u":{"docs":{},"m":{"docs":{},"e":{"docs":{},"(":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}}}},"s":{"docs":{},"u":{"docs":{},"s":{"docs":{},"p":{"docs":{},"e":{"docs":{},"n":{"docs":{},"d":{"docs":{},"(":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}}}}},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"m":{"docs":{},"i":{"docs":{},"n":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"(":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}}}}}}},"w":{"docs":{},"a":{"docs":{},"i":{"docs":{},"t":{"docs":{},"(":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}},"f":{"docs":{},"i":{"docs":{},"n":{"docs":{},"d":{"docs":{},"b":{"docs":{},"y":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}}}},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}}}}}}}},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315},"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.0136986301369863}},"r":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315},"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.021505376344086023},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.001678556441460344}}},"s":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},";":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}},"e":{"docs":{},"t":{"docs":{},"c":{"docs":{},"u":{"docs":{},"r":{"docs":{},"r":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"(":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},"s":{"docs":{},"y":{"docs":{},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}}}}}}}}}}}}}},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"c":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},"v":{"docs":{},"o":{"docs":{},"i":{"docs":{},"d":{"docs":{},")":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}}}},"u":{"docs":{},"r":{"docs":{},"r":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"(":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},"s":{"docs":{},"y":{"docs":{},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},",":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0051813471502590676}}}}}}}},"c":{"docs":{},"k":{"docs":{},"s":{"docs":{},";":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}},"d":{"docs":{},"e":{"docs":{},"l":{"docs":{},"t":{"docs":{},"a":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},")":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}}}}}}}}}},"d":{"docs":{},";":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}},")":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.007772020725388601}}},",":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.021505376344086023},"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}},"d":{"docs":{},"e":{"docs":{},"f":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575},"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.014705882352941176}}}}}}}},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"e":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}},"l":{"docs":{},"s":{"docs":{},"a":{"docs":{},"l":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"(":{"docs":{},"v":{"docs":{},"o":{"docs":{},"i":{"docs":{},"d":{"docs":{},")":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}}}}},"f":{"docs":{},"r":{"docs":{},"e":{"docs":{},"e":{"docs":{},"(":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"u":{"docs":{},"e":{"docs":{},"(":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"d":{"docs":{},"e":{"docs":{},"x":{"docs":{},")":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0051813471502590676}}},",":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"u":{"docs":{},"e":{"docs":{},"(":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}}}}}}}},"m":{"docs":{},"p":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"b":{"docs":{},"u":{"docs":{},"f":{"docs":{},"f":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}}}}},"c":{"docs":{},"=":{"docs":{},"i":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}},"是":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"c":{"docs":{},"a":{"docs":{},"s":{"docs":{},"e":{"docs":{},"的":{"docs":{},"缩":{"docs":{},"写":{"docs":{},",":{"docs":{},"表":{"docs":{},"示":{"docs":{},"启":{"docs":{},"用":{"docs":{},"测":{"docs":{},"试":{"docs":{},"案":{"docs":{},"例":{"docs":{},"。":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}}}}}}}}}}}}}}}}}}}}}}}},"u":{"8":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}},"docs":{},"b":{"docs":{},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{},"u":{"docs":{},"/":{"docs":{},"k":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.010050251256281407}}}}}}}}}}}},"d":{"docs":{},"r":{"docs":{},"i":{"docs":{},"v":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}}}}}},"s":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086},"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.01652892561983471}},"e":{"docs":{},"r":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.00209819555182543}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"c":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}}}}}},")":{"docs":{},"。":{"docs":{"programing-manual/process/syscall.html":{"ref":"programing-manual/process/syscall.html","tf":0.03125},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},"\"":{"docs":{},")":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}},":":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{},")":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}}}}}}}}},"d":{"docs":{},"!":{"docs":{},"\"":{"docs":{},")":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}},"i":{"docs":{},"z":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.02849740932642487}}}}},"t":{"docs":{},"i":{"docs":{},"l":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}}}},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}}},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}},".":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}},"p":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086},"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}}},"n":{"docs":{},"k":{"docs":{},"n":{"docs":{},"o":{"docs":{},"w":{"docs":{},"n":{"docs":{"tutorial/toolchains.html":{"ref":"tutorial/toolchains.html","tf":0.02702702702702703}}}}}}}}},"y":{"docs":{},"u":{"docs":{},"m":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.01507537688442211}}}},"y":{"docs":{},"i":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}},"一":{"docs":{},"、":{"docs":{},"开":{"docs":{},"发":{"docs":{},"环":{"docs":{},"境":{"docs":{},"搭":{"docs":{},"建":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.005025125628140704}}}}}}}},"混":{"docs":{},"合":{"docs":{},"内":{"docs":{},"核":{"docs":{},"框":{"docs":{},"架":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}}}}}}}},"描":{"docs":{},"述":{"docs":{"programing-manual/mm/heap.html":{"ref":"programing-manual/mm/heap.html","tf":0.014084507042253521},"programing-manual/mm/vmspace.html":{"ref":"programing-manual/mm/vmspace.html","tf":0.015384615384615385},"programing-manual/interrupt/irq.html":{"ref":"programing-manual/interrupt/irq.html","tf":0.01694915254237288},"programing-manual/interrupt/delay_queue.html":{"ref":"programing-manual/interrupt/delay_queue.html","tf":0.01282051282051282},"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.010752688172043012},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},"w":{"docs":{},"i":{"docs":{},"n":{"docs":{},"d":{"docs":{},"o":{"docs":{},"w":{"docs":{},"s":{"docs":{},"环":{"docs":{},"境":{"docs":{},"工":{"docs":{},"具":{"docs":{"tutorial/toolchains.html":{"ref":"tutorial/toolchains.html","tf":0.02702702702702703}}}}}}}}}}}}}},".":{"docs":{"programing-manual/mm/mm.html":{"ref":"programing-manual/mm/mm.html","tf":0.1111111111111111},"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.010869565217391304},"programing-manual/sched/sched.html":{"ref":"programing-manual/sched/sched.html","tf":0.09090909090909091},"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575},"programing-manual/sched/smp.html":{"ref":"programing-manual/sched/smp.html","tf":0.0625},"programing-manual/process/process.html":{"ref":"programing-manual/process/process.html","tf":0.012658227848101266},"programing-manual/process/syscall.html":{"ref":"programing-manual/process/syscall.html","tf":0.03125}}},"般":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},",":{"docs":{},"第":{"docs":{},"一":{"docs":{},"个":{"docs":{},"引":{"docs":{},"导":{"docs":{},"处":{"docs":{},"理":{"docs":{},"器":{"docs":{},"(":{"docs":{},"b":{"docs":{},"o":{"docs":{},"o":{"docs":{},"t":{"docs":{"programing-manual/sched/smp.html":{"ref":"programing-manual/sched/smp.html","tf":0.0625}}}}}}}}}}}}}}}}}}}}},"下":{"docs":{},"载":{"docs":{},"后":{"docs":{},"需":{"docs":{},"要":{"docs":{},"解":{"docs":{},"压":{"docs":{},"出":{"docs":{},"来":{"docs":{},",":{"docs":{},"然":{"docs":{},"后":{"docs":{},"将":{"docs":{},"每":{"docs":{},"一":{"docs":{},"个":{"docs":{},"目":{"docs":{},"录":{"docs":{},"配":{"docs":{},"置":{"docs":{},"到":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"h":{"docs":{},"系":{"docs":{},"统":{"docs":{},"环":{"docs":{},"境":{"docs":{},"变":{"docs":{},"量":{"docs":{},"中":{"docs":{},"(":{"docs":{},"最":{"docs":{},"好":{"docs":{},"是":{"docs":{},"配":{"docs":{},"置":{"docs":{},"到":{"docs":{},"环":{"docs":{},"境":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"最":{"docs":{},"前":{"docs":{},"面":{"docs":{},",":{"docs":{},"避":{"docs":{},"免":{"docs":{},"和":{"docs":{},"其":{"docs":{},"它":{"docs":{},"系":{"docs":{},"统":{"docs":{},"已":{"docs":{},"经":{"docs":{},"存":{"docs":{},"在":{"docs":{},"的":{"docs":{},"工":{"docs":{},"具":{"docs":{},"冲":{"docs":{},"突":{"docs":{},")":{"docs":{},",":{"docs":{},"解":{"docs":{},"压":{"docs":{},"后":{"docs":{},"您":{"docs":{},"将":{"docs":{},"会":{"docs":{},"有":{"docs":{},":":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.005025125628140704}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"链":{"docs":{},"接":{"docs":{},":":{"docs":{},"h":{"docs":{},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{},"s":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"q":{"docs":{},"e":{"docs":{},"m":{"docs":{},"u":{"docs":{},".":{"docs":{},"w":{"docs":{},"e":{"docs":{},"i":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"z":{"docs":{},".":{"docs":{},"d":{"docs":{},"e":{"docs":{},"/":{"docs":{},"w":{"6":{"4":{"docs":{},"/":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.005025125628140704}}}},"docs":{}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"到":{"docs":{},"本":{"docs":{},"地":{"docs":{},"后":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"手":{"docs":{},"动":{"docs":{},"解":{"docs":{},"压":{"docs":{},"到":{"docs":{},"一":{"docs":{},"个":{"docs":{},"目":{"docs":{},"录":{"docs":{},"下":{"docs":{},"面":{"docs":{},",":{"docs":{},"然":{"docs":{},"后":{"docs":{},"对":{"docs":{},"工":{"docs":{},"具":{"docs":{},"链":{"docs":{},"的":{"docs":{},"b":{"docs":{},"i":{"docs":{},"n":{"docs":{},"路":{"docs":{},"径":{"docs":{},"配":{"docs":{},"置":{"docs":{},"环":{"docs":{},"境":{"docs":{},"变":{"docs":{},"量":{"docs":{},"。":{"docs":{"tutorial/toolchains.html":{"ref":"tutorial/toolchains.html","tf":0.02702702702702703}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"工":{"docs":{},"具":{"docs":{},"链":{"docs":{"tutorial/toolchains.html":{"ref":"tutorial/toolchains.html","tf":0.02702702702702703}}}}}}},"为":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"了":{"docs":{},"方":{"docs":{},"便":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"将":{"docs":{},"其":{"docs":{},"他":{"docs":{},"比":{"docs":{},"较":{"docs":{},"小":{"docs":{},"的":{"docs":{},"工":{"docs":{},"具":{"docs":{},"已":{"docs":{},"经":{"docs":{},"打":{"docs":{},"包":{"docs":{},"在":{"docs":{},"一":{"docs":{},"个":{"docs":{},"工":{"docs":{},"具":{"docs":{},"包":{"docs":{},"里":{"docs":{},"面":{"docs":{},"了":{"docs":{},",":{"docs":{},"下":{"docs":{},"载":{"docs":{},"解":{"docs":{},"压":{"docs":{},"后":{"docs":{},",":{"docs":{},"手":{"docs":{},"动":{"docs":{},"添":{"docs":{},"加":{"docs":{},"对":{"docs":{},"应":{"docs":{},"的":{"docs":{},"工":{"docs":{},"具":{"docs":{},"到":{"docs":{},"系":{"docs":{},"统":{"docs":{},"环":{"docs":{},"境":{"docs":{},"变":{"docs":{},"量":{"docs":{},"即":{"docs":{},"可":{"docs":{},"。":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.005025125628140704}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"选":{"docs":{},"中":{"docs":{},"的":{"docs":{},"平":{"docs":{},"台":{"docs":{},"做":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"(":{"docs":{},"仅":{"docs":{},"仅":{"docs":{},"第":{"docs":{},"一":{"docs":{},"次":{"docs":{},"编":{"docs":{},"译":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},"需":{"docs":{},"要":{"docs":{},")":{"docs":{},",":{"docs":{},"会":{"docs":{},"为":{"docs":{},"每":{"docs":{},"一":{"docs":{},"个":{"docs":{},"平":{"docs":{},"台":{"docs":{},"下":{"docs":{},"载":{"docs":{},"平":{"docs":{},"台":{"docs":{},"特":{"docs":{},"别":{"docs":{},"需":{"docs":{},"要":{"docs":{},"的":{"docs":{},"工":{"docs":{},"具":{"docs":{},"到":{"docs":{},"平":{"docs":{},"台":{"docs":{},"中":{"docs":{},"。":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.005025125628140704}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"二":{"docs":{},"、":{"docs":{},"编":{"docs":{},"译":{"docs":{},"和":{"docs":{},"运":{"docs":{},"行":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.005025125628140704}}}}}}},"目":{"docs":{},"录":{"docs":{},"框":{"docs":{},"架":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}}}}}},"原":{"docs":{},"理":{"docs":{"programing-manual/mm/heap.html":{"ref":"programing-manual/mm/heap.html","tf":0.014084507042253521},"programing-manual/mm/vmspace.html":{"ref":"programing-manual/mm/vmspace.html","tf":0.015384615384615385},"programing-manual/interrupt/irq.html":{"ref":"programing-manual/interrupt/irq.html","tf":0.01694915254237288},"programing-manual/interrupt/delay_queue.html":{"ref":"programing-manual/interrupt/delay_queue.html","tf":0.01282051282051282},"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.010752688172043012}}}},"架":{"docs":{},"构":{"docs":{},"简":{"docs":{},"述":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}},"l":{"docs":{},"i":{"docs":{},"n":{"docs":{},"u":{"docs":{},"x":{"docs":{},"环":{"docs":{},"境":{"docs":{},"工":{"docs":{},"具":{"docs":{"tutorial/toolchains.html":{"ref":"tutorial/toolchains.html","tf":0.02702702702702703}}}}}}}}}}}},".":{"docs":{"programing-manual/mm/mm.html":{"ref":"programing-manual/mm/mm.html","tf":0.1111111111111111},"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.010869565217391304},"programing-manual/sched/sched.html":{"ref":"programing-manual/sched/sched.html","tf":0.09090909090909091},"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575},"programing-manual/sched/smp.html":{"ref":"programing-manual/sched/smp.html","tf":0.0625},"programing-manual/process/process.html":{"ref":"programing-manual/process/process.html","tf":0.012658227848101266},"programing-manual/process/syscall.html":{"ref":"programing-manual/process/syscall.html","tf":0.03125}}}},"仅":{"docs":{},"仅":{"docs":{},"编":{"docs":{},"译":{"docs":{},"源":{"docs":{},"码":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.005025125628140704}}}}}}}},"使":{"docs":{},"用":{"docs":{},"菜":{"docs":{},"单":{"docs":{},"配":{"docs":{},"置":{"docs":{},"进":{"docs":{},"行":{"docs":{},"个":{"docs":{},"性":{"docs":{},"化":{"docs":{},"剪":{"docs":{},"裁":{"docs":{},"。":{"docs":{},"可":{"docs":{},"以":{"docs":{},"选":{"docs":{},"择":{"docs":{},"打":{"docs":{},"开":{"docs":{},"或":{"docs":{},"者":{"docs":{},"关":{"docs":{},"闭":{"docs":{},"某":{"docs":{},"些":{"docs":{},"功":{"docs":{},"能":{"docs":{},",":{"docs":{},"设":{"docs":{},"置":{"docs":{},"一":{"docs":{},"些":{"docs":{},"变":{"docs":{},"量":{"docs":{},"等":{"docs":{},"。":{"docs":{},"配":{"docs":{},"置":{"docs":{},"完":{"docs":{},"成":{"docs":{},"后":{"docs":{},"需":{"docs":{},"要":{"docs":{},"按":{"docs":{},"e":{"docs":{},"s":{"docs":{},"c":{"docs":{},"键":{"docs":{},"退":{"docs":{},"出":{"docs":{},",":{"docs":{},"退":{"docs":{},"出":{"docs":{},"后":{"docs":{},"会":{"docs":{},"生":{"docs":{},"成":{"docs":{},"新":{"docs":{},"的":{"docs":{},"配":{"docs":{},"置":{"docs":{},"头":{"docs":{},"文":{"docs":{},"件":{"docs":{},"。":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.005025125628140704}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},"需":{"docs":{},"要":{"docs":{},"注":{"docs":{},"意":{"docs":{},",":{"docs":{},"必":{"docs":{},"须":{"docs":{},"是":{"docs":{},"通":{"docs":{},"过":{"docs":{"programing-manual/mm/heap.html":{"ref":"programing-manual/mm/heap.html","tf":0.014084507042253521}}}}}}}}}}}}}}},"这":{"docs":{},"种":{"docs":{},"方":{"docs":{},"式":{"docs":{},"的":{"docs":{},"话":{"docs":{},",":{"docs":{},"就":{"docs":{},"非":{"docs":{},"常":{"docs":{},"方":{"docs":{},"便":{"docs":{},"移":{"docs":{},"植":{"docs":{},"到":{"docs":{},"其":{"docs":{},"它":{"docs":{},"架":{"docs":{},"构":{"docs":{},"上":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}},"大":{"docs":{},"写":{"docs":{},"作":{"docs":{},"为":{"docs":{},"名":{"docs":{},"字":{"docs":{},",":{"docs":{},"单":{"docs":{},"词":{"docs":{},"间":{"docs":{},"使":{"docs":{},"用":{"docs":{},"\"":{"docs":{},"_":{"docs":{},"\"":{"docs":{},"隔":{"docs":{},"开":{"docs":{},",":{"docs":{},"例":{"docs":{},"如":{"docs":{},":":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}}}}}}}}}}}}}}}},"第":{"docs":{},"一":{"docs":{},"人":{"docs":{},"称":{"docs":{},"现":{"docs":{},"在":{"docs":{},"时":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},"使":{"docs":{},"用":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{},"e":{"docs":{},"而":{"docs":{},"不":{"docs":{},"是":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{},"e":{"docs":{},"d":{"docs":{},"或":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{},"e":{"docs":{},"s":{"docs":{},"。":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"方":{"docs":{},"法":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}}}},"其":{"docs":{},"他":{"docs":{},"工":{"docs":{},"具":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.005025125628140704}}}},"涉":{"docs":{},"及":{"docs":{},"到":{"docs":{},"的":{"docs":{},"工":{"docs":{},"具":{"docs":{},":":{"docs":{},"p":{"docs":{},"y":{"docs":{},"t":{"docs":{},"h":{"docs":{},"o":{"docs":{},"n":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.005025125628140704}}}}}}}}}}}}}}},"注":{"docs":{},"意":{"docs":{},"事":{"docs":{},"项":{"docs":{},":":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}}}}},"中":{"docs":{},"\"":{"docs":{},"{":{"docs":{},"\"":{"docs":{},"和":{"docs":{},"\"":{"docs":{},"}":{"docs":{},"\"":{"docs":{},"需":{"docs":{},"要":{"docs":{},"单":{"docs":{},"独":{"docs":{},"使":{"docs":{},"用":{"docs":{},"一":{"docs":{},"行":{"docs":{},"。":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}}}}}}}}}}},",":{"docs":{},"h":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}}}}}}}},"加":{"docs":{},"载":{"docs":{},"平":{"docs":{},"台":{"docs":{},"的":{"docs":{},"默":{"docs":{},"认":{"docs":{},"配":{"docs":{},"置":{"docs":{},",":{"docs":{},"会":{"docs":{},"读":{"docs":{},"取":{"docs":{},"选":{"docs":{},"中":{"docs":{},"的":{"docs":{},"平":{"docs":{},"台":{"docs":{},"的":{"docs":{},"默":{"docs":{},"认":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"u":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{},"配":{"docs":{},"置":{"docs":{},"到":{"docs":{},"工":{"docs":{},"作":{"docs":{},"区":{"docs":{},"中":{"docs":{},"。":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.005025125628140704}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"可":{"docs":{},"以":{"docs":{},"直":{"docs":{},"接":{"docs":{},"在":{"docs":{},"终":{"docs":{},"端":{"docs":{},"中":{"docs":{},"输":{"docs":{},"入":{"docs":{},"命":{"docs":{},"令":{"docs":{},"安":{"docs":{},"装":{"docs":{},":":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.010050251256281407}}}}}}}}}}}}}}},"获":{"docs":{},"取":{"docs":{},"页":{"docs":{},"表":{"docs":{},"的":{"docs":{},"地":{"docs":{},"址":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}},"通":{"docs":{},"过":{"docs":{},"虚":{"docs":{},"拟":{"docs":{},"地":{"docs":{},"址":{"docs":{},"找":{"docs":{},"到":{"docs":{},"其":{"docs":{},"映":{"docs":{},"射":{"docs":{},"的":{"docs":{},"物":{"docs":{},"理":{"docs":{},"地":{"docs":{},"址":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}},"省":{"docs":{},"略":{"docs":{},"。":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}}}},"在":{"docs":{"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.021739130434782608},"programing-manual/mm/heap.html":{"ref":"programing-manual/mm/heap.html","tf":0.028169014084507043},"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.00209819555182543}},"获":{"docs":{},"取":{"docs":{},"n":{"docs":{},"x":{"docs":{},"o":{"docs":{},"s":{"docs":{},"的":{"docs":{},"系":{"docs":{},"统":{"docs":{},"源":{"docs":{},"码":{"docs":{},"后":{"docs":{},",":{"docs":{},"您":{"docs":{},"需":{"docs":{},"要":{"docs":{},"下":{"docs":{},"载":{"docs":{},"编":{"docs":{},"译":{"docs":{},"n":{"docs":{},"x":{"docs":{},"o":{"docs":{},"s":{"docs":{},"的":{"docs":{},"工":{"docs":{},"具":{"docs":{},"链":{"docs":{},"(":{"docs":{},"点":{"docs":{},"我":{"docs":{},"跳":{"docs":{},"转":{"docs":{},")":{"docs":{},",":{"docs":{},"下":{"docs":{},"载":{"docs":{},"好":{"docs":{},"后":{"docs":{},",":{"docs":{},"进":{"docs":{},"行":{"docs":{},"环":{"docs":{},"境":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"配":{"docs":{},"置":{"docs":{},"。":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.005025125628140704}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"设":{"docs":{},"备":{"docs":{},"开":{"docs":{},"机":{"docs":{},"后":{"docs":{},",":{"docs":{},"处":{"docs":{},"理":{"docs":{},"器":{"docs":{},"会":{"docs":{},"跳":{"docs":{},"到":{"docs":{},"一":{"docs":{},"个":{"docs":{},"地":{"docs":{},"址":{"docs":{},"去":{"docs":{},"执":{"docs":{},"行":{"docs":{},"代":{"docs":{},"码":{"docs":{},",":{"docs":{},"一":{"docs":{},"般":{"docs":{},"都":{"docs":{},"是":{"docs":{},"固":{"docs":{},"定":{"docs":{},"的":{"docs":{},",":{"docs":{},"然":{"docs":{},"后":{"docs":{},"再":{"docs":{},"从":{"docs":{},"这":{"docs":{},"些":{"docs":{},"固":{"docs":{},"定":{"docs":{},"代":{"docs":{},"码":{"docs":{},"跳":{"docs":{},"转":{"docs":{},"到":{"docs":{},"程":{"docs":{},"序":{"docs":{},"员":{"docs":{},"自":{"docs":{},"己":{"docs":{},"编":{"docs":{},"写":{"docs":{},"的":{"docs":{},"程":{"docs":{},"序":{"docs":{},"。":{"docs":{},"程":{"docs":{},"序":{"docs":{},"员":{"docs":{},"自":{"docs":{},"己":{"docs":{},"写":{"docs":{},"的":{"docs":{},"程":{"docs":{},"序":{"docs":{},"就":{"docs":{},"是":{"docs":{},"裸":{"docs":{},"机":{"docs":{},",":{"docs":{},"r":{"docs":{},"t":{"docs":{},"o":{"docs":{},"s":{"docs":{},"或":{"docs":{},"者":{"docs":{},"操":{"docs":{},"作":{"docs":{},"系":{"docs":{},"统":{"docs":{},"。":{"docs":{},"在":{"docs":{},"n":{"docs":{},"x":{"docs":{},"o":{"docs":{},"s":{"docs":{},"中":{"docs":{},",":{"docs":{},"不":{"docs":{},"同":{"docs":{},"的":{"docs":{},"平":{"docs":{},"台":{"docs":{},"会":{"docs":{},"有":{"docs":{},"不":{"docs":{},"同":{"docs":{},"的":{"docs":{},"执":{"docs":{},"行":{"docs":{},"地":{"docs":{},"址":{"docs":{},",":{"docs":{},"所":{"docs":{},"以":{"docs":{},"我":{"docs":{},"们":{"docs":{},"需":{"docs":{},"要":{"docs":{},"指":{"docs":{},"定":{"docs":{},"内":{"docs":{},"核":{"docs":{},"程":{"docs":{},"序":{"docs":{},"的":{"docs":{},"入":{"docs":{},"口":{"docs":{},"地":{"docs":{},"址":{"docs":{},",":{"docs":{},"在":{"docs":{},"链":{"docs":{},"接":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},"指":{"docs":{},"定":{"docs":{},"一":{"docs":{},"个":{"docs":{},"标":{"docs":{},"签":{"docs":{"programing-manual/base/start.html":{"ref":"programing-manual/base/start.html","tf":0.025}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"使":{"docs":{},"用":{"docs":{},"页":{"docs":{},"面":{"docs":{},"的":{"docs":{},"过":{"docs":{},"程":{"docs":{},"中":{"docs":{},",":{"docs":{},"可":{"docs":{},"能":{"docs":{},"会":{"docs":{},"需":{"docs":{},"要":{"docs":{},"把":{"docs":{},"一":{"docs":{},"个":{"docs":{},"地":{"docs":{},"砖":{"docs":{},"转":{"docs":{},"换":{"docs":{},"成":{"docs":{},"其":{"docs":{},"对":{"docs":{},"应":{"docs":{},"的":{"docs":{},"页":{"docs":{},"面":{"docs":{},"结":{"docs":{},"构":{"docs":{},",":{"docs":{},"来":{"docs":{},"访":{"docs":{},"问":{"docs":{},"该":{"docs":{},"结":{"docs":{},"构":{"docs":{},"里":{"docs":{},"面":{"docs":{},"的":{"docs":{},"成":{"docs":{},"员":{"docs":{},",":{"docs":{},"这":{"docs":{},"在":{"docs":{},"虚":{"docs":{},"拟":{"docs":{},"内":{"docs":{},"存":{"docs":{},"管":{"docs":{},"理":{"docs":{},"器":{"docs":{"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.010869565217391304}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"函":{"docs":{},"数":{"docs":{},"指":{"docs":{},"针":{"docs":{},"类":{"docs":{},"型":{"docs":{},"定":{"docs":{},"义":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"使":{"docs":{},"用":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},"后":{"docs":{},"缀":{"docs":{},",":{"docs":{},"来":{"docs":{},"表":{"docs":{},"示":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"处":{"docs":{},"理":{"docs":{},"函":{"docs":{},"数":{"docs":{},"。":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},",":{"docs":{},"会":{"docs":{},"创":{"docs":{},"建":{"docs":{},"一":{"docs":{},"个":{"docs":{"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.010869565217391304}}}}}}}}}}}}}},"释":{"docs":{},"放":{"docs":{},"页":{"docs":{},"面":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"引":{"docs":{},"用":{"docs":{},"计":{"docs":{},"数":{"docs":{},"为":{"0":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},",":{"docs":{},"才":{"docs":{},"会":{"docs":{},"去":{"docs":{},"正":{"docs":{},"在":{"docs":{},"释":{"docs":{},"放":{"docs":{},"这":{"docs":{},"个":{"docs":{},"页":{"docs":{},"面":{"docs":{},"。":{"docs":{"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.010869565217391304}}}}}}}}}}}}}}}}}}},"docs":{}}}}}}}}}}}}}}}},"解":{"docs":{},"析":{"docs":{"programing-manual/mm/vmspace.html":{"ref":"programing-manual/mm/vmspace.html","tf":0.015384615384615385}}}},"进":{"docs":{},"程":{"docs":{},"的":{"docs":{},"运":{"docs":{},"行":{"docs":{},"过":{"docs":{},"程":{"docs":{},"中":{"docs":{},"也":{"docs":{},"会":{"docs":{},"涉":{"docs":{},"及":{"docs":{},"到":{"docs":{},"堆":{"docs":{},"的":{"docs":{},"分":{"docs":{},"配":{"docs":{},",":{"docs":{},"栈":{"docs":{},"的":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"等":{"docs":{},"。":{"docs":{"programing-manual/mm/vmspace.html":{"ref":"programing-manual/mm/vmspace.html","tf":0.015384615384615385}}}}}}}}}}}}}}}}}}}}}}}}}},"内":{"docs":{},"核":{"docs":{},"中":{"docs":{},",":{"docs":{},"涉":{"docs":{},"及":{"docs":{},"到":{"docs":{},"多":{"docs":{},"任":{"docs":{},"务":{"docs":{},"的":{"docs":{},"是":{"docs":{},"线":{"docs":{},"程":{"docs":{},"管":{"docs":{},"理":{"docs":{},",":{"docs":{},"调":{"docs":{},"度":{"docs":{},"算":{"docs":{},"法":{"docs":{},",":{"docs":{},"多":{"docs":{},"核":{"docs":{},"调":{"docs":{},"度":{"docs":{},"。":{"docs":{"programing-manual/sched/sched.html":{"ref":"programing-manual/sched/sched.html","tf":0.09090909090909091}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"嵌":{"docs":{},"入":{"docs":{},"式":{"docs":{},"领":{"docs":{},"域":{"docs":{},",":{"docs":{},"r":{"docs":{},"t":{"docs":{},"o":{"docs":{},"s":{"docs":{},"的":{"docs":{},"实":{"docs":{},"时":{"docs":{},"性":{"docs":{},"是":{"docs":{},"非":{"docs":{},"常":{"docs":{},"重":{"docs":{},"要":{"docs":{},"的":{"docs":{},"。":{"docs":{},"简":{"docs":{},"单":{"docs":{},"来":{"docs":{},"说":{"docs":{},",":{"docs":{},"就":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"优":{"docs":{},"先":{"docs":{},"级":{"docs":{},"最":{"docs":{},"高":{"docs":{},"的":{"docs":{},"任":{"docs":{},"务":{"docs":{},"在":{"docs":{},"执":{"docs":{},"行":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},",":{"docs":{},"低":{"docs":{},"优":{"docs":{},"先":{"docs":{},"级":{"docs":{},"的":{"docs":{},"任":{"docs":{},"务":{"docs":{},"得":{"docs":{},"不":{"docs":{},"到":{"docs":{},"执":{"docs":{},"行":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"有":{"docs":{},"更":{"docs":{},"高":{"docs":{"programing-manual/sched/sched.html":{"ref":"programing-manual/sched/sched.html","tf":0.09090909090909091}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"现":{"docs":{},"代":{"docs":{},"操":{"docs":{},"作":{"docs":{},"系":{"docs":{},"统":{"docs":{},"中":{"docs":{},",":{"docs":{},"多":{"docs":{},"任":{"docs":{},"务":{"docs":{},"已":{"docs":{},"成":{"docs":{},"为":{"docs":{},"标":{"docs":{},"配":{"docs":{},",":{"docs":{},"也":{"docs":{},"就":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"处":{"docs":{},"理":{"docs":{},"器":{"docs":{},"可":{"docs":{},"以":{"docs":{},"“":{"docs":{},"同":{"docs":{},"时":{"docs":{},"”":{"docs":{},"执":{"docs":{},"行":{"docs":{},"多":{"docs":{},"个":{"docs":{},"任":{"docs":{},"务":{"docs":{},",":{"docs":{},"这":{"docs":{},"样":{"docs":{},"可":{"docs":{},"以":{"docs":{},"最":{"docs":{},"大":{"docs":{},"化":{"docs":{},"利":{"docs":{},"用":{"docs":{},"处":{"docs":{},"理":{"docs":{},"器":{"docs":{},",":{"docs":{},"并":{"docs":{},"且":{"docs":{},"支":{"docs":{},"持":{"docs":{},"更":{"docs":{},"多":{"docs":{},"的":{"docs":{},"功":{"docs":{},"能":{"docs":{},"。":{"docs":{"programing-manual/sched/sched.html":{"ref":"programing-manual/sched/sched.html","tf":0.09090909090909091}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"分":{"docs":{},"为":{"docs":{},"了":{"docs":{},"内":{"docs":{},"核":{"docs":{},"态":{"docs":{},"和":{"docs":{},"用":{"docs":{},"户":{"docs":{},"态":{"docs":{},"。":{"docs":{},"内":{"docs":{},"核":{"docs":{},"态":{"docs":{},"是":{"docs":{},"内":{"docs":{},"核":{"docs":{},"程":{"docs":{},"序":{"docs":{},"本":{"docs":{},"身":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"对":{"docs":{},"设":{"docs":{},"备":{"docs":{},"资":{"docs":{},"源":{"docs":{},"进":{"docs":{},"行":{"docs":{},"管":{"docs":{},"理":{"docs":{},"核":{"docs":{},"控":{"docs":{},"制":{"docs":{},"。":{"docs":{},"而":{"docs":{},"用":{"docs":{},"户":{"docs":{},"态":{"docs":{},"只":{"docs":{},"能":{"docs":{},"够":{"docs":{},"去":{"docs":{},"调":{"docs":{},"用":{"docs":{},"内":{"docs":{},"核":{"docs":{},"提":{"docs":{},"供":{"docs":{},"的":{"docs":{},"服":{"docs":{},"务":{"docs":{},",":{"docs":{},"不":{"docs":{},"能":{"docs":{},"够":{"docs":{},"直":{"docs":{},"接":{"docs":{},"对":{"docs":{},"资":{"docs":{},"源":{"docs":{},"进":{"docs":{},"行":{"docs":{},"访":{"docs":{},"问":{"docs":{},"。":{"docs":{"programing-manual/process/syscall.html":{"ref":"programing-manual/process/syscall.html","tf":0.03125}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"创":{"docs":{},"建":{"docs":{},"一":{"docs":{},"个":{"docs":{},"线":{"docs":{},"程":{"docs":{},"后":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"运":{"docs":{},"行":{"docs":{},"该":{"docs":{},"线":{"docs":{},"程":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"让":{"docs":{},"线":{"docs":{},"程":{"docs":{},"去":{"docs":{},"完":{"docs":{},"成":{"docs":{},"一":{"docs":{},"些":{"docs":{},"独":{"docs":{},"立":{"docs":{},"的":{"docs":{},"工":{"docs":{},"作":{"docs":{},"。":{"docs":{},"内":{"docs":{},"核":{"docs":{},"中":{"docs":{},"的":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"完":{"docs":{},"成":{"docs":{},"内":{"docs":{},"核":{"docs":{},"的":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"后":{"docs":{},",":{"docs":{},"会":{"docs":{},"创":{"docs":{},"建":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}}}}}}}}}},"线":{"docs":{},"程":{"docs":{},"创":{"docs":{},"建":{"docs":{},"后":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"需":{"docs":{},"要":{"docs":{},"把":{"docs":{},"线":{"docs":{},"程":{"docs":{},"绑":{"docs":{},"定":{"docs":{},"到":{"docs":{},"某":{"docs":{},"个":{"docs":{},"处":{"docs":{},"理":{"docs":{},"器":{"docs":{},",":{"docs":{},"则":{"docs":{},"可":{"docs":{},"以":{"docs":{},"设":{"docs":{},"置":{"docs":{},"处":{"docs":{},"理":{"docs":{},"器":{"docs":{},"亲":{"docs":{},"和":{"docs":{},"性":{"docs":{},",":{"docs":{},"使":{"docs":{},"得":{"docs":{},"该":{"docs":{},"线":{"docs":{},"程":{"docs":{},"被":{"docs":{},"绑":{"docs":{},"定":{"docs":{},"在":{"docs":{},"指":{"docs":{},"定":{"docs":{},"的":{"docs":{},"线":{"docs":{},"程":{"docs":{},"上":{"docs":{},"运":{"docs":{},"行":{"docs":{},"。":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"中":{"docs":{},",":{"docs":{},"有":{"docs":{},"链":{"docs":{},"表":{"docs":{},",":{"docs":{},"基":{"docs":{},"础":{"docs":{},"信":{"docs":{},"息":{"docs":{},",":{"docs":{},"栈":{"docs":{},"信":{"docs":{},"息":{"docs":{},",":{"docs":{},"调":{"docs":{},"度":{"docs":{},"信":{"docs":{},"息":{"docs":{},",":{"docs":{},"以":{"docs":{},"及":{"docs":{},"内":{"docs":{},"核":{"docs":{},"的":{"docs":{},"资":{"docs":{},"源":{"docs":{},"。":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"定":{"docs":{},"时":{"docs":{},"器":{"docs":{},"还":{"docs":{},"没":{"docs":{},"开":{"docs":{},"始":{"docs":{},"运":{"docs":{},"行":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"销":{"docs":{},"毁":{"docs":{},"一":{"docs":{},"个":{"docs":{},"定":{"docs":{},"时":{"docs":{},"器":{"docs":{},",":{"docs":{},"调":{"docs":{},"用":{"docs":{"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.010752688172043012}}}}}}}}}}}}}}}}}}}}}}}}}}},"上":{"docs":{},"下":{"docs":{},"文":{"docs":{},"切":{"docs":{},"换":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"注":{"docs":{},"意":{"docs":{},"的":{"docs":{},"是":{"docs":{},",":{"docs":{},"传":{"docs":{},"入":{"docs":{},"的":{"docs":{},"是":{"docs":{},"线":{"docs":{},"程":{"docs":{},"的":{"docs":{},"栈":{"docs":{},"的":{"docs":{},"地":{"docs":{},"址":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"从":{"docs":{},"地":{"docs":{},"址":{"docs":{},"中":{"docs":{},"取":{"docs":{},"出":{"docs":{},"线":{"docs":{},"程":{"docs":{},"当":{"docs":{},"前":{"docs":{},"栈":{"docs":{},"的":{"docs":{},"值":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"中":{"docs":{},"断":{"docs":{},"中":{"docs":{},",":{"docs":{},"使":{"docs":{},"能":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}},"做":{"docs":{},"时":{"docs":{},"钟":{"docs":{},"定":{"docs":{},"时":{"docs":{},"器":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"先":{"docs":{},"关":{"docs":{},"闭":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}},"函":{"docs":{},"数":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},"平":{"docs":{},"台":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}},"调":{"docs":{},"试":{"docs":{},"过":{"docs":{},"程":{"docs":{},"中":{"docs":{},"会":{"docs":{},"遇":{"docs":{},"到":{"docs":{},"很":{"docs":{},"多":{"docs":{},"问":{"docs":{},"题":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"耐":{"docs":{},"心":{"docs":{},"地":{"docs":{},"调":{"docs":{},"试":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}},"每":{"docs":{},"个":{"docs":{},"源":{"docs":{},"文":{"docs":{},"件":{"docs":{},"文":{"docs":{},"件":{"docs":{},"头":{"docs":{},"上":{"docs":{},",":{"docs":{},"应":{"docs":{},"该":{"docs":{},"包":{"docs":{},"括":{"docs":{},"相":{"docs":{},"应":{"docs":{},"的":{"docs":{},"版":{"docs":{},"权":{"docs":{},"信":{"docs":{},"息":{"docs":{},",":{"docs":{},"文":{"docs":{},"件":{"docs":{},"描":{"docs":{},"述":{"docs":{},",":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"n":{"docs":{},"x":{"docs":{},"o":{"docs":{},"s":{"docs":{},"中":{"docs":{},"使":{"docs":{},"用":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"u":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{"tutorial/menuconfig.html":{"ref":"tutorial/menuconfig.html","tf":0.038461538461538464}}}}}}}}}}}}}}}}}}},"根":{"docs":{},"目":{"docs":{},"录":{"docs":{},"中":{"docs":{},",":{"docs":{},"打":{"docs":{},"开":{"docs":{},"一":{"docs":{},"个":{"docs":{},"终":{"docs":{},"端":{"docs":{},",":{"docs":{},"在":{"docs":{},"配":{"docs":{},"置":{"docs":{},"了":{"docs":{},"环":{"docs":{},"境":{"docs":{},"变":{"docs":{},"量":{"docs":{},"之":{"docs":{},"后":{"docs":{},",":{"docs":{},"就":{"docs":{},"可":{"docs":{},"以":{"docs":{},"使":{"docs":{},"用":{"docs":{},"配":{"docs":{},"置":{"docs":{},"了":{"docs":{},"。":{"docs":{"tutorial/menuconfig.html":{"ref":"tutorial/menuconfig.html","tf":0.038461538461538464}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"u":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{},"中":{"docs":{},",":{"docs":{},"打":{"docs":{},"开":{"docs":{},"单":{"docs":{},"元":{"docs":{},"测":{"docs":{},"试":{"docs":{},"功":{"docs":{},"能":{"docs":{},",":{"docs":{},"选":{"docs":{},"取":{"docs":{},"需":{"docs":{},"要":{"docs":{},"测":{"docs":{},"试":{"docs":{},"的":{"docs":{},"单":{"docs":{},"元":{"docs":{},",":{"docs":{},"退":{"docs":{},"出":{"docs":{},"保":{"docs":{},"存":{"docs":{},"。":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"命":{"docs":{},"令":{"docs":{},"行":{"docs":{},"中":{"docs":{},"输":{"docs":{},"入":{"docs":{},"命":{"docs":{},"令":{"docs":{},"即":{"docs":{},"可":{"docs":{},"开":{"docs":{},"始":{"docs":{},"测":{"docs":{},"试":{"docs":{},":":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}}}}}}}}}}}}}}}},"快":{"docs":{},"速":{"docs":{},"体":{"docs":{},"验":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.005025125628140704}}}},"入":{"docs":{},"门":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.005025125628140704}}}}}},"推":{"docs":{},"荐":{"docs":{},"的":{"docs":{},"一":{"docs":{},"个":{"docs":{},"不":{"docs":{},"错":{"docs":{},"的":{"docs":{},"终":{"docs":{},"端":{"docs":{},"(":{"docs":{},"非":{"docs":{},"必":{"docs":{},"须":{"docs":{},")":{"docs":{},"下":{"docs":{},"载":{"docs":{},"后":{"docs":{},"安":{"docs":{},"装":{"docs":{},"即":{"docs":{},"可":{"docs":{},"。":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.005025125628140704}}}}}}}}}}}}}}}}}}}}}}}}},"本":{"docs":{},"文":{"docs":{},"档":{"docs":{},"将":{"docs":{},"带":{"docs":{},"您":{"docs":{},"从":{"docs":{},"入":{"docs":{},"门":{"docs":{},"到":{"docs":{},"劝":{"docs":{},"退":{"docs":{},"。":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.005025125628140704}}}}}}}}}}}},"存":{"docs":{},"放":{"docs":{},"的":{"docs":{},"是":{"docs":{},"用":{"docs":{},"户":{"docs":{},"程":{"docs":{},"序":{"docs":{},"的":{"docs":{},"编":{"docs":{},"程":{"docs":{},"接":{"docs":{},"口":{"docs":{},"的":{"docs":{},"设":{"docs":{},"计":{"docs":{},"说":{"docs":{},"明":{"docs":{},"。":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}}}}}}}}}}},"了":{"docs":{},"工":{"docs":{},"具":{"docs":{},"链":{"docs":{},"的":{"docs":{},"下":{"docs":{},"载":{"docs":{},"地":{"docs":{},"址":{"docs":{},",":{"docs":{},"搭":{"docs":{},"建":{"docs":{},"编":{"docs":{},"译":{"docs":{},"环":{"docs":{},"境":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},"需":{"docs":{},"要":{"docs":{},"下":{"docs":{},"载":{"docs":{},"工":{"docs":{},"具":{"docs":{},"链":{"docs":{},"后":{"docs":{},"再":{"docs":{},"进":{"docs":{},"行":{"docs":{},"编":{"docs":{},"译":{"docs":{},"。":{"docs":{"tutorial/toolchains.html":{"ref":"tutorial/toolchains.html","tf":0.02702702702702703}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"是":{"docs":{},"关":{"docs":{},"于":{"docs":{},"n":{"docs":{},"x":{"docs":{},"o":{"docs":{},"s":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},"编":{"docs":{},"程":{"docs":{},"风":{"docs":{},"格":{"docs":{},"的":{"docs":{},"描":{"docs":{},"述":{"docs":{},"。":{"docs":{},"开":{"docs":{},"发":{"docs":{},"者":{"docs":{},"必":{"docs":{},"须":{"docs":{},"遵":{"docs":{},"守":{"docs":{},"本":{"docs":{},"文":{"docs":{},"档":{"docs":{},"规":{"docs":{},"范":{"docs":{},"进":{"docs":{},"行":{"docs":{},"开":{"docs":{},"发":{"docs":{},"。":{"docs":{},"n":{"docs":{},"x":{"docs":{},"o":{"docs":{},"s":{"docs":{},"系":{"docs":{},"统":{"docs":{},"内":{"docs":{},"核":{"docs":{},"使":{"docs":{},"用":{"docs":{},"c":{"docs":{},"语":{"docs":{},"言":{"docs":{},"作":{"docs":{},"为":{"docs":{},"主":{"docs":{},"要":{"docs":{},"开":{"docs":{},"发":{"docs":{},"语":{"docs":{},"言":{"docs":{},",":{"docs":{},"因":{"docs":{},"此":{"docs":{},"以":{"docs":{},"下":{"docs":{},"规":{"docs":{},"则":{"docs":{},"仅":{"docs":{},"仅":{"docs":{},"适":{"docs":{},"用":{"docs":{},"于":{"docs":{},"c":{"docs":{},"语":{"docs":{},"言":{"docs":{},"代":{"docs":{},"码":{"docs":{},"。":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"欢":{"docs":{},"迎":{"docs":{},"来":{"docs":{},"到":{"docs":{},"n":{"docs":{},"x":{"docs":{},"o":{"docs":{},"s":{"docs":{},"内":{"docs":{},"核":{"docs":{},"!":{"docs":{},"n":{"docs":{},"x":{"docs":{},"o":{"docs":{},"s":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"跨":{"docs":{},"平":{"docs":{},"台":{"docs":{},"的":{"docs":{},"简":{"docs":{},"洁":{"docs":{},"的":{"docs":{},"高":{"docs":{},"性":{"docs":{},"能":{"docs":{},",":{"docs":{},"高":{"docs":{},"稳":{"docs":{},"定":{"docs":{},"性":{"docs":{},"的":{"docs":{},"操":{"docs":{},"作":{"docs":{},"系":{"docs":{},"统":{"docs":{},"内":{"docs":{},"核":{"docs":{},",":{"docs":{},"它":{"docs":{},"将":{"docs":{},"应":{"docs":{},"用":{"docs":{},"于":{"docs":{},"桌":{"docs":{},"面":{"docs":{},"操":{"docs":{},"作":{"docs":{},"系":{"docs":{},"统":{"docs":{},"领":{"docs":{},"域":{"docs":{},",":{"docs":{},"服":{"docs":{},"务":{"docs":{},"器":{"docs":{},"操":{"docs":{},"作":{"docs":{},"系":{"docs":{},"统":{"docs":{},"领":{"docs":{},"域":{"docs":{},"以":{"docs":{},"及":{"docs":{},"移":{"docs":{},"动":{"docs":{},"终":{"docs":{},"端":{"docs":{},"操":{"docs":{},"作":{"docs":{},"系":{"docs":{},"统":{"docs":{},"领":{"docs":{},"域":{"docs":{},"。":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.005025125628140704}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"步":{"docs":{},"骤":{"docs":{},"拆":{"docs":{},"解":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.005025125628140704}}}}}},"第":{"docs":{},"一":{"docs":{},"次":{"docs":{},"执":{"docs":{},"行":{"docs":{},"时":{"docs":{},",":{"docs":{},"为":{"docs":{},"平":{"docs":{},"台":{"docs":{},"做":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.005025125628140704}}}}}}}}}}}}},"编":{"docs":{},"译":{"docs":{},"一":{"docs":{},"个":{"docs":{},"新":{"docs":{},"的":{"docs":{},"平":{"docs":{},"台":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},"需":{"docs":{},"要":{"docs":{},"c":{"docs":{},"l":{"docs":{},"e":{"docs":{},"a":{"docs":{},"n":{"docs":{},"一":{"docs":{},"下":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.005025125628140704}}}}}}}}}}}}}}}}}}}}}}},"个":{"docs":{},"字":{"docs":{},"母":{"docs":{},"小":{"docs":{},"写":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}}}}}},"编":{"docs":{},"译":{"docs":{},"器":{"docs":{},"工":{"docs":{},"具":{"docs":{},"链":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.005025125628140704}}}}}},"源":{"docs":{},"码":{"docs":{},"并":{"docs":{},"运":{"docs":{},"行":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.005025125628140704}},",":{"docs":{},"默":{"docs":{},"认":{"docs":{},"使":{"docs":{},"用":{"docs":{},"q":{"docs":{},"e":{"docs":{},"m":{"docs":{},"u":{"docs":{},"虚":{"docs":{},"拟":{"docs":{},"机":{"docs":{},"模":{"docs":{},"拟":{"docs":{},"运":{"docs":{},"行":{"docs":{},",":{"docs":{},"按":{"docs":{},"下":{"docs":{},"小":{"docs":{},"写":{"docs":{},"的":{"docs":{},"c":{"docs":{},"t":{"docs":{},"r":{"docs":{},"l":{"docs":{},"+":{"docs":{},"x":{"docs":{},"后":{"docs":{},"再":{"docs":{},"按":{"docs":{},"下":{"docs":{},"a":{"docs":{},"则":{"docs":{},"可":{"docs":{},"以":{"docs":{},"退":{"docs":{},"出":{"docs":{},"q":{"docs":{},"e":{"docs":{},"m":{"docs":{},"u":{"docs":{},"运":{"docs":{},"行":{"docs":{},"。":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.005025125628140704}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"并":{"docs":{},"运":{"docs":{},"行":{"docs":{"tutorial/menuconfig.html":{"ref":"tutorial/menuconfig.html","tf":0.038461538461538464}}}}}},"程":{"docs":{},"风":{"docs":{},"格":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}},"虚":{"docs":{},"拟":{"docs":{},"平":{"docs":{},"台":{"docs":{},"运":{"docs":{},"行":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":10}}}},"中":{"docs":{},",":{"docs":{},"内":{"docs":{},"存":{"docs":{},"布":{"docs":{},"局":{"docs":{},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.010869565217391304}}}}}}}}}}}}},"机":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.005025125628140704}}},"地":{"docs":{},"址":{"docs":{},"在":{"docs":{},"映":{"docs":{},"射":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"指":{"docs":{},"定":{"docs":{},"对":{"docs":{},"应":{"docs":{},"的":{"docs":{},"地":{"docs":{},"址":{"docs":{},"空":{"docs":{},"间":{"docs":{},",":{"docs":{},"然":{"docs":{},"后":{"docs":{},"就":{"docs":{},"是":{"docs":{},"传":{"docs":{},"入":{"docs":{},"一":{"docs":{},"个":{"docs":{},"想":{"docs":{},"要":{"docs":{},"映":{"docs":{},"射":{"docs":{},"的":{"docs":{},"地":{"docs":{},"址":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"为":{"0":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"就":{"docs":{},"会":{"docs":{},"自":{"docs":{},"动":{"docs":{},"分":{"docs":{},"配":{"docs":{},"一":{"docs":{},"个":{"docs":{},"地":{"docs":{},"址":{"docs":{},"。":{"docs":{"programing-manual/mm/vmspace.html":{"ref":"programing-manual/mm/vmspace.html","tf":0.015384615384615385}}}}}}}}}}}}}}}}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"实":{"docs":{},"现":{"docs":{},"和":{"docs":{},"访":{"docs":{},"问":{"docs":{},",":{"docs":{},"m":{"docs":{},"m":{"docs":{},"u":{"docs":{},"的":{"docs":{},"切":{"docs":{},"换":{"docs":{},",":{"docs":{},"映":{"docs":{},"射":{"docs":{},"和":{"docs":{},"解":{"docs":{},"除":{"docs":{},"页":{"docs":{},"面":{"docs":{},"映":{"docs":{},"射":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}}}}}},"化":{"docs":{},"模":{"docs":{},"式":{"docs":{},"用":{"docs":{},"于":{"docs":{},"使":{"docs":{},"用":{"docs":{},"虚":{"docs":{},"拟":{"docs":{},"化":{"docs":{},"的":{"docs":{},"场":{"docs":{},"景":{"docs":{},",":{"docs":{},"目":{"docs":{},"前":{"docs":{},"还":{"docs":{},"在":{"docs":{},"开":{"docs":{},"发":{"docs":{},"阶":{"docs":{},"段":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}}}}}},"设":{"docs":{},"置":{"docs":{},"临":{"docs":{},"时":{"docs":{},"环":{"docs":{},"境":{"docs":{},"变":{"docs":{},"量":{"docs":{},",":{"docs":{},"在":{"docs":{},"目":{"docs":{},"录":{"docs":{},"中":{"docs":{},"有":{"docs":{},"脚":{"docs":{},"本":{"docs":{},"来":{"docs":{},"设":{"docs":{},"置":{"docs":{},",":{"docs":{},"直":{"docs":{},"接":{"docs":{},"运":{"docs":{},"行":{"docs":{},"即":{"docs":{},"可":{"docs":{},"。":{"docs":{},"w":{"docs":{},"i":{"docs":{},"n":{"docs":{},"d":{"docs":{},"o":{"docs":{},"w":{"docs":{},"s":{"docs":{},"使":{"docs":{},"用":{"docs":{},"b":{"docs":{},"a":{"docs":{},"t":{"docs":{},",":{"docs":{},"l":{"docs":{},"i":{"docs":{},"n":{"docs":{},"u":{"docs":{},"x":{"docs":{},"使":{"docs":{},"用":{"docs":{},"s":{"docs":{},"h":{"docs":{},"。":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.005025125628140704}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"环":{"docs":{},"境":{"docs":{},"变":{"docs":{},"量":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.005025125628140704}}}}}},"了":{"docs":{},"线":{"docs":{},"程":{"docs":{},"的":{"docs":{},"入":{"docs":{},"口":{"docs":{},"地":{"docs":{},"址":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}},"页":{"docs":{},"表":{"docs":{},"的":{"docs":{},"地":{"docs":{},"址":{"docs":{},"到":{"docs":{},"硬":{"docs":{},"件":{"docs":{},"寄":{"docs":{},"存":{"docs":{},"器":{"docs":{},"中":{"docs":{},",":{"docs":{},"当":{"docs":{},"访":{"docs":{},"问":{"docs":{},"虚":{"docs":{},"拟":{"docs":{},"地":{"docs":{},"址":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},",":{"docs":{},"会":{"docs":{},"根":{"docs":{},"据":{"docs":{},"设":{"docs":{},"置":{"docs":{},"的":{"docs":{},"页":{"docs":{},"表":{"docs":{},"进":{"docs":{},"行":{"docs":{},"地":{"docs":{},"址":{"docs":{},"转":{"docs":{},"换":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"l":{"docs":{},"s":{"docs":{},"的":{"docs":{},"值":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}},"当":{"docs":{},"前":{"docs":{},"的":{"docs":{},"时":{"docs":{},"间":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}},"备":{"docs":{},"管":{"docs":{},"理":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}},"调":{"docs":{},"试":{"docs":{},"完":{"docs":{},"成":{"docs":{},"后":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"将":{"docs":{},"配":{"docs":{},"置":{"docs":{},"信":{"docs":{},"息":{"docs":{},"和":{"docs":{},"文":{"docs":{},"件":{"docs":{},"保":{"docs":{},"存":{"docs":{},"到":{"docs":{},"对":{"docs":{},"应":{"docs":{},"平":{"docs":{},"台":{"docs":{},"中":{"docs":{},",":{"docs":{},"使":{"docs":{},"得":{"docs":{},"配":{"docs":{},"置":{"docs":{},"永":{"docs":{},"久":{"docs":{},"生":{"docs":{},"效":{"docs":{},"。":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.005025125628140704}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"度":{"docs":{},"模":{"docs":{},"块":{"docs":{},",":{"docs":{},"线":{"docs":{},"程":{"docs":{},"和":{"docs":{},"s":{"docs":{},"m":{"docs":{},"p":{"docs":{},"的":{"docs":{},"内":{"docs":{},"容":{"docs":{},",":{"docs":{},"以":{"docs":{},"及":{"docs":{},"同":{"docs":{},"步":{"docs":{},"机":{"docs":{},"制":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}}}}}}}}}}}}}}}}}}}}},"管":{"docs":{},"理":{"docs":{"programing-manual/sched/sched.html":{"ref":"programing-manual/sched/sched.html","tf":10.090909090909092}}}}},"用":{"docs":{},"平":{"docs":{},"台":{"docs":{},"的":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"代":{"docs":{},"码":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}},"输":{"docs":{},"入":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.010050251256281407}}}},"进":{"docs":{},"入":{"docs":{},"到":{"docs":{},"n":{"docs":{},"x":{"docs":{},"o":{"docs":{},"s":{"docs":{},"目":{"docs":{},"录":{"docs":{},"中":{"docs":{},",":{"docs":{},"在":{"docs":{},"目":{"docs":{},"录":{"docs":{},"中":{"docs":{},"打":{"docs":{},"开":{"docs":{},"一":{"docs":{},"个":{"docs":{},"终":{"docs":{},"端":{"docs":{},"。":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.005025125628140704}}}}}}}}}}}}}}}}}}}}}},"一":{"docs":{},"个":{"docs":{},"单":{"docs":{},"元":{"docs":{},"测":{"docs":{},"试":{"docs":{},"时":{"docs":{},"执":{"docs":{},"行":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}}}}}}}}},"单":{"docs":{},"元":{"docs":{},"时":{"docs":{},"执":{"docs":{},"行":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}}}}}},"程":{"docs":{},"管":{"docs":{},"理":{"docs":{"programing-manual/process/process.html":{"ref":"programing-manual/process/process.html","tf":10.012658227848101},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172},"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}},",":{"docs":{},"系":{"docs":{},"统":{"docs":{},"调":{"docs":{},"用":{"docs":{},"相":{"docs":{},"关":{"docs":{},"内":{"docs":{},"容":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}}}}}}}}}}},"相":{"docs":{},"关":{"docs":{},"操":{"docs":{},"作":{"docs":{},"是":{"docs":{},"实":{"docs":{},"现":{"docs":{},"进":{"docs":{},"程":{"docs":{},"的":{"docs":{},"必":{"docs":{},"要":{"docs":{},"条":{"docs":{},"件":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}},"间":{"docs":{},"通":{"docs":{},"信":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}}}}},"虚":{"docs":{},"拟":{"docs":{},"内":{"docs":{},"存":{"docs":{},"管":{"docs":{},"理":{"docs":{},",":{"docs":{},"基":{"docs":{},"于":{"docs":{},"线":{"docs":{},"性":{"docs":{},"链":{"docs":{},"表":{"docs":{},"实":{"docs":{},"现":{"docs":{"programing-manual/mm/mm.html":{"ref":"programing-manual/mm/mm.html","tf":0.1111111111111111}}}}}}}}}}},"之":{"docs":{},"虚":{"docs":{},"拟":{"docs":{},"空":{"docs":{},"间":{"docs":{"programing-manual/mm/vmspace.html":{"ref":"programing-manual/mm/vmspace.html","tf":0.015384615384615385}}}}}}}}}}}}},"在":{"docs":{},"启":{"docs":{},"动":{"docs":{},"前":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"加":{"docs":{},"载":{"docs":{},"对":{"docs":{},"应":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},"、":{"docs":{},"数":{"docs":{},"据":{"docs":{},"到":{"docs":{},"内":{"docs":{},"存":{"docs":{},"中":{"docs":{},",":{"docs":{},"然":{"docs":{},"后":{"docs":{},"才":{"docs":{},"开":{"docs":{},"始":{"docs":{},"执":{"docs":{},"行":{"docs":{},"。":{"docs":{"programing-manual/mm/vmspace.html":{"ref":"programing-manual/mm/vmspace.html","tf":0.015384615384615385}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"地":{"docs":{},"址":{"docs":{},"空":{"docs":{},"间":{"docs":{},"(":{"docs":{},"v":{"docs":{},"m":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{},")":{"docs":{},"就":{"docs":{},"是":{"docs":{},"用":{"docs":{},"来":{"docs":{},"管":{"docs":{},"理":{"docs":{},"进":{"docs":{},"程":{"docs":{},"的":{"docs":{},"虚":{"docs":{},"拟":{"docs":{},"地":{"docs":{},"址":{"docs":{},"的":{"docs":{},"。":{"docs":{},"由":{"docs":{},"于":{"docs":{},"不":{"docs":{},"同":{"docs":{},"地":{"docs":{},"址":{"docs":{},"会":{"docs":{},"有":{"docs":{},"不":{"docs":{},"同":{"docs":{},"的":{"docs":{},"用":{"docs":{},"途":{"docs":{},",":{"docs":{},"于":{"docs":{},"是":{"docs":{},"会":{"docs":{},"有":{"docs":{},"虚":{"docs":{},"拟":{"docs":{},"地":{"docs":{},"址":{"docs":{},"节":{"docs":{},"点":{"docs":{},"(":{"docs":{},"v":{"docs":{},"m":{"docs":{},"n":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},")":{"docs":{},"来":{"docs":{},"管":{"docs":{},"理":{"docs":{"programing-manual/mm/vmspace.html":{"ref":"programing-manual/mm/vmspace.html","tf":0.015384615384615385}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"管":{"docs":{},"理":{"docs":{},"使":{"docs":{},"用":{"docs":{},"链":{"docs":{},"表":{"docs":{},"来":{"docs":{},"维":{"docs":{},"护":{"docs":{},"每":{"docs":{},"一":{"docs":{},"个":{"docs":{},"节":{"docs":{},"点":{"docs":{},",":{"docs":{},"节":{"docs":{},"点":{"docs":{},"是":{"docs":{},"根":{"docs":{},"据":{"docs":{},"虚":{"docs":{},"拟":{"docs":{},"地":{"docs":{},"址":{"docs":{},"的":{"docs":{},"值":{"docs":{},"来":{"docs":{},"进":{"docs":{},"行":{"docs":{},"线":{"docs":{},"性":{"docs":{},"排":{"docs":{},"序":{"docs":{},",":{"docs":{},"低":{"docs":{},"地":{"docs":{},"址":{"docs":{},"在":{"docs":{},"链":{"docs":{},"表":{"docs":{},"的":{"docs":{},"开":{"docs":{},"头":{"docs":{},",":{"docs":{},"高":{"docs":{},"地":{"docs":{},"址":{"docs":{},"在":{"docs":{},"链":{"docs":{},"表":{"docs":{},"的":{"docs":{},"结":{"docs":{},"尾":{"docs":{},"。":{"docs":{"programing-manual/mm/vmspace.html":{"ref":"programing-manual/mm/vmspace.html","tf":0.015384615384615385}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"执":{"docs":{},"行":{"docs":{},"独":{"docs":{},"立":{"docs":{},"的":{"docs":{},"程":{"docs":{},"序":{"docs":{},",":{"docs":{},"程":{"docs":{},"序":{"docs":{},"运":{"docs":{},"行":{"docs":{},"出":{"docs":{},"故":{"docs":{},"障":{"docs":{},"也":{"docs":{},"不":{"docs":{},"会":{"docs":{},"导":{"docs":{},"致":{"docs":{},"系":{"docs":{},"统":{"docs":{},"出":{"docs":{},"现":{"docs":{},"故":{"docs":{},"障":{"docs":{},"。":{"docs":{},"因":{"docs":{},"此":{"docs":{},"可":{"docs":{},"以":{"docs":{},"把":{"docs":{},"一":{"docs":{},"些":{"docs":{},"服":{"docs":{},"务":{"docs":{},"程":{"docs":{},"序":{"docs":{},"放":{"docs":{},"到":{"docs":{},"用":{"docs":{},"户":{"docs":{},"态":{"docs":{},"作":{"docs":{},"为":{"docs":{},"进":{"docs":{},"程":{"docs":{},"执":{"docs":{},"行":{"docs":{},",":{"docs":{},"当":{"docs":{},"服":{"docs":{},"务":{"docs":{},"出":{"docs":{},"错":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},"不":{"docs":{},"会":{"docs":{},"导":{"docs":{},"致":{"docs":{"programing-manual/process/process.html":{"ref":"programing-manual/process/process.html","tf":0.012658227848101266}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"结":{"docs":{},"束":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"退":{"docs":{},"出":{"docs":{},",":{"docs":{},"并":{"docs":{},"传":{"docs":{},"入":{"docs":{},"退":{"docs":{},"出":{"docs":{},"时":{"docs":{},"候":{"docs":{},"的":{"docs":{},"状":{"docs":{},"态":{"docs":{},"码":{"docs":{},"。":{"docs":{"programing-manual/process/process.html":{"ref":"programing-manual/process/process.html","tf":0.012658227848101266}}}}}}}}}}}}}}}}}}}}}}}}}}},"是":{"docs":{},"具":{"docs":{},"有":{"docs":{},"独":{"docs":{},"立":{"docs":{},"的":{"docs":{},"线":{"docs":{},"性":{"docs":{},"地":{"docs":{},"址":{"docs":{},"空":{"docs":{},"间":{"docs":{},"的":{"docs":{},"线":{"docs":{},"程":{"docs":{},"集":{"docs":{},"合":{"docs":{},",":{"docs":{},"是":{"docs":{},"线":{"docs":{},"程":{"docs":{},"的":{"docs":{},"容":{"docs":{},"器":{"docs":{},"。":{"docs":{},"在":{"docs":{},"现":{"docs":{},"代":{"docs":{},"操":{"docs":{},"作":{"docs":{},"系":{"docs":{},"统":{"docs":{},"中":{"docs":{},",":{"docs":{},"硬":{"docs":{},"件":{"docs":{},"的":{"docs":{"programing-manual/process/process.html":{"ref":"programing-manual/process/process.html","tf":0.012658227848101266}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"实":{"docs":{},"现":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"于":{"docs":{"programing-manual/process/process.html":{"ref":"programing-manual/process/process.html","tf":0.012658227848101266}}}}}}}}},"行":{"docs":{},"独":{"docs":{},"立":{"docs":{},"的":{"docs":{},"管":{"docs":{},"理":{"docs":{},",":{"docs":{},"于":{"docs":{},"是":{"docs":{},"进":{"docs":{},"程":{"docs":{},"地":{"docs":{},"址":{"docs":{},"空":{"docs":{},"间":{"docs":{},"就":{"docs":{},"出":{"docs":{},"现":{"docs":{},"了":{"docs":{},"。":{"docs":{"programing-manual/mm/vmspace.html":{"ref":"programing-manual/mm/vmspace.html","tf":0.015384615384615385}}}}}}}}}}}}}}}}}}}}},"内":{"docs":{},"核":{"docs":{},"服":{"docs":{},"务":{"docs":{},"的":{"docs":{},"分":{"docs":{},"发":{"docs":{},",":{"docs":{},"去":{"docs":{},"调":{"docs":{},"用":{"docs":{},"对":{"docs":{},"应":{"docs":{},"的":{"docs":{},"内":{"docs":{},"核":{"docs":{},"函":{"docs":{},"数":{"docs":{},"。":{"docs":{"programing-manual/process/syscall.html":{"ref":"programing-manual/process/syscall.html","tf":0.03125}}}}}}}}}}}}}}}}}}}}},"菜":{"docs":{},"单":{"docs":{},"配":{"docs":{},"置":{"docs":{},",":{"docs":{},"就":{"docs":{},"可":{"docs":{},"以":{"docs":{},"选":{"docs":{},"择":{"docs":{},"你":{"docs":{},"想":{"docs":{},"要":{"docs":{},"的":{"docs":{},"功":{"docs":{},"能":{"docs":{},"或":{"docs":{},"者":{"docs":{},"进":{"docs":{},"行":{"docs":{},"某":{"docs":{},"些":{"docs":{},"功":{"docs":{},"能":{"docs":{},"的":{"docs":{},"配":{"docs":{},"置":{"docs":{},"。":{"docs":{},"配":{"docs":{},"置":{"docs":{},"完":{"docs":{},"后":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"根":{"docs":{},"据":{"docs":{},"菜":{"docs":{},"单":{"docs":{},"的":{"docs":{},"提":{"docs":{},"示":{"docs":{},"进":{"docs":{},"行":{"docs":{},"退":{"docs":{},"出":{"docs":{},"或":{"docs":{},"者":{"docs":{},"保":{"docs":{},"存":{"docs":{},"。":{"docs":{"tutorial/menuconfig.html":{"ref":"tutorial/menuconfig.html","tf":0.038461538461538464}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"退":{"docs":{},"出":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.010050251256281407}},"线":{"docs":{},"程":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}},"进":{"docs":{},"程":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}},"一":{"docs":{},"个":{"docs":{},"单":{"docs":{},"元":{"docs":{},"测":{"docs":{},"试":{"docs":{},"时":{"docs":{},"执":{"docs":{},"行":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}}}}}}}}},"单":{"docs":{},"元":{"docs":{},"时":{"docs":{},"执":{"docs":{},"行":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}}}}}}},"选":{"docs":{},"择":{"docs":{},"最":{"docs":{},"新":{"docs":{},"版":{"docs":{},"本":{"docs":{},"下":{"docs":{},"载":{"docs":{},"即":{"docs":{},"可":{"docs":{},"。":{"docs":{},"下":{"docs":{},"载":{"docs":{},"后":{"docs":{},",":{"docs":{},"安":{"docs":{},"装":{"docs":{},"到":{"docs":{},"一":{"docs":{},"个":{"docs":{},"路":{"docs":{},"径":{"docs":{},",":{"docs":{},"再":{"docs":{},"把":{"docs":{},"路":{"docs":{},"径":{"docs":{},"配":{"docs":{},"置":{"docs":{},"到":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"h":{"docs":{},"系":{"docs":{},"统":{"docs":{},"环":{"docs":{},"境":{"docs":{},"变":{"docs":{},"量":{"docs":{},"中":{"docs":{},"即":{"docs":{},"可":{"docs":{},"。":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.005025125628140704}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"了":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}},"配":{"docs":{},"置":{"docs":{},"环":{"docs":{},"境":{"docs":{},"并":{"docs":{},"运":{"docs":{},"行":{"docs":{"tutorial/quick-start.html":{"ref":"tutorial/quick-start.html","tf":0.005025125628140704}}}}},"变":{"docs":{},"量":{"docs":{},"时":{"docs":{},"的":{"docs":{},"路":{"docs":{},"径":{"docs":{},":":{"docs":{},"n":{"docs":{},"x":{"docs":{},"o":{"docs":{"tutorial/toolchains.html":{"ref":"tutorial/toolchains.html","tf":0.02702702702702703}}}}}}}}}}}}}}}},"+":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.136986301369863},"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.021739130434782608},"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575},"programing-manual/process/process.html":{"ref":"programing-manual/process/process.html","tf":0.012658227848101266},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.002517834662190516}},"=":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},".":{"docs":{},".":{"docs":{},".":{"docs":{"programing-manual/base/start.html":{"ref":"programing-manual/base/start.html","tf":0.05},"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}},")":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}}}}},"v":{"docs":{},"s":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}}}}}}},"i":{"docs":{},"r":{"2":{"docs":{},"p":{"docs":{},"h":{"docs":{},"i":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}},"docs":{}}}},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},"d":{"docs":{},"d":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},"l":{"docs":{},"i":{"docs":{},"g":{"docs":{},"n":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}},"b":{"docs":{},"a":{"docs":{},"r":{"docs":{},"r":{"docs":{},"i":{"docs":{},"e":{"docs":{},"r":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"i":{"docs":{},"n":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}},"w":{"docs":{},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}},"c":{"docs":{},"a":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}},"l":{"docs":{},"e":{"docs":{},"a":{"docs":{},"r":{"docs":{},"m":{"docs":{},"a":{"docs":{},"s":{"docs":{},"k":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{},".":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}},"e":{"docs":{},"c":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},"i":{"docs":{},"s":{"docs":{},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}},"e":{"docs":{},"n":{"docs":{},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}}}}},"x":{"docs":{},"e":{"docs":{},"c":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"u":{"docs":{},"s":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"n":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}},"f":{"docs":{},"r":{"docs":{},"e":{"docs":{},"e":{"docs":{},"p":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"n":{"docs":{},"e":{"docs":{},"l":{"docs":{},"p":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}},"p":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"b":{"docs":{},"a":{"docs":{},"l":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},"l":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.002517834662190516}}}}}}},"i":{"docs":{},"n":{"docs":{},"c":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}},"i":{"docs":{},"t":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"u":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}},"j":{"docs":{},"p":{"docs":{},"g":{"docs":{},")":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}}}}},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{},"a":{"docs":{},"g":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"e":{"docs":{},"w":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"p":{"docs":{},"h":{"docs":{},"i":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}},"s":{"docs":{},"k":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"e":{"docs":{},"l":{"docs":{},"e":{"docs":{},"v":{"docs":{},"e":{"docs":{},"l":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}},"s":{"docs":{},"a":{"docs":{},"v":{"docs":{},"e":{"docs":{},"l":{"docs":{},"e":{"docs":{},"v":{"docs":{},"e":{"docs":{},"l":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}}}}}},"t":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"m":{"docs":{},"a":{"docs":{},"s":{"docs":{},"k":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}},"p":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.001678556441460344}}}}}},"u":{"docs":{},"b":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},"w":{"docs":{},"a":{"docs":{},"p":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},"i":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{},"n":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}},"p":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}},"r":{"docs":{},"e":{"docs":{},"v":{"docs":{},"n":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},".":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}},"u":{"docs":{},"n":{"docs":{},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{},"a":{"docs":{},"g":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}},"s":{"docs":{},"k":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}},"/":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.0136986301369863},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"*":{"docs":{"programing-manual/mm/vmspace.html":{"ref":"programing-manual/mm/vmspace.html","tf":0.015384615384615385},"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.07191780821917808},"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.021505376344086023},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.009232060428031893},"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.029411764705882353},"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.05}},"*":{"docs":{"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.010869565217391304},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.007133864876206463},"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.007352941176470588}}}},"/":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.0029374737725556023},"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"f":{"docs":{},"s":{"docs":{},",":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}}}}}},"i":{"docs":{},"t":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},";":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},")":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0051813471502590676}},";":{"docs":{"programing-manual/process/process.html":{"ref":"programing-manual/process/process.html","tf":0.012658227848101266}}}}}}}},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}},"a":{"docs":{},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}},"f":{"docs":{},"a":{"docs":{},"t":{"docs":{},".":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}}},"c":{"docs":{},"e":{"docs":{},"p":{"docs":{},"t":{"docs":{},"_":{"docs":{},"f":{"docs":{},"a":{"docs":{},"l":{"docs":{},"s":{"docs":{},"e":{"docs":{},"(":{"docs":{},".":{"docs":{},".":{"docs":{},".":{"docs":{},")":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}}}}}}}}}},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{},"e":{"docs":{},"(":{"docs":{},".":{"docs":{},".":{"docs":{},".":{"docs":{},")":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}}}}}}}}}}}}}}},"l":{"docs":{},"f":{"docs":{"programing-manual/mm/vmspace.html":{"ref":"programing-manual/mm/vmspace.html","tf":0.015384615384615385},"tutorial/toolchains.html":{"ref":"tutorial/toolchains.html","tf":0.08108108108108109}}}},"n":{"docs":{},"u":{"docs":{},"m":{"docs":{"programing-manual/interrupt/delay_queue.html":{"ref":"programing-manual/interrupt/delay_queue.html","tf":0.01282051282051282},"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.007352941176470588}}}},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.001678556441460344}}}}},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},"r":{"docs":{},"i":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}},"y":{"docs":{},"`":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}},"v":{"docs":{},")":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}},"c":{"docs":{},"a":{"docs":{},"l":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}},"p":{"docs":{},"c":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.001258917331095258}}}},"r":{"docs":{},"r":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}},"f":{"docs":{},"s":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}}},"r":{"docs":{},"e":{"docs":{},"e":{"docs":{"programing-manual/mm/heap.html":{"ref":"programing-manual/mm/heap.html","tf":0.014084507042253521}}},"q":{"docs":{},"u":{"docs":{},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.007553503986571549}}}}}},"l":{"docs":{},"a":{"docs":{},"g":{"docs":{},"s":{"docs":{},",":{"docs":{"programing-manual/mm/vmspace.html":{"ref":"programing-manual/mm/vmspace.html","tf":0.03076923076923077},"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0051813471502590676}}},")":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.012953367875647668}},";":{"docs":{"programing-manual/process/process.html":{"ref":"programing-manual/process/process.html","tf":0.012658227848101266},"programing-manual/interrupt/irq.html":{"ref":"programing-manual/interrupt/irq.html","tf":0.01694915254237288},"programing-manual/interrupt/delay_queue.html":{"ref":"programing-manual/interrupt/delay_queue.html","tf":0.02564102564102564},"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.021505376344086023}}}},"。":{"docs":{"programing-manual/process/process.html":{"ref":"programing-manual/process/process.html","tf":0.012658227848101266},"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.010752688172043012}}}}}},"o":{"docs":{},"p":{"docs":{},"p":{"docs":{},"i":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}}}},"a":{"docs":{},"i":{"docs":{},"l":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}},"u":{"docs":{},"l":{"docs":{},"t":{"docs":{},"!":{"docs":{},"\"":{"docs":{},")":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}},"t":{"1":{"2":{"docs":{},",":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}},":":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}},"6":{"docs":{},",":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}},"docs":{}},"3":{"2":{"docs":{},",":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}},":":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}},"docs":{}},"docs":{},"f":{"docs":{},"s":{"docs":{},",":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}}}},"i":{"docs":{},"x":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}},"e":{"docs":{},"d":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"y":{"docs":{},";":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}}}}}}}},"(":{"docs":{},"m":{"docs":{},"m":{"docs":{},")":{"docs":{},":":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}}}},":":{"docs":{},"修":{"docs":{},"补":{"docs":{},"b":{"docs":{},"u":{"docs":{},"g":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}}}}}},"r":{"docs":{},"s":{"docs":{},"t":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}}}},"v":{"docs":{},"e":{"docs":{},"”":{"docs":{},")":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"基":{"docs":{},"于":{"docs":{},"精":{"docs":{},"简":{"docs":{},"指":{"docs":{},"令":{"docs":{},"集":{"docs":{},"(":{"docs":{},"r":{"docs":{},"i":{"docs":{},"s":{"docs":{},"c":{"docs":{},")":{"docs":{},"原":{"docs":{},"则":{"docs":{},"的":{"docs":{},"开":{"docs":{},"源":{"docs":{},"指":{"docs":{},"令":{"docs":{},"集":{"docs":{},"架":{"docs":{},"构":{"docs":{},"(":{"docs":{},"i":{"docs":{},"s":{"docs":{},"a":{"docs":{},")":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"e":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.007352941176470588}}}}},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"e":{"docs":{},".":{"docs":{},"i":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}},"a":{"docs":{},"t":{"docs":{},"(":{"docs":{},"m":{"docs":{},"m":{"docs":{},")":{"docs":{},":":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.01652892561983471}}}}}}},":":{"docs":{},"新":{"docs":{},"功":{"docs":{},"能":{"docs":{},"(":{"docs":{},"f":{"docs":{},"e":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"r":{"docs":{},"e":{"docs":{},")":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}}}}}}}}}}}}}}},"u":{"docs":{},"n":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086},"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}}}}}},"d":{"docs":{},")":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.007772020725388601}}},",":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.007772020725388601}}}}},"k":{"2":{"1":{"0":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}},",":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},"docs":{}},"docs":{}},"docs":{},"d":{"docs":{},"r":{"docs":{},"i":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}}}}}}}},"e":{"docs":{},"r":{"docs":{},"n":{"docs":{},"e":{"docs":{},"l":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086},"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}}}}}}}},"i":{"docs":{},"l":{"docs":{},"l":{"docs":{"programing-manual/interrupt/irq.html":{"ref":"programing-manual/interrupt/irq.html","tf":0.01694915254237288}}}}}},"|":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.15753424657534246},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.017205203524968526}},"内":{"docs":{},"容":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},"描":{"docs":{},"述":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}},"头":{"docs":{},"文":{"docs":{},"件":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}}}}},"常":{"docs":{},"用":{"docs":{},"的":{"docs":{},"功":{"docs":{},"能":{"docs":{},"组":{"docs":{},"件":{"docs":{},",":{"docs":{},"小":{"docs":{},"工":{"docs":{},"具":{"docs":{},",":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"显":{"docs":{},"示":{"docs":{},"以":{"docs":{},"及":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"操":{"docs":{},"作":{"docs":{},"等":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}}}}}}}}}}}}}}}}}}}}}}}}}}},"平":{"docs":{},"台":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}},"支":{"docs":{},"持":{"docs":{},",":{"docs":{},"存":{"docs":{},"放":{"docs":{},"具":{"docs":{},"体":{"docs":{},"的":{"docs":{},"平":{"docs":{},"台":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},"p":{"docs":{},"c":{"docs":{},"平":{"docs":{},"台":{"docs":{},"或":{"docs":{},"者":{"docs":{},"一":{"docs":{},"个":{"docs":{},"开":{"docs":{},"发":{"docs":{},"板":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}}}}}}}}}}}}}}}}}}}}}}}}}},"框":{"docs":{},"架":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}}}},"配":{"docs":{},"置":{"docs":{},"文":{"docs":{},"件":{"docs":{},",":{"docs":{},"配":{"docs":{},"置":{"docs":{},"了":{"docs":{},"支":{"docs":{},"持":{"docs":{},"的":{"docs":{},"平":{"docs":{},"台":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}}}}}}}}}}}}}}},"开":{"docs":{},"发":{"docs":{},"者":{"docs":{},"实":{"docs":{},"现":{"docs":{},")":{"docs":{"programing-manual/base/start.html":{"ref":"programing-manual/base/start.html","tf":0.075}}}}}}}},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}}}}}},"描":{"docs":{},"述":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.0136986301369863},"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.010869565217391304},"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575},"programing-manual/sched/smp.html":{"ref":"programing-manual/sched/smp.html","tf":0.0625},"programing-manual/process/process.html":{"ref":"programing-manual/process/process.html","tf":0.012658227848101266},"programing-manual/process/syscall.html":{"ref":"programing-manual/process/syscall.html","tf":0.03125}}}},"整":{"docs":{},"体":{"docs":{},"框":{"docs":{},"架":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":10}}}}}},"时":{"docs":{},"间":{"docs":{},"模":{"docs":{},"块":{"docs":{},",":{"docs":{},"时":{"docs":{},"钟":{"docs":{},"和":{"docs":{},"定":{"docs":{},"时":{"docs":{},"器":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}}}}}}}}}}},"长":{"docs":{},"度":{"docs":{},"后":{"docs":{},",":{"docs":{},"就":{"docs":{},"会":{"docs":{},"被":{"docs":{},"唤":{"docs":{},"醒":{"docs":{},",":{"docs":{},"继":{"docs":{},"续":{"docs":{},"往":{"docs":{},"后":{"docs":{},"执":{"docs":{},"行":{"docs":{},"。":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}}}}}}}}}}}}}},"管":{"docs":{},"理":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}},",":{"docs":{},"m":{"docs":{},"m":{"docs":{},"u":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}},"架":{"docs":{},"构":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}},"相":{"docs":{},"关":{"docs":{},"代":{"docs":{},"码":{"docs":{},",":{"docs":{},"x":{"8":{"6":{"docs":{},",":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}}}},"docs":{}},"docs":{}}}}}}},"中":{"docs":{},",":{"docs":{},"有":{"3":{"docs":{},"个":{"docs":{},"特":{"docs":{},"权":{"docs":{},"级":{"docs":{},"(":{"docs":{},"m":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"i":{"docs":{},"n":{"docs":{},"e":{"docs":{},",":{"docs":{"programing-manual/process/syscall.html":{"ref":"programing-manual/process/syscall.html","tf":0.03125}}}}}}}}}}}}}}}},"4":{"docs":{},"个":{"docs":{},"特":{"docs":{},"权":{"docs":{},"级":{"docs":{},"(":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"0":{"docs":{},",":{"docs":{"programing-manual/process/syscall.html":{"ref":"programing-manual/process/syscall.html","tf":0.03125}}}},"docs":{}}}}}}}}}}},"docs":{}},"内":{"docs":{},"存":{"docs":{},"全":{"docs":{},"(":{"docs":{},"读":{"docs":{},"和":{"docs":{},"写":{"docs":{},")":{"docs":{},"屏":{"docs":{},"障":{"docs":{},"使":{"docs":{},"用":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}},"框":{"docs":{},"架":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}}}},"测":{"docs":{},"试":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}},"模":{"docs":{},"块":{"docs":{},",":{"docs":{},"测":{"docs":{},"试":{"docs":{},"框":{"docs":{},"架":{"docs":{},"和":{"docs":{},"测":{"docs":{},"试":{"docs":{},"代":{"docs":{},"码":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}}}}}}}}}}}}}}}},"用":{"docs":{},"到":{"docs":{},"的":{"docs":{},"x":{"docs":{},"b":{"docs":{},"u":{"docs":{},"i":{"docs":{},"l":{"docs":{},"d":{"docs":{},"脚":{"docs":{},"本":{"docs":{},"和":{"docs":{},"k":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{},"脚":{"docs":{},"本":{"docs":{},"等":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}}}}}}}}}}}}}}}}}}}}}}},"于":{"docs":{},"分":{"docs":{},"发":{"docs":{},"系":{"docs":{},"统":{"docs":{},"调":{"docs":{},"用":{"docs":{},",":{"docs":{},"不":{"docs":{},"同":{"docs":{},"的":{"docs":{},"架":{"docs":{},"构":{"docs":{},"传":{"docs":{},"参":{"docs":{},"数":{"docs":{},"的":{"docs":{},"方":{"docs":{},"式":{"docs":{},"会":{"docs":{},"有":{"docs":{},"区":{"docs":{},"别":{"docs":{},",":{"docs":{},"因":{"docs":{},"此":{"docs":{},"需":{"docs":{},"要":{"docs":{},"特":{"docs":{},"殊":{"docs":{},"处":{"docs":{},"理":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"在":{"docs":{},"进":{"docs":{},"程":{"docs":{},"切":{"docs":{},"换":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},"切":{"docs":{},"换":{"docs":{},"页":{"docs":{},"表":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}},"创":{"docs":{},"建":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},",":{"docs":{},"创":{"docs":{},"建":{"docs":{},"进":{"docs":{},"程":{"docs":{},"的":{"docs":{},"页":{"docs":{},"表":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}},"退":{"docs":{},"出":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},"释":{"docs":{},"放":{"docs":{},"页":{"docs":{},"表":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}},"获":{"docs":{},"取":{"docs":{},"内":{"docs":{},"核":{"docs":{},"的":{"docs":{},"页":{"docs":{},"表":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}},"进":{"docs":{},"程":{"docs":{},"从":{"docs":{},"内":{"docs":{},"核":{"docs":{},"跳":{"docs":{},"到":{"docs":{},"用":{"docs":{},"户":{"docs":{},"态":{"docs":{},"执":{"docs":{},"行":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}},"说":{"docs":{},"明":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}},"户":{"docs":{},"模":{"docs":{},"式":{"docs":{},"就":{"docs":{},"是":{"docs":{},"应":{"docs":{},"用":{"docs":{},"程":{"docs":{},"序":{"docs":{},"执":{"docs":{},"行":{"docs":{},"的":{"docs":{},"模":{"docs":{},"式":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"通":{"docs":{},"过":{"docs":{},"系":{"docs":{},"统":{"docs":{},"调":{"docs":{},"用":{"docs":{},"进":{"docs":{},"入":{"docs":{},"到":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}}}}}},"态":{"docs":{},"驱":{"docs":{},"动":{"docs":{},"框":{"docs":{},"架":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}},"目":{"docs":{},"录":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.0136986301369863}},"下":{"docs":{},"面":{"docs":{},",":{"docs":{},"新":{"docs":{},"的":{"docs":{},"平":{"docs":{},"台":{"docs":{},"只":{"docs":{},"需":{"docs":{},"要":{"docs":{},"支":{"docs":{},"持":{"docs":{},"这":{"docs":{},"些":{"docs":{},"接":{"docs":{},"口":{"docs":{},"的":{"docs":{},"功":{"docs":{},"能":{"docs":{},"即":{"docs":{},"可":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}}},"名":{"docs":{},"称":{"docs":{},"采":{"docs":{},"用":{"docs":{},"首":{"docs":{},"字":{"docs":{},"母":{"docs":{},"大":{"docs":{},"写":{"docs":{},"的":{"docs":{},"形":{"docs":{},"式":{"docs":{},",":{"docs":{},"子":{"docs":{},"目":{"docs":{},"录":{"docs":{},"应":{"docs":{},"该":{"docs":{},"是":{"docs":{},"属":{"docs":{},"于":{"docs":{},"父":{"docs":{},"目":{"docs":{},"录":{"docs":{},"的":{"docs":{},"内":{"docs":{},"容":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"有":{"docs":{},"相":{"docs":{},"关":{"docs":{},"性":{"docs":{},"。":{"docs":{},"例":{"docs":{},"如":{"docs":{},":":{"docs":{},"d":{"docs":{},"r":{"docs":{},"i":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"/":{"docs":{},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"k":{"docs":{},"/":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"前":{"docs":{},"支":{"docs":{},"持":{"docs":{},"的":{"docs":{},"是":{"docs":{},"m":{"docs":{},"m":{"docs":{},"u":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}},"的":{"docs":{},"的":{"docs":{},"简":{"docs":{},"短":{"docs":{},"描":{"docs":{},"述":{"docs":{},",":{"docs":{},"不":{"docs":{},"超":{"docs":{},"过":{"5":{"0":{"docs":{},"个":{"docs":{},"字":{"docs":{},"符":{"docs":{},"。":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}}}},"docs":{}},"docs":{}}}}}}}}}}}},"采":{"docs":{},"取":{"docs":{},"架":{"docs":{},"构":{"docs":{},"和":{"docs":{},"平":{"docs":{},"台":{"docs":{},"分":{"docs":{},"离":{"docs":{},"的":{"docs":{},"措":{"docs":{},"施":{"docs":{},",":{"docs":{},"其":{"docs":{},"原":{"docs":{},"因":{"docs":{},"在":{"docs":{},"于":{"docs":{},",":{"docs":{},"一":{"docs":{},"个":{"docs":{},"架":{"docs":{},"构":{"docs":{},"可":{"docs":{},"能":{"docs":{},"有":{"docs":{},"多":{"docs":{},"个":{"docs":{},"平":{"docs":{},"台":{"docs":{},",":{"docs":{},"分":{"docs":{},"离":{"docs":{},"后":{"docs":{},"可":{"docs":{},"以":{"docs":{},"服":{"docs":{},"用":{"docs":{},"架":{"docs":{},"构":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},"。":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"用":{"docs":{},"混":{"docs":{},"合":{"docs":{},"内":{"docs":{},"核":{"docs":{},"框":{"docs":{},"架":{"docs":{},",":{"docs":{},"也":{"docs":{},"就":{"docs":{},"是":{"docs":{},"结":{"docs":{},"合":{"docs":{},"宏":{"docs":{},"内":{"docs":{},"核":{"docs":{},"和":{"docs":{},"微":{"docs":{},"内":{"docs":{},"核":{"docs":{},"。":{"docs":{},"这":{"docs":{},"样":{"docs":{},"的":{"docs":{},"系":{"docs":{},"统":{"docs":{},"有":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"项":{"docs":{},"目":{"docs":{},"目":{"docs":{},"录":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}}}}}},"驱":{"docs":{},"动":{"docs":{},"程":{"docs":{},"序":{"docs":{},",":{"docs":{},"磁":{"docs":{},"盘":{"docs":{},",":{"docs":{},"输":{"docs":{},"入":{"docs":{},"输":{"docs":{},"出":{"docs":{},"设":{"docs":{},"备":{"docs":{},"等":{"docs":{"programing-manual/base/framework.html":{"ref":"programing-manual/base/framework.html","tf":0.00684931506849315}}}}}}}}}}}}}}}}},">":{"docs":{"programing-manual/base/start.html":{"ref":"programing-manual/base/start.html","tf":0.275},"programing-manual/mm/heap.html":{"ref":"programing-manual/mm/heap.html","tf":0.014084507042253521}},"a":{"0":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}},")":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}}},"1":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}}},"2":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}}},"3":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}}},"4":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}}},"5":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}}},"6":{"docs":{},")":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}}}},"7":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},")":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},"docs":{}},"e":{"docs":{},"p":{"docs":{},"c":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}}}},"m":{"docs":{},"m":{"docs":{},"u":{"docs":{},".":{"docs":{},"t":{"docs":{},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"e":{"docs":{},")":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}},"r":{"docs":{},"a":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},"s":{"docs":{},"p":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}}}}}}},"t":{"docs":{},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{},"e":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"u":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"e":{"docs":{},")":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.0029374737725556023}}},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}},"m":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{},".":{"docs":{},"m":{"docs":{},"m":{"docs":{},"u":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}},"_":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{"programing-manual/base/start.html":{"ref":"programing-manual/base/start.html","tf":0.025},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.001258917331095258}},",":{"docs":{},"当":{"docs":{},"执":{"docs":{},"行":{"docs":{},"到":{"docs":{},"这":{"docs":{},"个":{"docs":{},"地":{"docs":{},"方":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},",":{"docs":{},"内":{"docs":{},"核":{"docs":{},"就":{"docs":{},"开":{"docs":{},"始":{"docs":{},"运":{"docs":{},"行":{"docs":{},"了":{"docs":{},"。":{"docs":{"programing-manual/base/start.html":{"ref":"programing-manual/base/start.html","tf":0.025}}}}}}}}}}}}}}}}}}}}}}}},":":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}},"e":{"docs":{},"t":{"docs":{},"s":{"docs":{},"p":{"0":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},":":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},"1":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},":":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},"2":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},":":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},"3":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},":":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},"docs":{}}}}}},"_":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{},"e":{"docs":{},"m":{"docs":{},"b":{"docs":{},"l":{"docs":{},"y":{"docs":{},"_":{"docs":{},"_":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"(":{"docs":{},"m":{"docs":{},"m":{"docs":{},"u":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}},"w":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"p":{"docs":{},"h":{"docs":{},"y":{"docs":{},"(":{"docs":{},"m":{"docs":{},"m":{"docs":{},"u":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"y":{"docs":{},"n":{"docs":{},"c":{"docs":{},"_":{"docs":{},"f":{"docs":{},"e":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{},"_":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"_":{"docs":{},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"(":{"docs":{},"&":{"docs":{},"a":{"docs":{},"t":{"docs":{},"o":{"docs":{},"m":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}}}}}}}}},"n":{"docs":{},"d":{"docs":{},"(":{"docs":{},"&":{"docs":{},"a":{"docs":{},"t":{"docs":{},"o":{"docs":{},"m":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}},"o":{"docs":{},"r":{"docs":{},"(":{"docs":{},"&":{"docs":{},"a":{"docs":{},"t":{"docs":{},"o":{"docs":{},"m":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}},"s":{"docs":{},"u":{"docs":{},"b":{"docs":{},"(":{"docs":{},"&":{"docs":{},"a":{"docs":{},"t":{"docs":{},"o":{"docs":{},"m":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"_":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"_":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"_":{"docs":{},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{},"(":{"docs":{},"&":{"docs":{},"(":{"docs":{},"(":{"docs":{},"a":{"docs":{},"t":{"docs":{},"o":{"docs":{},"m":{"docs":{},"i":{"docs":{},"c":{"docs":{},")":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"y":{"docs":{},"n":{"docs":{},"c":{"docs":{},"h":{"docs":{},"r":{"docs":{},"o":{"docs":{},"n":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"i":{"docs":{},"z":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"_":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"e":{"docs":{},"_":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"_":{"docs":{},"s":{"docs":{},"w":{"docs":{},"a":{"docs":{},"p":{"docs":{},"(":{"docs":{},"&":{"docs":{},"a":{"docs":{},"t":{"docs":{},"o":{"docs":{},"m":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"n":{"docs":{},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"(":{"docs":{},"m":{"docs":{},"m":{"docs":{},"u":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}},"d":{"docs":{},"r":{"docs":{},"i":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"_":{"docs":{},"k":{"docs":{},"e":{"docs":{},"y":{"docs":{},"b":{"docs":{},"o":{"docs":{},"a":{"docs":{},"r":{"docs":{},"d":{"docs":{},"_":{"docs":{},"_":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}}}}}}}}}}}},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"_":{"docs":{},"_":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.011029411764705883}}}}}}}}},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"m":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.00209819555182543}},":":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}},"不":{"docs":{},"能":{"docs":{},"使":{"docs":{},"用":{"docs":{},"内":{"docs":{},"核":{"docs":{},"的":{"docs":{},"功":{"docs":{},"能":{"docs":{},":":{"docs":{"programing-manual/base/start.html":{"ref":"programing-manual/base/start.html","tf":0.025}}}}}}}}}}},"同":{"docs":{},"用":{"docs":{},"法":{"docs":{},"的":{"docs":{},"地":{"docs":{},"址":{"docs":{},"。":{"docs":{"programing-manual/mm/vmspace.html":{"ref":"programing-manual/mm/vmspace.html","tf":0.015384615384615385}}}}}}}},"的":{"docs":{},"架":{"docs":{},"构":{"docs":{},"内":{"docs":{},"核":{"docs":{},"入":{"docs":{},"口":{"docs":{},"代":{"docs":{},"码":{"docs":{},"有":{"docs":{},"差":{"docs":{},"异":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"根":{"docs":{},"据":{"docs":{},"架":{"docs":{},"构":{"docs":{},"来":{"docs":{},"实":{"docs":{},"现":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}}}},"管":{"docs":{},"是":{"docs":{},"哪":{"docs":{},"一":{"docs":{},"个":{"docs":{},"部":{"docs":{},"分":{"docs":{},",":{"docs":{},"任":{"docs":{},"何":{"docs":{},"一":{"docs":{},"行":{"docs":{},"都":{"docs":{},"不":{"docs":{},"得":{"docs":{},"超":{"docs":{},"过":{"7":{"2":{"docs":{},"个":{"docs":{},"字":{"docs":{},"符":{"docs":{},"(":{"docs":{},"或":{"1":{"0":{"0":{"docs":{},"个":{"docs":{},"字":{"docs":{},"符":{"docs":{},")":{"docs":{},"。":{"docs":{},"这":{"docs":{},"是":{"docs":{},"为":{"docs":{},"了":{"docs":{},"避":{"docs":{},"免":{"docs":{},"自":{"docs":{},"动":{"docs":{},"换":{"docs":{},"行":{"docs":{},"影":{"docs":{},"响":{"docs":{},"美":{"docs":{},"观":{"docs":{},"。":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}}}}}}}}}}}}}}}}}}}},"docs":{}},"docs":{}},"docs":{}}}}}}},"docs":{}},"docs":{}}}}}}}}}}}}}}}}}},"带":{"docs":{},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{},"u":{"docs":{},"p":{"docs":{},"和":{"docs":{},"c":{"docs":{},"l":{"docs":{},"e":{"docs":{},"a":{"docs":{},"n":{"docs":{},"的":{"docs":{},"单":{"docs":{},"元":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}}}}}}}}}}}}}}}},"启":{"docs":{},"动":{"docs":{},"流":{"docs":{},"程":{"docs":{"programing-manual/base/start.html":{"ref":"programing-manual/base/start.html","tf":10.025}}}},"后":{"docs":{},",":{"docs":{},"会":{"docs":{},"进":{"docs":{},"行":{"docs":{},"一":{"docs":{},"些":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},",":{"docs":{},"然":{"docs":{},"后":{"docs":{},"参":{"docs":{},"加":{"docs":{},"到":{"docs":{},"调":{"docs":{},"度":{"docs":{},"工":{"docs":{},"作":{"docs":{},"中":{"docs":{},"。":{"docs":{},"而":{"docs":{},"调":{"docs":{},"度":{"docs":{},"队":{"docs":{},"列":{"docs":{},"的":{"docs":{},"实":{"docs":{},"现":{"docs":{},"就":{"docs":{},"需":{"docs":{},"要":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"于":{"docs":{},"原":{"docs":{},"子":{"docs":{},"操":{"docs":{},"作":{"docs":{},"来":{"docs":{},"保":{"docs":{},"证":{"docs":{},"对":{"docs":{},"公":{"docs":{},"共":{"docs":{},"队":{"docs":{},"列":{"docs":{},"访":{"docs":{},"问":{"docs":{},"的":{"docs":{},"正":{"docs":{},"确":{"docs":{},"性":{"docs":{},"。":{"docs":{"programing-manual/sched/smp.html":{"ref":"programing-manual/sched/smp.html","tf":0.0625}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"进":{"docs":{},"程":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"传":{"docs":{},"入":{"docs":{},"进":{"docs":{},"程":{"docs":{},"的":{"docs":{},"名":{"docs":{},"字":{"docs":{"programing-manual/process/process.html":{"ref":"programing-manual/process/process.html","tf":0.012658227848101266}}}}}}}}}}}}}}}}},"它":{"docs":{},",":{"docs":{},"才":{"docs":{},"可":{"docs":{},"以":{"docs":{},"在":{"docs":{},"超":{"docs":{},"时":{"docs":{},"后":{"docs":{},"调":{"docs":{},"用":{"docs":{},"回":{"docs":{},"调":{"docs":{},"函":{"docs":{},"数":{"docs":{},"。":{"docs":{"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.010752688172043012}}}}}}}}}}}}}}}}}}}},"三":{"docs":{},".":{"docs":{"programing-manual/mm/mm.html":{"ref":"programing-manual/mm/mm.html","tf":0.1111111111111111}}},"、":{"docs":{},"框":{"docs":{},"架":{"docs":{},"图":{"docs":{"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.010869565217391304},"programing-manual/mm/heap.html":{"ref":"programing-manual/mm/heap.html","tf":0.014084507042253521},"programing-manual/mm/vmspace.html":{"ref":"programing-manual/mm/vmspace.html","tf":0.015384615384615385},"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575},"programing-manual/sched/smp.html":{"ref":"programing-manual/sched/smp.html","tf":0.0625},"programing-manual/process/process.html":{"ref":"programing-manual/process/process.html","tf":0.012658227848101266},"programing-manual/process/syscall.html":{"ref":"programing-manual/process/syscall.html","tf":0.03125},"programing-manual/interrupt/irq.html":{"ref":"programing-manual/interrupt/irq.html","tf":0.01694915254237288},"programing-manual/interrupt/delay_queue.html":{"ref":"programing-manual/interrupt/delay_queue.html","tf":0.01282051282051282},"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.010752688172043012}}}}},"代":{"docs":{},"码":{"docs":{},"移":{"docs":{},"植":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}},"物":{"docs":{},"理":{"docs":{},"内":{"docs":{},"存":{"docs":{},"管":{"docs":{},"理":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"伙":{"docs":{},"伴":{"docs":{},"算":{"docs":{},"法":{"docs":{},"实":{"docs":{},"现":{"docs":{},"。":{"docs":{"programing-manual/mm/mm.html":{"ref":"programing-manual/mm/mm.html","tf":0.1111111111111111}}}}}}}}}}}}}},"分":{"docs":{},"配":{"docs":{},"/":{"docs":{},"释":{"docs":{},"放":{"docs":{},"管":{"docs":{},"理":{"docs":{},"之":{"docs":{},"伙":{"docs":{},"伴":{"docs":{},"算":{"docs":{},"法":{"docs":{},"(":{"docs":{},"b":{"docs":{},"u":{"docs":{},"d":{"docs":{},"d":{"docs":{},"y":{"docs":{},")":{"docs":{"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.010869565217391304}}}}}}}}}}}}}}}}}}}}}}}}},"*":{"docs":{"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.03260869565217391},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.0419639110365086},"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.04411764705882353}},"m":{"docs":{},"e":{"docs":{},"m":{"docs":{},",":{"docs":{"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.010869565217391304}}},"a":{"docs":{},"l":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"(":{"docs":{},"u":{"docs":{},"s":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}}}},"m":{"docs":{},"u":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.001678556441460344}}}}},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},")":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.010362694300518135}}}}}}}},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"b":{"docs":{},"u":{"docs":{},"d":{"docs":{},"d":{"docs":{},"y":{"docs":{},"a":{"docs":{},"l":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"p":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"b":{"docs":{},"u":{"docs":{},"d":{"docs":{},"d":{"docs":{},"y":{"docs":{},"s":{"docs":{},"y":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{},"*":{"docs":{"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.010869565217391304}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"h":{"docs":{},"e":{"docs":{},"a":{"docs":{},"p":{"docs":{},"a":{"docs":{},"l":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"s":{"docs":{"programing-manual/mm/heap.html":{"ref":"programing-manual/mm/heap.html","tf":0.014084507042253521}}}}}}}}}}}}}}},"a":{"docs":{},"l":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"i":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"(":{"docs":{},"v":{"docs":{},"o":{"docs":{},"i":{"docs":{},"d":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"m":{"docs":{},"m":{"docs":{},"u":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}},"w":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"p":{"docs":{},"h":{"docs":{},"y":{"docs":{},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"m":{"docs":{},"m":{"docs":{},"u":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"c":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"n":{"docs":{},"e":{"docs":{},"l":{"docs":{},"p":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{},"e":{"docs":{},"(":{"docs":{},"v":{"docs":{},"o":{"docs":{},"i":{"docs":{},"d":{"docs":{},")":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"v":{"docs":{},"i":{"docs":{},"r":{"2":{"docs":{},"p":{"docs":{},"h":{"docs":{},"y":{"docs":{},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"m":{"docs":{},"m":{"docs":{},"u":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}},"docs":{}}}}}}},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"c":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"(":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"s":{"docs":{},"t":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"l":{"docs":{},"f":{"docs":{},"(":{"docs":{},"v":{"docs":{},"o":{"docs":{},"i":{"docs":{},"d":{"docs":{},")":{"docs":{},";":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}}}}}}}}}}}}},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},"c":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"u":{"docs":{},"a":{"docs":{},"r":{"docs":{},"c":{"docs":{},"h":{"docs":{"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.010752688172043012}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"r":{"docs":{},"q":{"docs":{},"_":{"docs":{},"d":{"docs":{},"e":{"docs":{},"l":{"docs":{},"a":{"docs":{},"y":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{},"c":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"i":{"docs":{},"r":{"docs":{},"q":{"docs":{},"_":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"programing-manual/interrupt/delay_queue.html":{"ref":"programing-manual/interrupt/delay_queue.html","tf":0.01282051282051282}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},",":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575},"programing-manual/process/process.html":{"ref":"programing-manual/process/process.html","tf":0.012658227848101266},"programing-manual/interrupt/irq.html":{"ref":"programing-manual/interrupt/irq.html","tf":0.01694915254237288}}}}}},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"s":{"docs":{},"p":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}}}}}}},"p":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}},"t":{"docs":{},"r":{"docs":{},")":{"docs":{},";":{"docs":{"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.03260869565217391}}}}},"e":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},"a":{"docs":{},"t":{"docs":{},"h":{"docs":{},",":{"docs":{"programing-manual/process/process.html":{"ref":"programing-manual/process/process.html","tf":0.012658227848101266},"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.018134715025906734}}},")":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.007772020725388601}}}}},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{},"e":{"docs":{},"v":{"docs":{},"i":{"docs":{},"r":{"docs":{},")":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{},",":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}},"r":{"docs":{},"o":{"docs":{},"c":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}},"o":{"docs":{},"b":{"docs":{},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},")":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}},";":{"docs":{"programing-manual/mm/heap.html":{"ref":"programing-manual/mm/heap.html","tf":0.028169014084507043}}}}}}}}}},"*":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"r":{"docs":{},")":{"docs":{},";":{"docs":{"programing-manual/mm/vmspace.html":{"ref":"programing-manual/mm/vmspace.html","tf":0.03076923076923077}}}}}}}}}}}},"/":{"docs":{"programing-manual/mm/vmspace.html":{"ref":"programing-manual/mm/vmspace.html","tf":0.015384615384615385},"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.07191780821917808},"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.021505376344086023},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.016365925304238357},"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.03676470588235294},"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.05}}},"s":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{},",":{"docs":{"programing-manual/mm/vmspace.html":{"ref":"programing-manual/mm/vmspace.html","tf":0.046153846153846156}}}}}}},"t":{"docs":{},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},";":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}},"b":{"docs":{},"a":{"docs":{},"s":{"docs":{},"e":{"docs":{},";":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}},",":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}},"t":{"docs":{},"o":{"docs":{},"p":{"docs":{},")":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}},"r":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}},"a":{"docs":{},"r":{"docs":{},"g":{"docs":{},",":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575},"programing-manual/interrupt/delay_queue.html":{"ref":"programing-manual/interrupt/delay_queue.html","tf":0.02564102564102564},"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.021505376344086023},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086},"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}},")":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}},",":{"docs":{"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.021505376344086023}}}},"s":{"docs":{},")":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}},"d":{"docs":{},"d":{"docs":{},"r":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}},")":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}},",":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0051813471502590676}}}}}},"t":{"docs":{},"o":{"docs":{},"m":{"docs":{},"i":{"docs":{},"c":{"docs":{},")":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.001258917331095258}}},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.0029374737725556023}}}}}}}}},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},")":{"docs":{},";":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.010273972602739725}}}},",":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}},"a":{"docs":{},"r":{"docs":{},"g":{"docs":{},";":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},",":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}}}}},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},")":{"docs":{},";":{"docs":{"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.03225806451612903}}}},",":{"docs":{"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.010752688172043012}}}},")":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0051813471502590676}}}}}},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}}}}}},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{},")":{"docs":{},";":{"docs":{"programing-manual/interrupt/irq.html":{"ref":"programing-manual/interrupt/irq.html","tf":0.01694915254237288}}}},",":{"docs":{"programing-manual/interrupt/irq.html":{"ref":"programing-manual/interrupt/irq.html","tf":0.01694915254237288}}}}}},"i":{"docs":{},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"d":{"docs":{},"i":{"docs":{},"r":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"p":{"docs":{},"t":{"docs":{},"r":{"docs":{},";":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}}}}},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{},")":{"docs":{},";":{"docs":{"programing-manual/interrupt/delay_queue.html":{"ref":"programing-manual/interrupt/delay_queue.html","tf":0.05128205128205128}}}},",":{"docs":{"programing-manual/interrupt/delay_queue.html":{"ref":"programing-manual/interrupt/delay_queue.html","tf":0.01282051282051282}}}}}}},",":{"docs":{"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.021505376344086023}}},")":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}},"(":{"docs":{},"p":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"p":{"docs":{},"h":{"docs":{},"i":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}},"m":{"docs":{},"m":{"docs":{},"u":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"g":{"docs":{},"n":{"docs":{},"_":{"docs":{},"d":{"docs":{},"o":{"docs":{},"w":{"docs":{},"n":{"docs":{},"(":{"docs":{},"(":{"docs":{},"n":{"docs":{},"x":{"docs":{},"_":{"docs":{},"u":{"docs":{},"a":{"docs":{},"r":{"docs":{},"c":{"docs":{},"h":{"docs":{},")":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}},"t":{"docs":{},"o":{"docs":{},"p":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}},"d":{"docs":{},")":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.007772020725388601}}}}}},"p":{"docs":{},"u":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"c":{"docs":{},"u":{"docs":{},"r":{"docs":{},"r":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"(":{"docs":{},"v":{"docs":{},"o":{"docs":{},"i":{"docs":{},"d":{"docs":{},")":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}},"f":{"docs":{},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},")":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}},"o":{"docs":{},"m":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"n":{"docs":{},"e":{"docs":{},"l":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}},"u":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{},")":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}},"v":{"docs":{},"m":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{},")":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}},"a":{"docs":{},"l":{"docs":{},"u":{"docs":{},"e":{"docs":{},")":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}},"b":{"docs":{},"u":{"docs":{},"f":{"docs":{},",":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.010362694300518135}}},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.007352941176470588}}}}}}}}},"q":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}},"个":{"docs":{},"页":{"docs":{},"面":{"docs":{},"。":{"docs":{},"在":{"docs":{},"m":{"docs":{},"m":{"docs":{},"u":{"docs":{},"映":{"docs":{},"射":{"docs":{},"和":{"docs":{},"虚":{"docs":{},"拟":{"docs":{},"内":{"docs":{},"存":{"docs":{},"管":{"docs":{},"理":{"docs":{},"器":{"docs":{},"中":{"docs":{},"会":{"docs":{},"使":{"docs":{},"用":{"docs":{},"到":{"docs":{},"。":{"docs":{"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.010869565217391304}}}}}}}}}}}}}}}}}}}}}}}}},"空":{"docs":{},"格":{"docs":{},"的":{"docs":{},"方":{"docs":{},"式":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"没":{"docs":{},"有":{"docs":{},"什":{"docs":{},"么":{"docs":{},"特":{"docs":{},"殊":{"docs":{},"意":{"docs":{},"义":{"docs":{},",":{"docs":{},"请":{"docs":{},"在":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}}}}}}}}}}}}}}},"中":{"docs":{},"使":{"docs":{},"用":{"docs":{"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.010869565217391304}}}},",":{"docs":{},"内":{"docs":{},"存":{"docs":{},"对":{"docs":{},"象":{"docs":{},"被":{"docs":{},"划":{"docs":{},"分":{"docs":{},"成":{"3":{"docs":{},"类":{"docs":{},",":{"docs":{},"小":{"docs":{},"(":{"1":{"6":{"docs":{},"b":{"docs":{},"y":{"docs":{},"t":{"docs":{},"e":{"docs":{"programing-manual/mm/heap.html":{"ref":"programing-manual/mm/heap.html","tf":0.014084507042253521}}}}}}},"docs":{}},"docs":{}}}}}},"docs":{}}}}}}}}},"分":{"docs":{},"为":{"docs":{},"实":{"docs":{},"时":{"docs":{},"优":{"docs":{},"先":{"docs":{},"级":{"docs":{},"和":{"docs":{},"分":{"docs":{},"时":{"docs":{},"优":{"docs":{},"先":{"docs":{},"级":{"docs":{},"。":{"docs":{},"实":{"docs":{},"时":{"docs":{},"优":{"docs":{},"先":{"docs":{},"级":{"docs":{},"是":{"docs":{},",":{"docs":{},"只":{"docs":{},"要":{"docs":{},"有":{"docs":{},"高":{"docs":{},"的":{"docs":{},"优":{"docs":{},"先":{"docs":{},"级":{"docs":{},",":{"docs":{},"就":{"docs":{},"不":{"docs":{},"能":{"docs":{},"运":{"docs":{},"行":{"docs":{},"低":{"docs":{},"的":{"docs":{},"优":{"docs":{},"先":{"docs":{},"级":{"docs":{},"。":{"docs":{},"而":{"docs":{},"分":{"docs":{},"时":{"docs":{},"优":{"docs":{},"先":{"docs":{},"级":{"docs":{},"是":{"docs":{},"高":{"docs":{},"低":{"docs":{},"优":{"docs":{},"先":{"docs":{},"级":{"docs":{},"线":{"docs":{},"程":{"docs":{},"都":{"docs":{},"能":{"docs":{},"得":{"docs":{},"到":{"docs":{},"运":{"docs":{},"行":{"docs":{},",":{"docs":{},"只":{"docs":{},"是":{"docs":{},"低":{"docs":{},"优":{"docs":{},"先":{"docs":{},"级":{"docs":{},"线":{"docs":{},"程":{"docs":{},"运":{"docs":{},"行":{"docs":{},"的":{"docs":{},"时":{"docs":{},"间":{"docs":{},"更":{"docs":{},"少":{"docs":{},"而":{"docs":{},"已":{"docs":{},"。":{"docs":{},"优":{"docs":{},"先":{"docs":{},"级":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"使":{"docs":{},"用":{"docs":{},"了":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}},"多":{"docs":{},"了":{"docs":{},"对":{"docs":{},"当":{"docs":{},"前":{"docs":{},"线":{"docs":{},"程":{"docs":{},"的":{"docs":{},"上":{"docs":{},"下":{"docs":{},"文":{"docs":{},"的":{"docs":{},"保":{"docs":{},"存":{"docs":{},"的":{"docs":{},"工":{"docs":{},"作":{"docs":{},",":{"docs":{},"然":{"docs":{},"后":{"docs":{},"切":{"docs":{},"换":{"docs":{},"到":{"docs":{},"下":{"docs":{},"一":{"docs":{},"个":{"docs":{},"线":{"docs":{},"程":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"获":{"docs":{},"取":{"docs":{},"了":{"docs":{},"栈":{"docs":{},"的":{"docs":{},"值":{"docs":{},"后":{"docs":{},",":{"docs":{},"就":{"docs":{},"从":{"docs":{},"栈":{"docs":{},"中":{"docs":{},"恢":{"docs":{},"复":{"docs":{},"寄":{"docs":{},"存":{"docs":{},"器":{"docs":{},"上":{"docs":{},"下":{"docs":{},"文":{"docs":{},",":{"docs":{},"然":{"docs":{},"后":{"docs":{},"调":{"docs":{},"用":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}}}}}},"进":{"docs":{},"行":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},",":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"完":{"docs":{},"串":{"docs":{},"口":{"docs":{},"后":{"docs":{},",":{"docs":{},"就":{"docs":{},"能":{"docs":{},"使":{"docs":{},"用":{"docs":{},"打":{"docs":{},"印":{"docs":{},"功":{"docs":{},"能":{"docs":{},"了":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}}}}},"需":{"docs":{},"要":{"docs":{},"构":{"docs":{},"建":{"docs":{},"的":{"docs":{},"上":{"docs":{},"下":{"docs":{},"文":{"docs":{},"参":{"docs":{},"数":{"docs":{},"是":{"docs":{},"线":{"docs":{},"程":{"docs":{},"的":{"docs":{},"入":{"docs":{},"口":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}},"断":{"docs":{},"是":{"docs":{},"可":{"docs":{},"以":{"docs":{},"全":{"docs":{},"局":{"docs":{},"打":{"docs":{},"开":{"docs":{},"和":{"docs":{},"关":{"docs":{},"闭":{"docs":{},"的":{"docs":{},",":{"docs":{},"打":{"docs":{},"开":{"docs":{},"后":{"docs":{},"才":{"docs":{},"会":{"docs":{},"响":{"docs":{},"应":{"docs":{},"中":{"docs":{},"断":{"docs":{},"。":{"docs":{},"除":{"docs":{},"此":{"docs":{},"之":{"docs":{},"外":{"docs":{},",":{"docs":{},"对":{"docs":{},"于":{"docs":{},"每":{"docs":{},"一":{"docs":{},"个":{"docs":{},"具":{"docs":{},"体":{"docs":{},"的":{"docs":{},"中":{"docs":{},"断":{"docs":{},",":{"docs":{},"都":{"docs":{},"可":{"docs":{},"以":{"docs":{},"打":{"docs":{},"开":{"docs":{},"和":{"docs":{},"关":{"docs":{},"闭":{"docs":{},",":{"docs":{},"在":{"docs":{},"禁":{"docs":{},"止":{"docs":{},"了":{"docs":{},"网":{"docs":{},"卡":{"docs":{},"中":{"docs":{},"断":{"docs":{},"后":{"docs":{},",":{"docs":{},"即":{"docs":{},"使":{"docs":{},"打":{"docs":{},"开":{"docs":{},"了":{"docs":{},"全":{"docs":{},"局":{"docs":{},"中":{"docs":{},"断":{"docs":{},",":{"docs":{},"也":{"docs":{},"收":{"docs":{},"不":{"docs":{},"到":{"docs":{},"网":{"docs":{},"络":{"docs":{},"数":{"docs":{},"据":{"docs":{},"包":{"docs":{},"了":{"docs":{},"。":{"docs":{},"但":{"docs":{},"是":{"docs":{},",":{"docs":{},"异":{"docs":{},"常":{"docs":{},"是":{"docs":{},"不":{"docs":{},"可":{"docs":{},"以":{"docs":{},"屏":{"docs":{},"蔽":{"docs":{},"的":{"docs":{},",":{"docs":{},"异":{"docs":{},"常":{"docs":{},"是":{"docs":{},"来":{"docs":{},"告":{"docs":{},"诉":{"docs":{},"内":{"docs":{},"核":{"docs":{},"出":{"docs":{},"现":{"docs":{},"一":{"docs":{},"些":{"docs":{},"问":{"docs":{},"题":{"docs":{},"了":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"根":{"docs":{},"据":{"docs":{},"具":{"docs":{},"体":{"docs":{},"的":{"docs":{},"异":{"docs":{},"常":{"docs":{},"做":{"docs":{},"处":{"docs":{},"理":{"docs":{},"。":{"docs":{},"有":{"docs":{},"的":{"docs":{},"异":{"docs":{},"常":{"docs":{},"是":{"docs":{},"不":{"docs":{},"可":{"docs":{},"以":{"docs":{},"修":{"docs":{},"复":{"docs":{},"的":{"docs":{},",":{"docs":{},"会":{"docs":{},"导":{"docs":{},"致":{"docs":{},"系":{"docs":{},"统":{"docs":{},"死":{"docs":{},"机":{"docs":{},",":{"docs":{},"有":{"docs":{},"的":{"docs":{},"异":{"docs":{},"常":{"docs":{},"时":{"docs":{},"可":{"docs":{},"以":{"docs":{},"修":{"docs":{},"复":{"docs":{},"的":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},"页":{"docs":{},"故":{"docs":{},"障":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"拿":{"docs":{},"来":{"docs":{},"实":{"docs":{},"现":{"docs":{},"页":{"docs":{},"面":{"docs":{},"延":{"docs":{},"迟":{"docs":{},"映":{"docs":{},"射":{"docs":{},",":{"docs":{"programing-manual/interrupt/irq.html":{"ref":"programing-manual/interrupt/irq.html","tf":0.01694915254237288}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"由":{"docs":{},"处":{"docs":{},"理":{"docs":{},"器":{"docs":{},"支":{"docs":{},"持":{"docs":{},"的":{"docs":{},"一":{"docs":{},"个":{"docs":{},"临":{"docs":{},"时":{"docs":{},"打":{"docs":{},"断":{"docs":{},"当":{"docs":{},"前":{"docs":{},"执":{"docs":{},"行":{"docs":{},"流":{"docs":{},"的":{"docs":{},"功":{"docs":{},"能":{"docs":{},",":{"docs":{},"可":{"docs":{},"分":{"docs":{},"为":{"docs":{},"设":{"docs":{},"备":{"docs":{},"中":{"docs":{},"断":{"docs":{},"和":{"docs":{},"处":{"docs":{},"理":{"docs":{},"器":{"docs":{},"异":{"docs":{},"常":{"docs":{},"。":{"docs":{},"设":{"docs":{},"备":{"docs":{},"中":{"docs":{},"断":{"docs":{},"就":{"docs":{},"是":{"docs":{},"当":{"docs":{},"网":{"docs":{},"卡":{"docs":{},"设":{"docs":{},"备":{"docs":{},"收":{"docs":{},"到":{"docs":{},"数":{"docs":{},"据":{"docs":{},"后":{"docs":{},"会":{"docs":{},"产":{"docs":{},"生":{"docs":{},"一":{"docs":{},"个":{"docs":{},"中":{"docs":{},"断":{"docs":{},",":{"docs":{},"打":{"docs":{},"断":{"docs":{},"处":{"docs":{},"理":{"docs":{},"器":{"docs":{},"当":{"docs":{},"前":{"docs":{},"在":{"docs":{},"处":{"docs":{},"理":{"docs":{},"的":{"docs":{},"事":{"docs":{},"情":{"docs":{},",":{"docs":{},"去":{"docs":{},"处":{"docs":{},"理":{"docs":{},"网":{"docs":{},"络":{"docs":{},"数":{"docs":{},"据":{"docs":{},"包":{"docs":{},"。":{"docs":{},"异":{"docs":{},"常":{"docs":{},"中":{"docs":{},"断":{"docs":{},"就":{"docs":{},"是":{"docs":{},"当":{"docs":{},"处":{"docs":{},"理":{"docs":{},"器":{"docs":{},"执":{"docs":{},"行":{"docs":{},"了":{"docs":{},"一":{"docs":{},"个":{"docs":{},"不":{"docs":{},"存":{"docs":{},"在":{"docs":{},"的":{"docs":{},"指":{"docs":{},"令":{"docs":{},"或":{"docs":{},"者":{"docs":{},"访":{"docs":{},"问":{"docs":{},"了":{"docs":{},"一":{"docs":{},"个":{"docs":{},"没":{"docs":{},"有":{"docs":{},"权":{"docs":{},"限":{"docs":{},"的":{"docs":{},"内":{"docs":{},"存":{"docs":{},"地":{"docs":{},"址":{"docs":{},",":{"docs":{},"处":{"docs":{},"理":{"docs":{},"器":{"docs":{},"就":{"docs":{},"会":{"docs":{},"中":{"docs":{},"断":{"docs":{},"当":{"docs":{},"前":{"docs":{},"的":{"docs":{},"执":{"docs":{},"行":{"docs":{},"流":{"docs":{},",":{"docs":{},"去":{"docs":{},"对":{"docs":{},"异":{"docs":{},"常":{"docs":{},"做":{"docs":{},"一":{"docs":{},"个":{"docs":{},"处":{"docs":{},"理":{"docs":{},",":{"docs":{},"一":{"docs":{},"般":{"docs":{},"都":{"docs":{},"是":{"docs":{"programing-manual/interrupt/irq.html":{"ref":"programing-manual/interrupt/irq.html","tf":0.01694915254237288}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"管":{"docs":{},"理":{"docs":{"programing-manual/interrupt/irq.html":{"ref":"programing-manual/interrupt/irq.html","tf":0.01694915254237288},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.001258917331095258}},"的":{"docs":{},"实":{"docs":{},"现":{"docs":{},"是":{"docs":{},"基":{"docs":{},"于":{"docs":{},"处":{"docs":{},"理":{"docs":{},"器":{"docs":{},"的":{"docs":{},"中":{"docs":{},"断":{"docs":{},"管":{"docs":{},"理":{"docs":{},"机":{"docs":{},"制":{"docs":{},"的":{"docs":{},",":{"docs":{},"不":{"docs":{},"同":{"docs":{},"的":{"docs":{},"架":{"docs":{},"构":{"docs":{},"具":{"docs":{},"体":{"docs":{},"实":{"docs":{},"现":{"docs":{},"机":{"docs":{},"制":{"docs":{},"可":{"docs":{},"能":{"docs":{},"有":{"docs":{},"差":{"docs":{},"别":{"docs":{},",":{"docs":{},"但":{"docs":{},"是":{"docs":{},"在":{"docs":{},"大":{"docs":{},"体":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"上":{"docs":{},"都":{"docs":{},"是":{"docs":{},"一":{"docs":{},"致":{"docs":{},"的":{"docs":{},",":{"docs":{},"因":{"docs":{},"此":{"docs":{},"可":{"docs":{},"以":{"docs":{},"抽":{"docs":{},"象":{"docs":{},"出":{"docs":{},"一":{"docs":{},"套":{"docs":{},"统":{"docs":{},"一":{"docs":{},"的":{"docs":{},"接":{"docs":{},"口":{"docs":{},"来":{"docs":{},"供":{"docs":{},"上":{"docs":{},"层":{"docs":{},"使":{"docs":{},"用":{"docs":{},"。":{"docs":{"programing-manual/interrupt/irq.html":{"ref":"programing-manual/interrupt/irq.html","tf":0.01694915254237288}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"接":{"docs":{},"口":{"docs":{},"对":{"docs":{},"内":{"docs":{},"核":{"docs":{},"以":{"docs":{},"及":{"docs":{},"驱":{"docs":{},"动":{"docs":{},"都":{"docs":{},"是":{"docs":{},"至":{"docs":{},"关":{"docs":{},"重":{"docs":{},"要":{"docs":{},"的":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}},"系":{"docs":{},"统":{"docs":{"programing-manual/interrupt/irq.html":{"ref":"programing-manual/interrupt/irq.html","tf":10}}}},"延":{"docs":{},"迟":{"docs":{},"队":{"docs":{},"列":{"docs":{"programing-manual/interrupt/delay_queue.html":{"ref":"programing-manual/interrupt/delay_queue.html","tf":0.01282051282051282}},"在":{"docs":{},"某":{"docs":{},"个":{"docs":{},"驱":{"docs":{},"动":{"docs":{},"或":{"docs":{},"者":{"docs":{},"内":{"docs":{},"核":{"docs":{},"组":{"docs":{},"件":{"docs":{},"中":{"docs":{},"会":{"docs":{},"进":{"docs":{},"行":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"。":{"docs":{},"当":{"docs":{},"产":{"docs":{},"生":{"docs":{},"中":{"docs":{},"断":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},",":{"docs":{},"在":{"docs":{},"中":{"docs":{},"断":{"docs":{},"处":{"docs":{},"理":{"docs":{},"函":{"docs":{},"数":{"docs":{},"中":{"docs":{},",":{"docs":{},"只":{"docs":{},"对":{"docs":{},"中":{"docs":{},"断":{"docs":{},"产":{"docs":{},"生":{"docs":{},"时":{"docs":{},"的":{"docs":{},"数":{"docs":{},"据":{"docs":{},"进":{"docs":{},"行":{"docs":{},"保":{"docs":{},"存":{"docs":{},",":{"docs":{},"不":{"docs":{},"对":{"docs":{},"中":{"docs":{},"断":{"docs":{},"产":{"docs":{},"生":{"docs":{},"时":{"docs":{},"的":{"docs":{},"数":{"docs":{},"据":{"docs":{},"进":{"docs":{},"行":{"docs":{},"处":{"docs":{},"理":{"docs":{},",":{"docs":{"programing-manual/interrupt/delay_queue.html":{"ref":"programing-manual/interrupt/delay_queue.html","tf":0.01282051282051282}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"是":{"docs":{},"一":{"docs":{},"种":{"docs":{},"延":{"docs":{},"迟":{"docs":{},"处":{"docs":{},"理":{"docs":{},"中":{"docs":{},"断":{"docs":{},"的":{"docs":{},"机":{"docs":{},"制":{"docs":{},",":{"docs":{},"类":{"docs":{},"似":{"docs":{},"于":{"docs":{"programing-manual/interrupt/delay_queue.html":{"ref":"programing-manual/interrupt/delay_queue.html","tf":0.01282051282051282}}}}}}}}}}}}}}}}}}}}}},"机":{"docs":{},"制":{"docs":{},"中":{"docs":{},"的":{"docs":{},"中":{"docs":{},"断":{"docs":{},"下":{"docs":{},"半":{"docs":{},"部":{"docs":{},"分":{"docs":{},",":{"docs":{},"用":{"docs":{},"来":{"docs":{},"进":{"docs":{},"行":{"docs":{},"具":{"docs":{},"体":{"docs":{},"的":{"docs":{},"中":{"docs":{},"断":{"docs":{},"处":{"docs":{},"理":{"docs":{},"。":{"docs":{"programing-manual/interrupt/delay_queue.html":{"ref":"programing-manual/interrupt/delay_queue.html","tf":0.01282051282051282}}}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"要":{"docs":{},"求":{"docs":{},"是":{"docs":{},"快":{"docs":{},"速":{"docs":{},"地":{"docs":{},"响":{"docs":{},"应":{"docs":{},"中":{"docs":{},"断":{"docs":{},",":{"docs":{},"并":{"docs":{},"且":{"docs":{},"是":{"docs":{},"关":{"docs":{},"闭":{"docs":{},"了":{"docs":{},"全":{"docs":{},"局":{"docs":{},"中":{"docs":{},"断":{"docs":{},"的":{"docs":{},",":{"docs":{},"然":{"docs":{},"后":{"docs":{},"回":{"docs":{},"到":{"docs":{},"之":{"docs":{},"前":{"docs":{},"的":{"docs":{},"工":{"docs":{},"作":{"docs":{},"。":{"docs":{},"而":{"docs":{},"延":{"docs":{},"迟":{"docs":{},"队":{"docs":{},"列":{"docs":{},"就":{"docs":{},"是":{"docs":{},"来":{"docs":{},"完":{"docs":{},"成":{"docs":{},"这":{"docs":{},"个":{"docs":{},"工":{"docs":{},"作":{"docs":{},"的":{"docs":{},",":{"docs":{},"产":{"docs":{},"生":{"docs":{},"了":{"docs":{},"中":{"docs":{},"断":{"docs":{},"后":{"docs":{},",":{"docs":{},"只":{"docs":{},"进":{"docs":{},"行":{"docs":{},"最":{"docs":{},"少":{"docs":{},"的":{"docs":{},"工":{"docs":{},"作":{"docs":{},",":{"docs":{"programing-manual/interrupt/delay_queue.html":{"ref":"programing-manual/interrupt/delay_queue.html","tf":0.01282051282051282}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"只":{"docs":{},"需":{"docs":{},"要":{"docs":{},"对":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}},"表":{"docs":{},"地":{"docs":{},"址":{"docs":{},"需":{"docs":{},"要":{"docs":{},"写":{"docs":{},"入":{"docs":{},"管":{"docs":{},"理":{"docs":{},"者":{"docs":{},"模":{"docs":{},"式":{"docs":{},"的":{"docs":{},"向":{"docs":{},"量":{"docs":{},"基":{"docs":{},"址":{"docs":{},"寄":{"docs":{},"存":{"docs":{},"器":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}},"这":{"docs":{},"个":{"docs":{},"频":{"docs":{},"率":{"docs":{},"是":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}},"之":{"docs":{},"间":{"docs":{},"的":{"docs":{},"这":{"docs":{},"部":{"docs":{},"分":{"docs":{},"内":{"docs":{},"存":{"docs":{},"。":{"docs":{},"简":{"docs":{},"单":{"docs":{},"的":{"docs":{},"说":{"docs":{},"就":{"docs":{},"是":{"docs":{},"对":{"docs":{},"一":{"docs":{},"段":{"docs":{},"或":{"docs":{},"者":{"docs":{},"多":{"docs":{},"段":{"docs":{},"空":{"docs":{},"闲":{"docs":{},"的":{"docs":{},"内":{"docs":{},"存":{"docs":{},"地":{"docs":{},"址":{"docs":{},"进":{"docs":{},"行":{"docs":{},"管":{"docs":{},"理":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"进":{"docs":{},"行":{"docs":{},"分":{"docs":{},"配":{"docs":{},"与":{"docs":{},"释":{"docs":{},"放":{"docs":{},",":{"docs":{},"让":{"docs":{},"操":{"docs":{},"作":{"docs":{},"系":{"docs":{},"统":{"docs":{},"去":{"docs":{},"使":{"docs":{},"用":{"docs":{},"。":{"docs":{"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.010869565217391304}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"下":{"docs":{},",":{"docs":{},"最":{"docs":{},"后":{"docs":{},"返":{"docs":{},"回":{"docs":{},"栈":{"docs":{},"低":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}},"中":{"docs":{},"。":{"docs":{},"其":{"docs":{},"他":{"docs":{},"情":{"docs":{},"况":{"docs":{},"(":{"docs":{},"d":{"docs":{},"o":{"docs":{},"c":{"docs":{},"s":{"docs":{},"、":{"docs":{},"c":{"docs":{},"h":{"docs":{},"o":{"docs":{},"r":{"docs":{},"e":{"docs":{},"、":{"docs":{},"s":{"docs":{},"t":{"docs":{},"y":{"docs":{},"l":{"docs":{},"e":{"docs":{},"、":{"docs":{},"r":{"docs":{},"e":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"、":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},")":{"docs":{},"由":{"docs":{},"你":{"docs":{},"决":{"docs":{},"定":{"docs":{},",":{"docs":{},"要":{"docs":{},"不":{"docs":{},"要":{"docs":{},"放":{"docs":{},"入":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"优":{"docs":{},"缺":{"docs":{},"点":{"docs":{"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.010869565217391304}}}},"先":{"docs":{},"级":{"docs":{},"最":{"docs":{},"低":{"docs":{},"。":{"docs":{"programing-manual/interrupt/delay_queue.html":{"ref":"programing-manual/interrupt/delay_queue.html","tf":0.01282051282051282}}}},"高":{"docs":{},",":{"docs":{"programing-manual/interrupt/delay_queue.html":{"ref":"programing-manual/interrupt/delay_queue.html","tf":0.01282051282051282}}}}}}}},"伙":{"docs":{},"伴":{"docs":{},"内":{"docs":{},"存":{"docs":{},"管":{"docs":{},"理":{"docs":{},"算":{"docs":{},"法":{"docs":{},"。":{"docs":{},"为":{"docs":{},"了":{"docs":{},"便":{"docs":{},"于":{"docs":{},"页":{"docs":{},"面":{"docs":{},"的":{"docs":{},"维":{"docs":{},"护":{"docs":{},",":{"docs":{},"将":{"docs":{},"多":{"docs":{},"个":{"docs":{},"页":{"docs":{},"面":{"docs":{},"组":{"docs":{},"成":{"docs":{},"内":{"docs":{},"存":{"docs":{},"块":{"docs":{},",":{"docs":{},"每":{"docs":{},"个":{"docs":{},"内":{"docs":{},"存":{"docs":{},"块":{"docs":{},"都":{"docs":{},"有":{"2":{"docs":{},"的":{"docs":{},"方":{"docs":{},"幂":{"docs":{},"个":{"docs":{},"页":{"docs":{},",":{"docs":{},"方":{"docs":{},"幂":{"docs":{},"的":{"docs":{},"指":{"docs":{},"数":{"docs":{},"被":{"docs":{},"称":{"docs":{},"为":{"docs":{},"阶":{"docs":{},"。":{"docs":{},"在":{"docs":{},"操":{"docs":{},"作":{"docs":{},"内":{"docs":{},"存":{"docs":{},"时":{"docs":{},",":{"docs":{},"经":{"docs":{},"常":{"docs":{},"将":{"docs":{},"这":{"docs":{},"些":{"docs":{},"内":{"docs":{},"存":{"docs":{},"块":{"docs":{},"分":{"docs":{},"成":{"docs":{},"大":{"docs":{},"小":{"docs":{},"相":{"docs":{},"等":{"docs":{},"的":{"docs":{},"两":{"docs":{},"个":{"docs":{},"块":{"docs":{},",":{"docs":{},"分":{"docs":{},"成":{"docs":{},"的":{"docs":{},"两":{"docs":{},"个":{"docs":{},"内":{"docs":{},"存":{"docs":{},"块":{"docs":{},"被":{"docs":{},"称":{"docs":{},"为":{"docs":{},"伙":{"docs":{},"伴":{"docs":{},"块":{"docs":{},",":{"docs":{},"采":{"docs":{},"用":{"docs":{},"一":{"docs":{},"位":{"docs":{},"二":{"docs":{},"进":{"docs":{},"制":{"docs":{},"数":{"docs":{},"来":{"docs":{},"表":{"docs":{},"示":{"docs":{},"它":{"docs":{},"们":{"docs":{},"的":{"docs":{},"伙":{"docs":{},"伴":{"docs":{},"关":{"docs":{},"系":{"docs":{},"。":{"docs":{},"当":{"docs":{},"这":{"docs":{},"个":{"docs":{},"位":{"docs":{},"为":{"1":{"docs":{},",":{"docs":{},"表":{"docs":{},"示":{"docs":{},"其":{"docs":{},"中":{"docs":{},"一":{"docs":{},"块":{"docs":{},"在":{"docs":{},"使":{"docs":{},"用":{"docs":{},";":{"docs":{},"当":{"docs":{},"这":{"docs":{},"个":{"docs":{},"位":{"docs":{},"为":{"0":{"docs":{},",":{"docs":{},"表":{"docs":{},"示":{"docs":{},"两":{"docs":{},"个":{"docs":{},"页":{"docs":{},"面":{"docs":{},"块":{"docs":{},"都":{"docs":{},"空":{"docs":{},"闲":{"docs":{},"或":{"docs":{},"者":{"docs":{},"都":{"docs":{},"在":{"docs":{},"使":{"docs":{},"用":{"docs":{},"。":{"docs":{},"系":{"docs":{},"统":{"docs":{},"根":{"docs":{},"据":{"docs":{},"该":{"docs":{},"位":{"docs":{},"为":{"0":{"docs":{},"或":{"docs":{},"位":{"docs":{},"为":{"1":{"docs":{},"来":{"docs":{},"决":{"docs":{},"定":{"docs":{},"是":{"docs":{},"否":{"docs":{},"使":{"docs":{},"用":{"docs":{},"或":{"docs":{},"者":{"docs":{},"分":{"docs":{},"配":{"docs":{},"该":{"docs":{},"页":{"docs":{},"面":{"docs":{},"块":{"docs":{},"。":{"docs":{},"系":{"docs":{},"统":{"docs":{},"每":{"docs":{},"次":{"docs":{},"分":{"docs":{},"配":{"docs":{},"和":{"docs":{},"回":{"docs":{},"收":{"docs":{},"伙":{"docs":{},"伴":{"docs":{},"块":{"docs":{},"时":{"docs":{},"都":{"docs":{},"要":{"docs":{},"对":{"docs":{},"它":{"docs":{},"们":{"docs":{},"的":{"docs":{},"伙":{"docs":{},"伴":{"docs":{},"位":{"docs":{},"跟":{"1":{"docs":{},"进":{"docs":{},"行":{"docs":{},"异":{"docs":{},"或":{"docs":{},"运":{"docs":{},"算":{"docs":{},"。":{"docs":{},"所":{"docs":{},"谓":{"docs":{},"异":{"docs":{},"或":{"docs":{},"是":{"docs":{},"指":{"docs":{},"刚":{"docs":{},"开":{"docs":{},"始":{"docs":{},"时":{"docs":{},",":{"docs":{},"两":{"docs":{},"个":{"docs":{},"伙":{"docs":{},"伴":{"docs":{},"块":{"docs":{},"都":{"docs":{},"空":{"docs":{},"闲":{"docs":{},",":{"docs":{},"它":{"docs":{},"们":{"docs":{},"的":{"docs":{},"伙":{"docs":{},"伴":{"docs":{},"位":{"docs":{},"为":{"0":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"其":{"docs":{},"中":{"docs":{},"一":{"docs":{},"块":{"docs":{},"被":{"docs":{},"使":{"docs":{},"用":{"docs":{},",":{"docs":{},"异":{"docs":{},"或":{"docs":{},"后":{"docs":{},"得":{"1":{"docs":{},";":{"docs":{},"如":{"docs":{},"果":{"docs":{},"另":{"docs":{},"一":{"docs":{},"块":{"docs":{},"也":{"docs":{},"被":{"docs":{},"使":{"docs":{},"用":{"docs":{},",":{"docs":{},"异":{"docs":{},"或":{"docs":{},"后":{"docs":{},"得":{"0":{"docs":{},";":{"docs":{},"如":{"docs":{},"果":{"docs":{},"前":{"docs":{},"面":{"docs":{},"一":{"docs":{},"块":{"docs":{},"回":{"docs":{},"收":{"docs":{},"了":{"docs":{},"异":{"docs":{},"或":{"docs":{},"后":{"docs":{},"得":{"1":{"docs":{},";":{"docs":{},"如":{"docs":{},"果":{"docs":{},"另":{"docs":{},"一":{"docs":{},"块":{"docs":{},"也":{"docs":{},"回":{"docs":{},"收":{"docs":{},"了":{"docs":{},"异":{"docs":{},"或":{"docs":{},"后":{"docs":{},"得":{"0":{"docs":{},"。":{"docs":{"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.010869565217391304}}}},"docs":{}}}}}}}}}}}}}}}},"docs":{}}}}}}}}}}}}}}}},"docs":{}}}}}}}}}}}}}}}}},"docs":{}}}}}}}}}}}}}}}}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"docs":{}}}}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}},"docs":{}}}}}}}}}}}}}}}}}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"原":{"docs":{},"理":{"docs":{"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.010869565217391304},"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575},"programing-manual/sched/smp.html":{"ref":"programing-manual/sched/smp.html","tf":0.0625},"programing-manual/process/process.html":{"ref":"programing-manual/process/process.html","tf":0.012658227848101266},"programing-manual/process/syscall.html":{"ref":"programing-manual/process/syscall.html","tf":0.03125}}},"子":{"docs":{},"操":{"docs":{},"作":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}},"用":{"docs":{},"于":{"docs":{},"对":{"docs":{},"数":{"docs":{},"据":{"docs":{},"的":{"docs":{},"加":{"docs":{},"减":{"docs":{},"运":{"docs":{},"算":{"docs":{},"不":{"docs":{},"会":{"docs":{},"被":{"docs":{},"打":{"docs":{},"断":{"docs":{},",":{"docs":{},"以":{"docs":{},"及":{"docs":{},"一":{"docs":{},"些":{"docs":{},"原":{"docs":{},"子":{"docs":{},"级":{"docs":{},"别":{"docs":{},"的":{"docs":{},"数":{"docs":{},"据":{"docs":{},"交":{"docs":{},"换":{"docs":{},"等":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"需":{"docs":{},"要":{"docs":{},"实":{"docs":{},"现":{"docs":{},"对":{"docs":{},"数":{"docs":{},"据":{"docs":{},"的":{"docs":{},"原":{"docs":{},"子":{"docs":{},"设":{"docs":{},"置":{"docs":{},",":{"docs":{},"获":{"docs":{},"取":{"docs":{},",":{"docs":{},"加":{"docs":{},"法":{"docs":{},",":{"docs":{},"减":{"docs":{},"法":{"docs":{},",":{"docs":{},"数":{"docs":{},"据":{"docs":{},"交":{"docs":{},"换":{"docs":{},"等":{"docs":{},"。":{"docs":{},"由":{"docs":{},"于":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"另":{"docs":{},"外":{"docs":{},"拆":{"docs":{},"分":{"docs":{},"和":{"docs":{},"合":{"docs":{},"并":{"docs":{},"涉":{"docs":{},"及":{"docs":{},"到":{"docs":{"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.010869565217391304}}}}}}}}}}}},"四":{"docs":{},".":{"docs":{"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.010869565217391304},"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575},"programing-manual/process/process.html":{"ref":"programing-manual/process/process.html","tf":0.012658227848101266},"programing-manual/process/syscall.html":{"ref":"programing-manual/process/syscall.html","tf":0.03125}}},"、":{"docs":{},"接":{"docs":{},"口":{"docs":{"programing-manual/mm/heap.html":{"ref":"programing-manual/mm/heap.html","tf":0.014084507042253521},"programing-manual/mm/vmspace.html":{"ref":"programing-manual/mm/vmspace.html","tf":0.015384615384615385},"programing-manual/interrupt/irq.html":{"ref":"programing-manual/interrupt/irq.html","tf":0.01694915254237288},"programing-manual/interrupt/delay_queue.html":{"ref":"programing-manual/interrupt/delay_queue.html","tf":0.01282051282051282},"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.010752688172043012}}}},"移":{"docs":{},"植":{"docs":{},"总":{"docs":{},"结":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}},"实":{"docs":{},"现":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},"有":{"docs":{},"使":{"docs":{},"用":{"docs":{},"到":{"docs":{},"。":{"docs":{"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.010869565217391304}}}}}}}}}},"输":{"docs":{},"出":{"docs":{},",":{"docs":{},"也":{"docs":{},"可":{"docs":{},"以":{"docs":{},"通":{"docs":{},"过":{"docs":{},"自":{"docs":{},"己":{"docs":{},"操":{"docs":{},"作":{"docs":{},"寄":{"docs":{},"存":{"docs":{},"器":{"docs":{},"实":{"docs":{},"现":{"docs":{},"。":{"docs":{},"在":{"docs":{},"早":{"docs":{},"期":{"docs":{},",":{"docs":{},"调":{"docs":{},"用":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}},"尽":{"docs":{},"管":{"docs":{},"伙":{"docs":{},"伴":{"docs":{},"内":{"docs":{},"存":{"docs":{},"算":{"docs":{},"法":{"docs":{},"在":{"docs":{},"内":{"docs":{},"存":{"docs":{},"碎":{"docs":{},"片":{"docs":{},"问":{"docs":{},"题":{"docs":{},"上":{"docs":{},"已":{"docs":{},"经":{"docs":{},"做":{"docs":{},"的":{"docs":{},"相":{"docs":{},"当":{"docs":{},"出":{"docs":{},"色":{"docs":{},",":{"docs":{},"但":{"docs":{},"是":{"docs":{},"该":{"docs":{},"算":{"docs":{},"法":{"docs":{},"中":{"docs":{},",":{"docs":{},"一":{"docs":{},"个":{"docs":{},"很":{"docs":{},"小":{"docs":{},"的":{"docs":{},"块":{"docs":{},"往":{"docs":{},"往":{"docs":{},"会":{"docs":{},"阻":{"docs":{},"碍":{"docs":{},"一":{"docs":{},"个":{"docs":{},"大":{"docs":{},"块":{"docs":{},"的":{"docs":{},"合":{"docs":{},"并":{"docs":{},",":{"docs":{},"一":{"docs":{},"个":{"docs":{},"系":{"docs":{},"统":{"docs":{},"中":{"docs":{},",":{"docs":{},"对":{"docs":{},"内":{"docs":{},"存":{"docs":{},"块":{"docs":{},"的":{"docs":{},"分":{"docs":{},"配":{"docs":{},",":{"docs":{},"大":{"docs":{},"小":{"docs":{},"是":{"docs":{},"随":{"docs":{},"机":{"docs":{},"的":{"docs":{},",":{"docs":{},"一":{"docs":{},"片":{"docs":{},"内":{"docs":{},"存":{"docs":{},"中":{"docs":{},"仅":{"docs":{},"一":{"docs":{},"个":{"docs":{},"小":{"docs":{},"的":{"docs":{},"内":{"docs":{},"存":{"docs":{},"块":{"docs":{},"没":{"docs":{},"有":{"docs":{},"释":{"docs":{},"放":{"docs":{},",":{"docs":{},"旁":{"docs":{},"边":{"docs":{},"两":{"docs":{},"个":{"docs":{},"大":{"docs":{},"的":{"docs":{},"就":{"docs":{},"不":{"docs":{},"能":{"docs":{},"合":{"docs":{},"并":{"docs":{},"。":{"docs":{"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.010869565217391304}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"所":{"docs":{},"以":{"docs":{},",":{"4":{"docs":{},"k":{"docs":{},"b":{"docs":{},"也":{"docs":{},"就":{"docs":{},"延":{"docs":{},"续":{"docs":{},"到":{"6":{"4":{"docs":{},"位":{"docs":{},"系":{"docs":{},"统":{"docs":{},"了":{"docs":{},"。":{"docs":{},"所":{"docs":{},"以":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"使":{"docs":{},"用":{"4":{"docs":{},"k":{"docs":{},"b":{"docs":{},"作":{"docs":{},"为":{"docs":{},"一":{"docs":{},"个":{"docs":{},"页":{"docs":{},"面":{"docs":{},"的":{"docs":{},"大":{"docs":{},"小":{"docs":{},"。":{"docs":{"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.010869565217391304}}}}}}}}}}}}}}},"docs":{}}}}}}}}}}}}}},"docs":{}},"docs":{}}}}}}}}},"docs":{},"分":{"docs":{},"配":{"docs":{},"和":{"docs":{},"释":{"docs":{},"放":{"docs":{},"的":{"docs":{},"基":{"docs":{},"础":{"docs":{},"单":{"docs":{},"位":{"docs":{},"就":{"docs":{},"是":{"docs":{},"页":{"docs":{},"面":{"docs":{},"。":{"docs":{},"通":{"docs":{},"常":{"docs":{},"来":{"docs":{},"说":{"docs":{},",":{"docs":{},"页":{"docs":{},"面":{"docs":{},"大":{"docs":{},"小":{"docs":{},"是":{"4":{"docs":{},"k":{"docs":{},"b":{"docs":{},",":{"docs":{},"也":{"docs":{},"可":{"docs":{},"以":{"docs":{},"更":{"docs":{},"大":{"docs":{},",":{"docs":{},"但":{"docs":{},"是":{"docs":{},"由":{"docs":{},"于":{"4":{"docs":{},"k":{"docs":{},"b":{"docs":{},"在":{"3":{"2":{"docs":{},"位":{"docs":{},"操":{"docs":{},"作":{"docs":{},"系":{"docs":{},"统":{"docs":{},"中":{"docs":{},"可":{"docs":{},"以":{"docs":{},"很":{"docs":{},"好":{"docs":{},"地":{"docs":{},"对":{"4":{"docs":{},"g":{"docs":{},"b":{"docs":{},"内":{"docs":{},"存":{"docs":{},"进":{"docs":{},"行":{"docs":{},"映":{"docs":{},"射":{"docs":{},",":{"docs":{"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.010869565217391304}}}}}}}}}}}},"docs":{}}}}}}}}}}}}}},"docs":{}},"docs":{}}}}},"docs":{}}}}}}}}}}}}}}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}},"需":{"docs":{},"要":{"docs":{},"在":{"docs":{},"内":{"docs":{},"核":{"docs":{},"中":{"docs":{},"实":{"docs":{},"现":{"docs":{},"同":{"docs":{},"样":{"docs":{},"的":{"docs":{},"功":{"docs":{},"能":{"docs":{},",":{"docs":{},"在":{"docs":{"programing-manual/mm/heap.html":{"ref":"programing-manual/mm/heap.html","tf":0.014084507042253521}}}}}}}}}}}}}}}}}},"需":{"docs":{},"要":{"docs":{},"计":{"docs":{},"算":{"docs":{},"出":{"docs":{},"产":{"docs":{},"生":{"docs":{},"一":{"docs":{},"次":{"docs":{},"中":{"docs":{},"断":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"间":{"docs":{},"隔":{"docs":{},"多":{"docs":{},"少":{"docs":{},"个":{"docs":{},"t":{"docs":{},"i":{"docs":{},"c":{"docs":{},"k":{"docs":{},"即":{"docs":{},"可":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"有":{"docs":{},"需":{"docs":{},"要":{"docs":{},"对":{"docs":{},"接":{"docs":{},"的":{"docs":{},"接":{"docs":{},"口":{"docs":{},"都":{"docs":{},"存":{"docs":{},"放":{"docs":{},"在":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}},"把":{"docs":{},"内":{"docs":{},"核":{"docs":{},"加":{"docs":{},"载":{"docs":{},"到":{"docs":{},"内":{"docs":{},"核":{"docs":{},"中":{"docs":{},",":{"docs":{},"然":{"docs":{},"后":{"docs":{},"跳":{"docs":{},"转":{"docs":{},"进":{"docs":{},"去":{"docs":{},"执":{"docs":{},"行":{"docs":{},"。":{"docs":{"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.010869565217391304}}}}}}}}}}}}}}}}}}}}},"接":{"docs":{},"口":{"docs":{"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.010869565217391304},"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575},"programing-manual/process/process.html":{"ref":"programing-manual/process/process.html","tf":0.012658227848101266},"programing-manual/process/syscall.html":{"ref":"programing-manual/process/syscall.html","tf":0.03125}}}},"有":{"docs":{},"必":{"docs":{},"要":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},",":{"docs":{},"也":{"docs":{},"会":{"docs":{},"在":{"docs":{},"需":{"docs":{},"要":{"docs":{},"物":{"docs":{},"理":{"docs":{},"内":{"docs":{},"存":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},",":{"docs":{},"直":{"docs":{},"接":{"docs":{},"调":{"docs":{},"用":{"docs":{},"该":{"docs":{},"分":{"docs":{},"配":{"docs":{},"。":{"docs":{"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.010869565217391304}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},",":{"docs":{},"当":{"docs":{},"一":{"docs":{},"个":{"docs":{},"页":{"docs":{},"面":{"docs":{},"被":{"docs":{},"多":{"docs":{},"次":{"docs":{},"使":{"docs":{},"用":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"去":{"docs":{},"增":{"docs":{},"加":{"docs":{},"其":{"docs":{},"引":{"docs":{},"用":{"docs":{},"计":{"docs":{},"数":{"docs":{},",":{"docs":{},"来":{"docs":{},"避":{"docs":{},"免":{"docs":{},"被":{"docs":{},"释":{"docs":{},"放":{"docs":{},"掉":{"docs":{},"。":{"docs":{"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.010869565217391304}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"时":{"docs":{},"候":{"docs":{},"需":{"docs":{},"要":{"docs":{},"终":{"docs":{},"止":{"docs":{},"某":{"docs":{},"个":{"docs":{},"线":{"docs":{},"程":{"docs":{},"的":{"docs":{},"运":{"docs":{},"行":{"docs":{},",":{"docs":{},"就":{"docs":{},"需":{"docs":{},"要":{"docs":{},"使":{"docs":{},"用":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}}}}}}}}}}}}}}}},"创":{"docs":{},"建":{"docs":{},"工":{"docs":{},"作":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"就":{"docs":{},"有":{"docs":{},"销":{"docs":{},"毁":{"docs":{},"工":{"docs":{},"作":{"docs":{},",":{"docs":{},"只":{"docs":{},"需":{"docs":{},"要":{"docs":{},"传":{"docs":{},"入":{"docs":{},"工":{"docs":{},"作":{"docs":{},"对":{"docs":{},"象":{"docs":{},"的":{"docs":{},"地":{"docs":{},"址":{"docs":{},"即":{"docs":{},"可":{"docs":{},"。":{"docs":{"programing-manual/interrupt/delay_queue.html":{"ref":"programing-manual/interrupt/delay_queue.html","tf":0.01282051282051282}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"一":{"docs":{},"个":{"docs":{},"定":{"docs":{},"时":{"docs":{},"器":{"docs":{},"链":{"docs":{},"表":{"docs":{},"来":{"docs":{},"记":{"docs":{},"录":{"docs":{},"所":{"docs":{},"有":{"docs":{},"等":{"docs":{},"待":{"docs":{},"超":{"docs":{},"时":{"docs":{},"的":{"docs":{},"定":{"docs":{},"时":{"docs":{},"器":{"docs":{},",":{"docs":{},"值":{"docs":{},"得":{"docs":{},"注":{"docs":{},"意":{"docs":{},"的":{"docs":{},"是":{"docs":{},",":{"docs":{},"它":{"docs":{},"们":{"docs":{},"是":{"docs":{},"通":{"docs":{},"过":{"docs":{},"线":{"docs":{},"性":{"docs":{},"的":{"docs":{},"方":{"docs":{},"式":{"docs":{},"插":{"docs":{},"入":{"docs":{},"到":{"docs":{},"链":{"docs":{},"表":{"docs":{},"中":{"docs":{},"的":{"docs":{},"。":{"docs":{"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.010752688172043012}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"例":{"docs":{},"外":{"docs":{},",":{"docs":{},"就":{"docs":{},"是":{"docs":{},"如":{"docs":{},"果":{"docs":{},"遇":{"docs":{},"到":{"docs":{},"循":{"docs":{},"环":{"docs":{},"函":{"docs":{},"数":{"docs":{},",":{"docs":{},"里":{"docs":{},"面":{"docs":{},"不":{"docs":{},"会":{"docs":{},"执":{"docs":{},"行":{"docs":{},"代":{"docs":{},"码":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},",":{"docs":{},"括":{"docs":{},"号":{"docs":{},"就":{"docs":{},"直":{"docs":{},"接":{"docs":{},"写":{"docs":{},"在":{"docs":{},"右":{"docs":{},"边":{"docs":{},"。":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"两":{"docs":{},"个":{"docs":{},"注":{"docs":{},"意":{"docs":{},"点":{"docs":{},":":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}}}}}},"来":{"docs":{},"管":{"docs":{},"理":{"docs":{},"一":{"docs":{},"段":{"docs":{},"连":{"docs":{},"续":{"docs":{},"的":{"docs":{},"物":{"docs":{},"理":{"docs":{},"内":{"docs":{},"存":{"docs":{},"。":{"docs":{},"需":{"docs":{},"要":{"docs":{},"制":{"docs":{},"定":{"docs":{},"物":{"docs":{},"理":{"docs":{},"内":{"docs":{},"存":{"docs":{},"地":{"docs":{},"址":{"docs":{},"和":{"docs":{},"物":{"docs":{},"理":{"docs":{},"内":{"docs":{},"存":{"docs":{},"大":{"docs":{},"小":{"docs":{},"。":{"docs":{"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.010869565217391304}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"动":{"docs":{},"态":{"docs":{},"地":{"docs":{},"分":{"docs":{},"配":{"docs":{},"内":{"docs":{},"存":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},",":{"docs":{},"对":{"docs":{},"于":{"docs":{},"内":{"docs":{},"核":{"docs":{},"来":{"docs":{},"说":{"docs":{},",":{"docs":{},"也":{"docs":{},"需":{"docs":{},"要":{"docs":{},"这":{"docs":{},"样":{"docs":{},"的":{"docs":{},"功":{"docs":{},"能":{"docs":{},"。":{"docs":{"programing-manual/mm/heap.html":{"ref":"programing-manual/mm/heap.html","tf":0.014084507042253521}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"处":{"docs":{},"理":{"docs":{},"工":{"docs":{},"作":{"docs":{"programing-manual/interrupt/delay_queue.html":{"ref":"programing-manual/interrupt/delay_queue.html","tf":0.01282051282051282}}}}}},"进":{"docs":{},"行":{"docs":{},"超":{"docs":{},"时":{"docs":{},"。":{"docs":{"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.010752688172043012}}}}}}}},"算":{"docs":{},"法":{"docs":{},"中":{"docs":{},"有":{"docs":{},"一":{"docs":{},"定":{"docs":{},"的":{"docs":{},"浪":{"docs":{},"费":{"docs":{},"现":{"docs":{},"象":{"docs":{},",":{"docs":{},"伙":{"docs":{},"伴":{"docs":{},"算":{"docs":{},"法":{"docs":{},"是":{"docs":{},"按":{"2":{"docs":{},"的":{"docs":{},"幂":{"docs":{},"次":{"docs":{},"方":{"docs":{},"大":{"docs":{},"小":{"docs":{},"进":{"docs":{},"行":{"docs":{},"分":{"docs":{},"配":{"docs":{},"内":{"docs":{},"存":{"docs":{},"块":{"docs":{},",":{"docs":{},"当":{"docs":{},"然":{"docs":{},"这":{"docs":{},"样":{"docs":{},"做":{"docs":{},"是":{"docs":{},"有":{"docs":{},"原":{"docs":{},"因":{"docs":{},"的":{"docs":{},",":{"docs":{},"即":{"docs":{},"为":{"docs":{},"了":{"docs":{},"避":{"docs":{},"免":{"docs":{},"把":{"docs":{},"大":{"docs":{},"的":{"docs":{},"内":{"docs":{},"存":{"docs":{},"块":{"docs":{},"拆":{"docs":{},"的":{"docs":{},"太":{"docs":{},"碎":{"docs":{},",":{"docs":{},"更":{"docs":{},"重":{"docs":{},"要":{"docs":{},"的":{"docs":{},"是":{"docs":{},"使":{"docs":{},"分":{"docs":{},"配":{"docs":{},"和":{"docs":{},"释":{"docs":{},"放":{"docs":{},"过":{"docs":{},"程":{"docs":{},"迅":{"docs":{},"速":{"docs":{},"。":{"docs":{},"但":{"docs":{},"是":{"docs":{},"他":{"docs":{},"也":{"docs":{},"带":{"docs":{},"来":{"docs":{},"了":{"docs":{},"不":{"docs":{},"利":{"docs":{},"的":{"docs":{},"一":{"docs":{},"面":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"所":{"docs":{},"需":{"docs":{},"内":{"docs":{},"存":{"docs":{},"大":{"docs":{},"小":{"docs":{},"不":{"docs":{},"是":{"2":{"docs":{},"的":{"docs":{},"幂":{"docs":{},"次":{"docs":{},"方":{"docs":{},",":{"docs":{},"就":{"docs":{},"会":{"docs":{},"有":{"docs":{},"部":{"docs":{},"分":{"docs":{},"页":{"docs":{},"面":{"docs":{},"浪":{"docs":{},"费":{"docs":{},"。":{"docs":{},"有":{"docs":{},"时":{"docs":{},"还":{"docs":{},"很":{"docs":{},"严":{"docs":{},"重":{"docs":{},"。":{"docs":{},"比":{"docs":{},"如":{"docs":{},"原":{"docs":{},"来":{"docs":{},"是":{"1":{"0":{"2":{"4":{"docs":{},"个":{"docs":{},"块":{"docs":{},",":{"docs":{},"申":{"docs":{},"请":{"docs":{},"了":{"1":{"6":{"docs":{},"个":{"docs":{},"块":{"docs":{},",":{"docs":{},"再":{"docs":{},"申":{"docs":{},"请":{"6":{"0":{"0":{"docs":{},"个":{"docs":{},"块":{"docs":{},"就":{"docs":{},"申":{"docs":{},"请":{"docs":{},"不":{"docs":{},"到":{"docs":{},"了":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"已":{"docs":{},"经":{"docs":{},"被":{"docs":{},"分":{"docs":{},"割":{"docs":{},"了":{"docs":{},"。":{"docs":{"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.010869565217391304}}}}}}}}}}}}}}}}}}}}},"docs":{}},"docs":{}},"docs":{}}}}}}}},"docs":{}},"docs":{}}}}}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"docs":{}}}}}}}}}}}}}}}},",":{"docs":{},"每":{"docs":{},"个":{"docs":{},"小":{"docs":{},"的":{"docs":{},"对":{"docs":{},"象":{"docs":{},"都":{"docs":{},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{},"对":{"docs":{},"应":{"docs":{},"的":{"docs":{},"链":{"docs":{},"表":{"docs":{},"来":{"docs":{},"管":{"docs":{},"理":{"docs":{},"内":{"docs":{},"存":{"docs":{},"对":{"docs":{},"象":{"docs":{},",":{"docs":{},"分":{"docs":{},"配":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},"先":{"docs":{},"去":{"docs":{},"链":{"docs":{},"表":{"docs":{},"上":{"docs":{},"获":{"docs":{},"取":{"docs":{},"对":{"docs":{},"象":{"docs":{},",":{"docs":{"programing-manual/mm/heap.html":{"ref":"programing-manual/mm/heap.html","tf":0.014084507042253521}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"具":{"docs":{},"体":{"docs":{},"实":{"docs":{},"现":{"docs":{},"不":{"docs":{},"进":{"docs":{},"行":{"docs":{},"讲":{"docs":{},"解":{"docs":{},",":{"docs":{},"除":{"docs":{},"非":{"docs":{},"你":{"docs":{},"需":{"docs":{},"要":{"docs":{},"来":{"docs":{},"优":{"docs":{},"化":{"docs":{},"这":{"docs":{},"部":{"docs":{},"分":{"docs":{},"代":{"docs":{},"码":{"docs":{},",":{"docs":{},"才":{"docs":{},"需":{"docs":{},"要":{"docs":{},"了":{"docs":{},"解":{"docs":{},"到":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"只":{"docs":{},"是":{"docs":{},"去":{"docs":{},"使":{"docs":{},"用":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"就":{"docs":{},"只":{"docs":{},"需":{"docs":{},"要":{"docs":{},"熟":{"docs":{},"悉":{"docs":{},"接":{"docs":{},"口":{"docs":{},"即":{"docs":{},"可":{"docs":{},"。":{"docs":{"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.010869565217391304}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"系":{"docs":{},"统":{"docs":{},"中":{"docs":{},"分":{"docs":{},"配":{"docs":{},"的":{"docs":{},"页":{"docs":{},"面":{"docs":{},"。":{"docs":{"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.010869565217391304}}}}}}}}},"调":{"docs":{},"用":{"docs":{"programing-manual/process/syscall.html":{"ref":"programing-manual/process/syscall.html","tf":10.03125}},"是":{"docs":{},"指":{"docs":{},"用":{"docs":{},"户":{"docs":{},"态":{"docs":{},"程":{"docs":{},"序":{"docs":{},"通":{"docs":{},"过":{"docs":{},"特":{"docs":{},"殊":{"docs":{},"的":{"docs":{},"指":{"docs":{},"令":{"docs":{},"陷":{"docs":{},"入":{"docs":{},"到":{"docs":{},"内":{"docs":{},"核":{"docs":{},"态":{"docs":{},",":{"docs":{},"执":{"docs":{},"行":{"docs":{},"内":{"docs":{},"核":{"docs":{},"态":{"docs":{},"提":{"docs":{},"供":{"docs":{},"的":{"docs":{},"服":{"docs":{},"务":{"docs":{},"程":{"docs":{},"序":{"docs":{},",":{"docs":{},"然":{"docs":{},"后":{"docs":{},"再":{"docs":{},"返":{"docs":{},"回":{"docs":{},"到":{"docs":{},"用":{"docs":{},"户":{"docs":{},"态":{"docs":{},"。":{"docs":{"programing-manual/process/syscall.html":{"ref":"programing-manual/process/syscall.html","tf":0.03125}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"实":{"docs":{},"现":{"docs":{},",":{"docs":{},"是":{"docs":{},"基":{"docs":{},"于":{"docs":{},"特":{"docs":{},"权":{"docs":{},"级":{"docs":{},"切":{"docs":{},"换":{"docs":{},"指":{"docs":{},"令":{"docs":{},"实":{"docs":{},"现":{"docs":{},"的":{"docs":{},",":{"docs":{},"一":{"docs":{},"般":{"docs":{},"都":{"docs":{},"是":{"docs":{},"中":{"docs":{},"断":{"docs":{},"或":{"docs":{},"者":{"docs":{},"异":{"docs":{},"常":{"docs":{},"。":{"docs":{},"用":{"docs":{},"户":{"docs":{},"态":{"docs":{},"通":{"docs":{},"过":{"docs":{},"调":{"docs":{},"用":{"docs":{},"这":{"docs":{},"些":{"docs":{},"指":{"docs":{},"令":{"docs":{},",":{"docs":{},"就":{"docs":{},"会":{"docs":{},"产":{"docs":{},"生":{"docs":{},"一":{"docs":{},"个":{"docs":{},"中":{"docs":{},"断":{"docs":{},"或":{"docs":{},"者":{"docs":{},"异":{"docs":{},"常":{"docs":{},",":{"docs":{},"处":{"docs":{},"理":{"docs":{},"器":{"docs":{},"会":{"docs":{},"去":{"docs":{},"中":{"docs":{},"断":{"docs":{},"表":{"docs":{},"中":{"docs":{},"查":{"docs":{},"找":{"docs":{},"系":{"docs":{},"统":{"docs":{},"调":{"docs":{},"用":{"docs":{},"指":{"docs":{},"令":{"docs":{},"对":{"docs":{},"应":{"docs":{},"的":{"docs":{},"处":{"docs":{},"理":{"docs":{},"函":{"docs":{},"数":{"docs":{},",":{"docs":{},"然":{"docs":{},"后":{"docs":{},"就":{"docs":{},"根":{"docs":{},"据":{"docs":{},"系":{"docs":{},"统":{"docs":{},"调":{"docs":{},"用":{"docs":{},"的":{"docs":{"programing-manual/process/syscall.html":{"ref":"programing-manual/process/syscall.html","tf":0.03125}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"表":{"docs":{},"是":{"docs":{},"在":{"docs":{},"内":{"docs":{},"核":{"docs":{},"固":{"docs":{},"定":{"docs":{},"下":{"docs":{},"来":{"docs":{},"的":{"docs":{},",":{"docs":{},"不":{"docs":{},"同":{"docs":{},"的":{"docs":{},"架":{"docs":{},"构":{"docs":{},"只":{"docs":{},"要":{"docs":{},"根":{"docs":{},"据":{"docs":{},"固":{"docs":{},"定":{"docs":{},"的":{"docs":{"programing-manual/process/syscall.html":{"ref":"programing-manual/process/syscall.html","tf":0.03125}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"较":{"docs":{},"多":{"docs":{},"的":{"docs":{},"链":{"docs":{},"表":{"docs":{},"和":{"docs":{},"位":{"docs":{},"图":{"docs":{},"操":{"docs":{},"作":{"docs":{},",":{"docs":{},"开":{"docs":{},"销":{"docs":{},"还":{"docs":{},"是":{"docs":{},"比":{"docs":{},"较":{"docs":{},"大":{"docs":{},"的":{"docs":{},"。":{"docs":{"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.010869565217391304}}}}}}}}}}}}}}}}}}}}}},"这":{"3":{"docs":{},"个":{"docs":{},"接":{"docs":{},"口":{"docs":{},"都":{"docs":{},"是":{"docs":{},"对":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}},"docs":{},"样":{"docs":{},"的":{"docs":{},"话":{"docs":{},",":{"docs":{},"内":{"docs":{},"核":{"docs":{},"也":{"docs":{},"就":{"docs":{},"占":{"docs":{},"用":{"docs":{},"了":{"docs":{},"一":{"docs":{},"部":{"docs":{},"分":{"docs":{},"的":{"docs":{},"内":{"docs":{},"存":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"我":{"docs":{},"们":{"docs":{},"应":{"docs":{},"该":{"docs":{},"去":{"docs":{},"管":{"docs":{},"理":{"docs":{},"哪":{"docs":{},"部":{"docs":{},"分":{"docs":{},"内":{"docs":{},"存":{"docs":{},"呢":{"docs":{},"?":{"docs":{"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.010869565217391304}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"么":{"docs":{},"做":{"docs":{},"的":{"docs":{},"目":{"docs":{},"的":{"docs":{},"是":{"docs":{},"为":{"docs":{},"了":{"docs":{},"避":{"docs":{},"免":{"docs":{},"用":{"docs":{},"户":{"docs":{},"恶":{"docs":{},"意":{"docs":{},"程":{"docs":{},"序":{"docs":{},"对":{"docs":{},"系":{"docs":{},"统":{"docs":{},"的":{"docs":{},"损":{"docs":{},"坏":{"docs":{},",":{"docs":{},"对":{"docs":{},"设":{"docs":{},"备":{"docs":{},"进":{"docs":{},"行":{"docs":{},"恶":{"docs":{},"意":{"docs":{},"操":{"docs":{},"作":{"docs":{},"。":{"docs":{},"于":{"docs":{},"是":{"docs":{},"用":{"docs":{},"户":{"docs":{},"态":{"docs":{},"核":{"docs":{},"与":{"docs":{},"内":{"docs":{},"核":{"docs":{},"态":{"docs":{},"之":{"docs":{},"间":{"docs":{},"的":{"docs":{},"接":{"docs":{},"口":{"docs":{},"就":{"docs":{},"出":{"docs":{},"现":{"docs":{},"了":{"docs":{},",":{"docs":{},"它":{"docs":{},"就":{"docs":{},"是":{"docs":{},"系":{"docs":{},"统":{"docs":{},"调":{"docs":{},"用":{"docs":{},"。":{"docs":{"programing-manual/process/syscall.html":{"ref":"programing-manual/process/syscall.html","tf":0.03125}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"个":{"docs":{},"符":{"docs":{},"号":{"docs":{},",":{"docs":{},"因":{"docs":{},"此":{"docs":{},"会":{"docs":{},"进":{"docs":{},"入":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}},"是":{"docs":{},"操":{"docs":{},"作":{"docs":{},"需":{"docs":{},"要":{"docs":{},"通":{"docs":{},"过":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}},"里":{"docs":{},"只":{"docs":{},"需":{"docs":{},"要":{"docs":{},"调":{"docs":{},"用":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}},"里":{"docs":{},"面":{"docs":{},"分":{"docs":{},"配":{"docs":{"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.010869565217391304}}}},"释":{"docs":{},"放":{"docs":{},"某":{"docs":{},"个":{"docs":{},"地":{"docs":{},"址":{"docs":{},"指":{"docs":{},"针":{"docs":{},",":{"docs":{},"该":{"docs":{},"指":{"docs":{},"针":{"docs":{},"必":{"docs":{},"须":{"docs":{},"是":{"docs":{},"从":{"docs":{"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.010869565217391304}}}}}}}}}}}}}}}}}},",":{"docs":{},"它":{"docs":{},"们":{"docs":{},"是":{"docs":{"programing-manual/mm/heap.html":{"ref":"programing-manual/mm/heap.html","tf":0.014084507042253521}}}}}}}},"页":{"docs":{},"面":{"docs":{},"分":{"docs":{},"配":{"docs":{},"函":{"docs":{},"数":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"从":{"docs":{},"一":{"docs":{},"个":{"docs":{"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.010869565217391304}}}}}}}}}}}},"释":{"docs":{},"放":{"docs":{},"函":{"docs":{},"数":{"docs":{},",":{"docs":{},"从":{"docs":{},"一":{"docs":{},"个":{"docs":{"programing-manual/mm/buddy.html":{"ref":"programing-manual/mm/buddy.html","tf":0.010869565217391304}}}}}}}}}}},"表":{"docs":{},"项":{"docs":{},"映":{"docs":{},"射":{"docs":{},"到":{"docs":{},"内":{"docs":{},"核":{"docs":{},",":{"docs":{},"并":{"docs":{},"设":{"docs":{},"置":{"docs":{},"权":{"docs":{},"限":{"docs":{},"为":{"docs":{},"内":{"docs":{},"核":{"docs":{},"才":{"docs":{},"能":{"docs":{},"访":{"docs":{},"问":{"docs":{},",":{"docs":{},"这":{"docs":{},"样":{"docs":{},"就":{"docs":{},"能":{"docs":{},"实":{"docs":{},"现":{"docs":{},"切":{"docs":{},"换":{"docs":{"programing-manual/process/process.html":{"ref":"programing-manual/process/process.html","tf":0.012658227848101266}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"去":{"docs":{},"分":{"docs":{},"配":{"docs":{},"内":{"docs":{},"存":{"docs":{},"。":{"docs":{"programing-manual/mm/heap.html":{"ref":"programing-manual/mm/heap.html","tf":0.014084507042253521}}}}}}},"释":{"docs":{},"放":{"docs":{},"内":{"docs":{},"存":{"docs":{},"。":{"docs":{"programing-manual/mm/heap.html":{"ref":"programing-manual/mm/heap.html","tf":0.014084507042253521}}}}}}},"终":{"docs":{},"止":{"docs":{},"线":{"docs":{},"程":{"docs":{},",":{"docs":{},"传":{"docs":{},"入":{"docs":{},"线":{"docs":{},"程":{"docs":{},"指":{"docs":{},"针":{"docs":{},"即":{"docs":{},"可":{"docs":{},"。":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}}}}}}}}}}},"实":{"docs":{},"现":{"docs":{},",":{"docs":{},"而":{"docs":{},"获":{"docs":{},"取":{"docs":{},"操":{"docs":{},"作":{"docs":{},"可":{"docs":{},"以":{"docs":{},"直":{"docs":{},"接":{"docs":{},"通":{"docs":{},"过":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}},"和":{"docs":{"programing-manual/mm/heap.html":{"ref":"programing-manual/mm/heap.html","tf":0.028169014084507043},"programing-manual/interrupt/irq.html":{"ref":"programing-manual/interrupt/irq.html","tf":0.01694915254237288},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.001678556441460344}},"加":{"docs":{},"入":{"docs":{},"延":{"docs":{},"迟":{"docs":{},"队":{"docs":{},"列":{"docs":{},"相":{"docs":{},"反":{"docs":{},",":{"docs":{},"有":{"docs":{},"离":{"docs":{},"开":{"docs":{},"延":{"docs":{},"迟":{"docs":{},"队":{"docs":{},"列":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"和":{"docs":{},"加":{"docs":{},"入":{"docs":{},"的":{"docs":{},"参":{"docs":{},"数":{"docs":{},"一":{"docs":{},"样":{"docs":{},",":{"docs":{},"只":{"docs":{},"是":{"docs":{},"意":{"docs":{},"思":{"docs":{},"相":{"docs":{},"反":{"docs":{},"而":{"docs":{},"已":{"docs":{},"。":{"docs":{"programing-manual/interrupt/delay_queue.html":{"ref":"programing-manual/interrupt/delay_queue.html","tf":0.01282051282051282}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"禁":{"docs":{},"用":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}}},"线":{"docs":{},"程":{"docs":{},"结":{"docs":{},"束":{"docs":{},"时":{"docs":{},"执":{"docs":{},"行":{"docs":{},"的":{"docs":{},"函":{"docs":{},"数":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}},"裸":{"docs":{},"机":{"docs":{},"开":{"docs":{},"发":{"docs":{},"种":{"docs":{},",":{"docs":{},"很":{"docs":{},"多":{"docs":{},"时":{"docs":{},"候":{"docs":{},"都":{"docs":{},"是":{"docs":{},"直":{"docs":{},"接":{"docs":{},"使":{"docs":{},"用":{"docs":{},"机":{"docs":{},"器":{"docs":{},"模":{"docs":{},"式":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}}},"对":{"docs":{},"于":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"中":{"docs":{},"内":{"docs":{},"存":{"docs":{},"对":{"docs":{},"象":{"docs":{},",":{"docs":{},"就":{"docs":{},"是":{"docs":{},"使":{"docs":{},"用":{"docs":{},"一":{"docs":{},"个":{"docs":{},"链":{"docs":{},"表":{"docs":{},"来":{"docs":{},"管":{"docs":{},"理":{"docs":{},"。":{"docs":{"programing-manual/mm/heap.html":{"ref":"programing-manual/mm/heap.html","tf":0.014084507042253521}}}}}}}}}}}}}}}}}}}},"大":{"docs":{},"内":{"docs":{},"存":{"docs":{},"对":{"docs":{},"象":{"docs":{},",":{"docs":{},"就":{"docs":{},"直":{"docs":{},"接":{"docs":{},"从":{"docs":{},"物":{"docs":{},"理":{"docs":{},"内":{"docs":{},"存":{"docs":{},"管":{"docs":{},"理":{"docs":{},"器":{"docs":{},"分":{"docs":{},"配":{"docs":{},"和":{"docs":{},"释":{"docs":{},"放":{"docs":{},",":{"docs":{},"不":{"docs":{},"使":{"docs":{},"用":{"docs":{},"链":{"docs":{},"表":{"docs":{},"管":{"docs":{},"理":{"docs":{},"。":{"docs":{"programing-manual/mm/heap.html":{"ref":"programing-manual/mm/heap.html","tf":0.014084507042253521}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"小":{"docs":{},"内":{"docs":{},"存":{"docs":{},"对":{"docs":{},"象":{"docs":{},",":{"docs":{},"会":{"docs":{},"划":{"docs":{},"分":{"docs":{},"得":{"docs":{},"比":{"docs":{},"较":{"docs":{},"细":{"docs":{},",":{"docs":{},"如":{"docs":{},":":{"1":{"6":{"docs":{},",":{"docs":{"programing-manual/mm/heap.html":{"ref":"programing-manual/mm/heap.html","tf":0.014084507042253521}}}},"docs":{}},"docs":{}}}}}}}}}}}}}}}}},"应":{"docs":{},"用":{"docs":{},"程":{"docs":{},"序":{"docs":{},"来":{"docs":{},"说":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"使":{"docs":{},"用":{"docs":{"programing-manual/mm/heap.html":{"ref":"programing-manual/mm/heap.html","tf":0.014084507042253521}}}}}}}}}}}}},"开":{"docs":{},"发":{"docs":{},"者":{"docs":{},"而":{"docs":{},"言":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"已":{"docs":{},"经":{"docs":{},"做":{"docs":{},"好":{"docs":{},"了":{"docs":{},"配":{"docs":{},"置":{"docs":{},",":{"docs":{},"你":{"docs":{},"只":{"docs":{},"需":{"docs":{},"要":{"docs":{},"知":{"docs":{},"道":{"docs":{},"如":{"docs":{},"何":{"docs":{},"去":{"docs":{},"使":{"docs":{},"用":{"docs":{},"即":{"docs":{},"可":{"docs":{},"。":{"docs":{"tutorial/menuconfig.html":{"ref":"tutorial/menuconfig.html","tf":0.038461538461538464}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"进":{"docs":{},"程":{"docs":{},"的":{"docs":{},"内":{"docs":{},"存":{"docs":{},"管":{"docs":{},"理":{"docs":{},",":{"docs":{},"是":{"docs":{},"对":{"docs":{},"它":{"docs":{},"的":{"docs":{},"虚":{"docs":{},"拟":{"docs":{},"地":{"docs":{},"址":{"docs":{},"进":{"docs":{},"行":{"docs":{},"管":{"docs":{},"理":{"docs":{},"。":{"docs":{},"由":{"docs":{},"于":{"docs":{},"会":{"docs":{},"有":{"docs":{},"多":{"docs":{},"个":{"docs":{},"进":{"docs":{},"程":{"docs":{},"的":{"docs":{},"存":{"docs":{},"在":{"docs":{},",":{"docs":{},"所":{"docs":{},"以":{"docs":{},"会":{"docs":{},"对":{"docs":{},"每":{"docs":{},"个":{"docs":{},"进":{"docs":{},"程":{"docs":{},"的":{"docs":{},"虚":{"docs":{},"拟":{"docs":{},"地":{"docs":{},"址":{"docs":{"programing-manual/mm/vmspace.html":{"ref":"programing-manual/mm/vmspace.html","tf":0.015384615384615385}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"象":{"docs":{},"即":{"docs":{},"可":{"docs":{},",":{"docs":{},"传":{"docs":{},"入":{"docs":{},"工":{"docs":{},"作":{"docs":{},"对":{"docs":{},"象":{"docs":{},"的":{"docs":{},"地":{"docs":{},"址":{"docs":{},"即":{"docs":{},"可":{"docs":{},"。":{"docs":{"programing-manual/interrupt/delay_queue.html":{"ref":"programing-manual/interrupt/delay_queue.html","tf":0.01282051282051282}}}}}}}}}}}}}}}}}},"处":{"docs":{},"理":{"docs":{},"器":{"docs":{},"多":{"docs":{},"核":{"docs":{},"的":{"docs":{},"启":{"docs":{},"动":{"docs":{},"和":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}},"齐":{"docs":{},"的":{"docs":{},"方":{"docs":{},"式":{"docs":{},",":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}},"没":{"docs":{},"有":{"docs":{},"对":{"docs":{},"象":{"docs":{},"才":{"docs":{},"重":{"docs":{},"新":{"docs":{},"从":{"docs":{},"物":{"docs":{},"理":{"docs":{},"内":{"docs":{},"存":{"docs":{},"管":{"docs":{},"理":{"docs":{},"器":{"docs":{},"中":{"docs":{},"分":{"docs":{},"配":{"docs":{},",":{"docs":{},"有":{"docs":{},"的":{"docs":{},"话":{"docs":{},"就":{"docs":{},"直":{"docs":{},"接":{"docs":{},"从":{"docs":{},"链":{"docs":{},"表":{"docs":{},"上":{"docs":{},"面":{"docs":{},"摘":{"docs":{},"取":{"docs":{},"。":{"docs":{"programing-manual/mm/heap.html":{"ref":"programing-manual/mm/heap.html","tf":0.014084507042253521}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"资":{"docs":{},"源":{"docs":{},"即":{"docs":{},"可":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}},"通":{"docs":{},"常":{"docs":{},",":{"docs":{},"内":{"docs":{},"核":{"docs":{},"会":{"docs":{},"使":{"docs":{},"用":{"docs":{"programing-manual/mm/heap.html":{"ref":"programing-manual/mm/heap.html","tf":0.028169014084507043}}}}}}},"都":{"docs":{},"是":{"docs":{},"在":{"docs":{},"启":{"docs":{},"动":{"docs":{},"后":{"docs":{},"尽":{"docs":{},"快":{"docs":{},"地":{"docs":{},"实":{"docs":{},"现":{"docs":{},"串":{"docs":{},"口":{"docs":{},"调":{"docs":{},"试":{"docs":{},",":{"docs":{},"以":{"docs":{},"便":{"docs":{},"能":{"docs":{},"够":{"docs":{},"知":{"docs":{},"道":{"docs":{},"自":{"docs":{},"己":{"docs":{},"跑":{"docs":{},"到":{"docs":{},"什":{"docs":{},"么":{"docs":{},"地":{"docs":{},"方":{"docs":{},"了":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"释":{"docs":{},"放":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},",":{"docs":{},"也":{"docs":{},"是":{"docs":{},"先":{"docs":{},"释":{"docs":{},"放":{"docs":{},"到":{"docs":{},"链":{"docs":{},"表":{"docs":{},"上":{"docs":{},"面":{"docs":{},",":{"docs":{},"当":{"docs":{},"链":{"docs":{},"表":{"docs":{},"超":{"docs":{},"出":{"docs":{},"了":{"docs":{},"最":{"docs":{},"大":{"docs":{},"链":{"docs":{},"表":{"docs":{},"长":{"docs":{},"度":{"docs":{},"阈":{"docs":{},"值":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},",":{"docs":{},"才":{"docs":{},"会":{"docs":{},"释":{"docs":{},"放":{"docs":{},"到":{"docs":{},"物":{"docs":{},"理":{"docs":{},"内":{"docs":{},"存":{"docs":{},"分":{"docs":{},"配":{"docs":{},"器":{"docs":{},"中":{"docs":{},"。":{"docs":{"programing-manual/mm/heap.html":{"ref":"programing-manual/mm/heap.html","tf":0.014084507042253521}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"一":{"docs":{},"个":{"docs":{},"t":{"docs":{},"l":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}},"互":{"docs":{},"斥":{"docs":{},"体":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}},"内":{"docs":{},"存":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}},"除":{"docs":{},"此":{"docs":{},"之":{"docs":{},"外":{"docs":{},",":{"docs":{},"还":{"docs":{},"提":{"docs":{},"供":{"docs":{},"了":{"docs":{},"一":{"docs":{},"个":{"docs":{},"获":{"docs":{},"取":{"docs":{},"某":{"docs":{},"个":{"docs":{},"内":{"docs":{},"存":{"docs":{},"对":{"docs":{},"象":{"docs":{},"大":{"docs":{},"小":{"docs":{},"的":{"docs":{},"功":{"docs":{},"能":{"docs":{},",":{"docs":{},"传":{"docs":{},"入":{"docs":{},"地":{"docs":{},"址":{"docs":{},"即":{"docs":{},"可":{"docs":{},"获":{"docs":{},"取":{"docs":{},"内":{"docs":{},"存":{"docs":{},"对":{"docs":{},"象":{"docs":{},"所":{"docs":{},"在":{"docs":{},"的":{"docs":{"programing-manual/mm/heap.html":{"ref":"programing-manual/mm/heap.html","tf":0.014084507042253521}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"对":{"docs":{},"当":{"docs":{},"前":{"docs":{},"中":{"docs":{},"断":{"docs":{},"状":{"docs":{},"态":{"docs":{},"保":{"docs":{},"存":{"docs":{},"和":{"docs":{},"恢":{"docs":{},"复":{"docs":{},"的":{"docs":{},"操":{"docs":{},"作":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{},"最":{"docs":{},"近":{"docs":{},"超":{"docs":{},"时":{"docs":{},"的":{"docs":{},"时":{"docs":{},"间":{"docs":{},"变":{"docs":{},"量":{"docs":{},",":{"docs":{},"来":{"docs":{},"记":{"docs":{},"录":{"docs":{},"下":{"docs":{},"一":{"docs":{},"个":{"docs":{},"即":{"docs":{},"将":{"docs":{},"超":{"docs":{},"时":{"docs":{},"的":{"docs":{},"定":{"docs":{},"时":{"docs":{},"器":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"用":{"docs":{},"它":{"docs":{},"来":{"docs":{},"检":{"docs":{},"测":{"docs":{},"是":{"docs":{},"否":{"docs":{},"需":{"docs":{},"要":{"docs":{},"去":{"docs":{},"检":{"docs":{},"测":{"docs":{},"定":{"docs":{},"时":{"docs":{},"器":{"docs":{},"链":{"docs":{},"表":{"docs":{},"。":{"docs":{"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.010752688172043012}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"就":{"docs":{},"是":{"docs":{},"对":{"docs":{},"某":{"docs":{},"个":{"docs":{},"中":{"docs":{},"断":{"docs":{},"的":{"docs":{},"使":{"docs":{},"能":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}},"以":{"docs":{},"及":{"docs":{},"在":{"docs":{},"做":{"docs":{},"进":{"docs":{},"程":{"docs":{},"的":{"docs":{},"堆":{"docs":{},"分":{"docs":{},"配":{"docs":{},"和":{"docs":{},"栈":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},",":{"docs":{},"都":{"docs":{},"会":{"docs":{},"使":{"docs":{},"用":{"docs":{},"到":{"docs":{},"。":{"docs":{"programing-manual/mm/vmspace.html":{"ref":"programing-manual/mm/vmspace.html","tf":0.015384615384615385}}}}}}}}}}}}}}}}}}}}}}}},"这":{"docs":{},"个":{"docs":{},"地":{"docs":{},"址":{"docs":{},"对":{"docs":{},"应":{"docs":{},"的":{"docs":{},"内":{"docs":{},"存":{"docs":{},"大":{"docs":{},"小":{"docs":{},",":{"docs":{},"内":{"docs":{},"存":{"docs":{},"节":{"docs":{},"点":{"docs":{},"的":{"docs":{},"属":{"docs":{},"性":{"docs":{},",":{"docs":{},"已":{"docs":{},"经":{"docs":{},"一":{"docs":{},"些":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"的":{"docs":{},"标":{"docs":{},"志":{"docs":{},"。":{"docs":{"programing-manual/mm/vmspace.html":{"ref":"programing-manual/mm/vmspace.html","tf":0.015384615384615385}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"参":{"docs":{},"数":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}},"定":{"docs":{},"时":{"docs":{},"器":{"docs":{},"的":{"docs":{},"标":{"docs":{},"志":{"docs":{"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.010752688172043012}}}}}}}},"线":{"docs":{},"程":{"docs":{},"运":{"docs":{},"行":{"docs":{},"时":{"docs":{},"的":{"docs":{},"参":{"docs":{},"数":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}},"线":{"docs":{},"程":{"docs":{},"为":{"docs":{},"最":{"docs":{},"小":{"docs":{},"调":{"docs":{},"度":{"docs":{},"单":{"docs":{},"元":{"docs":{},"的":{"docs":{},"好":{"docs":{},"处":{"docs":{},"是":{"docs":{},"可":{"docs":{},"以":{"docs":{},"很":{"docs":{},"方":{"docs":{},"便":{"docs":{},"支":{"docs":{},"持":{"docs":{},"内":{"docs":{},"核":{"docs":{},"态":{"docs":{},"以":{"docs":{},"及":{"docs":{},"用":{"docs":{},"户":{"docs":{},"态":{"docs":{},"的":{"docs":{},"多":{"docs":{},"线":{"docs":{},"程":{"docs":{},",":{"docs":{},"并":{"docs":{},"且":{"docs":{},"层":{"docs":{},"次":{"docs":{},"框":{"docs":{},"架":{"docs":{},"也":{"docs":{},"比":{"docs":{},"较":{"docs":{},"好":{"docs":{},",":{"docs":{},"容":{"docs":{},"易":{"docs":{},"实":{"docs":{},"现":{"docs":{},"。":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"内":{"docs":{},"进":{"docs":{},"行":{"docs":{},"数":{"docs":{},"据":{"docs":{},"存":{"docs":{},"取":{"docs":{},"。":{"docs":{"programing-manual/process/process.html":{"ref":"programing-manual/process/process.html","tf":0.012658227848101266}}}}}}}}}},"避":{"docs":{},"免":{"docs":{},"重":{"docs":{},"名":{"docs":{},",":{"docs":{},"另":{"docs":{},"外":{"docs":{},"也":{"docs":{},"可":{"docs":{},"以":{"docs":{},"根":{"docs":{},"据":{"docs":{},"文":{"docs":{},"件":{"docs":{},"名":{"docs":{},"中":{"docs":{},"是":{"docs":{},"否":{"docs":{},"包":{"docs":{},"含":{"docs":{},"多":{"docs":{},"个":{"docs":{},"词":{"docs":{},"语":{"docs":{},"而":{"docs":{},"采":{"docs":{},"用":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"动":{"docs":{},"词":{"docs":{},"开":{"docs":{},"头":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"第":{"docs":{},"一":{"docs":{},"人":{"docs":{},"称":{"docs":{},"现":{"docs":{},"在":{"docs":{},"时":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{},"e":{"docs":{},",":{"docs":{},"而":{"docs":{},"不":{"docs":{},"是":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{},"e":{"docs":{},"d":{"docs":{},"或":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"值":{"docs":{},"得":{"docs":{},"注":{"docs":{},"意":{"docs":{},"的":{"docs":{},"是":{"docs":{},",":{"docs":{},"映":{"docs":{},"射":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},",":{"docs":{},"还":{"docs":{},"会":{"docs":{},"去":{"docs":{},"对":{"docs":{},"内":{"docs":{},"存":{"docs":{},"进":{"docs":{},"行":{"docs":{},"物":{"docs":{},"理":{"docs":{},"内":{"docs":{},"存":{"docs":{},"映":{"docs":{},"射":{"docs":{},",":{"docs":{},"只":{"docs":{},"有":{"docs":{},"映":{"docs":{},"射":{"docs":{},"后":{"docs":{},",":{"docs":{},"进":{"docs":{},"程":{"docs":{},"才":{"docs":{},"能":{"docs":{},"访":{"docs":{},"问":{"docs":{},"该":{"docs":{},"地":{"docs":{},"址":{"docs":{},"。":{"docs":{"programing-manual/mm/vmspace.html":{"ref":"programing-manual/mm/vmspace.html","tf":0.015384615384615385}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"在":{"docs":{},"执":{"docs":{},"行":{"docs":{},"系":{"docs":{},"统":{"docs":{},"调":{"docs":{},"用":{"docs":{},"期":{"docs":{},"间":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"打":{"docs":{},"开":{"docs":{},"中":{"docs":{},"断":{"docs":{},",":{"docs":{},"避":{"docs":{},"免":{"docs":{},"在":{"docs":{},"系":{"docs":{},"统":{"docs":{},"调":{"docs":{},"用":{"docs":{},"时":{"docs":{},"出":{"docs":{},"现":{"docs":{},"死":{"docs":{},"循":{"docs":{},"环":{"docs":{},",":{"docs":{},"导":{"docs":{},"致":{"docs":{},"内":{"docs":{},"核":{"docs":{},"卡":{"docs":{},"死":{"docs":{},"。":{"docs":{"programing-manual/process/syscall.html":{"ref":"programing-manual/process/syscall.html","tf":0.03125}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"就":{"docs":{},"能":{"docs":{},"获":{"docs":{},"取":{"docs":{},"到":{"docs":{},"对":{"docs":{},"应":{"docs":{},"的":{"docs":{},"内":{"docs":{},"核":{"docs":{},"服":{"docs":{},"务":{"docs":{},"功":{"docs":{},"能":{"docs":{},",":{"docs":{},"然":{"docs":{},"后":{"docs":{},"以":{"docs":{},"函":{"docs":{},"数":{"docs":{},"指":{"docs":{},"针":{"docs":{},"的":{"docs":{},"方":{"docs":{},"式":{"docs":{},"去":{"docs":{},"调":{"docs":{},"用":{"docs":{},"执":{"docs":{},"行":{"docs":{},"即":{"docs":{},"可":{"docs":{},"。":{"docs":{"programing-manual/process/syscall.html":{"ref":"programing-manual/process/syscall.html","tf":0.03125}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"其":{"docs":{},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{},"范":{"docs":{},"围":{"docs":{},"为":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}},"删":{"docs":{},"除":{"docs":{},"。":{"docs":{"programing-manual/mm/vmspace.html":{"ref":"programing-manual/mm/vmspace.html","tf":0.015384615384615385}}},"互":{"docs":{},"斥":{"docs":{},"体":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}},"文":{"docs":{},"件":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}},"条":{"docs":{},"件":{"docs":{},"变":{"docs":{},"量":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}},"目":{"docs":{},"录":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}},"设":{"docs":{},"备":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}},"地":{"docs":{},"址":{"docs":{},"空":{"docs":{},"间":{"docs":{},"通":{"docs":{},"过":{"docs":{},"映":{"docs":{},"射":{"docs":{},"和":{"docs":{},"解":{"docs":{},"除":{"docs":{},"映":{"docs":{},"射":{"docs":{},"来":{"docs":{},"进":{"docs":{},"行":{"docs":{},"管":{"docs":{},"理":{"docs":{},",":{"docs":{},"类":{"docs":{},"似":{"docs":{},"于":{"docs":{},"分":{"docs":{},"配":{"docs":{},"和":{"docs":{},"释":{"docs":{},"放":{"docs":{},"的":{"docs":{},"操":{"docs":{},"作":{"docs":{},"。":{"docs":{"programing-manual/mm/vmspace.html":{"ref":"programing-manual/mm/vmspace.html","tf":0.015384615384615385}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"翻":{"docs":{},"译":{"docs":{},"模":{"docs":{},"式":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}},"指":{"docs":{},"定":{"docs":{},"了":{"docs":{},"虚":{"docs":{},"拟":{"docs":{},"地":{"docs":{},"址":{"docs":{},"需":{"docs":{},"要":{"docs":{},"映":{"docs":{},"射":{"docs":{},"到":{"docs":{},"的":{"docs":{},"物":{"docs":{},"理":{"docs":{},"地":{"docs":{},"址":{"docs":{},",":{"docs":{},"映":{"docs":{},"射":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},",":{"docs":{},"就":{"docs":{},"把":{"docs":{},"虚":{"docs":{},"拟":{"docs":{},"地":{"docs":{},"址":{"docs":{},"映":{"docs":{},"射":{"docs":{},"到":{"docs":{},"该":{"docs":{},"物":{"docs":{},"理":{"docs":{},"地":{"docs":{},"址":{"docs":{},"(":{"docs":{},"未":{"docs":{},"来":{"docs":{},"做":{"docs":{},"共":{"docs":{},"享":{"docs":{},"内":{"docs":{},"存":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},"会":{"docs":{},"用":{"docs":{},"到":{"docs":{},")":{"docs":{"programing-manual/mm/vmspace.html":{"ref":"programing-manual/mm/vmspace.html","tf":0.015384615384615385}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"地":{"docs":{},"址":{"docs":{},"就":{"docs":{},"行":{"docs":{},"了":{"docs":{},"。":{"docs":{},"使":{"docs":{},"用":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}},"令":{"docs":{},"去":{"docs":{},"实":{"docs":{},"现":{"docs":{},"。":{"docs":{},"内":{"docs":{},"存":{"docs":{},"指":{"docs":{},"令":{"docs":{},"屏":{"docs":{},"障":{"docs":{},"使":{"docs":{},"用":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}},"实":{"docs":{},"现":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}},"获":{"docs":{},"取":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}},"集":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}},"映":{"docs":{},"射":{"docs":{},"某":{"docs":{},"段":{"docs":{},"空":{"docs":{},"间":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},",":{"docs":{},"会":{"docs":{},"先":{"docs":{},"检":{"docs":{},"测":{"docs":{},"地":{"docs":{},"址":{"docs":{},"是":{"docs":{},"否":{"docs":{},"被":{"docs":{},"使":{"docs":{},"用":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"已":{"docs":{},"经":{"docs":{},"被":{"docs":{},"使":{"docs":{},"用":{"docs":{},"了":{"docs":{},",":{"docs":{},"就":{"docs":{},"不":{"docs":{},"能":{"docs":{},"直":{"docs":{},"接":{"docs":{},"使":{"docs":{},"用":{"docs":{},"这":{"docs":{},"块":{"docs":{},"地":{"docs":{},"址":{"docs":{},"。":{"docs":{},"没":{"docs":{},"有":{"docs":{},"被":{"docs":{},"使":{"docs":{},"用":{"docs":{},",":{"docs":{},"就":{"docs":{},"可":{"docs":{},"以":{"docs":{},"在":{"docs":{},"地":{"docs":{},"址":{"docs":{},"空":{"docs":{},"间":{"docs":{},"中":{"docs":{},"添":{"docs":{},"加":{"docs":{},"一":{"docs":{},"个":{"docs":{"programing-manual/mm/vmspace.html":{"ref":"programing-manual/mm/vmspace.html","tf":0.015384615384615385}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"物":{"docs":{},"理":{"docs":{},"内":{"docs":{},"存":{"docs":{},"。":{"docs":{"programing-manual/mm/vmspace.html":{"ref":"programing-manual/mm/vmspace.html","tf":0.015384615384615385}}}}}}},"虚":{"docs":{},"拟":{"docs":{},"地":{"docs":{},"址":{"docs":{},"。":{"docs":{"programing-manual/process/process.html":{"ref":"programing-manual/process/process.html","tf":0.012658227848101266}}}}}}}},"表":{"docs":{},",":{"docs":{},"切":{"docs":{},"换":{"docs":{},"进":{"docs":{},"程":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},"需":{"docs":{},"要":{"docs":{},"修":{"docs":{},"改":{"docs":{},"硬":{"docs":{},"件":{"docs":{"programing-manual/process/process.html":{"ref":"programing-manual/process/process.html","tf":0.012658227848101266}}}}}}}}}}}}}}}}},"虚":{"docs":{},"拟":{"docs":{},"地":{"docs":{},"址":{"docs":{},",":{"docs":{},"但":{"docs":{},"是":{"docs":{},"会":{"docs":{},"指":{"docs":{},"定":{"docs":{},"物":{"docs":{},"理":{"docs":{},"地":{"docs":{},"址":{"docs":{},",":{"docs":{},"就":{"docs":{},"不":{"docs":{},"用":{"docs":{},"自":{"docs":{},"动":{"docs":{},"分":{"docs":{},"配":{"docs":{},"物":{"docs":{},"理":{"docs":{},"地":{"docs":{},"址":{"docs":{},"了":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"内":{"docs":{},"存":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}},"格":{"docs":{},"式":{"docs":{},"的":{"docs":{},"可":{"docs":{},"执":{"docs":{},"行":{"docs":{},"程":{"docs":{},"序":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"映":{"docs":{},"射":{"docs":{},"一":{"docs":{},"段":{"docs":{},"内":{"docs":{},"存":{"docs":{},"来":{"docs":{},"储":{"docs":{},"存":{"docs":{},"代":{"docs":{},"码":{"docs":{},"和":{"docs":{},"数":{"docs":{},"据":{"docs":{},",":{"docs":{},"就":{"docs":{},"会":{"docs":{},"用":{"docs":{},"到":{"docs":{},"映":{"docs":{},"射":{"docs":{},"功":{"docs":{},"能":{"docs":{},"。":{"docs":{"programing-manual/mm/vmspace.html":{"ref":"programing-manual/mm/vmspace.html","tf":0.015384615384615385}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"(":{"docs":{},"不":{"docs":{},"影":{"docs":{},"响":{"docs":{},"代":{"docs":{},"码":{"docs":{},"运":{"docs":{},"行":{"docs":{},"的":{"docs":{},"变":{"docs":{},"动":{"docs":{},")":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}}}}}}}}}}}}},"解":{"docs":{},"除":{"docs":{},"地":{"docs":{},"址":{"docs":{},"映":{"docs":{},"射":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"制":{"docs":{},"定":{"docs":{},"虚":{"docs":{},"拟":{"docs":{},"地":{"docs":{},"址":{"docs":{},"和":{"docs":{},"内":{"docs":{},"存":{"docs":{},"大":{"docs":{},"小":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"在":{"docs":{},"已":{"docs":{},"经":{"docs":{},"映":{"docs":{},"射":{"docs":{},"的":{"docs":{},"内":{"docs":{},"存":{"docs":{},"空":{"docs":{},"间":{"docs":{},"中":{"docs":{},"匹":{"docs":{},"配":{"docs":{},"到":{"docs":{},"v":{"docs":{},"m":{"docs":{},"n":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},",":{"docs":{},"就":{"docs":{},"可":{"docs":{},"以":{"docs":{},"将":{"docs":{},"其":{"docs":{},"解":{"docs":{},"除":{"docs":{},"映":{"docs":{},"射":{"docs":{},",":{"docs":{},"并":{"docs":{},"释":{"docs":{},"放":{"docs":{},"其":{"docs":{"programing-manual/mm/vmspace.html":{"ref":"programing-manual/mm/vmspace.html","tf":0.015384615384615385}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"解":{"docs":{},"除":{"docs":{},"后":{"docs":{},"就":{"docs":{},"不":{"docs":{},"能":{"docs":{},"访":{"docs":{},"问":{"docs":{},"了":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}},"映":{"docs":{},"射":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},",":{"docs":{},"会":{"docs":{},"先":{"docs":{},"判":{"docs":{},"断":{"docs":{},"该":{"docs":{},"地":{"docs":{},"址":{"docs":{},"是":{"docs":{},"否":{"docs":{},"映":{"docs":{},"射":{"docs":{},",":{"docs":{},"已":{"docs":{},"经":{"docs":{},"映":{"docs":{},"射":{"docs":{},"才":{"docs":{},"能":{"docs":{},"解":{"docs":{},"除":{"docs":{},"。":{"docs":{},"会":{"docs":{},"先":{"docs":{},"解":{"docs":{},"除":{"docs":{},"物":{"docs":{},"理":{"docs":{},"内":{"docs":{},"存":{"docs":{},"映":{"docs":{},"射":{"docs":{},",":{"docs":{},"然":{"docs":{},"后":{"docs":{},"再":{"docs":{},"把":{"docs":{"programing-manual/mm/vmspace.html":{"ref":"programing-manual/mm/vmspace.html","tf":0.015384615384615385}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"内":{"docs":{},"存":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}},"压":{"docs":{},"到":{"docs":{},"工":{"docs":{},"具":{"docs":{},"目":{"docs":{},"录":{"docs":{},"下":{"docs":{},"面":{"docs":{"tutorial/toolchains.html":{"ref":"tutorial/toolchains.html","tf":0.02702702702702703}}}}}}}},"路":{"docs":{},"径":{"docs":{},":":{"docs":{},"n":{"docs":{},"x":{"docs":{},"o":{"docs":{"tutorial/toolchains.html":{"ref":"tutorial/toolchains.html","tf":0.02702702702702703}}}}}}}}}}},"多":{"docs":{},"核":{"docs":{},"调":{"docs":{},"度":{"docs":{"programing-manual/sched/sched.html":{"ref":"programing-manual/sched/sched.html","tf":0.09090909090909091},"programing-manual/sched/smp.html":{"ref":"programing-manual/sched/smp.html","tf":0.0625}}}},"中":{"docs":{},"很":{"docs":{},"重":{"docs":{},"要":{"docs":{},"的":{"docs":{},"一":{"docs":{},"个":{"docs":{},"机":{"docs":{},"制":{"docs":{},"就":{"docs":{},"是":{"docs":{},"自":{"docs":{},"旋":{"docs":{},"锁":{"docs":{},",":{"docs":{},"当":{"docs":{},"需":{"docs":{},"要":{"docs":{},"访":{"docs":{},"问":{"docs":{},"公":{"docs":{},"共":{"docs":{},"资":{"docs":{},"源":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},",":{"docs":{},"就":{"docs":{},"需":{"docs":{},"要":{"docs":{},"自":{"docs":{},"旋":{"docs":{},"锁":{"docs":{},"来":{"docs":{},"上":{"docs":{},"锁":{"docs":{},",":{"docs":{},"才":{"docs":{},"能":{"docs":{},"保":{"docs":{},"证":{"docs":{},"多":{"docs":{},"个":{"docs":{},"核":{"docs":{},"同":{"docs":{},"时":{"docs":{},"访":{"docs":{},"问":{"docs":{},"数":{"docs":{},"据":{"docs":{},"的":{"docs":{},"正":{"docs":{},"确":{"docs":{},"性":{"docs":{},"。":{"docs":{},"自":{"docs":{},"旋":{"docs":{},"锁":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"于":{"docs":{},"原":{"docs":{},"子":{"docs":{},"操":{"docs":{},"作":{"docs":{},",":{"docs":{},"而":{"docs":{},"原":{"docs":{},"子":{"docs":{},"操":{"docs":{},"作":{"docs":{},"又":{"docs":{},"需":{"docs":{},"要":{"docs":{},"硬":{"docs":{},"件":{"docs":{},"做":{"docs":{},"支":{"docs":{},"持":{"docs":{},"。":{"docs":{"programing-manual/sched/smp.html":{"ref":"programing-manual/sched/smp.html","tf":0.0625}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"实":{"docs":{},"现":{"docs":{},"是":{"docs":{},"需":{"docs":{},"要":{"docs":{},"硬":{"docs":{},"件":{"docs":{},"支":{"docs":{},"持":{"docs":{},"的":{"docs":{},",":{"docs":{},"操":{"docs":{},"作":{"docs":{},"系":{"docs":{},"统":{"docs":{},"内":{"docs":{},"核":{"docs":{},"只":{"docs":{},"是":{"docs":{},"根":{"docs":{},"据":{"docs":{},"硬":{"docs":{},"件":{"docs":{},"做":{"docs":{},"一":{"docs":{},"定":{"docs":{},"的":{"docs":{},"抽":{"docs":{},"象":{"docs":{},",":{"docs":{},"做":{"docs":{},"好":{"docs":{},"多":{"docs":{},"核":{"docs":{},"间":{"docs":{},"的":{"docs":{},"同":{"docs":{},"步":{"docs":{},"与":{"docs":{},"互":{"docs":{},"斥":{"docs":{},"。":{"docs":{"programing-manual/sched/smp.html":{"ref":"programing-manual/sched/smp.html","tf":0.0625}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"由":{"docs":{},"于":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"任":{"docs":{},"务":{"docs":{},"数":{"docs":{},"量":{"docs":{},"众":{"docs":{},"多":{"docs":{},",":{"docs":{},"如":{"docs":{},"何":{"docs":{},"管":{"docs":{},"理":{"docs":{},"它":{"docs":{},"们":{"docs":{},",":{"docs":{},"是":{"docs":{},"要":{"docs":{},"做":{"docs":{},"到":{"docs":{},"公":{"docs":{},"平":{"docs":{},"运":{"docs":{},"行":{"docs":{},"还":{"docs":{},"是":{"docs":{},"谁":{"docs":{},"先":{"docs":{},"谁":{"docs":{},"后":{"docs":{},",":{"docs":{},"这":{"docs":{},"和":{"docs":{},"应":{"docs":{},"用":{"docs":{},"场":{"docs":{},"景":{"docs":{},"密":{"docs":{},"切":{"docs":{},"相":{"docs":{},"关":{"docs":{},"。":{"docs":{"programing-manual/sched/sched.html":{"ref":"programing-manual/sched/sched.html","tf":0.09090909090909091}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"线":{"docs":{},"程":{"docs":{},"的":{"docs":{},"切":{"docs":{},"换":{"docs":{},"速":{"docs":{},"度":{"docs":{},"非":{"docs":{},"常":{"docs":{},"快":{"docs":{},",":{"docs":{},"一":{"docs":{},"般":{"docs":{},"在":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}}}}}}}}}}},"切":{"docs":{},"换":{"docs":{},"了":{"docs":{"programing-manual/process/process.html":{"ref":"programing-manual/process/process.html","tf":0.012658227848101266}}}}},"中":{"docs":{},"断":{"docs":{},"数":{"docs":{},"量":{"docs":{},"会":{"docs":{},"比":{"docs":{},"较":{"docs":{},"多":{"docs":{},",":{"docs":{},"因":{"docs":{},"此":{"docs":{},",":{"docs":{},"都":{"docs":{},"会":{"docs":{},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{},"中":{"docs":{},"断":{"docs":{},"表":{"docs":{},"来":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"断":{"docs":{},"。":{"docs":{},"然":{"docs":{},"后":{"docs":{},"由":{"docs":{},"一":{"docs":{},"个":{"docs":{},"寄":{"docs":{},"存":{"docs":{},"器":{"docs":{},"或":{"docs":{},"者":{"docs":{},"多":{"docs":{},"个":{"docs":{},"寄":{"docs":{},"存":{"docs":{},"器":{"docs":{},"来":{"docs":{},"记":{"docs":{},"录":{"docs":{},"该":{"docs":{},"表":{"docs":{},"的":{"docs":{},"地":{"docs":{},"址":{"docs":{},"。":{"docs":{},"产":{"docs":{},"生":{"docs":{},"中":{"docs":{},"断":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},"会":{"docs":{},"去":{"docs":{},"查":{"docs":{},"表":{"docs":{},",":{"docs":{},"根":{"docs":{},"据":{"docs":{},"具":{"docs":{},"体":{"docs":{},"的":{"docs":{},"中":{"docs":{},"断":{"docs":{},"号":{"docs":{},"去":{"docs":{},"找":{"docs":{},"对":{"docs":{},"应":{"docs":{},"的":{"docs":{},"中":{"docs":{},"断":{"docs":{},"处":{"docs":{},"理":{"docs":{},"函":{"docs":{},"数":{"docs":{},",":{"docs":{},"简":{"docs":{},"单":{"docs":{},"来":{"docs":{},"说":{"docs":{},"就":{"docs":{},"是":{"docs":{},"去":{"docs":{},"调":{"docs":{},"用":{"docs":{},"中":{"docs":{},"断":{"docs":{},"的":{"docs":{},"回":{"docs":{},"调":{"docs":{},"函":{"docs":{},"数":{"docs":{},"。":{"docs":{"programing-manual/interrupt/irq.html":{"ref":"programing-manual/interrupt/irq.html","tf":0.01694915254237288}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"是":{"docs":{},"具":{"docs":{},"有":{"docs":{},"一":{"docs":{},"定":{"docs":{},"优":{"docs":{},"先":{"docs":{},"级":{"docs":{},"的":{"docs":{},",":{"docs":{},"有":{"docs":{},"的":{"docs":{},"中":{"docs":{},"断":{"docs":{},"需":{"docs":{},"要":{"docs":{},"先":{"docs":{},"处":{"docs":{},"理":{"docs":{},",":{"docs":{},"而":{"docs":{},"有":{"docs":{},"的":{"docs":{},"中":{"docs":{},"断":{"docs":{},"则":{"docs":{},"可":{"docs":{},"以":{"docs":{},"后":{"docs":{},"处":{"docs":{},"理":{"docs":{},",":{"docs":{},"因":{"docs":{},"此":{"docs":{},"就":{"docs":{},"有":{"docs":{},"了":{"docs":{},"多":{"docs":{},"个":{"docs":{},"中":{"docs":{},"断":{"docs":{},"队":{"docs":{},"列":{"docs":{},",":{"docs":{},"每":{"docs":{},"个":{"docs":{},"队":{"docs":{},"列":{"docs":{},"的":{"docs":{},"优":{"docs":{},"先":{"docs":{},"级":{"docs":{},"是":{"docs":{},"不":{"docs":{},"同":{"docs":{},"的":{"docs":{},"。":{"docs":{},"至":{"docs":{},"于":{"docs":{},"需":{"docs":{},"要":{"docs":{},"加":{"docs":{},"入":{"docs":{},"哪":{"docs":{},"种":{"docs":{},"队":{"docs":{},"列":{"docs":{},",":{"docs":{"programing-manual/interrupt/delay_queue.html":{"ref":"programing-manual/interrupt/delay_queue.html","tf":0.01282051282051282}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"我":{"docs":{},"们":{"docs":{},"想":{"docs":{},"实":{"docs":{},"现":{"1":{"docs":{},"秒":{"docs":{},"钟":{"docs":{},"产":{"docs":{},"生":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}},"docs":{}}}}}}}},"线":{"docs":{},"程":{"docs":{"programing-manual/process/process.html":{"ref":"programing-manual/process/process.html","tf":0.012658227848101266}},"管":{"docs":{},"理":{"docs":{"programing-manual/sched/sched.html":{"ref":"programing-manual/sched/sched.html","tf":0.09090909090909091},"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":10.003424657534246},"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}},"创":{"docs":{},"建":{"docs":{},"好":{"docs":{},"后":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"启":{"docs":{},"动":{"docs":{},"线":{"docs":{},"程":{"docs":{},",":{"docs":{},"调":{"docs":{},"用":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}}}}}}}}}}},"完":{"docs":{},"成":{"docs":{},"了":{"docs":{},"自":{"docs":{},"己":{"docs":{},"的":{"docs":{},"工":{"docs":{},"作":{"docs":{},"后":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"主":{"docs":{},"动":{"docs":{},"退":{"docs":{},"出":{"docs":{},"运":{"docs":{},"行":{"docs":{},",":{"docs":{},"调":{"docs":{},"用":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}}}}}}}}}}}}}}}}}},"是":{"docs":{},"具":{"docs":{},"有":{"docs":{},"优":{"docs":{},"先":{"docs":{},"级":{"docs":{},"的":{"docs":{},",":{"docs":{},"优":{"docs":{},"先":{"docs":{},"级":{"docs":{},"高":{"docs":{},"的":{"docs":{},"线":{"docs":{},"程":{"docs":{},"先":{"docs":{},"运":{"docs":{},"行":{"docs":{},",":{"docs":{},"优":{"docs":{},"先":{"docs":{},"级":{"docs":{},"低":{"docs":{},"的":{"docs":{},"线":{"docs":{},"程":{"docs":{},"后":{"docs":{},"运":{"docs":{},"行":{"docs":{},"。":{"docs":{},"在":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{},"让":{"docs":{},"出":{"docs":{},"当":{"docs":{},"前":{"docs":{},"执":{"docs":{},"行":{"docs":{},"的":{"docs":{},"操":{"docs":{},"作":{"docs":{},",":{"docs":{},"就":{"docs":{},"是":{"docs":{},"暂":{"docs":{},"时":{"docs":{},"不":{"docs":{},"允":{"docs":{},"许":{"docs":{},",":{"docs":{},"希":{"docs":{},"望":{"docs":{},"把":{"docs":{},"运":{"docs":{},"行":{"docs":{},"机":{"docs":{},"会":{"docs":{},"让":{"docs":{},"给":{"docs":{},"其":{"docs":{},"它":{"docs":{},"线":{"docs":{},"程":{"docs":{},",":{"docs":{},"做":{"docs":{},"一":{"docs":{},"个":{"docs":{},"\"":{"docs":{},"好":{"docs":{},"人":{"docs":{},"\"":{"docs":{},",":{"docs":{},"此":{"docs":{},"时":{"docs":{},"调":{"docs":{},"用":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"创":{"docs":{},"建":{"docs":{},"是":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}},"等":{"docs":{},"都":{"docs":{},"有":{"docs":{},"自":{"docs":{},"己":{"docs":{},"独":{"docs":{},"立":{"docs":{},"的":{"docs":{},"工":{"docs":{},"作":{"docs":{},"任":{"docs":{},"务":{"docs":{},"。":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}}}}}}}}}},",":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}},"来":{"docs":{},"保":{"docs":{},"证":{"docs":{},"处":{"docs":{},"理":{"docs":{},"器":{"docs":{},"至":{"docs":{},"少":{"docs":{},"能":{"docs":{},"够":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}}}}}}}},"上":{"docs":{},"下":{"docs":{},"文":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}}}},"栈":{"docs":{},"使":{"docs":{},"用":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}},"而":{"docs":{},"在":{"docs":{},"桌":{"docs":{},"面":{"docs":{},"和":{"docs":{},"服":{"docs":{},"务":{"docs":{},"器":{"docs":{},"领":{"docs":{},"域":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"保":{"docs":{},"证":{"docs":{},"任":{"docs":{},"务":{"docs":{},"的":{"docs":{},"公":{"docs":{},"平":{"docs":{},"性":{"docs":{},",":{"docs":{},"即":{"docs":{},"使":{"docs":{},"优":{"docs":{},"先":{"docs":{},"级":{"docs":{},"比":{"docs":{},"较":{"docs":{},"低":{"docs":{},",":{"docs":{},"也":{"docs":{},"要":{"docs":{},"能":{"docs":{},"够":{"docs":{},"得":{"docs":{},"到":{"docs":{},"运":{"docs":{},"行":{"docs":{},"。":{"docs":{"programing-manual/sched/sched.html":{"ref":"programing-manual/sched/sched.html","tf":0.09090909090909091}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"内":{"docs":{},"核":{"docs":{},"的":{"docs":{},"任":{"docs":{},"务":{"docs":{},"调":{"docs":{},"度":{"docs":{},"属":{"docs":{},"于":{"docs":{"programing-manual/interrupt/delay_queue.html":{"ref":"programing-manual/interrupt/delay_queue.html","tf":0.01282051282051282}}}}}}}}}}},"是":{"docs":{},"处":{"docs":{},"理":{"docs":{},"中":{"docs":{},"断":{"docs":{},"延":{"docs":{},"迟":{"docs":{},"工":{"docs":{},"作":{"docs":{},",":{"docs":{},"然":{"docs":{},"后":{"docs":{},"就":{"docs":{},"直":{"docs":{},"接":{"docs":{},"返":{"docs":{},"回":{"docs":{},"。":{"docs":{},"等":{"docs":{},"到":{"docs":{},"响":{"docs":{},"应":{"docs":{},"了":{"docs":{},"该":{"docs":{},"中":{"docs":{},"断":{"docs":{},"之":{"docs":{},"后":{"docs":{},",":{"docs":{},"再":{"docs":{},"去":{"docs":{},"调":{"docs":{},"用":{"docs":{},"延":{"docs":{},"迟":{"docs":{},"队":{"docs":{},"列":{"docs":{},"中":{"docs":{},"的":{"docs":{},"工":{"docs":{},"作":{"docs":{},"。":{"docs":{"programing-manual/interrupt/delay_queue.html":{"ref":"programing-manual/interrupt/delay_queue.html","tf":0.01282051282051282}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.00684931506849315}}},"[":{"0":{"docs":{},",":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}},"7":{"docs":{},",":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}},"docs":{}},"{":{"0":{"docs":{},"x":{"1":{"0":{"docs":{},",":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.00909090909090909}}}},"docs":{}},"4":{"0":{"docs":{},",":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}},"docs":{}},"docs":{}}},"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575},"programing-manual/interrupt/delay_queue.html":{"ref":"programing-manual/interrupt/delay_queue.html","tf":0.01282051282051282},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.026017624842635333},"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.022058823529411766},"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.07727272727272727}}},"}":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.02308015107007973},"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.014705882352941176},"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.06363636363636363}},";":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575},"programing-manual/interrupt/delay_queue.html":{"ref":"programing-manual/interrupt/delay_queue.html","tf":0.01282051282051282},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.002517834662190516},"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.007352941176470588},"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.013636363636363636}}}},"产":{"docs":{},"生":{"docs":{},"时":{"docs":{},"钟":{"docs":{},"中":{"docs":{},"断":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},",":{"docs":{},"会":{"docs":{},"去":{"docs":{},"减":{"docs":{},"少":{"docs":{},"线":{"docs":{},"程":{"docs":{},"的":{"docs":{},"时":{"docs":{},"间":{"docs":{},"片":{"docs":{},",":{"docs":{},"时":{"docs":{},"间":{"docs":{},"片":{"docs":{},"为":{"0":{"docs":{},"后":{"docs":{},",":{"docs":{},"再":{"docs":{},"去":{"docs":{},"切":{"docs":{},"换":{"docs":{},"线":{"docs":{},"程":{"docs":{},",":{"docs":{},"这":{"docs":{},"是":{"docs":{},"属":{"docs":{},"于":{"docs":{},"线":{"docs":{},"程":{"docs":{},"被":{"docs":{},"动":{"docs":{},"切":{"docs":{},"换":{"docs":{},"。":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}}}}}}}}}}}}}}}}}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}},"传":{"docs":{},"入":{"docs":{},"线":{"docs":{},"程":{"docs":{},"的":{"docs":{},"名":{"docs":{},"字":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}}}},"但":{"docs":{},"是":{"docs":{},"注":{"docs":{},"意":{"docs":{},",":{"docs":{},"此":{"docs":{},"时":{"docs":{},"只":{"docs":{},"是":{"docs":{},"创":{"docs":{},"建":{"docs":{},"了":{"docs":{},"线":{"docs":{},"程":{"docs":{},",":{"docs":{},"还":{"docs":{},"没":{"docs":{},"有":{"docs":{},"启":{"docs":{},"动":{"docs":{},"线":{"docs":{},"程":{"docs":{},"。":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}}}}}}}}}}}}}}}}}}}},"函":{"docs":{},"数":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.02849740932642487}},"即":{"docs":{},"可":{"docs":{},"退":{"docs":{},"出":{"docs":{},"当":{"docs":{},"前":{"docs":{},"线":{"docs":{},"程":{"docs":{},"的":{"docs":{},"运":{"docs":{},"行":{"docs":{},"。":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}}}}}}}}},",":{"docs":{},"相":{"docs":{},"反":{"docs":{},"关":{"docs":{},"闭":{"docs":{},"则":{"docs":{},"是":{"docs":{"programing-manual/interrupt/irq.html":{"ref":"programing-manual/interrupt/irq.html","tf":0.01694915254237288}}}}}}}}},"后":{"docs":{},",":{"docs":{},"就":{"docs":{},"可":{"docs":{},"以":{"docs":{},"使":{"docs":{},"用":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}},"来":{"docs":{},"打":{"docs":{},"印":{"docs":{},"消":{"docs":{},"息":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}},"采":{"docs":{},"用":{"docs":{},"大":{"docs":{},"驼":{"docs":{},"峰":{"docs":{},"命":{"docs":{},"名":{"docs":{},"风":{"docs":{},"格":{"docs":{},",":{"docs":{},"即":{"docs":{},"每":{"docs":{},"个":{"docs":{},"单":{"docs":{},"词":{"docs":{},"的":{"docs":{},"首":{"docs":{},"字":{"docs":{},"母":{"docs":{},"都":{"docs":{},"大":{"docs":{},"写":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"单":{"docs":{},"词":{"docs":{},"是":{"docs":{},"用":{"docs":{},"的":{"docs":{},"缩":{"docs":{},"写":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"单":{"docs":{},"词":{"docs":{},"之":{"docs":{},"间":{"docs":{},"需":{"docs":{},"要":{"docs":{},"用":{"docs":{},"\"":{"docs":{},"_":{"docs":{},"\"":{"docs":{},"隔":{"docs":{},"开":{"docs":{},",":{"docs":{},"例":{"docs":{},"如":{"docs":{},":":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"同":{"docs":{},"时":{"docs":{},"运":{"docs":{},"行":{"docs":{},"。":{"docs":{},"比":{"docs":{},"如":{"docs":{},"你":{"docs":{},"一":{"docs":{},"边":{"docs":{},"听":{"docs":{},"歌":{"docs":{},",":{"docs":{},"一":{"docs":{},"边":{"docs":{},"写":{"docs":{},"代":{"docs":{},"码":{"docs":{},",":{"docs":{},"其":{"docs":{},"实":{"docs":{},"就":{"docs":{},"是":{"docs":{},"音":{"docs":{},"乐":{"docs":{},"播":{"docs":{},"放":{"docs":{},"器":{"docs":{},"和":{"docs":{},"代":{"docs":{},"码":{"docs":{},"编":{"docs":{},"辑":{"docs":{},"器":{"docs":{},"这":{"docs":{},"两":{"docs":{},"个":{"docs":{},"任":{"docs":{},"务":{"docs":{},"在":{"docs":{},"快":{"docs":{},"速":{"docs":{},"切":{"docs":{},"换":{"docs":{},"而":{"docs":{},"形":{"docs":{},"成":{"docs":{},"的":{"docs":{},"效":{"docs":{},"果":{"docs":{},"。":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"就":{"docs":{},"会":{"docs":{},"发":{"docs":{},"起":{"docs":{},"一":{"docs":{},"次":{"docs":{},"切":{"docs":{},"换":{"docs":{},"。":{"docs":{},"这":{"docs":{},"样":{"docs":{},",":{"docs":{},"在":{"docs":{},"人":{"docs":{},"看":{"docs":{},"来":{"docs":{},",":{"docs":{},"就":{"docs":{},"是":{"docs":{},"多":{"docs":{},"个":{"docs":{},"任":{"docs":{},"务":{"docs":{},"在":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}}}}}}}}}}}}}}}}}}},"将":{"docs":{},"他":{"docs":{},"们":{"docs":{},"全":{"docs":{},"部":{"docs":{},"处":{"docs":{},"理":{"docs":{},",":{"docs":{},"调":{"docs":{},"用":{"docs":{},"定":{"docs":{},"时":{"docs":{},"器":{"docs":{},"超":{"docs":{},"时":{"docs":{},"处":{"docs":{},"理":{"docs":{},"函":{"docs":{},"数":{"docs":{},",":{"docs":{},"然":{"docs":{},"后":{"docs":{},"更":{"docs":{},"新":{"docs":{},"最":{"docs":{},"近":{"docs":{},"超":{"docs":{},"时":{"docs":{},"定":{"docs":{},"时":{"docs":{},"器":{"docs":{},"的":{"docs":{},"t":{"docs":{},"i":{"docs":{},"c":{"docs":{},"k":{"docs":{},"s":{"docs":{},"。":{"docs":{"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.010752688172043012}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"可":{"docs":{},"以":{"docs":{},"启":{"docs":{},"动":{"docs":{},"线":{"docs":{},"程":{"docs":{},",":{"docs":{},"线":{"docs":{},"程":{"docs":{},"就":{"docs":{},"可":{"docs":{},"以":{"docs":{},"开":{"docs":{},"始":{"docs":{},"运":{"docs":{},"行":{"docs":{},"了":{"docs":{},"。":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}}}}}}}}}}}}},"让":{"docs":{},"出":{"docs":{},"执":{"docs":{},"行":{"docs":{},"权":{"docs":{},"。":{"docs":{},"值":{"docs":{},"得":{"docs":{},"注":{"docs":{},"意":{"docs":{},"的":{"docs":{},"是":{"docs":{},",":{"docs":{},"本":{"docs":{},"线":{"docs":{},"程":{"docs":{},"不":{"docs":{},"会":{"docs":{},"阻":{"docs":{},"塞":{"docs":{},",":{"docs":{},"会":{"docs":{},"在":{"docs":{},"下":{"docs":{},"一":{"docs":{},"个":{"docs":{},"时":{"docs":{},"机":{"docs":{},"再":{"docs":{},"次":{"docs":{},"被":{"docs":{},"调":{"docs":{},"度":{"docs":{},"。":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"升":{"docs":{},"级":{"docs":{},"为":{"docs":{},"进":{"docs":{},"程":{"docs":{},"。":{"docs":{},"除":{"docs":{},"此":{"docs":{},"之":{"docs":{},"外":{"docs":{},",":{"docs":{},"还":{"docs":{},"会":{"docs":{},"有":{"docs":{},"一":{"docs":{},"些":{"docs":{},"其":{"docs":{},"它":{"docs":{},"进":{"docs":{},"程":{"docs":{},"独":{"docs":{},"有":{"docs":{},"的":{"docs":{},"资":{"docs":{},"源":{"docs":{},"。":{"docs":{"programing-manual/process/process.html":{"ref":"programing-manual/process/process.html","tf":0.012658227848101266}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"注":{"docs":{},"册":{"docs":{},"了":{"docs":{},"串":{"docs":{},"口":{"docs":{},"中":{"docs":{},"断":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"接":{"docs":{},"受":{"docs":{},"输":{"docs":{},"入":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}},"属":{"docs":{},"于":{"docs":{},"分":{"docs":{},"时":{"docs":{},"优":{"docs":{},"先":{"docs":{},"级":{"docs":{},",":{"docs":{},"优":{"docs":{},"先":{"docs":{},"级":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}}}}}},"实":{"docs":{},"时":{"docs":{},"优":{"docs":{},"先":{"docs":{},"级":{"docs":{},"。":{"docs":{},"在":{"docs":{},"使":{"docs":{},"用":{"docs":{},"过":{"docs":{},"程":{"docs":{},"中":{"docs":{},",":{"docs":{},"通":{"docs":{},"常":{"docs":{},"使":{"docs":{},"用":{"docs":{},"宏":{"docs":{},",":{"docs":{},"而":{"docs":{},"不":{"docs":{},"是":{"docs":{},"直":{"docs":{},"接":{"docs":{},"使":{"docs":{},"用":{"docs":{},"数":{"docs":{},"字":{"docs":{},"。":{"docs":{},"优":{"docs":{},"先":{"docs":{},"级":{"docs":{},"宏":{"docs":{},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"当":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"前":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"实":{"docs":{},"现":{"docs":{},"的":{"docs":{},"线":{"docs":{},"程":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}}}}}}}},"的":{"docs":{},"进":{"docs":{},"程":{"docs":{},"。":{"docs":{"programing-manual/interrupt/irq.html":{"ref":"programing-manual/interrupt/irq.html","tf":0.01694915254237288}}}}}}},"处":{"docs":{},"理":{"docs":{},"器":{"docs":{},"调":{"docs":{},"用":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}},"线":{"docs":{},"程":{"docs":{},"需":{"docs":{},"要":{"docs":{},"休":{"docs":{},"眠":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},",":{"docs":{},"就":{"docs":{},"需":{"docs":{},"要":{"docs":{},"传":{"docs":{},"入":{"docs":{},"休":{"docs":{},"眠":{"docs":{},"的":{"docs":{},"时":{"docs":{},"间":{"docs":{},",":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}}}}}}}}}}}}}}}}}},"开":{"docs":{},"启":{"docs":{"programing-manual/process/process.html":{"ref":"programing-manual/process/process.html","tf":0.012658227848101266}}}},"需":{"docs":{},"要":{"docs":{},"注":{"docs":{},"销":{"docs":{},"某":{"docs":{},"个":{"docs":{},"中":{"docs":{},"断":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},",":{"docs":{},"只":{"docs":{},"需":{"docs":{},"要":{"docs":{},"传":{"docs":{},"入":{"docs":{},"中":{"docs":{},"断":{"docs":{},"号":{"docs":{},"以":{"docs":{},"及":{"docs":{},"注":{"docs":{},"册":{"docs":{},"时":{"docs":{},"的":{"docs":{},"数":{"docs":{},"据":{"docs":{},"即":{"docs":{},"可":{"docs":{},"。":{"docs":{},"相":{"docs":{},"当":{"docs":{},"于":{"docs":{},"解":{"docs":{},"除":{"docs":{},"了":{"docs":{},"中":{"docs":{},"断":{"docs":{},"函":{"docs":{},"数":{"docs":{},"的":{"docs":{},"绑":{"docs":{},"定":{"docs":{},"。":{"docs":{"programing-manual/interrupt/irq.html":{"ref":"programing-manual/interrupt/irq.html","tf":0.01694915254237288}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"停":{"docs":{},"止":{"docs":{},"定":{"docs":{},"时":{"docs":{},"器":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},",":{"docs":{},"调":{"docs":{},"用":{"docs":{"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.010752688172043012}}}}}}}}}}}}}}},"时":{"docs":{},"钟":{"docs":{},"中":{"docs":{},"断":{"docs":{},"产":{"docs":{},"生":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},",":{"docs":{},"会":{"docs":{},"改":{"docs":{},"变":{"docs":{},"t":{"docs":{},"i":{"docs":{},"c":{"docs":{},"k":{"docs":{},"s":{"docs":{},"的":{"docs":{},"值":{"docs":{},",":{"docs":{},"与":{"docs":{},"此":{"docs":{},"同":{"docs":{},"时":{"docs":{},"也":{"docs":{},"会":{"docs":{},"去":{"docs":{},"检":{"docs":{},"测":{"docs":{},"是":{"docs":{},"否":{"docs":{},"有":{"docs":{},"定":{"docs":{},"时":{"docs":{},"器":{"docs":{},"超":{"docs":{},"时":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"有":{"docs":{},"定":{"docs":{},"时":{"docs":{},"器":{"docs":{},"超":{"docs":{},"时":{"docs":{},",":{"docs":{},"则":{"docs":{},"会":{"docs":{},"去":{"docs":{},"处":{"docs":{},"理":{"docs":{},"定":{"docs":{},"时":{"docs":{},"器":{"docs":{},"超":{"docs":{},"时":{"docs":{},"函":{"docs":{},"数":{"docs":{},"。":{"docs":{"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.010752688172043012}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{},"定":{"docs":{},"时":{"docs":{},"器":{"docs":{},"的":{"docs":{},"t":{"docs":{},"i":{"docs":{},"c":{"docs":{},"k":{"docs":{},"s":{"docs":{},"到":{"docs":{},"达":{"docs":{},"了":{"docs":{},"最":{"docs":{},"近":{"docs":{},"超":{"docs":{},"时":{"docs":{},"定":{"docs":{},"时":{"docs":{},"器":{"docs":{},"的":{"docs":{},"t":{"docs":{},"i":{"docs":{},"c":{"docs":{},"k":{"docs":{},"s":{"docs":{},"值":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},",":{"docs":{},"就":{"docs":{},"去":{"docs":{},"检":{"docs":{},"测":{"docs":{},"定":{"docs":{},"时":{"docs":{},"器":{"docs":{},"链":{"docs":{},"表":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"有":{"docs":{},"多":{"docs":{},"个":{"docs":{},"同":{"docs":{},"样":{"docs":{},"超":{"docs":{},"时":{"docs":{},"的":{"docs":{},"定":{"docs":{},"时":{"docs":{},"器":{"docs":{},",":{"docs":{"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.010752688172043012}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"超":{"docs":{},"时":{"docs":{},"后":{"docs":{},",":{"docs":{},"就":{"docs":{},"会":{"docs":{},"产":{"docs":{},"生":{"docs":{},"一":{"docs":{},"个":{"docs":{},"中":{"docs":{},"断":{"docs":{},",":{"docs":{},"于":{"docs":{},"是":{"docs":{},"就":{"docs":{},"设":{"docs":{},"置":{"docs":{},"下":{"docs":{},"一":{"docs":{},"个":{"docs":{},"中":{"docs":{},"断":{"docs":{},"产":{"docs":{},"生":{"docs":{},"时":{"docs":{},"的":{"docs":{},"超":{"docs":{},"时":{"docs":{},"值":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"使":{"docs":{},"用":{"docs":{},"宏":{"docs":{},"条":{"docs":{},"件":{"docs":{},"#":{"docs":{},"i":{"docs":{},"f":{"docs":{},",":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}}}},"函":{"docs":{},"数":{"docs":{},"参":{"docs":{},"数":{"docs":{},"过":{"docs":{},"多":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},",":{"docs":{},"一":{"docs":{},"行":{"docs":{},"写":{"docs":{},"不":{"docs":{},"下":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"就":{"docs":{},"需":{"docs":{},"要":{"docs":{},"把":{"docs":{},"每":{"docs":{},"个":{"docs":{},"参":{"docs":{},"数":{"docs":{},"写":{"docs":{},"成":{"docs":{},"一":{"docs":{},"行":{"docs":{},"。":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"宏":{"docs":{},"需":{"docs":{},"要":{"docs":{},"使":{"docs":{},"用":{"docs":{},"多":{"docs":{},"行":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},",":{"docs":{},"则":{"docs":{},"使":{"docs":{},"用":{"docs":{},"空":{"docs":{},"格":{"docs":{},"+":{"docs":{},"\"":{"docs":{},"\\":{"docs":{},"\"":{"docs":{},"的":{"docs":{},"形":{"docs":{},"式":{"docs":{},"进":{"docs":{},"行":{"docs":{},"换":{"docs":{},"行":{"docs":{},",":{"docs":{},"例":{"docs":{},"如":{"docs":{},":":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"我":{"docs":{},"们":{"docs":{},"添":{"docs":{},"加":{"docs":{},"代":{"docs":{},"码":{"docs":{},"要":{"docs":{},"提":{"docs":{},"交":{"docs":{},"到":{"docs":{},"g":{"docs":{},"i":{"docs":{},"t":{"docs":{},"仓":{"docs":{},"库":{"docs":{},"中":{"docs":{},"时":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"需":{"docs":{},"要":{"docs":{},"统":{"docs":{},"一":{"docs":{},"下":{"docs":{},"规":{"docs":{},"范":{"docs":{},",":{"docs":{},"这":{"docs":{},"样":{"docs":{},"不":{"docs":{},"会":{"docs":{},"显":{"docs":{},"得":{"docs":{},"整":{"docs":{},"个":{"docs":{},"项":{"docs":{},"目":{"docs":{},"乱":{"docs":{},"糟":{"docs":{},"糟":{"docs":{},"的":{"docs":{},",":{"docs":{},"当":{"docs":{},"然":{"docs":{},"是":{"docs":{},"需":{"docs":{},"要":{"docs":{},"花":{"docs":{},"点":{"docs":{},"时":{"docs":{},"间":{"docs":{},"来":{"docs":{},"学":{"docs":{},"习":{"docs":{},"和":{"docs":{},"改":{"docs":{},"变":{"docs":{},"的":{"docs":{},"。":{"docs":{},"每":{"docs":{},"次":{"docs":{},"提":{"docs":{},"交":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},"尽":{"docs":{},"量":{"docs":{},"短":{"docs":{},"小":{"docs":{},",":{"docs":{},"涉":{"docs":{},"及":{"docs":{},"范":{"docs":{},"围":{"docs":{},"不":{"docs":{},"要":{"docs":{},"太":{"docs":{},"广":{"docs":{},",":{"docs":{},"专":{"docs":{},"注":{"docs":{},"于":{"docs":{},"某":{"docs":{},"个":{"docs":{},"领":{"docs":{},"域":{"docs":{},"。":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"你":{"docs":{},"要":{"docs":{},"使":{"docs":{},"用":{"docs":{},"某":{"docs":{},"个":{"docs":{},"平":{"docs":{},"台":{"docs":{},"的":{"docs":{},"配":{"docs":{},"置":{"docs":{},"时":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"通":{"docs":{},"过":{"docs":{},"设":{"docs":{},"置":{"docs":{},"默":{"docs":{},"认":{"docs":{},"配":{"docs":{},"置":{"docs":{},"来":{"docs":{},"进":{"docs":{},"行":{"docs":{},"选":{"docs":{},"择":{"docs":{},"。":{"docs":{"tutorial/menuconfig.html":{"ref":"tutorial/menuconfig.html","tf":0.038461538461538464}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"很":{"docs":{},"多":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"获":{"docs":{},"取":{"docs":{},"当":{"docs":{},"前":{"docs":{},"线":{"docs":{},"程":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"使":{"docs":{},"用":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}}}}}}}}}}}}}}}},"拿":{"docs":{},"到":{"1":{"docs":{},"个":{"docs":{},"线":{"docs":{},"程":{"docs":{},"执":{"docs":{},"行":{"docs":{},",":{"docs":{},"避":{"docs":{},"免":{"docs":{},"内":{"docs":{},"核":{"docs":{},"跑":{"docs":{},"飞":{"docs":{},"。":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}}}}}}}}}}},"docs":{}}},"最":{"docs":{},"开":{"docs":{},"始":{"docs":{},",":{"docs":{},"内":{"docs":{},"核":{"docs":{},"是":{"docs":{},"没":{"docs":{},"有":{"docs":{},"线":{"docs":{},"程":{"docs":{},"概":{"docs":{},"念":{"docs":{},"的":{"docs":{},",":{"docs":{},"处":{"docs":{},"理":{"docs":{},"器":{"docs":{},"只":{"docs":{},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{},"执":{"docs":{},"行":{"docs":{},"流":{"docs":{},"。":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}}}}}}}}}}}}}}}}}}}},"是":{"docs":{},"可":{"docs":{},"以":{"docs":{},"不":{"docs":{},"开":{"docs":{},"启":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}},"后":{"docs":{},",":{"docs":{},"当":{"docs":{},"有":{"docs":{},"中":{"docs":{},"断":{"docs":{},"产":{"docs":{},"生":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},",":{"docs":{},"就":{"docs":{},"可":{"docs":{},"以":{"docs":{},"去":{"docs":{},"激":{"docs":{},"活":{"docs":{},"中":{"docs":{},"断":{"docs":{},"工":{"docs":{},"作":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"则":{"docs":{},"需":{"docs":{},"要":{"docs":{},"调":{"docs":{},"用":{"docs":{"programing-manual/interrupt/delay_queue.html":{"ref":"programing-manual/interrupt/delay_queue.html","tf":0.01282051282051282}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"如":{"docs":{},"果":{"docs":{},"想":{"docs":{},"要":{"docs":{},"保":{"docs":{},"存":{"docs":{},"当":{"docs":{},"前":{"docs":{},"的":{"docs":{},"配":{"docs":{},"置":{"docs":{},"到":{"docs":{},"选":{"docs":{},"中":{"docs":{},"的":{"docs":{},"平":{"docs":{},"台":{"docs":{},",":{"docs":{},"则":{"docs":{},"需":{"docs":{},"要":{"docs":{},"在":{"docs":{},"执":{"docs":{},"行":{"docs":{},"s":{"docs":{},"a":{"docs":{},"v":{"docs":{},"e":{"docs":{},"操":{"docs":{},"作":{"docs":{},"才":{"docs":{},"行":{"docs":{},"。":{"docs":{},"操":{"docs":{},"作":{"docs":{},"完":{"docs":{},"后":{"docs":{},",":{"docs":{},"你":{"docs":{},"所":{"docs":{},"修":{"docs":{},"改":{"docs":{},"的":{"docs":{},"配":{"docs":{},"置":{"docs":{},"就":{"docs":{},"保":{"docs":{},"存":{"docs":{},"了":{"docs":{},",":{"docs":{},"当":{"docs":{},"切":{"docs":{},"换":{"docs":{},"到":{"docs":{},"其":{"docs":{},"它":{"docs":{},"平":{"docs":{},"台":{"docs":{},"后":{"docs":{},",":{"docs":{},"这":{"docs":{},"个":{"docs":{},"配":{"docs":{},"置":{"docs":{},"依":{"docs":{},"然":{"docs":{},"存":{"docs":{},"在":{"docs":{},",":{"docs":{},"只":{"docs":{},"需":{"docs":{},"要":{"docs":{},"重":{"docs":{},"复":{"docs":{},"第":{"docs":{},"一":{"docs":{},"步":{"docs":{},",":{"docs":{},"更":{"docs":{},"新":{"docs":{},"一":{"docs":{},"下":{"docs":{},"配":{"docs":{},"置":{"docs":{},"即":{"docs":{},"可":{"docs":{},"。":{"docs":{"tutorial/menuconfig.html":{"ref":"tutorial/menuconfig.html","tf":0.038461538461538464}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"先":{"docs":{},"超":{"docs":{},"时":{"docs":{},"的":{"docs":{},"定":{"docs":{},"时":{"docs":{},"器":{"docs":{},"会":{"docs":{},"插":{"docs":{},"入":{"docs":{},"到":{"docs":{},"链":{"docs":{},"表":{"docs":{},"头":{"docs":{},",":{"docs":{},"超":{"docs":{},"时":{"docs":{},"时":{"docs":{},"间":{"docs":{},"比":{"docs":{},"较":{"docs":{},"久":{"docs":{},"的":{"docs":{},"定":{"docs":{},"时":{"docs":{},"器":{"docs":{},"会":{"docs":{},"被":{"docs":{},"加":{"docs":{},"入":{"docs":{},"到":{"docs":{},"链":{"docs":{},"表":{"docs":{},"的":{"docs":{},"末":{"docs":{},"尾":{"docs":{},"。":{"docs":{"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.010752688172043012}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"小":{"docs":{},"的":{"docs":{},"单":{"docs":{},"元":{"docs":{},"测":{"docs":{},"试":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}}}}}},"精":{"docs":{},"简":{"docs":{},"框":{"docs":{},"架":{"docs":{},":":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}}}}}},"此":{"docs":{},"时":{"docs":{},",":{"docs":{},"处":{"docs":{},"理":{"docs":{},"器":{"docs":{},"就":{"docs":{},"进":{"docs":{},"入":{"docs":{},"线":{"docs":{},"程":{"docs":{},"环":{"docs":{},"境":{"docs":{},",":{"docs":{},"开":{"docs":{},"启":{"docs":{},"线":{"docs":{},"程":{"docs":{},"调":{"docs":{},"度":{"docs":{},"生":{"docs":{},"涯":{"docs":{},"。":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}}}}}}}}}}}}}}}}}}}},"每":{"docs":{},"个":{"docs":{},"线":{"docs":{},"程":{"docs":{},"执":{"docs":{},"行":{"docs":{},"一":{"docs":{},"段":{"docs":{},"时":{"docs":{},"间":{"docs":{},"后":{"docs":{},",":{"docs":{},"就":{"docs":{},"会":{"docs":{},"切":{"docs":{},"换":{"docs":{},"到":{"docs":{},"其":{"docs":{},"它":{"docs":{},"线":{"docs":{},"程":{"docs":{},"执":{"docs":{},"行":{"docs":{},"。":{"docs":{},"这":{"docs":{},"个":{"docs":{},"切":{"docs":{},"换":{"docs":{},"可":{"docs":{},"能":{"docs":{},"是":{"docs":{},"主":{"docs":{},"动":{"docs":{},"的":{"docs":{},",":{"docs":{},"也":{"docs":{},"可":{"docs":{},"能":{"docs":{},"是":{"docs":{},"被":{"docs":{},"动":{"docs":{},"的":{"docs":{},"。":{"docs":{},"线":{"docs":{},"程":{"docs":{},"在":{"docs":{},"阻":{"docs":{},"塞":{"docs":{},"(":{"docs":{},"b":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},")":{"docs":{},"和":{"docs":{},"让":{"docs":{},"出":{"docs":{},"(":{"docs":{},"y":{"docs":{},"i":{"docs":{},"e":{"docs":{},"l":{"docs":{},"d":{"docs":{},")":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},"是":{"docs":{},"属":{"docs":{},"于":{"docs":{},"线":{"docs":{},"程":{"docs":{},"主":{"docs":{},"动":{"docs":{},"发":{"docs":{},"起":{"docs":{},"切":{"docs":{},"换":{"docs":{},"。":{"docs":{},"在":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"都":{"docs":{},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{},"其":{"docs":{},"对":{"docs":{},"应":{"docs":{},"的":{"docs":{},"线":{"docs":{},"程":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"其":{"docs":{},"来":{"docs":{},"记":{"docs":{},"录":{"docs":{},"线":{"docs":{},"程":{"docs":{},"的":{"docs":{},"信":{"docs":{},"息":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},"线":{"docs":{},"程":{"docs":{},"链":{"docs":{},"表":{"docs":{},",":{"docs":{},"线":{"docs":{},"程":{"docs":{},"状":{"docs":{},"态":{"docs":{},",":{"docs":{},"线":{"docs":{},"程":{"docs":{},"栈":{"docs":{},"等":{"docs":{},"基":{"docs":{},"础":{"docs":{},"信":{"docs":{},"息":{"docs":{},"。":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"次":{"docs":{},"提":{"docs":{},"交":{"docs":{},",":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"m":{"docs":{},"i":{"docs":{},"t":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}}}}}}}}}},"获":{"docs":{},"取":{"docs":{},"自":{"docs":{},"己":{"docs":{},"的":{"docs":{},"线":{"docs":{},"程":{"docs":{},"指":{"docs":{},"针":{"docs":{},"。":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}}}}},"t":{"docs":{},"l":{"docs":{},"s":{"docs":{},"的":{"docs":{},"值":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}},"互":{"docs":{},"斥":{"docs":{},"体":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}},"当":{"docs":{},"前":{"docs":{},"的":{"docs":{},"时":{"docs":{},"间":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}},"文":{"docs":{},"件":{"docs":{},"偏":{"docs":{},"移":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}},"系":{"docs":{},"统":{"docs":{},"运":{"docs":{},"行":{"docs":{},"的":{"docs":{},"时":{"docs":{},"间":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}},"线":{"docs":{},"程":{"docs":{},"i":{"docs":{},"d":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}},"进":{"docs":{},"程":{"docs":{},"i":{"docs":{},"d":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}},"还":{"docs":{},"有":{"docs":{},"重":{"docs":{},"要":{"docs":{},"的":{"docs":{},"优":{"docs":{},"先":{"docs":{},"级":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}}},"一":{"docs":{},"个":{"docs":{},"很":{"docs":{},"重":{"docs":{},"要":{"docs":{},"的":{"docs":{},"地":{"docs":{},"方":{"docs":{},"就":{"docs":{},"是":{"docs":{},"对":{"docs":{},"状":{"docs":{},"态":{"docs":{},"寄":{"docs":{},"存":{"docs":{},"器":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}},"值":{"docs":{},"得":{"docs":{},"注":{"docs":{},"意":{"docs":{},"的":{"docs":{},"是":{"docs":{},",":{"docs":{},"获":{"docs":{},"取":{"docs":{},"处":{"docs":{},"理":{"docs":{},"器":{"docs":{},"的":{"docs":{},"索":{"docs":{},"引":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}},"能":{"docs":{},"自":{"docs":{},"动":{"docs":{},"处":{"docs":{},"理":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"关":{"docs":{},"系":{"docs":{},"。":{"docs":{"tutorial/menuconfig.html":{"ref":"tutorial/menuconfig.html","tf":0.038461538461538464}}}}}}}}}}}}},"销":{"docs":{},"毁":{"docs":{},"一":{"docs":{},"个":{"docs":{},"线":{"docs":{},"程":{"docs":{},"是":{"docs":{},"只":{"docs":{},"需":{"docs":{},"要":{"docs":{},"传":{"docs":{},"入":{"docs":{},"线":{"docs":{},"程":{"docs":{},"地":{"docs":{},"址":{"docs":{},"即":{"docs":{},"可":{"docs":{},"。":{"docs":{},"注":{"docs":{},"意":{"docs":{},",":{"docs":{},"销":{"docs":{},"毁":{"docs":{},"不":{"docs":{},"代":{"docs":{},"表":{"docs":{},"把":{"docs":{},"线":{"docs":{},"程":{"docs":{},"从":{"docs":{},"运":{"docs":{},"行":{"docs":{},"队":{"docs":{},"列":{"docs":{},"中":{"docs":{},"摘":{"docs":{},"除":{"docs":{},",":{"docs":{},"只":{"docs":{},"是":{"docs":{},"释":{"docs":{},"放":{"docs":{},"线":{"docs":{},"程":{"docs":{},"占":{"docs":{},"用":{"docs":{},"的":{"docs":{},"内":{"docs":{},"存":{"docs":{},"。":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"线":{"docs":{},"程":{"docs":{},"处":{"docs":{},"理":{"docs":{},"函":{"docs":{},"数":{"docs":{"programing-manual/sched/thread.html":{"ref":"programing-manual/sched/thread.html","tf":0.003424657534246575}}}}}}}},"以":{"docs":{},"及":{"docs":{},"进":{"docs":{},"程":{"docs":{},"标":{"docs":{},"志":{"docs":{"programing-manual/process/process.html":{"ref":"programing-manual/process/process.html","tf":0.012658227848101266}}}}}},"中":{"docs":{},"断":{"docs":{},"处":{"docs":{},"理":{"docs":{},"完":{"docs":{},"后":{"docs":{},"的":{"docs":{},"应":{"docs":{},"答":{"docs":{},"处":{"docs":{},"理":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}},"将":{"docs":{},"这":{"docs":{},"些":{"docs":{},"数":{"docs":{},"据":{"docs":{},"构":{"docs":{},"建":{"docs":{},"在":{"docs":{},"栈":{"docs":{},"顶":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}},"显":{"docs":{},"然":{"docs":{},"超":{"docs":{},"过":{"docs":{},"了":{"docs":{"programing-manual/process/process.html":{"ref":"programing-manual/process/process.html","tf":0.012658227848101266}}}}}}},"来":{"docs":{},"实":{"docs":{},"现":{"docs":{},"进":{"docs":{},"程":{"docs":{},"的":{"docs":{},"虚":{"docs":{},"拟":{"docs":{},"地":{"docs":{},"址":{"docs":{},"空":{"docs":{},"间":{"docs":{},"。":{"docs":{},"每":{"docs":{},"个":{"docs":{},"进":{"docs":{},"程":{"docs":{},"都":{"docs":{},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{"programing-manual/process/process.html":{"ref":"programing-manual/process/process.html","tf":0.012658227848101266}}}}}}}}}}}}}}}}}}}}}}},"要":{"docs":{},"加":{"docs":{},"载":{"docs":{},"程":{"docs":{},"序":{"docs":{},"的":{"docs":{},"路":{"docs":{},"径":{"docs":{"programing-manual/process/process.html":{"ref":"programing-manual/process/process.html","tf":0.012658227848101266}}}}}}}}}},"那":{"docs":{},"么":{"docs":{},"访":{"docs":{},"问":{"docs":{},"的":{"docs":{},"地":{"docs":{},"址":{"docs":{},"就":{"docs":{},"只":{"docs":{},"能":{"docs":{},"是":{"docs":{},"在":{"docs":{"programing-manual/process/process.html":{"ref":"programing-manual/process/process.html","tf":0.012658227848101266}}}}}}}}}}}},"就":{"docs":{},"切":{"docs":{},"换":{"docs":{},"到":{"docs":{},"线":{"docs":{},"程":{"docs":{},"里":{"docs":{},"面":{"docs":{},"去":{"docs":{},"了":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}},"及":{"docs":{},"时":{"docs":{},"调":{"docs":{},"度":{"docs":{},"的":{"docs":{},"精":{"docs":{},"度":{"docs":{},"低":{"docs":{},"一":{"docs":{},"点":{"docs":{},"也":{"docs":{},"没":{"docs":{},"有":{"docs":{},"太":{"docs":{},"大":{"docs":{},"影":{"docs":{},"响":{"docs":{},"。":{"docs":{"programing-manual/interrupt/delay_queue.html":{"ref":"programing-manual/interrupt/delay_queue.html","tf":0.01282051282051282}}}}}}}}}}}}}}}}}}}},"这":{"docs":{},"样":{"docs":{},"才":{"docs":{},"能":{"docs":{},"保":{"docs":{},"证":{"docs":{},"时":{"docs":{},"间":{"docs":{},"的":{"docs":{},"精":{"docs":{},"度":{"docs":{},"。":{"docs":{"programing-manual/interrupt/delay_queue.html":{"ref":"programing-manual/interrupt/delay_queue.html","tf":0.01282051282051282}}}}}}}}}}}}}},"处":{"docs":{},"理":{"docs":{},"函":{"docs":{},"数":{"docs":{},"参":{"docs":{},"数":{"docs":{"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.010752688172043012}}}}}}}},"超":{"docs":{},"时":{"docs":{},"后":{"docs":{},"调":{"docs":{},"用":{"docs":{},"的":{"docs":{},"处":{"docs":{},"理":{"docs":{},"函":{"docs":{},"数":{"docs":{"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.010752688172043012}}}}}}}}}}}},"产":{"docs":{},"生":{"docs":{},"中":{"docs":{},"断":{"docs":{},"后":{"docs":{},",":{"docs":{},"就":{"docs":{},"去":{"docs":{},"该":{"docs":{},"寄":{"docs":{},"存":{"docs":{},"器":{"docs":{},"保":{"docs":{},"存":{"docs":{},"的":{"docs":{},"中":{"docs":{},"断":{"docs":{},"向":{"docs":{},"量":{"docs":{},"表":{"docs":{},"地":{"docs":{},"址":{"docs":{},"找":{"docs":{},"中":{"docs":{},"断":{"docs":{},"号":{"docs":{},"对":{"docs":{},"应":{"docs":{},"的":{"docs":{},"中":{"docs":{},"断":{"docs":{},"服":{"docs":{},"务":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"其":{"docs":{},"内":{"docs":{},"核":{"docs":{},"的":{"docs":{},"入":{"docs":{},"口":{"docs":{},"地":{"docs":{},"址":{"docs":{},"为":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}},"可":{"docs":{},"以":{"docs":{},"根":{"docs":{},"据":{"docs":{},"寄":{"docs":{},"存":{"docs":{},"器":{"docs":{},"的":{"docs":{},"值":{"docs":{},"来":{"docs":{},"判":{"docs":{},"断":{"docs":{},"处":{"docs":{},"理":{"docs":{},"器":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}},"因":{"docs":{},"为":{"docs":{},"r":{"docs":{},"i":{"docs":{},"s":{"docs":{},"c":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}},"并":{"docs":{},"复":{"docs":{},"制":{"docs":{},"内":{"docs":{},"核":{"docs":{},"的":{"docs":{},"页":{"docs":{},"表":{"docs":{},"项":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}},"所":{"docs":{},"有":{"docs":{},"地":{"docs":{},"址":{"docs":{},"都":{"docs":{},"变":{"docs":{},"成":{"docs":{},"虚":{"docs":{},"拟":{"docs":{},"地":{"docs":{},"址":{"docs":{},"了":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}},"自":{"docs":{},"从":{"docs":{},"进":{"docs":{},"入":{"2":{"1":{"docs":{},"世":{"docs":{},"纪":{"docs":{},",":{"docs":{},"处":{"docs":{},"理":{"docs":{},"器":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"就":{"docs":{},"有":{"docs":{},"了":{"docs":{},"瓶":{"docs":{},"颈":{"docs":{},",":{"docs":{},"不":{"docs":{},"再":{"docs":{},"迅":{"docs":{},"猛":{"docs":{},"增":{"docs":{},"长":{"docs":{},"。":{"docs":{},"此":{"docs":{},"时":{"docs":{},"就":{"docs":{},"有":{"docs":{},"人":{"docs":{},"提":{"docs":{},"出":{"docs":{},"多":{"docs":{},"个":{"docs":{},"处":{"docs":{},"理":{"docs":{},"器":{"docs":{},"一":{"docs":{},"起":{"docs":{},"工":{"docs":{},"作":{"docs":{},"的":{"docs":{},"方":{"docs":{},"式":{"docs":{},",":{"docs":{},"来":{"docs":{},"弥":{"docs":{},"补":{"docs":{},"处":{"docs":{},"理":{"docs":{},"器":{"docs":{},"性":{"docs":{},"能":{"docs":{},"的":{"docs":{},"问":{"docs":{},"题":{"docs":{},"。":{"docs":{"programing-manual/sched/smp.html":{"ref":"programing-manual/sched/smp.html","tf":0.0625}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"docs":{}},"docs":{}}}}},"再":{"docs":{},"去":{"docs":{},"对":{"docs":{},"物":{"docs":{},"理":{"docs":{},"地":{"docs":{},"址":{"docs":{},"进":{"docs":{},"行":{"docs":{},"存":{"docs":{},"取":{"docs":{},"。":{"docs":{},"比":{"docs":{},"如":{"docs":{},"虚":{"docs":{},"拟":{"docs":{},"地":{"docs":{},"址":{"docs":{},"是":{"docs":{"programing-manual/process/process.html":{"ref":"programing-manual/process/process.html","tf":0.012658227848101266}}}}}}}}}}}}}}}}}}}}},"创":{"docs":{},"建":{"docs":{},"进":{"docs":{},"程":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"从":{"docs":{},"文":{"docs":{},"件":{"docs":{},"系":{"docs":{},"统":{"docs":{},"上":{"docs":{},"加":{"docs":{},"载":{"docs":{},"程":{"docs":{},"序":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},"和":{"docs":{},"数":{"docs":{},"据":{"docs":{},",":{"docs":{},"然":{"docs":{},"后":{"docs":{},"再":{"docs":{},"去":{"docs":{},"执":{"docs":{},"行":{"docs":{},"进":{"docs":{},"程":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},"。":{"docs":{"programing-manual/process/process.html":{"ref":"programing-manual/process/process.html","tf":0.012658227848101266}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"一":{"docs":{},"个":{"docs":{},"延":{"docs":{},"迟":{"docs":{},"的":{"docs":{},"中":{"docs":{},"断":{"docs":{},"工":{"docs":{},"作":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"传":{"docs":{},"入":{"docs":{},"中":{"docs":{},"断":{"docs":{},"工":{"docs":{},"作":{"docs":{},"处":{"docs":{},"理":{"docs":{},"函":{"docs":{},"数":{"docs":{},"入":{"docs":{},"口":{"docs":{},",":{"docs":{},"以":{"docs":{},"及":{"docs":{},"函":{"docs":{},"数":{"docs":{},"执":{"docs":{},"行":{"docs":{},"时":{"docs":{},"的":{"docs":{},"参":{"docs":{},"数":{"docs":{},",":{"docs":{},"就":{"docs":{},"可":{"docs":{},"以":{"docs":{},"创":{"docs":{},"建":{"docs":{},"一":{"docs":{},"个":{"docs":{},"延":{"docs":{},"迟":{"docs":{},"的":{"docs":{},"工":{"docs":{},"作":{"docs":{},"对":{"docs":{},"象":{"docs":{},"。":{"docs":{"programing-manual/interrupt/delay_queue.html":{"ref":"programing-manual/interrupt/delay_queue.html","tf":0.01282051282051282}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"了":{"docs":{},"一":{"docs":{},"个":{"docs":{},"中":{"docs":{},"断":{"docs":{},"工":{"docs":{},"作":{"docs":{},"对":{"docs":{},"象":{"docs":{},",":{"docs":{},"就":{"docs":{},"需":{"docs":{},"要":{"docs":{},"将":{"docs":{},"其":{"docs":{},"加":{"docs":{},"入":{"docs":{},"到":{"docs":{},"某":{"docs":{},"个":{"docs":{},"延":{"docs":{},"迟":{"docs":{},"队":{"docs":{},"列":{"docs":{},"中":{"docs":{},",":{"docs":{},"只":{"docs":{},"需":{"docs":{},"要":{"docs":{},"传":{"docs":{},"入":{"docs":{},"队":{"docs":{},"列":{"docs":{},"和":{"docs":{},"工":{"docs":{},"作":{"docs":{},"对":{"docs":{},"象":{"docs":{},"的":{"docs":{},"地":{"docs":{},"址":{"docs":{},"即":{"docs":{},"可":{"docs":{},"。":{"docs":{"programing-manual/interrupt/delay_queue.html":{"ref":"programing-manual/interrupt/delay_queue.html","tf":0.01282051282051282}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"定":{"docs":{},"时":{"docs":{},"器":{"docs":{},"后":{"docs":{},"需":{"docs":{},"要":{"docs":{},"调":{"docs":{},"用":{"docs":{"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.010752688172043012}}}}}}},"需":{"docs":{},"要":{"docs":{},"指":{"docs":{},"定":{"docs":{},"需":{"docs":{},"要":{"docs":{},"超":{"docs":{},"时":{"docs":{},"的":{"docs":{},"时":{"docs":{},"间":{"docs":{"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.010752688172043012}}}}}}}}}}}}}}}},"互":{"docs":{},"斥":{"docs":{},"体":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}},"文":{"docs":{},"件":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}},"条":{"docs":{},"件":{"docs":{},"变":{"docs":{},"量":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}},"目":{"docs":{},"录":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}},"线":{"docs":{},"程":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}},"设":{"docs":{},"备":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}},"到":{"docs":{"programing-manual/process/process.html":{"ref":"programing-manual/process/process.html","tf":0.012658227848101266}}},"前":{"docs":{},",":{"docs":{},"访":{"docs":{},"问":{"docs":{},"的":{"docs":{},"地":{"docs":{},"址":{"docs":{},"都":{"docs":{},"是":{"docs":{},"物":{"docs":{},"理":{"docs":{},"地":{"docs":{},"址":{"docs":{},",":{"docs":{"programing-manual/process/process.html":{"ref":"programing-manual/process/process.html","tf":0.012658227848101266}}}}}}}}}}}}}}},"面":{"docs":{},"有":{"docs":{},"讲":{"docs":{},"到":{"docs":{},"关":{"docs":{},"于":{"docs":{},"全":{"docs":{},"局":{"docs":{},"中":{"docs":{},"断":{"docs":{},"的":{"docs":{},"打":{"docs":{},"开":{"docs":{},"和":{"docs":{},"关":{"docs":{},"闭":{"docs":{},",":{"docs":{},"全":{"docs":{},"局":{"docs":{},"中":{"docs":{},"断":{"docs":{},"的":{"docs":{},"打":{"docs":{},"开":{"docs":{},"是":{"docs":{"programing-manual/interrupt/irq.html":{"ref":"programing-manual/interrupt/irq.html","tf":0.01694915254237288}}}}}}}}}}}}}}}}}}}}}}}}}}}},"即":{"docs":{},"直":{"docs":{},"接":{"docs":{},"访":{"docs":{},"问":{"docs":{},"的":{"docs":{},"是":{"docs":{},"内":{"docs":{},"存":{"docs":{},"的":{"docs":{},"地":{"docs":{},"址":{"docs":{},"。":{"docs":{},"比":{"docs":{},"如":{"docs":{},"内":{"docs":{},"存":{"docs":{},"只":{"docs":{},"有":{"docs":{"programing-manual/process/process.html":{"ref":"programing-manual/process/process.html","tf":0.012658227848101266}}}}}}}}}}}}}}}}}}}},"可":{"docs":{},"。":{"docs":{"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.010752688172043012}}}},"定":{"docs":{},"义":{"docs":{},"的":{"docs":{},"符":{"docs":{},"号":{"docs":{},"两":{"docs":{},"侧":{"docs":{},"采":{"docs":{},"用":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}}}}},"后":{"docs":{},",":{"docs":{},"访":{"docs":{},"问":{"docs":{},"的":{"docs":{},"地":{"docs":{},"址":{"docs":{},"会":{"docs":{},"发":{"docs":{},"生":{"docs":{},"变":{"docs":{},"化":{"docs":{},"。":{"docs":{},"因":{"docs":{},"此":{"docs":{},",":{"docs":{},"为":{"docs":{},"了":{"docs":{},"能":{"docs":{},"够":{"docs":{},"保":{"docs":{},"证":{"docs":{},"访":{"docs":{},"问":{"docs":{},"内":{"docs":{},"核":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},"是":{"docs":{},"正":{"docs":{},"确":{"docs":{},"的":{"docs":{},",":{"docs":{},"在":{"docs":{},"映":{"docs":{},"射":{"docs":{"programing-manual/process/process.html":{"ref":"programing-manual/process/process.html","tf":0.012658227848101266}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"就":{"docs":{},"是":{"docs":{},"虚":{"docs":{},"拟":{"docs":{},"地":{"docs":{},"址":{"docs":{},"了":{"docs":{},"。":{"docs":{},"此":{"docs":{},"时":{"docs":{},"访":{"docs":{},"问":{"docs":{},"的":{"docs":{},"地":{"docs":{},"址":{"docs":{},",":{"docs":{},"会":{"docs":{},"通":{"docs":{},"过":{"docs":{"programing-manual/process/process.html":{"ref":"programing-manual/process/process.html","tf":0.012658227848101266}}}}}}}}}}}}}}}}}}}}}}}}}}},"进":{"docs":{},"行":{"docs":{},"分":{"docs":{},"行":{"docs":{},",":{"docs":{},"并":{"docs":{},"在":{"docs":{},"下":{"docs":{},"一":{"docs":{},"行":{"docs":{},"都":{"docs":{},"采":{"docs":{},"用":{"docs":{},"缩":{"docs":{},"进":{"docs":{},"的":{"docs":{},"方":{"docs":{},"式":{"docs":{},",":{"docs":{},"例":{"docs":{},"如":{"docs":{},":":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}}}}}}}}}}}}}}}}}},"寄":{"docs":{},"存":{"docs":{},"器":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},",":{"docs":{},"访":{"docs":{},"问":{"docs":{},"的":{"docs":{},"地":{"docs":{},"址":{"docs":{},"都":{"docs":{},"是":{"docs":{},"新":{"docs":{},"的":{"docs":{"programing-manual/process/process.html":{"ref":"programing-manual/process/process.html","tf":0.012658227848101266}}}}}}}}}}}},"保":{"docs":{},"存":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}},"的":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}}}}},"是":{"docs":{},"虚":{"docs":{},"拟":{"docs":{},"地":{"docs":{},"址":{"docs":{},"转":{"docs":{},"换":{"docs":{},"成":{"docs":{},"为":{"docs":{},"物":{"docs":{},"理":{"docs":{},"地":{"docs":{},"址":{"docs":{},"的":{"docs":{},"硬":{"docs":{},"件":{"docs":{},"机":{"docs":{},"制":{"docs":{},"。":{"docs":{},"在":{"docs":{},"开":{"docs":{},"启":{"docs":{"programing-manual/process/process.html":{"ref":"programing-manual/process/process.html","tf":0.012658227848101266}}}}}}}}}}}}}}}}}}}}}}},"在":{"docs":{},"该":{"docs":{},"延":{"docs":{},"迟":{"docs":{},"中":{"docs":{},"断":{"docs":{},"工":{"docs":{},"作":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},"设":{"docs":{},"定":{"docs":{},"的":{"docs":{},"。":{"docs":{"programing-manual/interrupt/delay_queue.html":{"ref":"programing-manual/interrupt/delay_queue.html","tf":0.01282051282051282}}}}}}}}}}}}}}}}}}}},"使":{"docs":{},"能":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},"映":{"docs":{},"射":{"docs":{},"虚":{"docs":{},"拟":{"docs":{},"地":{"docs":{},"址":{"docs":{},",":{"docs":{},"会":{"docs":{},"自":{"docs":{},"动":{"docs":{},"分":{"docs":{},"配":{"docs":{},"物":{"docs":{},"理":{"docs":{},"地":{"docs":{},"址":{"docs":{},"并":{"docs":{},"映":{"docs":{},"射":{"docs":{},"页":{"docs":{},"面":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}}},"必":{"docs":{},"需":{"docs":{},"的":{"docs":{},",":{"docs":{},"b":{"docs":{},"o":{"docs":{},"d":{"docs":{},"i":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}}}}}}}},"究":{"docs":{},"竟":{"docs":{},"是":{"docs":{},"何":{"docs":{},"物":{"docs":{},"?":{"docs":{},"m":{"docs":{},"m":{"docs":{},"u":{"docs":{"programing-manual/process/process.html":{"ref":"programing-manual/process/process.html","tf":0.012658227848101266}}}}}}}}}}},"转":{"docs":{},"换":{"docs":{},"成":{"docs":{},"那":{"docs":{"programing-manual/process/process.html":{"ref":"programing-manual/process/process.html","tf":0.012658227848101266}}}}}},"那":{"docs":{},"么":{"docs":{"programing-manual/process/process.html":{"ref":"programing-manual/process/process.html","tf":0.012658227848101266}}}},"(":{"docs":{},"内":{"docs":{},"存":{"docs":{},"管":{"docs":{},"理":{"docs":{},"单":{"docs":{},"元":{"docs":{},")":{"docs":{},"为":{"docs":{},"虚":{"docs":{},"拟":{"docs":{},"内":{"docs":{},"存":{"docs":{},"的":{"docs":{},"实":{"docs":{},"现":{"docs":{},"奠":{"docs":{},"定":{"docs":{},"基":{"docs":{},"础":{"docs":{},"。":{"docs":{"programing-manual/process/process.html":{"ref":"programing-manual/process/process.html","tf":0.012658227848101266}}}}}}}}}}}}}}}}}}}}}},"一":{"docs":{},"般":{"docs":{},"在":{"1":{"0":{"0":{"docs":{},"~":{"1":{"0":{"0":{"0":{"docs":{},")":{"docs":{},"次":{"docs":{},"定":{"docs":{},"时":{"docs":{},"器":{"docs":{},"中":{"docs":{},"断":{"docs":{},"的":{"docs":{},"效":{"docs":{},"果":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}}},"以":{"docs":{},"上":{"docs":{},"摘":{"docs":{},"自":{"docs":{},"百":{"docs":{},"度":{"docs":{},"百":{"docs":{},"科":{"docs":{},")":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}},"只":{"docs":{},"能":{"docs":{},"通":{"docs":{},"过":{"docs":{},"系":{"docs":{},"统":{"docs":{},"调":{"docs":{},"用":{"docs":{},"执":{"docs":{},"行":{"docs":{},"内":{"docs":{},"核":{"docs":{},"提":{"docs":{},"供":{"docs":{},"好":{"docs":{},"的":{"docs":{},"服":{"docs":{},"务":{"docs":{},"。":{"docs":{},"在":{"docs":{"programing-manual/process/syscall.html":{"ref":"programing-manual/process/syscall.html","tf":0.03125}}}}}}}}}}}}}}}}}}}}},"需":{"docs":{},"要":{"docs":{},"传":{"docs":{},"入":{"docs":{},"定":{"docs":{},"时":{"docs":{},"器":{"docs":{},"对":{"docs":{},"象":{"docs":{},"地":{"docs":{},"址":{"docs":{},"即":{"docs":{},"可":{"docs":{},"。":{"docs":{"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.010752688172043012}}}}}}}}}}}}}},"实":{"docs":{},"现":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}},"编":{"docs":{},"译":{"docs":{"tutorial/menuconfig.html":{"ref":"tutorial/menuconfig.html","tf":0.038461538461538464}}}}},"支":{"docs":{},"持":{"docs":{},"特":{"docs":{},"权":{"docs":{},"保":{"docs":{},"护":{"docs":{},"的":{"docs":{},"处":{"docs":{},"理":{"docs":{},"器":{"docs":{},"架":{"docs":{},"构":{"docs":{},"中":{"docs":{},",":{"docs":{},"都":{"docs":{},"提":{"docs":{},"供":{"docs":{},"了":{"docs":{},"模":{"docs":{},"式":{"docs":{},"切":{"docs":{},"换":{"docs":{},"的":{"docs":{},"指":{"docs":{},"令":{"docs":{},"。":{"docs":{},"至":{"docs":{},"少":{"docs":{},"需":{"docs":{},"要":{"docs":{},"有":{"docs":{},"两":{"docs":{},"个":{"docs":{},"特":{"docs":{},"权":{"docs":{},"级":{"docs":{},",":{"docs":{},"一":{"docs":{},"个":{"docs":{},"用":{"docs":{},"于":{"docs":{},"内":{"docs":{},"核":{"docs":{},"态":{"docs":{},",":{"docs":{},"特":{"docs":{},"权":{"docs":{},"更":{"docs":{},"高":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"直":{"docs":{},"接":{"docs":{},"访":{"docs":{},"问":{"docs":{},"硬":{"docs":{},"件":{"docs":{},"。":{"docs":{},"另":{"docs":{},"外":{"docs":{},"一":{"docs":{},"个":{"docs":{},"用":{"docs":{},"于":{"docs":{},"用":{"docs":{},"户":{"docs":{},"态":{"docs":{},",":{"docs":{"programing-manual/process/syscall.html":{"ref":"programing-manual/process/syscall.html","tf":0.03125}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"。":{"docs":{"programing-manual/interrupt/irq.html":{"ref":"programing-manual/interrupt/irq.html","tf":0.01694915254237288},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}},"由":{"docs":{},"于":{"docs":{},"有":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},"只":{"docs":{},"是":{"docs":{},"为":{"docs":{},"了":{"docs":{},"暂":{"docs":{},"时":{"docs":{},"关":{"docs":{},"闭":{"docs":{},"中":{"docs":{},"断":{"docs":{},",":{"docs":{},"处":{"docs":{},"理":{"docs":{},"完":{"docs":{},"后":{"docs":{},"需":{"docs":{},"要":{"docs":{},"恢":{"docs":{},"复":{"docs":{},"中":{"docs":{},"断":{"docs":{},"的":{"docs":{},"状":{"docs":{},"态":{"docs":{},",":{"docs":{},"于":{"docs":{},"是":{"docs":{},"则":{"docs":{},"需":{"docs":{},"要":{"docs":{},"使":{"docs":{},"用":{"docs":{},"保":{"docs":{},"存":{"docs":{},"中":{"docs":{},"断":{"docs":{},"的":{"docs":{},"状":{"docs":{},"态":{"docs":{},"和":{"docs":{},"恢":{"docs":{},"复":{"docs":{},"中":{"docs":{},"断":{"docs":{},"的":{"docs":{},"状":{"docs":{},"态":{"docs":{},",":{"docs":{},"即":{"docs":{"programing-manual/interrupt/irq.html":{"ref":"programing-manual/interrupt/irq.html","tf":0.01694915254237288}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"注":{"docs":{},"册":{"docs":{},"了":{"docs":{},"中":{"docs":{},"断":{"docs":{},"后":{"docs":{},",":{"docs":{},"并":{"docs":{},"不":{"docs":{},"能":{"docs":{},"产":{"docs":{},"生":{"docs":{},"中":{"docs":{},"断":{"docs":{},",":{"docs":{},"还":{"docs":{},"需":{"docs":{},"要":{"docs":{},"解":{"docs":{},"除":{"docs":{},"中":{"docs":{},"断":{"docs":{},"的":{"docs":{},"屏":{"docs":{},"蔽":{"docs":{},"(":{"docs":{},"u":{"docs":{},"n":{"docs":{},"m":{"docs":{},"a":{"docs":{},"s":{"docs":{},"k":{"docs":{},")":{"docs":{},",":{"docs":{},"相":{"docs":{},"当":{"docs":{},"于":{"docs":{},"打":{"docs":{},"开":{"docs":{},"中":{"docs":{},"断":{"docs":{},"。":{"docs":{},"除":{"docs":{},"此":{"docs":{},"之":{"docs":{},"外":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"不":{"docs":{},"希":{"docs":{},"望":{"docs":{},"产":{"docs":{},"生":{"docs":{},"该":{"docs":{},"中":{"docs":{},"断":{"docs":{},",":{"docs":{},"则":{"docs":{},"需":{"docs":{},"要":{"docs":{},"屏":{"docs":{},"蔽":{"docs":{},"某":{"docs":{},"个":{"docs":{},"中":{"docs":{},"断":{"docs":{},"(":{"docs":{},"m":{"docs":{},"a":{"docs":{},"s":{"docs":{},"k":{"docs":{},")":{"docs":{},",":{"docs":{},"相":{"docs":{},"当":{"docs":{},"于":{"docs":{},"关":{"docs":{},"闭":{"docs":{},"中":{"docs":{},"断":{"docs":{},"。":{"docs":{"programing-manual/interrupt/irq.html":{"ref":"programing-manual/interrupt/irq.html","tf":0.01694915254237288}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"意":{"docs":{},",":{"docs":{},"\"":{"docs":{},"/":{"docs":{},"/":{"docs":{},"\"":{"docs":{},"注":{"docs":{},"释":{"docs":{},"只":{"docs":{},"能":{"docs":{},"放":{"docs":{},"到":{"docs":{},"右":{"docs":{},"边":{"docs":{},"。":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}}}}}}}}}}},"等":{"docs":{},"机":{"docs":{},"制":{"docs":{},"。":{"docs":{"programing-manual/interrupt/irq.html":{"ref":"programing-manual/interrupt/irq.html","tf":0.01694915254237288}}}}},"于":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}},",":{"docs":{},"但":{"docs":{},"是":{"docs":{},"在":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}},"h":{"docs":{},"u":{"docs":{},"b":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}},"内":{"docs":{},"核":{"docs":{},"基":{"docs":{},"础":{"docs":{},"功":{"docs":{},"能":{"docs":{},"完":{"docs":{},"成":{"docs":{},"后":{"docs":{},"实":{"docs":{},"现":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}}}}},"待":{"docs":{},"线":{"docs":{},"程":{"docs":{},"退":{"docs":{},"出":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}},"进":{"docs":{},"程":{"docs":{},"退":{"docs":{},"出":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}},"需":{"docs":{},"要":{"docs":{},"注":{"docs":{},"册":{"docs":{},"某":{"docs":{},"个":{"docs":{},"中":{"docs":{},"断":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"传":{"docs":{},"入":{"docs":{},"中":{"docs":{},"断":{"docs":{},"号":{"docs":{},",":{"docs":{},"绑":{"docs":{},"定":{"docs":{},"中":{"docs":{},"断":{"docs":{},"处":{"docs":{},"理":{"docs":{},"函":{"docs":{},"数":{"docs":{},",":{"docs":{},"设":{"docs":{},"置":{"docs":{},"中":{"docs":{},"断":{"docs":{},"的":{"docs":{},"参":{"docs":{},"数":{"docs":{},"数":{"docs":{},"据":{"docs":{},",":{"docs":{},"设":{"docs":{},"置":{"docs":{},"中":{"docs":{},"断":{"docs":{},"的":{"docs":{},"名":{"docs":{},"字":{"docs":{},"。":{"docs":{"programing-manual/interrupt/irq.html":{"ref":"programing-manual/interrupt/irq.html","tf":0.01694915254237288}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"能":{"docs":{},"够":{"docs":{},"访":{"docs":{},"问":{"docs":{},"用":{"docs":{},"户":{"docs":{},"态":{"docs":{},"的":{"docs":{},"内":{"docs":{},"存":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"在":{"docs":{},"返":{"docs":{},"回":{"docs":{},"后":{"docs":{},"开":{"docs":{},"启":{"docs":{},"中":{"docs":{},"断":{"docs":{},"以":{"docs":{},"及":{"docs":{},"设":{"docs":{},"置":{"docs":{},"为":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"=":{"docs":{"programing-manual/interrupt/delay_queue.html":{"ref":"programing-manual/interrupt/delay_queue.html","tf":0.01282051282051282},"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.039026437263953},"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294},"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.031818181818181815}},"=":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.0029374737725556023}}}},"工":{"docs":{},"作":{"docs":{},"队":{"docs":{},"列":{"docs":{},"的":{"docs":{},"优":{"docs":{},"先":{"docs":{},"级":{"docs":{},"如":{"docs":{},"下":{"docs":{},",":{"docs":{},"其":{"docs":{},"中":{"docs":{"programing-manual/interrupt/delay_queue.html":{"ref":"programing-manual/interrupt/delay_queue.html","tf":0.01282051282051282}}}}}}}}}}}}}},"具":{"docs":{},"链":{"docs":{"tutorial/toolchains.html":{"ref":"tutorial/toolchains.html","tf":10.027027027027026}}}}},"延":{"docs":{},"迟":{"docs":{},"队":{"docs":{},"列":{"docs":{"programing-manual/interrupt/delay_queue.html":{"ref":"programing-manual/interrupt/delay_queue.html","tf":10}}}}}},"然":{"docs":{},"后":{"docs":{},"激":{"docs":{},"活":{"docs":{},"中":{"docs":{},"断":{"docs":{},"队":{"docs":{},"列":{"docs":{},"工":{"docs":{},"作":{"docs":{},",":{"docs":{},"然":{"docs":{},"后":{"docs":{},"就":{"docs":{},"返":{"docs":{},"回":{"docs":{},",":{"docs":{},"完":{"docs":{},"成":{"docs":{},"了":{"docs":{},"本":{"docs":{},"次":{"docs":{},"中":{"docs":{},"断":{"docs":{},"。":{"docs":{},"等":{"docs":{},"到":{"docs":{},"没":{"docs":{},"有":{"docs":{},"中":{"docs":{},"断":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},",":{"docs":{},"再":{"docs":{},"去":{"docs":{},"从":{"docs":{},"延":{"docs":{},"迟":{"docs":{},"队":{"docs":{},"列":{"docs":{},"中":{"docs":{},"获":{"docs":{},"取":{"docs":{},"一":{"docs":{},"个":{"docs":{},"工":{"docs":{},"作":{"docs":{},"来":{"docs":{},"处":{"docs":{},"理":{"docs":{},"其":{"docs":{},"对":{"docs":{},"应":{"docs":{},"的":{"docs":{},"中":{"docs":{},"断":{"docs":{},"下":{"docs":{},"半":{"docs":{},"部":{"docs":{},"分":{"docs":{},"处":{"docs":{},"理":{"docs":{},"工":{"docs":{},"作":{"docs":{},"。":{"docs":{"programing-manual/interrupt/delay_queue.html":{"ref":"programing-manual/interrupt/delay_queue.html","tf":0.01282051282051282}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"再":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"中":{"docs":{},"断":{"docs":{},",":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"物":{"docs":{},"理":{"docs":{},"内":{"docs":{},"存":{"docs":{},"管":{"docs":{},"理":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}},"定":{"docs":{},"时":{"docs":{},"器":{"docs":{"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":10.010752688172044}},"是":{"docs":{},"基":{"docs":{},"于":{"docs":{},"系":{"docs":{},"统":{"docs":{},"时":{"docs":{},"钟":{"docs":{},"实":{"docs":{},"现":{"docs":{},"的":{"docs":{},",":{"docs":{},"精":{"docs":{},"度":{"docs":{},"比":{"docs":{},"较":{"docs":{},"低":{"docs":{},"(":{"1":{"docs":{},"m":{"docs":{},"s":{"docs":{},"~":{"1":{"0":{"docs":{},"m":{"docs":{},"s":{"docs":{},")":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"用":{"docs":{},"于":{"docs":{},"线":{"docs":{},"程":{"docs":{},"的":{"docs":{},"休":{"docs":{},"眠":{"docs":{},",":{"docs":{},"以":{"docs":{},"及":{"docs":{},"对":{"docs":{},"于":{"docs":{},"休":{"docs":{},"眠":{"docs":{},"精":{"docs":{},"度":{"docs":{},"不":{"docs":{},"高":{"docs":{},"的":{"docs":{},"场":{"docs":{},"景":{"docs":{},"。":{"docs":{"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.010752688172043012}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"docs":{}},"docs":{}}}}},"docs":{}}}}}}}}}}}}}}}}}}}},"义":{"docs":{},"一":{"docs":{},"个":{"docs":{},"单":{"docs":{},"元":{"docs":{},"测":{"docs":{},"试":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}}}}}}}},"并":{"docs":{},"传":{"docs":{},"入":{"docs":{},"定":{"docs":{},"时":{"docs":{},"器":{"docs":{},"的":{"docs":{},"地":{"docs":{},"址":{"docs":{},"即":{"docs":{},"可":{"docs":{},"。":{"docs":{"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.010752688172043012}}}}}}}}}}}}}},"标":{"docs":{},"志":{"docs":{},"有":{"docs":{},"多":{"docs":{},"重":{"docs":{},",":{"docs":{},"表":{"docs":{},"明":{"docs":{},"不":{"docs":{},"同":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"定":{"docs":{},"时":{"docs":{},"器":{"docs":{},"。":{"docs":{"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.010752688172043012}}}}}}}}}}}}}}}}}}},"表":{"docs":{},"示":{"docs":{},"只":{"docs":{},"超":{"docs":{},"时":{"docs":{},"一":{"docs":{},"次":{"docs":{},",":{"docs":{"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.010752688172043012}}}}}}}},"周":{"docs":{},"期":{"docs":{},"性":{"docs":{},"地":{"docs":{},"按":{"docs":{},"照":{"docs":{"programing-manual/timer/timer.html":{"ref":"programing-manual/timer/timer.html","tf":0.010752688172043012}}}}}}}}}},"!":{"docs":{},"=":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},"\"":{"docs":{},"=":{"docs":{},"r":{"docs":{},"\"":{"docs":{},"(":{"docs":{},"r":{"docs":{},"e":{"docs":{},"t":{"docs":{},")":{"docs":{},")":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}},"c":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"\"":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}},"i":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"\"":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}},"m":{"docs":{},"u":{"docs":{},"l":{"docs":{},"t":{"docs":{},"i":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}},"s":{"docs":{},"y":{"docs":{},"s":{"docs":{},"c":{"docs":{},"a":{"docs":{},"l":{"docs":{},"l":{"docs":{},"\"":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}},"\"":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}},"_":{"docs":{},"\"":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}},"{":{"docs":{},"\"":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}},"h":{"docs":{},"e":{"docs":{},"l":{"docs":{},"l":{"docs":{},"o":{"docs":{},"!":{"docs":{},"\"":{"docs":{},";":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}}},"\"":{"docs":{},")":{"docs":{},";":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}}}}}}}},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"l":{"docs":{},"d":{"docs":{},"!":{"docs":{},"\"":{"docs":{},")":{"docs":{},";":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.00909090909090909}}}},";":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}}},"\"":{"docs":{},")":{"docs":{},";":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}}}}}}}}},"%":{"0":{"docs":{},"\"":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"p":{"docs":{},"\"":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},"x":{"docs":{},"\"":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}},"`":{"docs":{},"p":{"docs":{},"c":{"docs":{},"`":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}},"r":{"docs":{},"a":{"docs":{},"`":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}},"s":{"docs":{},"e":{"docs":{},"p":{"docs":{},"c":{"docs":{},"`":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}}}}},"p":{"docs":{},"`":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},"r":{"docs":{},"e":{"docs":{},"t":{"docs":{},"`":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"p":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}},"j":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.002517834662190516}},"a":{"docs":{},"s":{"docs":{},"o":{"docs":{},"n":{"docs":{},"h":{"docs":{},"u":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.004616030214015947},"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.007352941176470588}}}}}}}}},"~":{"docs":{},"m":{"docs":{},"a":{"docs":{},"s":{"docs":{},"k":{"docs":{},")":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}},"s":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"_":{"docs":{},"s":{"docs":{},"i":{"docs":{},"e":{"docs":{},")":{"docs":{},";":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}}}}}}}}}}}}}}},"–":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}}},"上":{"docs":{},"下":{"docs":{},"文":{"docs":{},"切":{"docs":{},"换":{"docs":{},"是":{"docs":{},"多":{"docs":{},"线":{"docs":{},"程":{"docs":{},"实":{"docs":{},"现":{"docs":{},"的":{"docs":{},"根":{"docs":{},"基":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}},"的":{"docs":{},"切":{"docs":{},"换":{"docs":{},"分":{"docs":{},"为":{"docs":{},"上":{"docs":{},"下":{"docs":{},"文":{"docs":{},"的":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},",":{"docs":{},"从":{"docs":{},"当":{"docs":{},"前":{"docs":{},"线":{"docs":{},"程":{"docs":{},"切":{"docs":{},"换":{"docs":{},"到":{"docs":{},"下":{"docs":{},"一":{"docs":{},"个":{"docs":{},"线":{"docs":{},"程":{"docs":{},",":{"docs":{},"直":{"docs":{},"接":{"docs":{},"切":{"docs":{},"换":{"docs":{},"到":{"docs":{},"下":{"docs":{},"一":{"docs":{},"个":{"docs":{},"线":{"docs":{},"程":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"图":{"docs":{},"为":{"docs":{},"机":{"docs":{},"器":{"docs":{},"模":{"docs":{},"式":{"docs":{},"状":{"docs":{},"态":{"docs":{},"寄":{"docs":{},"存":{"docs":{},"器":{"docs":{},"(":{"docs":{},"r":{"docs":{},"v":{"3":{"2":{"docs":{},")":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},"docs":{}},"6":{"4":{"docs":{},")":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},"docs":{}},"docs":{}}}}}}}}}}}}}}}},"与":{"docs":{},"大":{"docs":{},"多":{"docs":{},"数":{"docs":{},"指":{"docs":{},"令":{"docs":{},"集":{"docs":{},"相":{"docs":{},"比":{"docs":{},",":{"docs":{},"r":{"docs":{},"i":{"docs":{},"s":{"docs":{},"c":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}},"串":{"docs":{},"口":{"docs":{},"可":{"docs":{},"以":{"docs":{},"配":{"docs":{},"置":{"docs":{},"为":{"docs":{},"调":{"docs":{},"用":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}},"来":{"docs":{},"输":{"docs":{},"出":{"docs":{},"是":{"docs":{},"非":{"docs":{},"常":{"docs":{},"方":{"docs":{},"便":{"docs":{},"的":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}},"位":{"docs":{},"保":{"docs":{},"存":{"docs":{},"和":{"docs":{},"恢":{"docs":{},"复":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}},"做":{"docs":{},"置":{"docs":{},"位":{"docs":{},"和":{"docs":{},"清":{"docs":{},"理":{"docs":{},"的":{"docs":{},"操":{"docs":{},"作":{"docs":{},"即":{"docs":{},"可":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}},"作":{"docs":{},"为":{"docs":{},"机":{"docs":{},"器":{"docs":{},"模":{"docs":{},"式":{"docs":{},"的":{"docs":{},"固":{"docs":{},"件":{"docs":{},",":{"docs":{},"q":{"docs":{},"e":{"docs":{},"m":{"docs":{},"u":{"docs":{},"_":{"docs":{},"r":{"docs":{},"i":{"docs":{},"s":{"docs":{},"c":{"docs":{},"v":{"6":{"4":{"docs":{},"平":{"docs":{},"台":{"docs":{},"选":{"docs":{},"择":{"docs":{},"了":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}},"docs":{}},"docs":{}}}}}}}}}}}}}}}}}}}}},"保":{"docs":{},"存":{"docs":{},"的":{"docs":{},",":{"docs":{},"其":{"docs":{},"格":{"docs":{},"式":{"docs":{},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"上":{"docs":{},"下":{"docs":{},"文":{"docs":{},"切":{"docs":{},"换":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},"会":{"docs":{},"模":{"docs":{},"拟":{"docs":{},"一":{"docs":{},"次":{"docs":{},"异":{"docs":{},"常":{"docs":{},"返":{"docs":{},"回":{"docs":{},",":{"docs":{},"返":{"docs":{},"回":{"docs":{},"后":{"docs":{},"就":{"docs":{},"到":{"docs":{},"这":{"docs":{},"个":{"docs":{},"异":{"docs":{},"常":{"docs":{},"地":{"docs":{},"址":{"docs":{},"处":{"docs":{},"执":{"docs":{},"行":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"它":{"docs":{},"是":{"docs":{},"返":{"docs":{},"回":{"docs":{},"地":{"docs":{},"址":{"docs":{},"的":{"docs":{},"意":{"docs":{},"思":{"docs":{},",":{"docs":{},"表":{"docs":{},"示":{"docs":{},"线":{"docs":{},"程":{"docs":{},"返":{"docs":{},"回":{"docs":{},"后":{"docs":{},"就":{"docs":{},"去":{"docs":{},"执":{"docs":{},"行":{"docs":{},"该":{"docs":{},"函":{"docs":{},"数":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"做":{"docs":{},"了":{"docs":{},"一":{"docs":{},"些":{"docs":{},"兼":{"docs":{},"容":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"起":{"docs":{},"来":{"docs":{},"比":{"docs":{},"较":{"docs":{},"简":{"docs":{},"单":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}},"入":{"docs":{},"口":{"docs":{},"地":{"docs":{},"址":{"docs":{},"使":{"docs":{},"用":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},"在":{"docs":{},"链":{"docs":{},"接":{"docs":{},"脚":{"docs":{},"本":{"docs":{},"中":{"docs":{},"写":{"docs":{},"的":{"docs":{},"是":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}},"关":{"docs":{},"闭":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}},"文":{"docs":{},"件":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}},"目":{"docs":{},"录":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}},"设":{"docs":{},"备":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}},"具":{"docs":{},"体":{"docs":{},"字":{"docs":{},"段":{"docs":{},"的":{"docs":{},"解":{"docs":{},"析":{"docs":{},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"完":{"docs":{},"成":{"docs":{},"后":{"docs":{},",":{"docs":{},"会":{"docs":{},"跳":{"docs":{},"转":{"docs":{},"到":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}},"线":{"docs":{},"程":{"docs":{},"上":{"docs":{},"下":{"docs":{},"文":{"docs":{},"是":{"docs":{},"在":{"docs":{},"栈":{"docs":{},"上":{"docs":{},"构":{"docs":{},"建":{"docs":{},"一":{"docs":{},"个":{"docs":{},"线":{"docs":{},"程":{"docs":{},"的":{"docs":{},"上":{"docs":{},"下":{"docs":{},"文":{"docs":{},",":{"docs":{},"当":{"docs":{},"第":{"docs":{},"一":{"docs":{},"次":{"docs":{},"切":{"docs":{},"换":{"docs":{},"到":{"docs":{},"该":{"docs":{},"线":{"docs":{},"程":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},",":{"docs":{},"寄":{"docs":{},"存":{"docs":{},"器":{"docs":{},"就":{"docs":{},"会":{"docs":{},"使":{"docs":{},"用":{"docs":{},"栈":{"docs":{},"中":{"docs":{},"的":{"docs":{},"值":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"互":{"docs":{},"斥":{"docs":{},"体":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}},"条":{"docs":{},"件":{"docs":{},"变":{"docs":{},"量":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}},"号":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},"唤":{"docs":{},"醒":{"docs":{},"后":{"docs":{},",":{"docs":{},"应":{"docs":{},"用":{"docs":{},"核":{"docs":{},"会":{"docs":{},"进":{"docs":{},"入":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}},"应":{"docs":{},"用":{"docs":{},"核":{"docs":{},"只":{"docs":{},"需":{"docs":{},"要":{"docs":{},"调":{"docs":{},"用":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}},"休":{"docs":{},"眠":{"docs":{},"等":{"docs":{},"待":{"docs":{},"条":{"docs":{},"件":{"docs":{},"的":{"docs":{},"全":{"docs":{},"部":{"docs":{},"线":{"docs":{},"程":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}},"单":{"docs":{},"个":{"docs":{},"线":{"docs":{},"程":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}}}}}}},"因":{"docs":{},"此":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},"应":{"docs":{},"用":{"docs":{},"核":{"docs":{},"只":{"docs":{},"需":{"docs":{},"要":{"docs":{},"设":{"docs":{},"置":{"docs":{},"中":{"docs":{},"断":{"docs":{},"表":{"docs":{},"地":{"docs":{},"址":{"docs":{},",":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"自":{"docs":{},"己":{"docs":{},"的":{"docs":{},"中":{"docs":{},"断":{"docs":{},"控":{"docs":{},"制":{"docs":{},"器":{"docs":{},"即":{"docs":{},"可":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"该":{"docs":{},"说":{"docs":{},"明":{"docs":{},"代":{"docs":{},"码":{"docs":{},"变":{"docs":{},"动":{"docs":{},"的":{"docs":{},"动":{"docs":{},"机":{"docs":{},",":{"docs":{},"以":{"docs":{},"及":{"docs":{},"与":{"docs":{},"以":{"docs":{},"前":{"docs":{},"行":{"docs":{},"为":{"docs":{},"的":{"docs":{},"对":{"docs":{},"比":{"docs":{},"。":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}}}}}}}}}}}}}}}}}}}}}},"引":{"docs":{},"导":{"docs":{},"核":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"完":{"docs":{},"成":{"docs":{},"后":{"docs":{},",":{"docs":{},"会":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"内":{"docs":{},"核":{"docs":{},",":{"docs":{},"在":{"docs":{},"内":{"docs":{},"核":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"完":{"docs":{},"成":{"docs":{},"后":{"docs":{},",":{"docs":{},"就":{"docs":{},"会":{"docs":{},"进":{"docs":{},"入":{"docs":{},"启":{"docs":{},"动":{"docs":{},"应":{"docs":{},"用":{"docs":{},"核":{"docs":{},"的":{"docs":{},"阶":{"docs":{},"段":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"截":{"docs":{},"至":{"2":{"0":{"1":{"7":{"docs":{},"年":{"5":{"docs":{},"月":{"docs":{},",":{"docs":{},"r":{"docs":{},"i":{"docs":{},"s":{"docs":{},"c":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"执":{"docs":{},"行":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}},"结":{"docs":{},"束":{"docs":{},"后":{"docs":{},",":{"docs":{},"会":{"docs":{},"从":{"docs":{},"机":{"docs":{},"器":{"docs":{},"模":{"docs":{},"式":{"docs":{},"跳":{"docs":{},"转":{"docs":{},"到":{"docs":{},"位":{"docs":{},"于":{"docs":{},"监":{"docs":{},"护":{"docs":{},"者":{"docs":{},"模":{"docs":{},"式":{"docs":{},"的":{"docs":{},"内":{"docs":{},"核":{"docs":{},"中":{"docs":{},",":{"docs":{},"并":{"docs":{},"且":{"docs":{},"寄":{"docs":{},"存":{"docs":{},"器":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"入":{"docs":{},"口":{"docs":{},"程":{"docs":{},"序":{"docs":{},"的":{"docs":{},"移":{"docs":{},"植":{"docs":{},"就":{"docs":{},"完":{"docs":{},"成":{"docs":{},"了":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}},"控":{"docs":{},"制":{"docs":{},"的":{"docs":{},",":{"docs":{},"置":{"docs":{},"为":{"1":{"docs":{},"则":{"docs":{},"表":{"docs":{},"示":{"docs":{},"使":{"docs":{},"能":{"docs":{},"中":{"docs":{},"断":{"docs":{},",":{"docs":{},"置":{"docs":{},"为":{"0":{"docs":{},"则":{"docs":{},"表":{"docs":{},"示":{"docs":{},"禁":{"docs":{},"用":{"docs":{},"中":{"docs":{},"断":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}},"docs":{}}}}}}}}}}}},"docs":{}}}}}}},"提":{"docs":{},"供":{"docs":{},"的":{"docs":{},"唤":{"docs":{},"醒":{"docs":{},"核":{"docs":{},"心":{"docs":{},"功":{"docs":{},"能":{"docs":{},"即":{"docs":{},"可":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}},"交":{"docs":{},"规":{"docs":{},"则":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":10}}}}}},"操":{"docs":{},"作":{"docs":{},"系":{"docs":{},"统":{"docs":{},"更":{"docs":{},"多":{"docs":{},"运":{"docs":{},"行":{"docs":{},"在":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}},"新":{"docs":{},"架":{"docs":{},"构":{"docs":{},"的":{"docs":{},"移":{"docs":{},"植":{"docs":{},",":{"docs":{},"都":{"docs":{},"是":{"docs":{},"按":{"docs":{},"照":{"docs":{},"一":{"docs":{},"套":{"docs":{},"统":{"docs":{},"一":{"docs":{},"的":{"docs":{},"接":{"docs":{},"口":{"docs":{},"去":{"docs":{},"实":{"docs":{},"现":{"docs":{},"的":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}}}},"更":{"docs":{},"贴":{"docs":{},"近":{"docs":{},",":{"docs":{},"也":{"docs":{},"不":{"docs":{},"用":{"docs":{},"管":{"docs":{},"太":{"docs":{},"多":{"docs":{},"机":{"docs":{},"器":{"docs":{},"模":{"docs":{},"式":{"docs":{},"需":{"docs":{},"要":{"docs":{},"做":{"docs":{},"的":{"docs":{},"事":{"docs":{},"情":{"docs":{},"。":{"docs":{},"通":{"docs":{},"常":{"docs":{},",":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}}}},"新":{"docs":{},"配":{"docs":{},"置":{"docs":{},"文":{"docs":{},"件":{"docs":{"tutorial/menuconfig.html":{"ref":"tutorial/menuconfig.html","tf":0.038461538461538464}}}}}}}},"机":{"docs":{},"器":{"docs":{},"模":{"docs":{},"式":{"docs":{},"用":{"docs":{},"于":{"docs":{},"固":{"docs":{},"件":{"docs":{},"程":{"docs":{},"序":{"docs":{},"代":{"docs":{},"码":{"docs":{},"执":{"docs":{},"行":{"docs":{},",":{"docs":{},"例":{"docs":{},"如":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}},"模":{"docs":{},"式":{"docs":{},"去":{"docs":{},"调":{"docs":{},"用":{"docs":{},"内":{"docs":{},"核":{"docs":{},"提":{"docs":{},"供":{"docs":{},"的":{"docs":{},"服":{"docs":{},"务":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}},"的":{"docs":{},"定":{"docs":{},"时":{"docs":{},"器":{"docs":{},"中":{"docs":{},"断":{"docs":{},",":{"docs":{},"然":{"docs":{},"后":{"docs":{},"再":{"docs":{},"设":{"docs":{},"置":{"docs":{},"超":{"docs":{},"时":{"docs":{},"定":{"docs":{},"时":{"docs":{},"器":{"docs":{},"的":{"docs":{},"值":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}},"(":{"docs":{},"因":{"docs":{},"为":{"docs":{},"线":{"docs":{},"程":{"docs":{},"的":{"docs":{},"切":{"docs":{},"换":{"docs":{},"是":{"docs":{},"在":{"docs":{},"内":{"docs":{},"核":{"docs":{},"中":{"docs":{},"完":{"docs":{},"成":{"docs":{},"的":{"docs":{},")":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"进":{"docs":{},"入":{"docs":{},"内":{"docs":{},"核":{"docs":{},"。":{"docs":{},"内":{"docs":{},"核":{"docs":{},"只":{"docs":{},"需":{"docs":{},"要":{"docs":{},"链":{"docs":{},"接":{"docs":{},"到":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}},"降":{"docs":{},"低":{"docs":{},"开":{"docs":{},"发":{"docs":{},"的":{"docs":{},"复":{"docs":{},"杂":{"docs":{},"度":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}},"特":{"docs":{},"权":{"docs":{},"模":{"docs":{},"式":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}},"级":{"docs":{},"寄":{"docs":{},"存":{"docs":{},"器":{"docs":{},"的":{"docs":{},"命":{"docs":{},"名":{"docs":{},"规":{"docs":{},"则":{"docs":{},",":{"docs":{},"特":{"docs":{},"权":{"docs":{},"模":{"docs":{},"式":{"docs":{},"+":{"docs":{},"寄":{"docs":{},"存":{"docs":{},"器":{"docs":{},"名":{"docs":{},"字":{"docs":{},",":{"docs":{},"表":{"docs":{},"示":{"docs":{},"只":{"docs":{},"能":{"docs":{},"在":{"docs":{},"该":{"docs":{},"特":{"docs":{},"权":{"docs":{},"级":{"docs":{},"使":{"docs":{},"用":{"docs":{},"。":{"docs":{},"比":{"docs":{},"如":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"寄":{"docs":{},"存":{"docs":{},"器":{"docs":{},",":{"docs":{},"在":{"docs":{},"机":{"docs":{},"器":{"docs":{},"模":{"docs":{},"式":{"docs":{},"有":{"docs":{},"m":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},",":{"docs":{},"监":{"docs":{},"管":{"docs":{},"模":{"docs":{},"式":{"docs":{},"有":{"docs":{},"s":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"监":{"docs":{},"管":{"docs":{},"者":{"docs":{},"模":{"docs":{},"式":{"docs":{},"的":{"docs":{},"页":{"docs":{},"表":{"docs":{},"的":{"docs":{},"地":{"docs":{},"址":{"docs":{},"是":{"docs":{},"由":{"docs":{},"地":{"docs":{},"址":{"docs":{},"转":{"docs":{},"换":{"docs":{},"寄":{"docs":{},"存":{"docs":{},"器":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}},",":{"docs":{},"这":{"docs":{},"样":{"docs":{},"可":{"docs":{},"以":{"docs":{},"和":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}},"硬":{"docs":{},"件":{"docs":{},"回":{"docs":{},"填":{"docs":{},"根":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}},"时":{"docs":{},"钟":{"docs":{},"会":{"docs":{},"按":{"docs":{},"照":{"docs":{},"一":{"docs":{},"定":{"docs":{},"的":{"docs":{},"频":{"docs":{},"率":{"docs":{},"去":{"docs":{},"增":{"docs":{},"长":{"docs":{},"当":{"docs":{},"前":{"docs":{},"定":{"docs":{},"时":{"docs":{},"器":{"docs":{},"寄":{"docs":{},"存":{"docs":{},"器":{"docs":{},"的":{"docs":{},"值":{"docs":{},",":{"docs":{},"在":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"移":{"docs":{},"植":{"docs":{},"一":{"docs":{},"个":{"docs":{},"新":{"docs":{},"的":{"docs":{},"平":{"docs":{},"台":{"docs":{},"需":{"docs":{},"要":{"docs":{},"实":{"docs":{},"现":{"docs":{},"如":{"docs":{},"下":{"docs":{},"内":{"docs":{},"容":{"docs":{},":":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}},"过":{"docs":{},"程":{"docs":{},"是":{"docs":{},"需":{"docs":{},"要":{"docs":{},"慢":{"docs":{},"慢":{"docs":{},"琢":{"docs":{},"磨":{"docs":{},",":{"docs":{},"长":{"docs":{},"期":{"docs":{},"积":{"docs":{},"累":{"docs":{},",":{"docs":{},"才":{"docs":{},"能":{"docs":{},"实":{"docs":{},"现":{"docs":{},"更":{"docs":{},"好":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}}}}}}},"动":{"docs":{},"内":{"docs":{},"存":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}},"结":{"docs":{},"束":{"docs":{},"时":{"docs":{},"执":{"docs":{},"行":{"docs":{},"的":{"docs":{},"函":{"docs":{},"数":{"docs":{},"使":{"docs":{},"用":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}},"构":{"docs":{},"体":{"docs":{},"命":{"docs":{},"名":{"docs":{},"使":{"docs":{},"用":{"docs":{},"大":{"docs":{},"驼":{"docs":{},"峰":{"docs":{},"风":{"docs":{},"格":{"docs":{},",":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"成":{"docs":{},"员":{"docs":{},"使":{"docs":{},"用":{"docs":{},"小":{"docs":{},"驼":{"docs":{},"峰":{"docs":{},"命":{"docs":{},"名":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"成":{"docs":{},"员":{"docs":{},"是":{"docs":{},"函":{"docs":{},"数":{"docs":{},"指":{"docs":{},"针":{"docs":{},",":{"docs":{},"则":{"docs":{},"使":{"docs":{},"用":{"docs":{},"大":{"docs":{},"驼":{"docs":{},"峰":{"docs":{},"。":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"类":{"docs":{},"型":{"docs":{},"定":{"docs":{},"义":{"docs":{},"是":{"docs":{},"为":{"docs":{},"了":{"docs":{},"消":{"docs":{},"除":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{},"关":{"docs":{},"键":{"docs":{},"字":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"和":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"名":{"docs":{},"一":{"docs":{},"致":{"docs":{},"。":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"尾":{"docs":{},"不":{"docs":{},"加":{"docs":{},"句":{"docs":{},"号":{"docs":{},"(":{"docs":{},".":{"docs":{},")":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}}}}}}}},"至":{"docs":{},"于":{"docs":{},"在":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}},"计":{"docs":{},"时":{"docs":{},"器":{"docs":{},"时":{"docs":{},"钟":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000839278220730172}},"用":{"docs":{},"于":{"docs":{},"驱":{"docs":{},"动":{"docs":{},"多":{"docs":{},"线":{"docs":{},"程":{"docs":{},"的":{"docs":{},"切":{"docs":{},"换":{"docs":{},"和":{"docs":{},"内":{"docs":{},"核":{"docs":{},"定":{"docs":{},"时":{"docs":{},"器":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}},"记":{"docs":{},"录":{"docs":{},"了":{"docs":{},"当":{"docs":{},"前":{"docs":{},"处":{"docs":{},"理":{"docs":{},"器":{"docs":{},"核":{"docs":{},"心":{"docs":{},"的":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}},":":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}},"该":{"docs":{},"代":{"docs":{},"码":{"docs":{},"简":{"docs":{},"单":{"docs":{},"地":{"docs":{},"设":{"docs":{},"置":{"docs":{},"了":{"docs":{},"栈":{"docs":{},"就":{"docs":{},"进":{"docs":{},"入":{"docs":{},"了":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}},"操":{"docs":{},"作":{"docs":{},"只":{"docs":{},"是":{"docs":{},"多":{"docs":{},"了":{"docs":{},"对":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}},"项":{"docs":{},"目":{"2":{"0":{"1":{"0":{"docs":{},"年":{"docs":{},"始":{"docs":{},"于":{"docs":{},"加":{"docs":{},"州":{"docs":{},"大":{"docs":{},"学":{"docs":{},"伯":{"docs":{},"克":{"docs":{},"利":{"docs":{},"分":{"docs":{},"校":{"docs":{},",":{"docs":{},"但":{"docs":{},"许":{"docs":{},"多":{"docs":{},"贡":{"docs":{},"献":{"docs":{},"者":{"docs":{},"是":{"docs":{},"该":{"docs":{},"大":{"docs":{},"学":{"docs":{},"以":{"docs":{},"外":{"docs":{},"的":{"docs":{},"志":{"docs":{},"愿":{"docs":{},"者":{"docs":{},"和":{"docs":{},"行":{"docs":{},"业":{"docs":{},"工":{"docs":{},"作":{"docs":{},"者":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}}},"返":{"docs":{},"回":{"docs":{},"。":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}},"后":{"docs":{},"就":{"docs":{},"可":{"docs":{},"以":{"docs":{},"让":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}},"都":{"docs":{},"会":{"docs":{},"被":{"docs":{},"映":{"docs":{},"射":{"docs":{},"成":{"docs":{},"索":{"docs":{},"引":{"docs":{},",":{"docs":{},"相":{"docs":{},"当":{"docs":{},"于":{"docs":{},"是":{"docs":{},"处":{"docs":{},"理":{"docs":{},"器":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}},"包":{"docs":{},"括":{"docs":{},"两":{"docs":{},"个":{"docs":{},"部":{"docs":{},"分":{"docs":{},":":{"docs":{},"h":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},"和":{"docs":{},"b":{"docs":{},"o":{"docs":{},"d":{"docs":{},"y":{"docs":{},"。":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}}}}}}}}}}}}}}}}}}},"针":{"docs":{},"对":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}},"函":{"docs":{},"数":{"docs":{},"单":{"docs":{},"元":{"docs":{},"进":{"docs":{},"行":{"docs":{},"测":{"docs":{},"试":{"docs":{},",":{"docs":{},"测":{"docs":{},"试":{"docs":{},"函":{"docs":{},"数":{"docs":{},"的":{"docs":{},"基":{"docs":{},"本":{"docs":{},"功":{"docs":{},"能":{"docs":{},",":{"docs":{},"稳":{"docs":{},"定":{"docs":{},"性":{"docs":{},",":{"docs":{},"健":{"docs":{},"壮":{"docs":{},"性":{"docs":{},",":{"docs":{},"覆":{"docs":{},"盖":{"docs":{},"率":{"docs":{},"。":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"预":{"docs":{},"留":{"docs":{},"一":{"docs":{},"个":{"docs":{},"上":{"docs":{},"下":{"docs":{},"文":{"docs":{},"空":{"docs":{},"间":{"docs":{},"后":{"docs":{},",":{"docs":{},"设":{"docs":{},"置":{"docs":{},"参":{"docs":{},"数":{"docs":{},"为":{"docs":{"programing-manual/port/riscv/riscv.html":{"ref":"programing-manual/port/riscv/riscv.html","tf":0.000419639110365086}}}}}}}}}}}}}}}}}},"休":{"docs":{},"眠":{"docs":{},"等":{"docs":{},"待":{"docs":{},"条":{"docs":{},"件":{"docs":{},"变":{"docs":{},"量":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}},"写":{"docs":{},"入":{"docs":{},"文":{"docs":{},"件":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}},"设":{"docs":{},"备":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0051813471502590676}}}}}},"功":{"docs":{},"能":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.02849740932642487}}}},"参":{"docs":{},"考":{"docs":{},"s":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"e":{"docs":{},"t":{"docs":{},"套":{"docs":{},"接":{"docs":{},"字":{"docs":{},"接":{"docs":{},"口":{"docs":{},"设":{"docs":{},"计":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}}}}}}}}},"图":{"docs":{},"形":{"docs":{},"系":{"docs":{},"统":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}},"填":{"docs":{},"充":{"docs":{},"内":{"docs":{},"存":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}},"复":{"docs":{},"制":{"docs":{},"内":{"docs":{},"存":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}},"安":{"docs":{},"全":{"docs":{},"管":{"docs":{},"理":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}},"尝":{"docs":{},"试":{"docs":{},"获":{"docs":{},"取":{"docs":{},"互":{"docs":{},"斥":{"docs":{},"体":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}},"恢":{"docs":{},"复":{"docs":{},"线":{"docs":{},"程":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}},"打":{"docs":{},"开":{"docs":{},"文":{"docs":{},"件":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}},"目":{"docs":{},"录":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}},"设":{"docs":{},"备":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}},"挂":{"docs":{},"起":{"docs":{},"线":{"docs":{},"程":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}},"暂":{"docs":{},"不":{"docs":{},"设":{"docs":{},"计":{"docs":{},",":{"docs":{},"等":{"docs":{},"内":{"docs":{},"核":{"docs":{},"基":{"docs":{},"本":{"docs":{},"功":{"docs":{},"能":{"docs":{},"完":{"docs":{},"成":{"docs":{},"后":{"docs":{},"再":{"docs":{},"设":{"docs":{},"计":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}}}}}}}}}}}},"需":{"docs":{},"要":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}},"枢":{"docs":{},"纽":{"docs":{},"系":{"docs":{},"统":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}},"检":{"docs":{},"查":{"docs":{},"文":{"docs":{},"件":{"docs":{},"结":{"docs":{},"束":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0051813471502590676}}}}}}}},"清":{"docs":{},"空":{"docs":{},"内":{"docs":{},"存":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}},"索":{"docs":{},"引":{"docs":{},"文":{"docs":{},"件":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}},"终":{"docs":{},"止":{"docs":{},"线":{"docs":{},"程":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}},"进":{"docs":{},"程":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}},"网":{"docs":{},"络":{"docs":{},"系":{"docs":{},"统":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}},"读":{"docs":{},"取":{"docs":{},"文":{"docs":{},"件":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}},"目":{"docs":{},"录":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}},"设":{"docs":{},"备":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}},"重":{"docs":{},"置":{"docs":{},"读":{"docs":{},"取":{"docs":{},"位":{"docs":{},"置":{"docs":{"programing-manual/user/api.html":{"ref":"programing-manual/user/api.html","tf":0.0025906735751295338}}}}}}}},"\\":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.011029411764705883}}},"从":{"docs":{},"代":{"docs":{},"码":{"docs":{},"阅":{"docs":{},"读":{"docs":{},"角":{"docs":{},"度":{"docs":{},",":{"docs":{},"建":{"docs":{},"议":{"docs":{},"每":{"docs":{},"个":{"docs":{},"大":{"docs":{},"括":{"docs":{},"号":{"docs":{},"单":{"docs":{},"独":{"docs":{},"占":{"docs":{},"用":{"docs":{},"一":{"docs":{},"行":{"docs":{},",":{"docs":{},"而":{"docs":{},"不":{"docs":{},"是":{"docs":{},"跟":{"docs":{},"在":{"docs":{},"语":{"docs":{},"句":{"docs":{},"的":{"docs":{},"后":{"docs":{},"面":{"docs":{},",":{"docs":{},"例":{"docs":{},"如":{"docs":{},":":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"代":{"docs":{},"码":{"docs":{},"风":{"docs":{},"格":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":10}}}},"提":{"docs":{},"交":{"docs":{},"日":{"docs":{},"志":{"docs":{},"规":{"docs":{},"则":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"m":{"docs":{},"i":{"docs":{},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{},"l":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}}}}}}}}}}}}}}}},"例":{"docs":{},"如":{"docs":{},"采":{"docs":{},"用":{"docs":{},"如":{"docs":{},"上":{"docs":{},"的":{"docs":{},"形":{"docs":{},"式":{"docs":{},"。":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}}},":":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294},"tutorial/toolchains.html":{"ref":"tutorial/toolchains.html","tf":0.02702702702702703}}},"在":{"docs":{},"m":{"docs":{},"m":{"docs":{},",":{"docs":{},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},",":{"docs":{},"f":{"docs":{},"s":{"docs":{},"等":{"docs":{},"。":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}}}}}}}}}}}}}}}},"匹":{"docs":{},"配":{"docs":{},"的":{"docs":{},"大":{"docs":{},"括":{"docs":{},"号":{"docs":{},"单":{"docs":{},"独":{"docs":{},"占":{"docs":{},"用":{"docs":{},"一":{"docs":{},"行":{"docs":{},",":{"docs":{},"代":{"docs":{},"码":{"docs":{},"阅":{"docs":{},"读":{"docs":{},"起":{"docs":{},"来":{"docs":{},"就":{"docs":{},"会":{"docs":{},"有":{"docs":{},"相":{"docs":{},"应":{"docs":{},"的":{"docs":{},"层":{"docs":{},"次":{"docs":{},"而":{"docs":{},"不":{"docs":{},"会":{"docs":{},"容":{"docs":{},"易":{"docs":{},"出":{"docs":{},"现":{"docs":{},"混":{"docs":{},"淆":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},"。":{"docs":{},"空":{"docs":{},"格":{"docs":{},"建":{"docs":{},"议":{"docs":{},"在":{"docs":{},"非":{"docs":{},"函":{"docs":{},"数":{"docs":{},"方":{"docs":{},"式":{"docs":{},"的":{"docs":{},"括":{"docs":{},"号":{"docs":{},"调":{"docs":{},"用":{"docs":{},"前":{"docs":{},"留":{"docs":{},"一":{"docs":{},"个":{"docs":{},"空":{"docs":{},"格":{"docs":{},"以":{"docs":{},"和":{"docs":{},"前":{"docs":{},"面":{"docs":{},"的":{"docs":{},"进":{"docs":{},"行":{"docs":{},"区":{"docs":{},"分":{"docs":{},",":{"docs":{},"例":{"docs":{},"如":{"docs":{},":":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"变":{"docs":{},"量":{"docs":{},"采":{"docs":{},"用":{"docs":{},"小":{"docs":{},"驼":{"docs":{},"峰":{"docs":{},"命":{"docs":{},"名":{"docs":{},"风":{"docs":{},"格":{"docs":{},",":{"docs":{},"即":{"docs":{},"首":{"docs":{},"字":{"docs":{},"母":{"docs":{},"小":{"docs":{},"写":{"docs":{},",":{"docs":{},"后":{"docs":{},"续":{"docs":{},"单":{"docs":{},"词":{"docs":{},"首":{"docs":{},"字":{"docs":{},"母":{"docs":{},"大":{"docs":{},"写":{"docs":{},",":{"docs":{},"例":{"docs":{},"如":{"docs":{},":":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"唯":{"docs":{},"一":{"docs":{},"的":{"docs":{},"例":{"docs":{},"外":{"docs":{},"是":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}},"建":{"docs":{},"议":{"docs":{},"在":{"docs":{},"括":{"docs":{},"号":{"docs":{},"前":{"docs":{},"留":{"docs":{},"出":{"docs":{},"一":{"docs":{},"个":{"docs":{},"空":{"docs":{},"格":{"docs":{},"(":{"docs":{},"涉":{"docs":{},"及":{"docs":{},"的":{"docs":{},"包":{"docs":{},"括":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}}}}}}}}}}}}},"总":{"docs":{},"结":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}},"枚":{"docs":{},"举":{"docs":{},"结":{"docs":{},"构":{"docs":{},"名":{"docs":{},"也":{"docs":{},"是":{"docs":{},"用":{"docs":{},"大":{"docs":{},"驼":{"docs":{},"峰":{"docs":{},",":{"docs":{},"枚":{"docs":{},"举":{"docs":{},"成":{"docs":{},"员":{"docs":{},"使":{"docs":{},"用":{"docs":{},"全":{"docs":{},"大":{"docs":{},"写":{"docs":{},",":{"docs":{},"单":{"docs":{},"词":{"docs":{},"间":{"docs":{},"用":{"docs":{},"\"":{"docs":{},"_":{"docs":{},"\"":{"docs":{},"隔":{"docs":{},"开":{"docs":{},"。":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"源":{"docs":{},"代":{"docs":{},"码":{"docs":{},"的":{"docs":{},"注":{"docs":{},"释":{"docs":{},"不":{"docs":{},"应":{"docs":{},"该":{"docs":{},"过":{"docs":{},"多":{"docs":{},",":{"docs":{},"更":{"docs":{},"多":{"docs":{},"的":{"docs":{},"说":{"docs":{},"明":{"docs":{},"应":{"docs":{},"该":{"docs":{},"是":{"docs":{},"代":{"docs":{},"码":{"docs":{},"做":{"docs":{},"了":{"docs":{},"什":{"docs":{},"么":{"docs":{},",":{"docs":{},"仅":{"docs":{},"当":{"docs":{},"个":{"docs":{},"别":{"docs":{},"关":{"docs":{},"键":{"docs":{},"点":{"docs":{},"才":{"docs":{},"需":{"docs":{},"要":{"docs":{},"一":{"docs":{},"些":{"docs":{},"相":{"docs":{},"应":{"docs":{},"提":{"docs":{},"示":{"docs":{},"性":{"docs":{},"的":{"docs":{},"注":{"docs":{},"释":{"docs":{},"以":{"docs":{},"解":{"docs":{},"释":{"docs":{},"一":{"docs":{},"段":{"docs":{},"复":{"docs":{},"杂":{"docs":{},"的":{"docs":{},"算":{"docs":{},"法":{"docs":{},"它":{"docs":{},"是":{"docs":{},"如":{"docs":{},"何":{"docs":{},"工":{"docs":{},"作":{"docs":{},"的":{"docs":{},"。":{"docs":{},"对":{"docs":{},"语":{"docs":{},"句":{"docs":{},"的":{"docs":{},"注":{"docs":{},"释":{"docs":{},"只":{"docs":{},"能":{"docs":{},"写":{"docs":{},"在":{"docs":{},"它":{"docs":{},"的":{"docs":{},"上":{"docs":{},"方":{"docs":{},"或":{"docs":{},"右":{"docs":{},"方":{"docs":{},",":{"docs":{},"其":{"docs":{},"他":{"docs":{},"位":{"docs":{},"置":{"docs":{},"都":{"docs":{},"是":{"docs":{},"非":{"docs":{},"法":{"docs":{},"的":{"docs":{},"。":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"相":{"docs":{},"信":{"docs":{},"看":{"docs":{},"到":{"docs":{},"最":{"docs":{},"后":{"docs":{},",":{"docs":{},"您":{"docs":{},"已":{"docs":{},"经":{"docs":{},"对":{"docs":{},"我":{"docs":{},"们":{"docs":{},"的":{"docs":{},"编":{"docs":{},"程":{"docs":{},"规":{"docs":{},"范":{"docs":{},"有":{"docs":{},"了":{"docs":{},"一":{"docs":{},"定":{"docs":{},"的":{"docs":{},"了":{"docs":{},"解":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"就":{"docs":{},"开":{"docs":{},"始":{"docs":{},"您":{"docs":{},"的":{"docs":{},"n":{"docs":{},"x":{"docs":{},"o":{"docs":{},"s":{"docs":{},"开":{"docs":{},"发":{"docs":{},"之":{"docs":{},"旅":{"docs":{},"吧":{"docs":{},"!":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"缩":{"docs":{},"进":{"docs":{},"请":{"docs":{},"采":{"docs":{},"用":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}},"语":{"docs":{},"句":{"docs":{},")":{"docs":{},",":{"docs":{},"而":{"docs":{},"运":{"docs":{},"算":{"docs":{},"表":{"docs":{},"达":{"docs":{},"式":{"docs":{},"中":{"docs":{},",":{"docs":{},"运":{"docs":{},"算":{"docs":{},"符":{"docs":{},"与":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"间":{"docs":{},"留":{"docs":{},"一":{"docs":{},"个":{"docs":{},"空":{"docs":{},"格":{"docs":{},"。":{"docs":{},"另":{"docs":{},"外":{"docs":{},",":{"docs":{},"不":{"docs":{},"要":{"docs":{},"在":{"docs":{},"括":{"docs":{},"号":{"docs":{},"的":{"docs":{},"表":{"docs":{},"达":{"docs":{},"式":{"docs":{},"两":{"docs":{},"侧":{"docs":{},"留":{"docs":{},"空":{"docs":{},"格":{"docs":{},",":{"docs":{},"例":{"docs":{},"如":{"docs":{},":":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"与":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}},"采":{"docs":{},"用":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}},",":{"docs":{},"s":{"docs":{},"w":{"docs":{},"i":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}}}},"请":{"docs":{},"使":{"docs":{},"用":{"docs":{},"英":{"docs":{},"文":{"docs":{},"做":{"docs":{},"为":{"docs":{},"注":{"docs":{},"释":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"中":{"docs":{},"文":{"docs":{},"注":{"docs":{},"释":{"docs":{},"将":{"docs":{},"意":{"docs":{},"味":{"docs":{},"着":{"docs":{},"在":{"docs":{},"编":{"docs":{},"写":{"docs":{},"代":{"docs":{},"码":{"docs":{},"时":{"docs":{},"需":{"docs":{},"要":{"docs":{},"来":{"docs":{},"回":{"docs":{},"不":{"docs":{},"停":{"docs":{},"的":{"docs":{},"切":{"docs":{},"换":{"docs":{},"中":{"docs":{},"英":{"docs":{},"文":{"docs":{},"输":{"docs":{},"入":{"docs":{},"法":{"docs":{},"从":{"docs":{},"而":{"docs":{},"打":{"docs":{},"断":{"docs":{},"编":{"docs":{},"写":{"docs":{},"代":{"docs":{},"码":{"docs":{},"的":{"docs":{},"思":{"docs":{},"路":{"docs":{},"。":{"docs":{},"并":{"docs":{},"且":{"docs":{},"使":{"docs":{},"用":{"docs":{},"英":{"docs":{},"文":{"docs":{},"注":{"docs":{},"释":{"docs":{},"也":{"docs":{},"能":{"docs":{},"够":{"docs":{},"比":{"docs":{},"较":{"docs":{},"好":{"docs":{},"的":{"docs":{},"与":{"docs":{},"中":{"docs":{},"国":{"docs":{},"以":{"docs":{},"外":{"docs":{},"的":{"docs":{},"技":{"docs":{},"术":{"docs":{},"者":{"docs":{},"进":{"docs":{},"行":{"docs":{},"交":{"docs":{},"流":{"docs":{},"。":{"docs":{},"除":{"docs":{},"非":{"docs":{},"必":{"docs":{},"须":{"docs":{},"引":{"docs":{},"用":{"docs":{},"原":{"docs":{},"来":{"docs":{},"的":{"docs":{},"文":{"docs":{},"本":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},",":{"docs":{},"就":{"docs":{},"可":{"docs":{},"以":{"docs":{},"写":{"docs":{},"中":{"docs":{},"文":{"docs":{},"。":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"连":{"docs":{},"接":{"docs":{},"起":{"docs":{},"来":{"docs":{},"。":{"docs":{},"例":{"docs":{},"如":{"docs":{},":":{"docs":{"tutorial/code-style.html":{"ref":"tutorial/code-style.html","tf":0.003676470588235294}}}}}}}}}},"举":{"docs":{},"例":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}},":":{"docs":{},"单":{"docs":{},"元":{"docs":{},"测":{"docs":{},"试":{"docs":{},"自":{"docs":{},"身":{"docs":{},"测":{"docs":{},"试":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}}}}}}}}}}},"将":{"docs":{},"肯":{"docs":{},"定":{"docs":{},"出":{"docs":{},"现":{"docs":{},"在":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}}}}},"影":{"docs":{},"响":{"docs":{},"的":{"docs":{},"范":{"docs":{},"围":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},"文":{"docs":{},"件":{"docs":{},"系":{"docs":{},"统":{"docs":{},",":{"docs":{},"进":{"docs":{},"程":{"docs":{},"管":{"docs":{},"理":{"docs":{},",":{"docs":{},"内":{"docs":{},"存":{"docs":{},"管":{"docs":{},"理":{"docs":{},"等":{"docs":{},"等":{"docs":{},",":{"docs":{},"视":{"docs":{},"项":{"docs":{},"目":{"docs":{},"不":{"docs":{},"同":{"docs":{},"而":{"docs":{},"不":{"docs":{},"同":{"docs":{},"。":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"撤":{"docs":{},"销":{"docs":{},"上":{"docs":{},"一":{"docs":{},"次":{"docs":{},"的":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}}}}},"改":{"docs":{},"变":{"docs":{},"了":{"docs":{},"b":{"docs":{},"u":{"docs":{},"i":{"docs":{},"l":{"docs":{},"d":{"docs":{},"工":{"docs":{},"具":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}}}}}}}}},"构":{"docs":{},"建":{"docs":{},"过":{"docs":{},"程":{"docs":{},"或":{"docs":{},"辅":{"docs":{},"助":{"docs":{},"工":{"docs":{},"具":{"docs":{},"的":{"docs":{},"变":{"docs":{},"动":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},"把":{"docs":{},"g":{"docs":{},"r":{"docs":{},"u":{"docs":{},"b":{"docs":{},"改":{"docs":{},"成":{"docs":{},"了":{"docs":{},"u":{"docs":{},"e":{"docs":{},"f":{"docs":{},"i":{"docs":{},"。":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"永":{"docs":{},"远":{"docs":{},"别":{"docs":{},"忘":{"docs":{},"了":{"docs":{},"第":{"2":{"docs":{},"行":{"docs":{},"是":{"docs":{},"空":{"docs":{},"行":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}}}},"docs":{}}}}}}},"部":{"docs":{},"分":{"docs":{},"是":{"docs":{},"对":{"docs":{},"本":{"docs":{},"次":{"docs":{"tutorial/commit-rule.html":{"ref":"tutorial/commit-rule.html","tf":0.008264462809917356}}}}}}}},"完":{"docs":{},"成":{"docs":{},"配":{"docs":{},"置":{"docs":{},"后":{"docs":{},",":{"docs":{},"就":{"docs":{},"可":{"docs":{},"以":{"docs":{},"进":{"docs":{},"行":{"docs":{},"编":{"docs":{},"译":{"docs":{},"了":{"docs":{},",":{"docs":{},"编":{"docs":{},"译":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},"就":{"docs":{},"会":{"docs":{},"根":{"docs":{},"据":{"docs":{},"最":{"docs":{},"新":{"docs":{},"的":{"docs":{},"配":{"docs":{},"置":{"docs":{},"进":{"docs":{},"行":{"docs":{},"编":{"docs":{},"译":{"docs":{},"。":{"docs":{"tutorial/menuconfig.html":{"ref":"tutorial/menuconfig.html","tf":0.038461538461538464}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"菜":{"docs":{},"单":{"docs":{},"配":{"docs":{},"置":{"docs":{"tutorial/menuconfig.html":{"ref":"tutorial/menuconfig.html","tf":10.038461538461538}}}}}},"服":{"docs":{},"务":{"docs":{},"器":{"docs":{},"下":{"docs":{},"载":{"docs":{},"(":{"docs":{},"较":{"docs":{},"慢":{"docs":{},")":{"docs":{"tutorial/toolchains.html":{"ref":"tutorial/toolchains.html","tf":0.05405405405405406}}}}}}}}}}},"百":{"docs":{},"度":{"docs":{},"网":{"docs":{},"盘":{"docs":{},"链":{"docs":{},"接":{"docs":{},",":{"docs":{},"提":{"docs":{},"取":{"docs":{},"码":{"docs":{},":":{"docs":{},"n":{"docs":{},"x":{"docs":{},"o":{"docs":{"tutorial/toolchains.html":{"ref":"tutorial/toolchains.html","tf":0.05405405405405406}}}}}}}}}}}}}}}},"单":{"docs":{},"元":{"docs":{},"测":{"docs":{},"试":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":10.004545454545454}},"表":{"docs":{},",":{"docs":{},"填":{"docs":{},"写":{"docs":{},"要":{"docs":{},"测":{"docs":{},"试":{"docs":{},"的":{"docs":{},"单":{"docs":{},"元":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}}}}}}}}}}}}}},"带":{"docs":{},"c":{"docs":{},"l":{"docs":{},"e":{"docs":{},"a":{"docs":{},"n":{"docs":{},"的":{"docs":{},"单":{"docs":{},"元":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{},"u":{"docs":{},"p":{"docs":{},"和":{"docs":{},"c":{"docs":{},"l":{"docs":{},"e":{"docs":{},"a":{"docs":{},"n":{"docs":{},"的":{"docs":{},"单":{"docs":{},"元":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}}}}}}}}},"的":{"docs":{},"单":{"docs":{},"元":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}}}}}}}}},"着":{"docs":{},"重":{"docs":{},"点":{"docs":{},":":{"docs":{},"参":{"docs":{},"数":{"docs":{},",":{"docs":{},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{},",":{"docs":{},"功":{"docs":{},"能":{"docs":{},"。":{"docs":{"tutorial/utest.html":{"ref":"tutorial/utest.html","tf":0.004545454545454545}}}}}}}}}}}}}}}}},"length":2607},"corpusTokens":["!=","\"\"","\"=r\"(ret));","\"_\"","\"clock\"","\"hello!\";","\"hello\");","\"init\"","\"multi","\"syscall\"","\"world!\");","\"world!\";","\"world\");","\"{\"","#","#defin","#els","#else,","#endif","#endif这种时,需要在开头和结尾后面写上注释来帮助开发这快速找到对应的宏。","#ifdef","#ifndef","#includ","%","%0\"","%p\",","%p,","%x\",","%x,","&","&&","(","(!attr)","(!pte_used(*pte))","(\"rdtime","():","(*handler)(struct","(*soundcallbackhandler)(void","(*write)(void","(1","(1);","(a0)","(a1)","(c)","(char","(cmder)","(condition)","(coreid","(data)","(fatfs,","(for","(git)下载后安装即可。","(irqno","(level","(mmu_pd","(nx_addr)&trapentry0)","(nx_addr)&trapentry1)","(nx_addr)&trapentry2)","(nx_addr)&trapentry3)","(nx_addr)get_addr_from_satp(addr);","(nx_addr)nx_virt2phy(pagetablevir);","(nx_halcontext","(nx_syscallwitharghandler)nx_syscallgethandler((nx_syscallapi)fram","(nx_thread_max_priority_nr","(nx_thread_priority_high","(nx_u8","(nx_uarch)(((nx_uarch)stack)","(nx_uarch)arg;","(nx_uarch)exitentry;","(nx_uarch)startentry;","(pagetablephi","(phsical","(pte","(python)下载后安装即可。","(smp初始化)","(tabl","(trapentri","(void","(x","(x86,","(内核的主函数)","(初始化调用)","(平台初始化,","(平台初始化二阶段,可以使用内核的功能:","(平台的主函数,什么都可以使用:","(调度第一个线程)","*","*)","*)(pagephi","*)mmu","*)nx_align_down((nx_uarch)stack,","*)stack;","*)stacktop;","**outaddr);","*,","*/","*addr","*addr)","*addr,","*arg)","*arg),","*arg,","*args)","*args,","*atomic)","*atomic,","*buf,","*buffer,","*cond)","*context","*cpugetcurrent(void)","*data);","*data,","*deviceptr;","*directoryread(nx_dir","*exitentry,","*frame)","*from","*kernelstack,","*mem,","*memalloc(us","*mmu,","*mutex)","*name,","*nextsp","*nx_buddyallocpage(nx_buddysystem*","*nx_halcontextinit(void","*nx_halmappage(nx_mmu","*nx_halmappagewithphy(nx_mmu","*nx_halprocessgetkernelpagetable(void)","*nx_halvir2phy(nx_mmu","*nx_heapalloc(nx_s","*nx_irq_delayworkcreate(nx_irq_workhandl","*nx_threadcreate(const","*nx_threadself(void);","*nx_timercreate(nx_uarch","*object)","*object);","*p","*paget","*pagetablevir)","*param,","*path)","*path,","*process,","*pte","*ptr);","*q","*s","*space,","*stack","*stack;","*stackbase,","*stackbase;","*stacktop)","*startentry,","*tabl","*text,","*thread);","*thread,","*threadarg;","*threadname,","*time)","*timer);","*timer,","*userstack);","*userstack,","*value)","*vmspace)","*work);","*work,","+","+=",",","...","...)",".ack",".add",".align",".barrier",".barrierinstruct",".barrierread",".barrierwrit",".ca",".clearmask",".data.stack",".dec",".disabl",".enabl",".executeus",".extern",".freepaget",".get",".getkernelpaget",".getpaget",".global",".globl",".inc",".init",".inituserspac",".jpg)",".mappag",".mappagewithphi",".mask",".restorelevel",".savelevel",".section",".set",".setmask",".setpaget",".space",".sub",".swap",".switchnext",".switchpaget",".switchprevnext",".text",".text.start",".unmappag",".unmask",".vir2phi",".vscode","/","/*","/**","//","0","0);","0,","01","0;","0x01","0x02","0x1000;","0x2","0x20,","0x30,};","0x50,","0x60,};","0x80020000,","0x80200000,","0x82000000","0xf0000000","0~nx_multi_cores_nr","1","1)","1);","1,","1.","1.目录名称","10","10.","10.注释编写","10000000","10mhz","11","11.缩进以及分行","112,","12","12.大括号与空格","128等。","13.函数指针类型定义","14.函数参数太多","15","15.宏条件定义","16","16550a","16;","1;","1]","1mb)内存对象。","1ms~100m","1。","2","2,","2.","2.0","2.04","2.文件名称","2018","2021","2021,","2022","2022,","2;","3","3);","3.","3.头文件定义","31","32","32);","32,","32mb","39","3;","4","4);","4.","4.头文件注释","48","48,","4;","5);","5.","5.变量命名","57","6","6.","6.函数命名","64","64,","64/i386工具链:","64/i386工具链:apt","6]","7","7.","7.结构体定义","8","8.","8.枚举定义","80,","8192","9","9.","9.宏定义","96,",":","=","==",">",">a0",">a0);",">a0,",">a1,",">a2,",">a3,",">a4,",">a5,",">a6);",">a7",">a7);",">a7,",">epc",">mmu.tabl",">mmu.table);",">ra",">sp",">sstatu",">table;",">valu",">value),",">value,",">value;",">vmspace.mmu,","[0,","[7,","\\","__assembly__","__driver_keyboard__","__file__","__mappage(mmu,","__mappagewithphy(mmu,","__sync_fetch_and_add(&atom","__sync_fetch_and_and(&atom","__sync_fetch_and_or(&atom","__sync_fetch_and_sub(&atom","__sync_lock_test_and_set(&((atomic)","__sync_synchron","__sync_synchronize();","__sync_val_compare_and_swap(&atom","__unmappage(mmu,","_entermain","_entermain:","_setsp0","_setsp0:","_setsp1","_setsp1:","_setsp2","_setsp2:","_setsp3","_setsp3:","_start","_start:","_start,当执行到这个地方的时候,内核就开始运行了。","`pc`","`ra`","`ra`,","`sepc`","`sp`","`sret`,","`trap","a.","a0","a0,","a0~a7","access","add","addr","addr)","addr,","addr;","addrend","address","addrstart","alloc","allow","anyth","ap","apach","api","api);","api:","api应用程序接口","api设计","app","apt","arch","arg","arg0:%x,","arg1:%x,","arg2:%x,","arg3:%x,","arg4:%x,","arg5:%x,","arg6:%x\",","arg,","arm,","asid","asid。表示当前程序的","assert_false(...)","assert_true(...)","atom","atomic.c、barrier.c、clock.c、context.c、interrupt.c即可。","atomic.c、barrier.c即可。","attr)","attr);","attr,","author","avoid","b.","bad!!!","bare","barrier","base","befor","beq","bit","bodi","booko","bootcoreid)","bootcoreid);","bootload","break;","bss","buddi","buddy伙伴算法","buf0[32]","buf1,","buf1[32]","buf2,","buf2[32]","buffer","bufsiz","bug","build","bytes)","cach","call","can't","case","chang","char","chore","clean","clear","clearcsr(sie,","clock","cmd,","code","code,","comment","commit","cond,","condit","conditioncreate(int","conditiondelete(condit","conditioninit(condit","conditionsleep(condit","conditionwake(condit","conditionwakeall(condit","config","config_nx_platform_k210","config_nx_uart0_from_sbi","consoleprint(str);","consoleprintcolor(color,","consolerestorecolor()","consolesetcolor(color);","const","contains:","content","context","control","copyright","core","core\"","coreaffinity;","coreid","coreid)","coreid);","coreid;","corestack2:","corestack3:","count","count);","cow","cpu","cpu_inittrap(coreid);","cpu_stack0:","cpu_stack1:","cpu_stacktop0","cpu_stacktop0:","cpu_stacktop1","cpu_stacktop1:","cpu_stacktop2","cpu_stacktop2:","cpu_stacktop3","cpu_stacktop3:","csr","csrc","csrw","ctrl+a","ctrl+d","ctx_sp_off","c语言头文件为了避免多次重复包含,需要定义一个符号。这个符号的定义形式请采用如下的风格:","d1","data","data1:","data2:","date","deamon","default:","defconfig","descript","dest,","dev)","dev,","develop","devic","device_name_len","deviceclose(int","devicecontrol(int","devicecreate(char","devicedelete(char","deviceopen(char","deviceread(int","devicewrite(int","differ","dir)","direct","directoryclose(nx_dir","directoryopen(char","directoryrewind(nx_dir","disabl","doc","docs(mm):","docs:文档(documentation)","driver","dynam","ecal","elf","enabl","enter","entri","entry`","enum","env)","epc","err","err;","exampl","except_false(...)","except_true(...)","exfat.","exitcode)","exitcode);","exitentry,","exitlist;","extfs,","fail","fat12,","fat12:","fat16,","fat32,","fat32:","fatfs,","fault!\");","fd)","fd,","feat(mm):","feat:新功能(feature)","fenc","fence.i","file","first","five”)是一个基于精简指令集(risc)原则的开源指令集架构(isa)。","fix","fix(mm):","fixedpriority;","fix:修补bug","flags)","flags);","flags,","flags。","floppi","frame","free","frequenc","fs","function","gcc","gcc\\bin","gdb","genisoimag","get_pf_id(addrend)","get_pf_id(addrstart)","gettimercounter()","git","globallist;","grub2","hal","handler","handler(fram","handler,","handler;","hardwar","hash","hat/fedora/centos:","header","header部分只有一行,包括三个字段:type(必需)、scope(可选)和subject(必需)。","heap","heapcache虚拟内存管理","here","high","hold","http://byterunner.com/16550.html","hub","hypervisor","hypervisor,supervisor,","i.","i/o驱动框架和中断管理","i386","i386,","id","id,","identifier:","idl","id。","ier","ier_rx_en","if(vmspac","if、for、while、switch","includ","info","init","input","instal","instead","instruct","int","interrupt","interupt","io","ipc","irq","irqno)","irqno);","irqno,","is:%d\",","isa)也处在草案版本1.10。","isa),而特权指令集(privileg","isiz","issus","isterminated;","j","jasonhu","k210","k210,","kdriver","kernel","kill","kservic","la","layout:","len);","len,","level","level)","li","licens","line","line1","line2","linux","linux:","linux下设置i386环境并设置platform=x86","linux下设置riscv64环境platform=riscv64","linux工具链只需要从软件包管理器下载安装即可:","linux环境","list","list;","load","lock","lock;","log","logs:","log,建议是不要。","long","loop","loop:","low","make","make_satp(addr));","malloc","manag","mask)","mask);","max","mean","memcopy(void","memfill(void","memfree(void","memmap(void","memmove(void","memori","memory,","memroy","memunmap(void","memzero(void","menuconfig","menuconfig是一个可以在终端显示的图形化配置界面,他不仅可以极大的方便我们对于配置文件的修改,","menuconfig简介","messag","mhartid,","microsecond","microseconds);","millisecond","milliseconds,","min","mkf","mm","mmu","mmu_flushtlb();","mmu_pd","mmu_pt","mmu内存管理单元","mmu虚拟内存管理","mode","mode,","mtool","multi","mutex","mutex)","mutex,","mutexacquire(mutex","mutexcreate(int","mutexdelete(mutex","mutexinit(mutex","mutexrelease(mutex","mutextryacquire(mutex","mv","mythread,","name","name)","name,","name[nx_thread_name_len];","name[sound_device_name_len];","need","needsched;","netstack)","never","newvalue)","newvalue);","nextsp);","normal","note","note:","notice:","nt","number)。","nx_","nx_addr","nx_assert(handler);","nx_assert(mmu);","nx_assert(vmspace);","nx_assert_bufeq(buf0,","nx_assert_bufne(buf1,","nx_assert_eq(1,","nx_assert_false(0);","nx_assert_false(nx_false);","nx_assert_ge(3,","nx_assert_gt(4,","nx_assert_in_range(1,","nx_assert_in_range(4,","nx_assert_in_range(5,","nx_assert_le(3,","nx_assert_lt(3,","nx_assert_ne(0,","nx_assert_ni_range(0,","nx_assert_ni_range(1,","nx_assert_ni_range(5,","nx_assert_ni_range(6,","nx_assert_not_null(q);","nx_assert_null(p);","nx_assert_streq(\"hello\",","nx_assert_streq(s,","nx_assert_strne(\"hello\",","nx_assert_strne(s,","nx_assert_true(1);","nx_assert_true(nx_true);","nx_atom","nx_atomicop","nx_atomicopsinterfac","nx_bool","nx_buddycreate(void","nx_buddyfreepage(nx_buddysystem*","nx_buddyincreasepage(nx_buddysystem*","nx_buddysystem*","nx_callsinit","nx_casm","nx_casm(\"fence\":::\"memory\");","nx_casm(\"fence.i\":::\"memory\");","nx_clocktickgo();","nx_contextop","nx_contextopsinterfac","nx_createthread(char","nx_dir","nx_directorycreate(char","nx_directorydelete(char","nx_direntri","nx_efault;","nx_einval;","nx_enomem;","nx_enor","nx_eok;","nx_error","nx_false);","nx_fd","nx_fileaccess(char","nx_fileclose(nx_fd","nx_filecreate(char","nx_filedelete(char","nx_fileisend(nx_fd","nx_fileopen(char","nx_fileread(nx_fd","nx_fileseek(nx_fd","nx_filetelloffset(nx_fd","nx_filewrite(nx_fd","nx_halatomicadd(nx_atom","nx_halatomicadd,","nx_halatomiccas(nx_atom","nx_halatomiccas,","nx_halatomicclearmask(nx_atom","nx_halatomicclearmask,","nx_halatomicdec(nx_atom","nx_halatomicdec,","nx_halatomicget(nx_atom","nx_halatomicget,","nx_halatomicinc(nx_atom","nx_halatomicinc,","nx_halatomicset(nx_atom","nx_halatomicset,","nx_halatomicsetmask(nx_atom","nx_halatomicsetmask,","nx_halatomicsub(nx_atom","nx_halatomicsub,","nx_halatomicswap(nx_atom","nx_halatomicswap,","nx_halclearbss();","nx_halclockhandler(void)","nx_halconsoleoutchar","nx_halcontext","nx_halcontextinit","nx_halcontextinit,","nx_halcontextswitchnext","nx_halcontextswitchnext(nx_addr","nx_halcontextswitchnext,","nx_halcontextswitchnext:","nx_halcontextswitchprevnext","nx_halcontextswitchprevnext(nx_addr","nx_halcontextswitchprevnext,","nx_halcontextswitchprevnext:","nx_halcorebootapp(nx_uarch","nx_halcorebootapp。","nx_halcoreenterapp,","nx_halcoregetindex(void)","nx_halcoregetindex。该索引是在处理器数组中的索引,不管什么处理器","nx_haldirectuartinit();","nx_haldirectuartstage2","nx_haldirectuartstage2();","nx_halen","nx_halenable(void)","nx_halenable,","nx_halgetkernelpagetable(),","nx_halgetkernelpagetable();","nx_halgetpaget","nx_halgetpagetable(void)","nx_halgetpagetable,","nx_halinitclock(void)","nx_halirqack(nx_irq_numb","nx_halirqack,","nx_halirqack。","nx_halirqdis","nx_halirqdisable(void)","nx_halirqdisable,","nx_halirqen","nx_halirqenable(void)","nx_halirqenable,","nx_halirqmask","nx_halirqmask(nx_irq_numb","nx_halirqmask,","nx_halirqrestorelevel(nx_uarch","nx_halirqrestorelevel,","nx_halirqrestorelevel。","nx_halirqsavelevel","nx_halirqsavelevel(void)","nx_halirqsavelevel,","nx_halirqunmask","nx_halirqunmask(nx_irq_numb","nx_halirqunmask,","nx_halmappag","nx_halmappage,","nx_halmappagewithphi","nx_halmappagewithphy,","nx_halmembarrier(void)","nx_halmembarrier,","nx_halmembarrierinstruction(void)","nx_halmembarrierinstruction,","nx_halmembarrierread(void)","nx_halmembarrierread,","nx_halmembarrierwrite(void)","nx_halmembarrierwrite,","nx_halpagezoneinit();","nx_halplatforminit","nx_halplatforminit(nx_uarch","nx_halplatformmain","nx_halplatformstage2","nx_halplatformstage2(void)","nx_halplatformstage2中,可以使用内核的功能,内存分配,中断注册等。","nx_halprocessenterusermode(args,","nx_halprocessenterusermode(void","nx_halprocessexecuteus","nx_halprocessexecuteuser(const","nx_halprocessexecuteuser,","nx_halprocessfreepaget","nx_halprocessfreepagetable(nx_vmspac","nx_halprocessfreepagetable,","nx_halprocessgetkernelpaget","nx_halprocessgetkernelpagetable,","nx_halprocessinituserspac","nx_halprocessinituserspace(nx_process","nx_halprocessinituserspace,","nx_halprocessswitchpaget","nx_halprocessswitchpagetable(void","nx_halprocessswitchpagetable,","nx_halprocesssyscalldispatch","nx_halprocesssyscalldispatch(nx_haltrapfram","nx_halsetpaget","nx_halsetpagetable(nx_addr","nx_halsetpagetable,","nx_halunmappag","nx_halunmappage(nx_mmu","nx_halunmappage,","nx_halvir2phi","nx_halvir2phy,","nx_has_onecor","nx_has_smp","nx_heapalloc","nx_heapalloc(size)","nx_heapfree(ptr)","nx_heapfree(void","nx_heapgetobjectsize(void","nx_i32","nx_import","nx_interfac","nx_irq_bind(nx_irq_numb","nx_irq_control","nx_irq_controllerinterfac","nx_irq_controllerinterface.disable()","nx_irq_controllerinterface.enable()","nx_irq_controllerinterface.restorelevel(level)","nx_irq_controllerinterface.savelevel()","nx_irq_delayqueu","nx_irq_delayqueueenter(nx_irq_delayqueu","nx_irq_delayqueueleave(nx_irq_delayqueu","nx_irq_delaywork","nx_irq_delayworkdestroy(nx_irq_delaywork","nx_irq_delayworkhandl","nx_irq_delayworkhandle(nx_irq_delaywork","nx_irq_delayworkinit(nx_irq_delaywork","nx_irq_dis","nx_irq_disable()","nx_irq_en","nx_irq_enable()","nx_irq_fast_queu","nx_irq_handl","nx_irq_mask(nx_irq_numb","nx_irq_normal_queue,","nx_irq_period_queue,","nx_irq_queue_nr,","nx_irq_restorelevel","nx_irq_restorelevel(level)","nx_irq_restorelevel(level);","nx_irq_savelevel","nx_irq_savelevel()","nx_irq_savelevel();","nx_irq_sched_queu","nx_irq_sched_queue,","nx_irq_slow_queu","nx_irq_slow_queue,","nx_irq_unbind(nx_irq_numb","nx_irq_unmask(nx_irq_numb","nx_irq_workhandl","nx_list","nx_log_*","nx_log_d(\"riscv64","nx_log_i(\"boot","nx_log_i(\"hello,","nx_log_i(\"stage2!\");","nx_log_info","nx_log_level","nx_log_nam","nx_main","nx_memalloc","nx_memalloc(nx_page_size);","nx_memalloc(size)","nx_membarrierop","nx_membarrieropsinterfac","nx_memcopy(table,","nx_memfre","nx_memfree(ptr)","nx_memfree(vmspac","nx_memfree。","nx_memzero(context,","nx_memzero(table,","nx_mmugetpagetable())","nx_mmuinit(&process","nx_mmuop","nx_mmuopsinterfac","nx_mmusetpagetable(pagetablephy);","nx_nr_irqs)","nx_null)","nx_null;","nx_page*","nx_page_addr_mask;","nx_page_alignup(size);","nx_page_size);","nx_page_size;","nx_pagefromptr(nx_buddysystem*","nx_panic(\"should","nx_panic(\"vir2phi","nx_printf","nx_privat","nx_processexit(int","nx_processlaunch(char","nx_processop","nx_processopsinterfac","nx_schedtofirstthread","nx_size","nx_smp_main","nx_smp_preload","nx_spin","nx_syscallgethandler(nx_syscallapi","nx_syscallhandl","nx_syscallwitharghandl","nx_test(test)","nx_test(test1)","nx_test(test2)","nx_test(test3)","nx_test(testunitname)","nx_test(yyy)","nx_test_case(testcasename);","nx_test_case(utest);","nx_test_case(xxx);","nx_test_case_clean(testcasename)","nx_test_case_clean(utest)","nx_test_case_setup(testcasename)","nx_test_case_setup(utest)","nx_test_clean(test)","nx_test_clean(testunitname)","nx_test_setup(test)","nx_test_setup(testunitname)","nx_test_table(testcasename)","nx_test_table(utest)","nx_test_table(xxx)","nx_test_unit(test),","nx_test_unit(test1),","nx_test_unit(test2),","nx_test_unit(test3),","nx_test_unit(testunitname),","nx_test_unit(yyy),","nx_test_unit_clean(testunitname),","nx_test_unit_setup(testunitname),","nx_test_unit_setup_clean(test),","nx_test_unit_setup_clean(testunitname),","nx_thread","nx_thread;","nx_thread_priority_high","nx_thread_priority_idl","nx_thread_priority_low","nx_thread_priority_norm","nx_thread_priority_rt_max","nx_thread_priority_rt_min","nx_threadcreat","nx_threaddestroy(nx_thread","nx_threadexit","nx_threadexit(void);","nx_threadhandl","nx_threadresourc","nx_threadself","nx_threadsetaffinity(nx_thread","nx_threadsleep(nx_uarch","nx_threadstart","nx_threadstart(nx_thread","nx_threadstat","nx_threadtermin","nx_threadterminate(nx_thread","nx_threadyield","nx_threadyield(void);","nx_ticks_per_second","nx_ticks_per_second;","nx_timer","nx_timer_clk_freq","nx_timer_oneshot","nx_timer_period","nx_timerdestroy(nx_tim","nx_timerdestroy,","nx_timerinit","nx_timerinit(nx_tim","nx_timerstart","nx_timerstart(nx_tim","nx_timerstop","nx_timerstop(nx_tim","nx_u32","nx_u64","nx_u8","nx_uarch","nx_vmspacemap(nx_vmspac","nx_vmspacemapwithphy(nx_vmspac","nx_vmspaceunmap(nx_vmspac","nxbase","nxo","nxos使用了一个python开发的menuconfig,它的跨平台性以及易用性成为了我们的首选。","nxos是next","nxos是一个分时多进程/多线程(也支持实时优先级),支持","nxos的api接口分为几个大类。进程,线程,内存管理,时间管理,枢纽系统,文件系统,设备管理,网络管理,图形管理,安全管理,用户态驱动框架。","nxos采用","nxos采用混合内核架构,即宏内核和微内核相结合。优势是减小内核代码,增加功能可扩展性,功能模块是独立的进程,添加和删除模块就是进程的创建和关闭。","offset","offset)","offset,","old","old,","on","oncore;","oneshot","opensbi","opensbi,","oper","output","paddr,","page","pageoffset","pageoffset);","pageoffset;","pagephi","pagephy;","pages);","pagetablephi","pagewalk(pagetable,","path","path,","pc","period","phyaddr","phyaddr,","physic","pid)","pid,","platform","platfrom","plic","plic_complete(nx_smp_getbootcore(),","plic_disableirq(nx_smp_getbootcore(),","plic_enableirq(nx_smp_getbootcore(),","plic_init(nx_true);","ppn","ppn。第一级硬件回填使用的","pr","prefix","prepar","prevsp,","prioriti","priority)","priority);","priority,","priority;","priority,即可创建一个线程,返回线程的地址。","process","processcreate(char","processexit(int","processgetid(void)","processlist;","processor)。","processor)启动后,进入内核,完成初始化,再由引导处理器去唤醒其它处理器,通常称为应用处理器(appl","processterminate(int","processwait(int","protect","pte","pte2paddr(*pte);","python","qemu","qemu_riscv64","queue,","ra","rdtime","read","readcsr(satp);","readcsr(sstatus)","readcsr(sstatus);","readcsr(stvec);","real","receiv","red","refactor(mm):","refactor:重构(即不是新增功能,也不是修改bug的代码变动)","reference;","regbytes(sp)","regist","registers.","reserv","resourc","resource;","restor","restore_context","ret;","return","return,","return:","revert","revert:","rhr","ring1,","ring2,","ring3),在","risc","riscv","riscv(rv32)具有32个整数寄存器组(取名为:x0~x31),其中31个是通用寄存器(x1~x31),它们存储整数数值,寄存器x0是硬件连线的常数0。当你设计的riscv架构处理器实现了浮点扩展时,还必须有32个浮点寄存器f0~f31。对于rv32,其x寄存器是32位宽度的,xlen=32,对于rv64,它们是64位宽度的,xlen=64。","riscv,","riscv64","riscv64!\");","riscv64,","riscv64等","riscv架构移植","routin","rt","rto","run","rustsbi","rustsbi,其内核的入口地址为","s","same","satp","save","save_context","saveconfig","sbi","sbi,","sbi_entry.","sbi_init();","sbi_print_version();","sbi_set_timer(gettimercounter()","sched","schedul","scope","scope用于说明","script","sdcard/harddisk","seciton,","see","seekmethod)","sepc,","set","setcsr(sie,","setup.bat","setup.sh","share","shot","showlogvers","sie","sie_stie);","simpl","singl","size","size)","size);","size,","sizeof(nx_halcontext));","sizeof(nx_halcontext);","sizeof(nx_uarch));","skip","smart。","smp多核","smp多核启动流程","smp多核调度","smp负载均衡","sndhandler;","sound_ac97,","sound_hd,","sound_pc,","soundcallbackhandl","sounddevic","sounddevice;","soundtyp","soundtype;","sourc","sp","sp,","space","spdx","src","src,","src/arch/riscv64/port","sret","sscrach","sscratch","sscratch,","ssize","sstatu","sstatus,","sstatus_si","sstatus_sie));","sstatus_sie);","sstatus_sie;","sstatus_spi","sstatus_spie;","sstatus_spp","sstatus_sum","stack","stack,","stacksize,","stacksize;","stacktop","startentri","state;","store","str)","struct","stvec","style","style(*):","style:","subject","subject是","sudo","supervisor","supervisor,","supervisor模式的中断的打开与关闭是由状态寄存器","suport","support","sure","sv39","sv39,3级页表,页表和物理页都是4kb大小。","sv48","sv57","sv64","switch","syscal","system","system,","system的意思,是一个跨平台的简洁、高性能、高稳定性的支持多核的混合内核,它将应用于桌面操作系统领域,服务器操作系统领域以及移动终端操作系统领域。","system设计好了再设计接口,目前还没有概念","t0,","t1","t1,","tabl","table,","tc=i","tc是testcase的缩写,表示启用测试案例。","team","test","test(mm):","test:增加测试","text,","thr","thread","thread,","threadcreate(threadhandl","threadexit(int","threadfindbynam","threadgetid(void)","threadhandl","threadhandler,","threadresume(int","threadsuspend(int","threadterminate(int","threadwait(int","tickdelta","tickdelta);","ticks;","tid)","tid,","tid;","time","timegetclock(void)","timegetcurrent(timesytem","timeout,","timer","timesetcurrent(timesytem","timeslice;","tlsalloc(void)","tlsfree(int","tlsgetvalue(int","tlsindex)","tlsindex,","tlssetvalue(int","tmpfilebuff","toolchains\\x86_64","tools/","tools/genisoimag","tools/grub","tools/mkf","tools/mtool","tools服务器下载(速度较慢,请耐心等待)","top","translat","transmit","trap","trapentri","trapentry0;","trapentry1;","trapentry2;","trapentry3;","tri","truncat","type","typedef","u8","uart","uart.","ubuntu/kali","udriv","unknown","updat","us","used!\");","user","user\");","user:","userstack);","userverc","user)。","usiz","utest","util","v","v0.1","v64/32工具链:","v64工具链:","vaddr,","valu","value)","value);","value;","vf","vfs_createfil","viraddr","viraddr)","viraddr,","viraddr;","virstart,","virt","virtual","vmm","vmnode","vmnode,节点记录了地址的信息以及这段地址的属性。","vmspace虚拟地址空间","void","vs","vscode的一些配置文件,有gdb调试配置","v中c语言函数参数是","v中断分为两种类型,一种是同步中断,即ecall、ebreak等指令所产生的中断,另一种是异步中断,即gpio、uart等外设产生的中断。","v已经确立了版本2.22的用户空间的指令集(userspac","v指令集可以自由地用于任何目的,允许任何人设计、制造和销售risc","v指令集的设计考虑了小型、快速、低功耗的现实情况来实做,但并没有对特定的微架构做过度的设计。","v架构移植","v的mmu支持多种模式,有sv32/sv39/sv48/sv57/sv64等。不同的模式映射的页面等级,页面大小是有差异的。在64位处理器种最常用的是sv39,它是3级4kb页面大小映射。","v的中断管理由处理器核局部中断clint(corelocalinterrupt)和平台级中断控制器plic(platformlevelinterruptcontroller)组成。clint分为软件中断核计时器中断,负责响应处理器的异常核和计时器中断。plic负责处理外设的中断。","v目前有4种特权模式(machine,","v芯片和软件。虽然这不是第一个开源指令集,但它具有重要意义,因为其设计使其适用于现代计算设备(如仓库规模云计算机、高端移动电话和微小嵌入式系统)。设计者考虑到了这些用途中的性能与功率效率。该指令集还具有众多支持的软件,这解决了新指令集通常的弱点。","v被设计成可扩展的,可以配置的,根据不同的应用场景可以生产带有不同功能扩展的处理器。","v(发音为“risk","walk","weel.","window","windowsnt","windows下设置i386环境并设置platform=x86","windows下设置riscv64环境platform=riscv64","windows环境","within","work","write.","writecsr(satp,","writecsr(sstatus,","x","x86","x:","xbook","xbuild改成了xmak","xnu","xxx","yum","yyi","{","{0x10,","{0x40,","|","|内容","|描述","}","};","~mask);","~sstatus_sie);","–","。","。由于有的时候只是为了暂时关闭中断,处理完后需要恢复中断的状态,于是则需要使用保存中断的状态和恢复中断的状态,即","一.","一、windows环境工具","一、开发环境搭建","一、描述","一、混合内核框架","一般情况下,第一个引导处理器(boot","三.","三、代码移植","三、框架图","上下文切换是多线程实现的根基","上下文的切换分为上下文的初始化,从当前线程切换到下一个线程,直接切换到下一个线程。","上图为机器模式状态寄存器(rv32)","上图为机器模式状态寄存器(rv64)","下载到本地后,需要手动解压到一个目录下面,然后对工具链的bin路径配置环境变量。","下载后需要解压出来,然后将每一个目录配置到path系统环境变量中(最好是配置到环境变量的最前面,避免和其它系统已经存在的工具冲突),解压后您将会有:","下载工具链","下载链接:https://qemu.weilnetz.de/w64/","不同用法的地址。","不同的架构内核入口代码有差异,需要根据架构来实现","不带setup和clean的单元","不管是哪一个部分,任何一行都不得超过72个字符(或100个字符)。这是为了避免自动换行影响美观。","不能使用内核的功能:","与大多数指令集相比,risc","个空格的方式。如果没有什么特殊意义,请在","个页面。在mmu映射和虚拟内存管理器中会使用到。","中使用","中断只需要对","中断延迟队列","中断延迟队列在某个驱动或者内核组件中会进行初始化。当产生中断的时候,在中断处理函数中,只对中断产生时的数据进行保存,不对中断产生时的数据进行处理,","中断延迟队列是一种延迟处理中断的机制,类似于","中断是可以全局打开和关闭的,打开后才会响应中断。除此之外,对于每一个具体的中断,都可以打开和关闭,在禁止了网卡中断后,即使打开了全局中断,也收不到网络数据包了。但是,异常是不可以屏蔽的,异常是来告诉内核出现一些问题了,需要根据具体的异常做处理。有的异常是不可以修复的,会导致系统死机,有的异常时可以修复的,比如页故障,可以拿来实现页面延迟映射,","中断是由处理器支持的一个临时打断当前执行流的功能,可分为设备中断和处理器异常。设备中断就是当网卡设备收到数据后会产生一个中断,打断处理器当前在处理的事情,去处理网络数据包。异常中断就是当处理器执行了一个不存在的指令或者访问了一个没有权限的内存地址,处理器就会中断当前的执行流,去对异常做一个处理,一般都是","中断机制中的中断下半部分,用来进行具体的中断处理。","中断的要求是快速地响应中断,并且是关闭了全局中断的,然后回到之前的工作。而延迟队列就是来完成这个工作的,产生了中断后,只进行最少的工作,","中断管理","中断管理接口对内核以及驱动都是至关重要的","中断管理的实现是基于处理器的中断管理机制的,不同的架构具体实现机制可能有差别,但是在大体逻辑上都是一致的,因此可以抽象出一套统一的接口来供上层使用。","中断系统","中断表地址需要写入管理者模式的向量基址寄存器","中的","中这个频率是","中,使用了","中,内存对象被划分成3类,小(16byte","中,分为实时优先级和分时优先级。实时优先级是,只要有高的优先级,就不能运行低的优先级。而分时优先级是高低优先级线程都能得到运行,只是低优先级线程运行的时间更少而已。优先级","中,多了对当前线程的上下文的保存的工作,然后切换到下一个线程。","中,获取了栈的值后,就从栈中恢复寄存器上下文,然后调用","中,进行初始化,初始化完串口后,就能使用打印功能了。","中,需要构建的上下文参数是线程的入口","串口可以配置为调用","串口来输出是非常方便的。","为","为了方便,我们将其他比较小的工具已经打包在一个工具包里面了,下载解压后,手动添加对应的工具到系统环境变量即可。","为选中的平台做初始化(仅仅第一次编译的时候需要),会为每一个平台下载平台特别需要的工具到平台中。","举例","举例:单元测试自身测试","之下,最后返回栈低。","之中。其他情况(docs、chore、style、refactor、test)由你决定,要不要放入","之间的这部分内存。简单的说就是对一段或者多段空闲的内存地址进行管理,可以进行分配与释放,让操作系统去使用。","二.","二、linux环境工具","二、原理","二、架构简述","二、目录框架","二、编译和运行","产生时钟中断的时候,会去减少线程的时间片,时间片为0后,再去切换线程,这是属于线程被动切换。","仅仅编译源码","从代码阅读角度,建议每个大括号单独占用一行,而不是跟在语句的后面,例如:","代码提交日志规则commitrul","代码风格","以内进行数据存取。","以动词开头,使用第一人称现在时,比如change,而不是changed或chang","以及参数","以及在做进程的堆分配和栈扩展的时候,都会使用到。","以及定时器的标志","以及线程运行时的参数","以及这个地址对应的内存大小,内存节点的属性,已经一些扩展的标志。","以线程为最小调度单元的好处是可以很方便支持内核态以及用户态的多线程,并且层次框架也比较好,容易实现。","以避免重名,另外也可以根据文件名中是否包含多个词语而采用","休眠等待条件变量","优先级最低。","优先级最高,","优缺点","伙伴内存管理算法。为了便于页面的维护,将多个页面组成内存块,每个内存块都有2的方幂个页,方幂的指数被称为阶。在操作内存时,经常将这些内存块分成大小相等的两个块,分成的两个内存块被称为伙伴块,采用一位二进制数来表示它们的伙伴关系。当这个位为1,表示其中一块在使用;当这个位为0,表示两个页面块都空闲或者都在使用。系统根据该位为0或位为1来决定是否使用或者分配该页面块。系统每次分配和回收伙伴块时都要对它们的伙伴位跟1进行异或运算。所谓异或是指刚开始时,两个伙伴块都空闲,它们的伙伴位为0,如果其中一块被使用,异或后得1;如果另一块也被使用,异或后得0;如果前面一块回收了异或后得1;如果另一块也回收了异或后得0。","传入线程的名字","但是注意,此时只是创建了线程,还没有启动线程。","位保存和恢复。","位做置位和清理的操作即可。","作为机器模式的固件,qemu_riscv64平台选择了","使用大写作为名字,单词间使用\"_\"隔开,例如:","使用方法","使用的时候需要注意,必须是通过","使用第一人称现在时,比如使用change而不是changed或changes。","使用菜单配置进行个性化剪裁。可以选择打开或者关闭某些功能,设置一些变量等。配置完成后需要按esc键退出,退出后会生成新的配置头文件。","使用这种方式的话,就非常方便移植到其它架构上。","例如在mm,thread,fs等。","例如采用如上的形式。","例如:","保存的,其格式如下:","保存,因为上下文切换的时候会模拟一次异常返回,返回后就到这个异常地址处执行。","保存,它是返回地址的意思,表示线程返回后就去执行该函数。","值得注意的是,在执行系统调用期间,需要打开中断,避免在系统调用时出现死循环,导致内核卡死。","值得注意的是,映射的时候,还会去对内存进行物理内存映射,只有映射后,进程才能访问该地址。","值,","值,其返回值范围为","值,就能获取到对应的内核服务功能,然后以函数指针的方式去调用执行即可。","做了一些兼容,使用起来比较简单。","入口地址使用","入口地址在链接脚本中写的是","关闭。","关闭文件","关闭目录","关闭设备","其中\"{\"和\"}\"需要单独使用一行。","其中,header","其他工具","其他注意事项:","其他涉及到的工具:python","具体字段的解析如下:","内存屏障","内存屏障前的所有读写操作完成后才能执行屏障后的读写操作","内存是操作系统运行的根基,处理器从内存中取出指令来执行,在进入操作系统之前,一般会有引导器","内存管理","内存管理分为物理内存管理、虚拟内存管理、进程虚拟内存管理这三个大模块。","内存管理是操作系统中最为核心和重要的部分,这是由于很多其它模块的运行都需要内存的分配和释放。","内存管理最基本的接口就是分配和释放。为了能够支持分页机制,为页表映射提供内存的支持,将内存分为页面大小进行管理会比较合适。","内存管理模块","内存读/写屏障使用","内存释放堆内存的时候,需要传入内存对象地址,并返回释放的状态。","内核、苹果","内核一些功能的文档说明","内核中,休眠的单位是毫秒,休眠","内核入口","内核其余模块","内核分配堆内存的接口,需要传入待分配内存的大小,即可获取一个内存地址,如果为空,那么就是分配失败了。","内核初始化以及main核心","内核功能初始化","内核崩溃。","内核执行路径","内核是同一个数量级的。","内核源码目录","内核的定时器属于","内核的最小调度单位是线程,每个线程都有自己独立的栈,寄存器组,以及一些运行信息等。","内核的源码","内核虚拟内存管理之堆内存","内核虚拟堆内存管理,使用基于缓存的链表实现","内核,","内核,还有国产开源系统","内的物理地址,","内的物理地址,就能正确地进行数据存取,不然,则会产生页面故障。","内置了原子操作的函数,","内置函数","内置的原子操作即可。","再去对物理地址进行存取。比如虚拟地址是","写入文件","写入设备","函数","函数即可退出当前线程的运行。","函数后,就可以使用","函数来打印消息。","函数采用大驼峰命名风格,即每个单词的首字母都大写,如果单词是用的缩写,那么单词之间需要用\"_\"隔开,例如:","函数,相反关闭则是","分支","分配一个tl","分配内存","分配的内存对象。","创建一个延迟的中断工作,需要传入中断工作处理函数入口,以及函数执行时的参数,就可以创建一个延迟的工作对象。","创建了一个中断工作对象,就需要将其加入到某个延迟队列中,只需要传入队列和工作对象的地址即可。","创建互斥体","创建定时器后需要调用","创建定时器需要指定需要超时的时间","创建文件","创建条件变量","创建目录","创建线程","创建设备","创建进程","创建进程的时候,需要从文件系统上加载程序的代码和数据,然后再去执行进程的代码。","初始化互斥体","初始化完成后,会跳转到","初始化条件变量","初始化线程上下文是在栈上构建一个线程的上下文,当第一次切换到该线程的时候,寄存器就会使用栈中的值。","删除。","删除互斥体","删除文件","删除条件变量","删除目录","删除设备","到","前面有讲到关于全局中断的打开和关闭,全局中断的打开是","前,访问的地址都是物理地址,","功能","加载平台的默认配置,会读取选中的平台的默认menuconfig配置到工作区中。","匹配的大括号单独占用一行,代码阅读起来就会有相应的层次而不会容易出现混淆的情况。空格建议在非函数方式的括号调用前留一个空格以和前面的进行区分,例如:","单元测试","单元测试表,填写要测试的单元","即可。","即定义的符号两侧采用","即直接访问的是内存的地址。比如内存只有","原子操作","原子操作用于对数据的加减运算不会被打断,以及一些原子级别的数据交换等","原子操作需要实现对数据的原子设置,获取,加法,减法,数据交换等。由于","原理","去分配内存。","去实现,而获取操作可以直接通过","去终止线程,传入线程指针即可。","去释放内存。","参考socket套接字接口设计","变量采用小驼峰命名风格,即首字母小写,后续单词首字母大写,例如:","另外拆分和合并涉及到","只编译","只能通过系统调用执行内核提供好的服务。在","只需要传入定时器对象地址即可。","只需要实现","可以直接在终端中输入命令安装:","可以省略。","可以获取页表的地址。","可以通过虚拟地址找到其映射的物理地址。","号。","同时运行。比如你一边听歌,一边写代码,其实就是音乐播放器和代码编辑器这两个任务在快速切换而形成的效果。","后进行分行,并在下一行都采用缩进的方式,例如:","后,访问的地址会发生变化。因此,为了能够保证访问内核的时候是正确的,在映射","后,访问的地址就是虚拟地址了。此时访问的地址,会通过","启动后,会进行一些初始化,然后参加到调度工作中。而调度队列的实现就需要依赖于原子操作来保证对公共队列访问的正确性。","启动它,才可以在超时后调用回调函数。","启动流程","启动进程的时候,需要传入进程的名字","和","和加入延迟队列相反,有离开延迟队列,那么和加入的参数一样,只是意思相反而已。","和禁用","和线程结束时执行的函数","和裸机开发种,很多时候都是直接使用机器模式。","唤醒休眠等待条件的全部线程","唤醒休眠等待条件的单个线程","唤醒后,应用核会进入","唤醒应用核只需要调用","唯一的例外是","四.","四、接口","四、移植总结","因此","图形系统","在","在menuconfig中,打开单元测试功能,选取需要测试的单元,退出保存。","在nxos中使用menuconfig","在上下文切换的时候,需要注意的是,传入的是线程的栈的地址,可以从地址中取出线程当前栈的值。","在中断中,使能","在使用函数指针类型定义的时候,需要使用handler后缀,来表示是一个处理函数。","在使用页面的过程中,可能会需要把一个地砖转换成其对应的页面结构,来访问该结构里面的成员,这在虚拟内存管理器","在做时钟定时器初始化的时候,需要先关闭","在内核中,涉及到多任务的是线程管理,调度算法,多核调度。","在函数","在创建一个线程后,可以运行该线程,可以让线程去完成一些独立的工作。内核中的","在初始化的时候,会创建一个","在命令行中输入命令即可开始测试:","在完成内核的初始化后,会创建","在定时器还没开始运行的时候,可以销毁一个定时器,调用","在嵌入式领域,rtos的实时性是非常重要的。简单来说,就是一个优先级最高的任务在执行的时候,低优先级的任务得不到执行,如果有更高","在平台初始化","在根目录中,打开一个终端,在配置了环境变量之后,就可以使用配置了。","在每个源文件文件头上,应该包括相应的版权信息,文件描述,chang","在现代操作系统中,分为了内核态和用户态。内核态是内核程序本身,可以对设备资源进行管理核控制。而用户态只能够去调用内核提供的服务,不能够直接对资源进行访问。","在现代操作系统中,多任务已成为标配,也就是一个处理器可以“同时”执行多个任务,这样可以最大化利用处理器,并且支持更多的功能。","在线程创建后,如果需要把线程绑定到某个处理器,则可以设置处理器亲和性,使得该线程被绑定在指定的线程上运行。","在线程结构体中,有链表,基础信息,栈信息,调度信息,以及内核的资源。","在获取nxos的系统源码后,您需要下载编译nxos的工具链(点我跳转),下载好后,进行环境变量的配置。","在解析","在设备开机后,处理器会跳到一个地址去执行代码,一般都是固定的,然后再从这些固定代码跳转到程序员自己编写的程序。程序员自己写的程序就是裸机,rtos或者操作系统。在nxos中,不同的平台会有不同的执行地址,所以我们需要指定内核程序的入口地址,在链接的时候指定一个标签","在调试过程中会遇到很多问题,需要耐心地调试。","在进程的运行过程中也会涉及到堆的分配,栈的扩展等。","在释放页面的时候,需要引用计数为0的时候,才会去正在释放这个页面。","地址空间通过映射和解除映射来进行管理,类似于分配和释放的操作。","地址翻译模式","基于","填充内存","复制内存","多核中很重要的一个机制就是自旋锁,当需要访问公共资源的时候,就需要自旋锁来上锁,才能保证多个核同时访问数据的正确性。自旋锁依赖于原子操作,而原子操作又需要硬件做支持。","多核的实现是需要硬件支持的,操作系统内核只是根据硬件做一定的抽象,做好多核间的同步与互斥。","多核调度","头文件","如","如果type为feat和fix,则该","如果你的修改影响了不止一个scope,你可以使用*代替。","如果函数参数为空,必须使用void作为入口函数,例如:","如果只是需要运行起来,不需要线程环境,那么就只需要","如果当前定时器的值超过了超时定时器寄存器的值的时候,就会触发一个中断。注意:前提是打开了定时器中断。","如果您在文档中发现了问题或者想参与文档的编写,可以在文档仓库提出","如果支持多核,就可以在这个时候去唤醒其他核。不支持的话返回","如果是一个静态对象,不需要创建,那么可以直接调用初始化,并传入该对象的地址即可,参数同上。","如果是对静态的定时器进行初始化,只需要调用","如果需要在类型定义中使用指针,则需要使用ptr后缀或者其他可以表达意思的单词指明。","安全管理","完成配置后,就可以进行编译了,编译的时候就会根据最新的配置进行编译。","定义一个单元测试","定时器","定时器是基于系统时钟实现的,精度比较低(1ms~10ms),可以用于线程的休眠,以及对于休眠精度不高的场景。","实现","实现的时候有使用到。","实现输出,也可以通过自己操作寄存器实现。在早期,调用","实现,","寄存器","寄存器保存。","寄存器的","寄存器,访问的地址都是新的","对于","对于中内存对象,就是使用一个链表来管理。","对于大内存对象,就直接从物理内存管理器分配和释放,不使用链表管理。","对于小内存对象,会划分得比较细,如:16,","对于应用程序来说,可以使用","对于开发者而言,我们已经做好了配置,你只需要知道如何去使用即可。","对处理器多核的启动和初始化","对象即可,传入工作对象的地址即可。","对进程的内存管理,是对它的虚拟地址进行管理。由于会有多个进程的存在,所以会对每个进程的虚拟地址","对齐的方式,","将肯定出现在","尝试获取互斥体","就会发起一次切换。这样,在人看来,就是多个任务在","就会将他们全部处理,调用定时器超时处理函数,然后更新最近超时定时器的ticks。","就可以升级为进程。除此之外,还会有一些其它进程独有的资源。","就可以启动线程,线程就可以开始运行了。","就可以让出执行权。值得注意的是,本线程不会阻塞,会在下一个时机再次被调度。","就注册了串口中断,可以接受输入。","尽管伙伴内存算法在内存碎片问题上已经做的相当出色,但是该算法中,一个很小的块往往会阻碍一个大块的合并,一个系统中,对内存块的分配,大小是随机的,一片内存中仅一个小的内存块没有释放,旁边两个大的就不能合并。","属于分时优先级,优先级","属于实时优先级。在使用过程中,通常使用宏,而不是直接使用数字。优先级宏如下:","工作队列的优先级如下,其中","工具链","带clean的单元","带setup和clean的单元","带setup的单元","常用的功能组件,小工具,log显示以及字符串操作等","平台","平台初始化","平台开发者实现)","平台支持,存放具体的平台,比如pc平台或者一个开发板","平台框架","平台配置文件,配置了支持的平台","并传入定时器的地址即可。","应用核只需要设置中断表地址,初始化自己的中断控制器即可。","应该说明代码变动的动机,以及与以前行为的对比。","延迟队列","建议在括号前留出一个空格(涉及的包括","开源协议,可以自由的复制和修改代码,只需要保留版权说明即可,无潜在的商业风险。","引导核初始化完成后,会初始化内核,在内核初始化完成后,就会进入启动应用核的阶段","当","当你要使用某个平台的配置时,需要通过设置默认配置来进行选择。","当使用宏条件#if,","当函数参数过多的时候,一行写不下,那么就需要把每个参数写成一行。","当前","当前实现的线程结构体如下:","当前的进程。","当处理器调用","当宏需要使用多行的时候,则使用空格+\"\\\"的形式进行换行,例如:","当开启","当我们添加代码要提交到git仓库中时,我们需要统一下规范,这样不会显得整个项目乱糟糟的,当然是需要花点时间来学习和改变的。每次提交的代码尽量短小,涉及范围不要太广,专注于某个领域。","当时钟中断产生的时候,会改变ticks的值,与此同时也会去检测是否有定时器超时,如果有定时器超时,则会去处理定时器超时函数。","当有一个定时器的ticks到达了最近超时定时器的ticks值的时候,就去检测定时器链表,如果有多个同样超时的定时器,","当线程需要休眠的时候,就需要传入休眠的时间,","当超时后,就会产生一个中断,于是就设置下一个中断产生时的超时值。","当需要停止定时器的时候,调用","当需要注销某个中断的时候,只需要传入中断号以及注册时的数据即可。相当于解除了中断函数的绑定。","影响的范围,比如文件系统,进程管理,内存管理等等,视项目不同而不同。","很多情况下,需要获取当前线程,可以使用","快速体验","快速入门","总结","恢复线程","我们以简洁、高效、稳定为核心,用比较简洁且高效的方式去实现一些功能,去掉一些复杂,冗杂的功能,化繁为简。","我们是使用基于缓存的链表来管理堆,这种方式的原理是,在释放一个页面后,会放到一个链表上面,下次分配的时候,直接从链表获取内存对象即可。","我们采用的是世界上最流行的qemu虚拟机,各种平台都有支持,刚好有我们需要的版本。","我们需要管理的内存就是","我们需要管理的物理内存是除了保留地址和操作系统占用以外的空闲的内存,这部分内存就是需要在操作系统运行的过程中进行静态/动态分配的内存。","或者提交","截至2017年5月,risc","所以需要计算出产生一次中断,需要间隔多少个tick即可。","所以,4kb也就延续到64位系统了。所以,我们使用4kb作为一个页面的大小。","所以,分配和释放的基础单位就是页面。通常来说,页面大小是4kb,也可以更大,但是由于4kb在32位操作系统中可以很好地对4gb内存进行映射,","所以,需要在内核中实现同样的功能,在","所有需要对接的接口都存放在","打开文件","打开目录","打开设备","执行。","执行结束后,会从机器模式跳转到位于监护者模式的内核中,并且寄存器","执行,那么入口程序的移植就完成了。","把内核加载到内核中,然后跳转进去执行。","拿到1个线程执行,避免内核跑飞。","挂起线程","指令去实现。内存指令屏障使用","指令实现。","指令获取。","指令集","指定了虚拟地址需要映射到的物理地址,映射的时候,就把虚拟地址映射到该物理地址(未来做共享内存的时候会用到)","指定的地址就行了。使用","接口","控制的,置为1则表示使能中断,置为0则表示禁用中断。","推荐的一个不错的终端(非必须)下载后安装即可。","描述","提交规则","提供的唤醒核心功能即可。","撤销上一次的","操作系统更多运行在","支持特权保护的处理器架构中,都提供了模式切换的指令。至少需要有两个特权级,一个用于内核态,特权更高,可以直接访问硬件。另外一个用于用户态,","改变了build工具","整体框架","文件名称也是使用首字母大写,如果有缩写,可以全部都大写。文件命名尽量不要使用通用化、使用频率高的名称。例如:mutexlock.c","文件系统","文件系统框架以及各种文件系统支持","文件:src/arch/riscv64/kernel/context.","文件:src/arch/riscv64/kernel/sbi_entry.","文件:src/arch/riscv64/port/atomic.c","文件:src/arch/riscv64/port/barrier.c","文件:src/arch/riscv64/port/clock.c","文件:src/arch/riscv64/port/context.c","文件:src/arch/riscv64/port/interrupt.c","文件:src/arch/riscv64/port/mmu.c","文件:src/arch/riscv64/port/process.c","文件:src/arch/riscv64/port/smp.c","文件:src/platform/qemu_riscv64/drivers/direct_uart.c","文件:src/platform/qemu_riscv64/hal/init.c","文档版本","新架构的移植,都是按照一套统一的接口去实现的。","时间模块,时钟和定时器","时间管理","时间长度后,就会被唤醒,继续往后执行。","时,mmu","映射内存","映射某段空间的时候,会先检测地址是否被使用,如果已经被使用了,就不能直接使用这块地址。没有被使用,就可以在地址空间中添加一个","映射的物理内存。","映射的虚拟地址。","映射虚拟地址,但是会指定物理地址,就不用自动分配物理地址了。","映射表,切换进程的时候需要修改硬件","是使能","是在该延迟中断工作初始化的时候设定的。","是必需的,bodi","是映射虚拟地址,会自动分配物理地址并映射页面。","是虚拟地址转换成为物理地址的硬件机制。在开启","暂不设计,等内核基本功能完成后再设计","暂不需要","更新配置文件","更贴近,也不用管太多机器模式需要做的事情。通常,","最先超时的定时器会插入到链表头,超时时间比较久的定时器会被加入到链表的末尾。","最后,如果想要保存当前的配置到选中的平台,则需要在执行save操作才行。操作完后,你所修改的配置就保存了,当切换到其它平台后,这个配置依然存在,只需要重复第一步,更新一下配置即可。","最后,当有中断产生的时候,就可以去激活中断工作,那么则需要调用","最小的单元测试","最开始是可以不开启","最开始,内核是没有线程概念的,处理器只有一个执行流。","最精简框架:","有一个例外,就是如果遇到循环函数,里面不会执行代码的情况,括号就直接写在右边。","有一个定时器链表来记录所有等待超时的定时器,值得注意的是,它们是通过线性的方式插入到链表中的。","有两个注意点:","有创建工作,那么就有销毁工作,只需要传入工作对象的地址即可。","有必要的时候,也会在需要物理内存的时候,直接调用该分配。","有时候需要终止某个线程的运行,就需要使用","有的情况下,当一个页面被多次使用的时候,需要去增加其引用计数,来避免被释放掉。","服务器下载(较慢)","本文档存放了工具链的下载地址,搭建编译环境的时候需要下载工具链后再进行编译。","本文档存放的是用户程序的编程接口的设计说明。","本文档将带您从入门到劝退。","本文档是关于nxos的代码编程风格的描述。开发者必须遵守本文档规范进行开发。nxos系统内核使用c语言作为主要开发语言,因此以下规则仅仅适用于c语言代码。","机器模式用于固件程序代码执行,例如","来动态地分配内存,那么,对于内核来说,也需要这样的功能。","来处理工作","来管理一段连续的物理内存。需要制定物理内存地址和物理内存大小。","来进行超时。","构建过程或辅助工具的变动,比如把grub改成了uefi。","枚举结构名也是用大驼峰,枚举成员使用全大写,单词间用\"_\"隔开。","枢纽系统","架构","架构中,内存全(读和写)屏障使用","架构中,有3个特权级(machine,","架构中,有4个特权级(ring0,","架构相关代码,x86,","标志有多重,表明不同类型的定时器。","格式的可执行程序的时候,需要映射一段内存来储存代码和数据,就会用到映射功能。","格式(不影响代码运行的变动)","框架","检查文件结束","概述","模式去调用内核提供的服务。","模式的定时器中断,然后再设置超时定时器的值。","模式(因为线程的切换是在内核中完成的)。","模式,进入内核。内核只需要链接到","模式,降低开发的复杂度。","欢迎来到nxos内核!nxos是一个跨平台的简洁的高性能,高稳定性的操作系统内核,它将应用于桌面操作系统领域,服务器操作系统领域以及移动终端操作系统领域。","此时,处理器就进入线程环境,开启线程调度生涯。","步骤拆解","每个线程执行一段时间后,就会切换到其它线程执行。这个切换可能是主动的,也可能是被动的。线程在阻塞(block)和让出(yield)的时候是属于线程主动发起切换。在","每个线程都有一个其对应的线程结构体,使用其来记录线程的信息,比如线程链表,线程状态,线程栈等基础信息。","每次提交,commit","永远别忘了第2行是空行","没有对象才重新从物理内存管理器中分配,有的话就直接从链表上面摘取。","没有资源即可。","注册了中断后,并不能产生中断,还需要解除中断的屏蔽(unmask),相当于打开中断。除此之外,如果不希望产生该中断,则需要屏蔽某个中断(mask),相当于关闭中断。","注意,\"//\"注释只能放到右边。","测试","测试模块,测试框架和测试代码","清空内存","源代码的注释不应该过多,更多的说明应该是代码做了什么,仅当个别关键点才需要一些相应提示性的注释以解释一段复杂的算法它是如何工作的。对语句的注释只能写在它的上方或右方,其他位置都是非法的。","然后再初始化中断,初始化物理内存管理。","然后激活中断队列工作,然后就返回,完成了本次中断。等到没有中断的时候,再去从延迟队列中获取一个工作来处理其对应的中断下半部分处理工作。","物理内存分配/释放管理之伙伴算法(buddy)","物理内存管理,使用伙伴算法实现。","特权模式","特权级寄存器的命名规则,特权模式+寄存器名字,表示只能在该特权级使用。比如status寄存器,在机器模式有mstatus,监管模式有sstatus。","用于分发系统调用,不同的架构传参数的方式会有区别,因此需要特殊处理。","用于在进程切换的时候切换页表。","用于在进程创建的时候,创建进程的页表","用于在进程退出的时候释放页表。","用于获取内核的页表。","用于说明","用于进程从内核跳到用户态执行。","用到的xbuild脚本和kconfig脚本等","用户态驱动框架","用户模式就是应用程序执行的模式,需要通过系统调用进入到","由于","由于中断数量会比较多,因此,都会有一个中断表来注册中断。然后由一个寄存器或者多个寄存器来记录该表的地址。产生中断的时候会去查表,根据具体的中断号去找对应的中断处理函数,简单来说就是去调用中断的回调函数。","由于中断是具有一定优先级的,有的中断需要先处理,而有的中断则可以后处理,因此就有了多个中断队列,每个队列的优先级是不同的。至于需要加入哪种队列,","由于任务数量众多,如何管理它们,是要做到公平运行还是谁先谁后,这和应用场景密切相关。","由于切换了","由于我们想实现1秒钟产生","由于线程的切换速度非常快,一般在","百度网盘链接,提取码:nxo","的","的任务被唤醒,就得立即切换过去执行。","的内存范围,但是,只要在访问前映射","的大小。","的好处是,可以直接使用串口的输入输出,很方便调试,不用自己从机器模式跳转到","的封装。","的时候,内核也能够正常运行,新进程的地址访问也不会出错。","的时候,就去获取一个线程来运行。","的时候,每个进程都会把部分","的架构","的现代操作系统,它和","的类别,只允许使用下面7个标识。","的设置,","的详细描述,可以分成多行。下面是一个范例。","的,最开始不需要跑进程,","监管者模式的页表的地址是由地址转换寄存器","监管者模式,这样可以和","目前支持的是mmu","目录","目录下面,新的平台只需要支持这些接口的功能即可。","目录名称采用首字母大写的形式,子目录应该是属于父目录的内容,需要有相关性。例如:drivers/disk/","目的的简短描述,不超过50个字符。","相信看到最后,您已经对我们的编程规范有了一定的了解,那么就开始您的nxos开发之旅吧!","着重点:参数,返回值,功能。","硬件回填根","硬件时钟会按照一定的频率去增长当前定时器寄存器的值,在","移动内存","移植一个新的平台需要实现如下内容:","移植过程是需要慢慢琢磨,长期积累,才能实现更好的代码。","究竟是何物?mmu","第一个字母小写","第一次执行时,为平台做初始化","第一次编译一个新的平台的时候需要clean一下","等hub","等于","等内核基础功能完成后实现","等待线程退出","等待进程退出","等机制。","等,但是在","简介","算法中有一定的浪费现象,伙伴算法是按2的幂次方大小进行分配内存块,当然这样做是有原因的,即为了避免把大的内存块拆的太碎,更重要的是使分配和释放过程迅速。但是他也带来了不利的一面,如果所需内存大小不是2的幂次方,就会有部分页面浪费。有时还很严重。比如原来是1024个块,申请了16个块,再申请600个块就申请不到了,因为已经被分割了。","算法中,每个小的对象都有一个对应的链表来管理内存对象,分配的时候先去链表上获取对象,","算法的具体实现不进行讲解,除非你需要来优化这部分代码,才需要了解到,如果只是去使用,那么就只需要熟悉接口即可。","系统中分配的页面。","系统调用","系统调用是指用户态程序通过特殊的指令陷入到内核态,执行内核态提供的服务程序,然后再返回到用户态。","系统调用的实现,是基于特权级切换指令实现的,一般都是中断或者异常。用户态通过调用这些指令,就会产生一个中断或者异常,处理器会去中断表中查找系统调用指令对应的处理函数,然后就根据系统调用的","系统调用表是在内核固定下来的,不同的架构只要根据固定的","索引文件","线程","线程上下文","线程创建好后,需要启动线程,调用","线程完成了自己的工作后,可以主动退出运行,调用","线程是具有优先级的,优先级高的线程先运行,优先级低的线程后运行。在","线程有一个让出当前执行的操作,就是暂时不允许,希望把运行机会让给其它线程,做一个\"好人\",此时调用","线程栈使用","线程的创建是","线程等都有自己独立的工作任务。","线程管理","线程,","线程,来保证处理器至少能够","终止线程","终止进程","结尾不加句号(.)","结束时执行的函数使用","结构体命名使用大驼峰风格,结构体成员使用小驼峰命名,如果成员是函数指针,则使用大驼峰。","结构体的类型定义是为了消除struct关键字,可以和结构体名一致。","编程风格","编译器工具链","编译并运行","编译源码并运行","编译源码并运行,默认使用qemu虚拟机模拟运行,按下小写的ctrl+x后再按下a则可以退出qemu运行。","缩进请采用","网络系统","而内核的任务调度属于","而在桌面和服务器领域,需要保证任务的公平性,即使优先级比较低,也要能够得到运行。","而是处理中断延迟工作,然后就直接返回。等到响应了该中断之后,再去调用延迟队列中的工作。","自从进入21世纪,处理器的性能就有了瓶颈,不再迅猛增长。此时就有人提出多个处理器一起工作的方式,来弥补处理器性能的问题。","至于在","获取tls的值","获取互斥体","获取当前的时间","获取文件偏移","获取系统运行的时间","获取线程id","获取自己的线程指针。","获取进程id","菜单配置","虚拟化模式用于使用虚拟化的场景,目前还在开发阶段。","虚拟地址在映射的时候,需要指定对应的地址空间,然后就是传入一个想要映射的地址,如果为0,那么就会自动分配一个地址。","虚拟地址的实现和访问,mmu的切换,映射和解除页面映射","虚拟平台中,内存布局如下:","虚拟平台运行","虚拟机","表示只超时一次,","表示周期性地按照","解压到工具目录下面","解压到路径:nxo","解除地址映射的时候,需要制定虚拟地址和内存大小,如果在已经映射的内存空间中匹配到vmnode,就可以将其解除映射,并释放其","解除地址映射,解除后就不能访问了。","解除映射内存","解除映射的时候,会先判断该地址是否映射,已经映射才能解除。会先解除物理内存映射,然后再把","计时器时钟","计时器时钟用于驱动多线程的切换和内核定时器","记录了当前处理器核心的","记录:","许可协议","设备管理","设置tls的值","设置临时环境变量,在目录中有脚本来设置,直接运行即可。windows使用bat,linux使用sh。","设置了线程的入口地址,那么","设置当前的时间","设置环境变量","设置页表的地址到硬件寄存器中,当访问虚拟地址的时候,会根据设置的页表进行地址转换。","访问文档目录","该代码简单地设置了栈就进入了","该操作只是多了对","该项目2010年始于加州大学伯克利分校,但许多贡献者是该大学以外的志愿者和行业工作者。","语句),而运算表达式中,运算符与字符串间留一个空格。另外,不要在括号的表达式两侧留空格,例如:","语句与","语句采用","语句,switch","请使用英文做为注释,使用中文注释将意味着在编写代码时需要来回不停的切换中英文输入法从而打断编写代码的思路。并且使用英文注释也能够比较好的与中国以外的技术者进行交流。除非必须引用原来的文本的时候,就可以写中文。","读取文件","读取目录","读取设备","调度模块,线程和smp的内容,以及同步机制","调度管理","调用平台的初始化代码","调试完成后,需要将配置信息和文件保存到对应平台中,使得配置永久生效。","转换成那","较多的链表和位图操作,开销还是比较大的。","输入","返回。","返回后就可以让","还有一个很重要的地方就是对状态寄存器","还有值得注意的是,获取处理器的索引","还有重要的优先级","还能自动处理依赖关系。","这3个接口都是对","这个符号,因此会进入","这么做的目的是为了避免用户恶意程序对系统的损坏,对设备进行恶意操作。于是用户态核与内核态之间的接口就出现了,它就是系统调用。","这是操作需要通过","这样的话,内核也就占用了一部分的内存,那么我们应该去管理哪部分内存呢?","这里只需要调用","进入一个单元测试时执行","进入到nxos目录中,在目录中打开一个终端。","进入单元时执行","进程在启动前,需要加载对应的代码、数据到内存中,然后才开始执行。","进程地址空间(vmspace)就是用来管理进程的虚拟地址的。由于不同地址会有不同的用途,于是会有虚拟地址节点(vmnode)来管理","进程地址空间的管理使用链表来维护每一个节点,节点是根据虚拟地址的值来进行线性排序,低地址在链表的开头,高地址在链表的结尾。","进程执行独立的程序,程序运行出故障也不会导致系统出现故障。因此可以把一些服务程序放到用户态作为进程执行,当服务出错的时候不会导致","进程执行结束的时候,需要退出,并传入退出时候的状态码。","进程是具有独立的线性地址空间的线程集合,是线程的容器。在现代操作系统中,硬件的","进程的实现依赖于","进程管理","进程管理相关操作是实现进程的必要条件","进程管理,系统调用相关内容","进程虚拟内存管理之虚拟空间","进程虚拟内存管理,基于线性链表实现","进程间通信","进行内核服务的分发,去调用对应的内核函数。","进行独立的管理,于是进程地址空间就出现了。","进行菜单配置,就可以选择你想要的功能或者进行某些功能的配置。配置完后,可以根据菜单的提示进行退出或者保存。","连接起来。例如:","退出","退出一个单元测试时执行","退出单元时执行","退出线程","退出进程","选择了","选择最新版本下载即可。下载后,安装到一个路径,再把路径配置到path系统环境变量中即可。","通常,内核会使用","通常,都是在启动后尽快地实现串口调试,以便能够知道自己跑到什么地方了。","那么","部分是对本次","都会被映射成索引,相当于是处理器","都包括两个部分:header和body。","配置环境变量时的路径:nxo","配置环境并运行","采取架构和平台分离的措施,其原因在于,一个架构可能有多个平台,分离后可以服用架构的代码。","采用混合内核框架,也就是结合宏内核和微内核。这样的系统有","释放一个tl","释放互斥体","释放内存","释放的时候,也是先释放到链表上面,当链表超出了最大链表长度阈值的时候,才会释放到物理内存分配器中。","里面分配","里面释放某个地址指针,该指针必须是从","里面,它们是","重置读取位置","针对","针对函数单元进行测试,测试函数的基本功能,稳定性,健壮性,覆盖率。","销毁一个线程是只需要传入线程地址即可。注意,销毁不代表把线程从运行队列中摘除,只是释放线程占用的内存。","除此之外就是对某个中断的使能","除此之外,还提供了一个获取某个内存对象大小的功能,传入地址即可获取内存对象所在的","除此之外,还提供了对当前中断状态保存和恢复的操作","除此之外,还有一个最近超时的时间变量,来记录下一个即将超时的定时器,可以用它来检测是否需要去检测定时器链表。","需要注册某个中断的时候,需要传入中断号,绑定中断处理函数,设置中断的参数数据,设置中断的名字。","需要能够访问用户态的内存,需要在返回后开启中断以及设置为","页表项映射到内核,并设置权限为内核才能访问,这样就能实现切换","页面分配函数,可以从一个","页面释放函数,从一个","项目目录","预留一个上下文空间后,设置参数为","驱动程序,磁盘,输入输出设备等","(一般在100~1000)次定时器中断的效果,","(以上摘自百度百科)","(内存管理单元)为虚拟内存的实现奠定基础。",",产生中断后,就去该寄存器保存的中断向量表地址找中断号对应的中断服务。",",以及中断处理完后的应答处理",",以及将这些数据构建在栈顶",",以及进程标志",",其内核的入口地址为",",及时调度的精度低一点也没有太大影响。",",可以根据寄存器的值来判断处理器",",因为risc",",处理函数参数",",并复制内核的页表项。",",所有地址都变成虚拟地址了。",",显然超过了",",来实现进程的虚拟地址空间。每个进程都有一个",",线程处理函数",",要加载程序的路径",",超时后调用的处理函数",",这样才能保证时间的精度。",",那么就切换到线程里面去了。",",那么访问的地址就只能是在"],"pipeline":["stopWordFilter","stemmer"]},"store":{"./":{"url":"./","title":"NXOS 简介","keywords":"","body":"文档版本 v0.1 基于 NXOS develop 分支\n如果您在文档中发现了问题或者想参与文档的编写,可以在文档仓库提出 issuse 或者提交 pr :\nnxos-doc\nNXOS 简介\nNXOS是Next XBook Operating System的意思,是一个跨平台的简洁、高性能、高稳定性的支持多核的混合内核,它将应用于桌面操作系统领域,服务器操作系统领域以及移动终端操作系统领域。\n我们以简洁、高效、稳定为核心,用比较简洁且高效的方式去实现一些功能,去掉一些复杂,冗杂的功能,化繁为简。\nNXOS 概述\nNXOS是一个分时多进程/多线程(也支持实时优先级),支持 MMU 的现代操作系统,它和 Linux 内核, WindowsNT 内核是同一个数量级的。\n许可协议\nNXOS采用 Apache-2.0 开源协议,可以自由的复制和修改代码,只需要保留版权说明即可,无潜在的商业风险。\nNXOS 的架构\nNXOS采用混合内核架构,即宏内核和微内核相结合。优势是减小内核代码,增加功能可扩展性,功能模块是独立的进程,添加和删除模块就是进程的创建和关闭。\n访问文档目录\n"},"tutorial/quick-start.html":{"url":"tutorial/quick-start.html","title":"虚拟平台运行","keywords":"","body":"快速入门\n欢迎来到NXOS内核!NXOS是一个跨平台的简洁的高性能,高稳定性的操作系统内核,它将应用于桌面操作系统领域,服务器操作系统领域以及移动终端操作系统领域。\n本文档将带您从入门到劝退。\n一、开发环境搭建\n1. 编译器工具链\n在获取NXOS的系统源码后,您需要下载编译NXOS的工具链(点我跳转),下载好后,进行环境变量的配置。\n2. 虚拟机\n我们采用的是世界上最流行的QEMU虚拟机,各种平台都有支持,刚好有我们需要的版本。\na. Windows环境\n下载链接:https://qemu.weilnetz.de/w64/ \n选择最新版本下载即可。下载后,安装到一个路径,再把路径配置到Path系统环境变量中即可。\nb. Linux环境\n可以直接在终端中输入命令安装:\n# Ubuntu/Kali Linux: \nsudo apt-get install qemu-system-i386\nsudo apt-get install qemu-system-riscv64\n# Red hat/Fedora/Centos: \nsudo yum install qemu-system-i386\nsudo yum install qemu-system-riscv64\n\n3. 其他工具\n其他涉及到的工具:python mtools make git genisoimage mkfs grub2\na. Windows环境\n(cmder) 推荐的一个不错的终端(非必须)下载后安装即可。\n(python)下载后安装即可。\n(git)下载后安装即可。\n为了方便,我们将其他比较小的工具已经打包在一个工具包里面了,下载解压后,手动添加对应的工具到系统环境变量即可。\nnxos-windows-tools服务器下载(速度较慢,请耐心等待)\n下载后需要解压出来,然后将每一个目录配置到Path系统环境变量中(最好是配置到环境变量的最前面,避免和其它系统已经存在的工具冲突),解压后您将会有:\nnxos-windows-tools/\nnxos-windows-tools/genisoimage\nnxos-windows-tools/grub-2.04\nnxos-windows-tools/mkfs\nnxos-windows-tools/mtools\nb. Linux环境\n可以直接在终端中输入命令安装:\n# Ubuntu/Kali Linux: \nsudo apt-get install python mtools make git genisoimage mkfs grub2 truncate\n# Red hat/Fedora/Centos: \nsudo yum install python mtools make git genisoimage mkfs grub2 truncate\n\n二、编译和运行\n进入到NXOS目录中,在目录中打开一个终端。\n1. 快速体验\n# 1. 设置环境变量\nsetup.bat # Windows环境\nsource setup.sh # linux环境\n\n# 2. 配置环境并运行\nmake prepare && make defconfig && make run\n\n\n输入 Ctrl+a x 退出 QEMU\n输入 Ctrl+d 退出 GDB\n\n2. 步骤拆解\n\n设置临时环境变量,在目录中有脚本来设置,直接运行即可。windows使用bat,linux使用sh。\n\n# Windows下设置i386环境并设置PLATFORM=x86-i386\nsetup.bat\n# Windows下设置riscv64环境PLATFORM=riscv64-qemu_riscv64\nsetup.bat riscv64-qemu_riscv64\n\n# Linux下设置i386环境并设置PLATFORM=x86-i386\nsource setup.sh\n# Linux下设置riscv64环境PLATFORM=riscv64-qemu_riscv64\nsource setup.sh riscv64-qemu_riscv64\n\n\n为选中的平台做初始化(仅仅第一次编译的时候需要),会为每一个平台下载平台特别需要的工具到平台中。\n\n# 第一次执行时,为平台做初始化\nmake prepare\n\n\n加载平台的默认配置,会读取选中的平台的默认menuconfig配置到工作区中。\n\nmake defconfig\n\n\n使用菜单配置进行个性化剪裁。可以选择打开或者关闭某些功能,设置一些变量等。配置完成后需要按ESC键退出,退出后会生成新的配置头文件。\n\nmake menuconfig\n\n\n编译源码并运行,默认使用QEMU虚拟机模拟运行,按下小写的ctrl+x后再按下a则可以退出QEMU运行。\n\n# 第一次编译一个新的平台的时候需要clean一下\nmake clean\n# 编译源码并运行\nmake run\n# 仅仅编译源码\nmake\n\n\n调试完成后,需要将配置信息和文件保存到对应平台中,使得配置永久生效。\n\nmake saveconfig\n\n"},"programing-manual/base/framework.html":{"url":"programing-manual/base/framework.html","title":"整体框架","keywords":"","body":"NXOS 框架\n一、混合内核框架\nNXOS 采用混合内核框架,也就是结合宏内核和微内核。这样的系统有 Windows NT 内核、苹果 XNU 内核,还有国产开源系统 RT-Thread Smart。 \n+-----------------------------------+\n| app |\n+-----------------------------------+\n| (fatfs, extfs, netstack) |\n+-----------------------------------+\n| nxbase | udrivers | userverce |\n+-----------------------------------+\n/ syscall /\n+-----------------------------------+\n| vfs | hub system |\n+-----------------------------------+\n| kdrivers | kservice |\n+-----------------------------------+\n| thread | vmm | irq | timer |\n+-----------------------------------+\n| arch (x86, arm, riscv, ...) | \n+-----------------------------------+\n| hardware |\n+-----------------------------------+\n二、目录框架\n1. 项目目录\n\n\n\n目录\n描述\n\n\n\n\n.vscode\nvscode的一些配置文件,有gdb调试配置\n\n\nconfigs\n平台配置文件,配置了支持的平台\n\n\ndocs\n内核一些功能的文档说明\n\n\nscripts\n用到的xbuild脚本和kconfig脚本等\n\n\nsrc\nnxos 内核的源码\n\n\n\n2. 内核源码目录\n\n\n\n目录\n描述\n\n\n\n\narch\n架构相关代码,x86, riscv64等\n\n\ndrivers\n驱动程序,磁盘,输入输出设备等\n\n\nfs\n文件系统框架以及各种文件系统支持\n\n\ninclude\n头文件\n\n\ninit\n内核初始化以及main核心\n\n\nio\nI/O驱动框架和中断管理\n\n\nipc\n进程间通信\n\n\nkernel\n内核其余模块\n\n\nmm\n内存管理模块\n\n\nplatform\n平台支持,存放具体的平台,比如pc平台或者一个开发板\n\n\nprocess\n进程管理,系统调用相关内容\n\n\nsched\n调度模块,线程和SMP的内容,以及同步机制\n\n\ntest\n测试模块,测试框架和测试代码\n\n\ntime\n时间模块,时钟和定时器\n\n\nutils\n常用的功能组件,小工具,log显示以及字符串操作等\n\n\n\n3. 平台框架\nNXOS 采取架构和平台分离的措施,其原因在于,一个架构可能有多个平台,分离后可以服用架构的代码。\n\n\n\n架构\n平台\n\n\n\n\nx86\ni386, pc\n\n\nriscv64\nvirt riscv64, k210, d1\n\n\n\n"},"programing-manual/base/start.html":{"url":"programing-manual/base/start.html","title":"启动流程","keywords":"","body":"NXOS 启动流程\n在设备开机后,处理器会跳到一个地址去执行代码,一般都是固定的,然后再从这些固定代码跳转到程序员自己编写的程序。程序员自己写的程序就是裸机,rtos或者操作系统。在nxos中,不同的平台会有不同的执行地址,所以我们需要指定内核程序的入口地址,在链接的时候指定一个标签 _Start,当执行到这个地方的时候,内核就开始运行了。\n内核执行路径\n-> _Start\n -> NX_Main (内核的主函数)\n -> NX_SMP_Preload\n -> NX_HalPlatformInit (平台初始化, 不能使用内核的功能: 平台开发者实现)\n -> ShowLogVersion\n -> ... 内核功能初始化 ...\n -> NX_CallsInit (初始化调用)\n -> NX_HalPlatformStage2 (平台初始化二阶段,可以使用内核的功能: 平台开发者实现) \n\n -> NX_SMP_Main (SMP初始化)\n -> NX_SchedToFirstThread (调度第一个线程)\n -> NX_HalPlatformMain (平台的主函数,什么都可以使用: 平台开发者实现)\n"},"programing-manual/mm/mm.html":{"url":"programing-manual/mm/mm.html","title":"内存管理","keywords":"","body":"内存管理\n内存管理是操作系统中最为核心和重要的部分,这是由于很多其它模块的运行都需要内存的分配和释放。\n内存管理分为物理内存管理、虚拟内存管理、进程虚拟内存管理这三个大模块。\n一. 物理内存管理,使用伙伴算法实现。\n二. 内核虚拟堆内存管理,使用基于缓存的链表实现\n三. 进程虚拟内存管理,基于线性链表实现\n"},"programing-manual/mm/buddy.html":{"url":"programing-manual/mm/buddy.html","title":"buddy伙伴算法","keywords":"","body":"物理内存分配/释放管理之伙伴算法(buddy)\n一. 描述\n内存是操作系统运行的根基,处理器从内存中取出指令来执行,在进入操作系统之前,一般会有引导器 bootloader 把内核加载到内核中,然后跳转进去执行。\n这样的话,内核也就占用了一部分的内存,那么我们应该去管理哪部分内存呢?\n我们需要管理的物理内存是除了保留地址和操作系统占用以外的空闲的内存,这部分内存就是需要在操作系统运行的过程中进行静态/动态分配的内存。\nnxos 在 qemu 的 riscv64 虚拟平台中,内存布局如下:\n/**\n * Physical memory layout:\n *\n * +------------------------+ \n我们需要管理的内存就是 0x82000000-TOP 之间的这部分内存。简单的说就是对一段或者多段空闲的内存地址进行管理,可以进行分配与释放,让操作系统去使用。\n二. 原理\n在 nxos 中使用 buddy 伙伴内存管理算法。为了便于页面的维护,将多个页面组成内存块,每个内存块都有2的方幂个页,方幂的指数被称为阶。在操作内存时,经常将这些内存块分成大小相等的两个块,分成的两个内存块被称为伙伴块,采用一位二进制数来表示它们的伙伴关系。当这个位为1,表示其中一块在使用;当这个位为0,表示两个页面块都空闲或者都在使用。系统根据该位为0或位为1来决定是否使用或者分配该页面块。系统每次分配和回收伙伴块时都要对它们的伙伴位跟1进行异或运算。所谓异或是指刚开始时,两个伙伴块都空闲,它们的伙伴位为0,如果其中一块被使用,异或后得1;如果另一块也被使用,异或后得0;如果前面一块回收了异或后得1;如果另一块也回收了异或后得0。\n算法的具体实现不进行讲解,除非你需要来优化这部分代码,才需要了解到,如果只是去使用,那么就只需要熟悉接口即可。\n\n优缺点\n\n尽管伙伴内存算法在内存碎片问题上已经做的相当出色,但是该算法中,一个很小的块往往会阻碍一个大块的合并,一个系统中,对内存块的分配,大小是随机的,一片内存中仅一个小的内存块没有释放,旁边两个大的就不能合并。\n\n算法中有一定的浪费现象,伙伴算法是按2的幂次方大小进行分配内存块,当然这样做是有原因的,即为了避免把大的内存块拆的太碎,更重要的是使分配和释放过程迅速。但是他也带来了不利的一面,如果所需内存大小不是2的幂次方,就会有部分页面浪费。有时还很严重。比如原来是1024个块,申请了16个块,再申请600个块就申请不到了,因为已经被分割了。\n\n另外拆分和合并涉及到 较多的链表和位图操作,开销还是比较大的。\n\n\n三、框架图\n\n四. 接口\n内存管理最基本的接口就是分配和释放。为了能够支持分页机制,为页表映射提供内存的支持,将内存分为页面大小进行管理会比较合适。\n所以,分配和释放的基础单位就是页面。通常来说,页面大小是4kb,也可以更大,但是由于4kb在32位操作系统中可以很好地对4GB内存进行映射,\n所以,4kb也就延续到64位系统了。所以,我们使用4kb作为一个页面的大小。\n在初始化的时候,会创建一个 buddy system 来管理一段连续的物理内存。需要制定物理内存地址和物理内存大小。\nNX_BuddySystem* NX_BuddyCreate(void *mem, NX_Size size);\n\n页面分配函数,可以从一个 buddy system 里面分配 count 个页面。在MMU映射和虚拟内存管理器中会使用到。\n有必要的时候,也会在需要物理内存的时候,直接调用该分配。\nvoid *NX_BuddyAllocPage(NX_BuddySystem* system, NX_Size count);\n\n页面释放函数,从一个 buddy system 里面释放某个地址指针,该指针必须是从 buddy 系统中分配的页面。\n在释放页面的时候,需要引用计数为0的时候,才会去正在释放这个页面。\nNX_Error NX_BuddyFreePage(NX_BuddySystem* system, void *ptr);\n\n有的情况下,当一个页面被多次使用的时候,需要去增加其引用计数,来避免被释放掉。\nNX_Error NX_BuddyIncreasePage(NX_BuddySystem* system, void *ptr);\n\n在使用页面的过程中,可能会需要把一个地砖转换成其对应的页面结构,来访问该结构里面的成员,这在虚拟内存管理器\n实现的时候有使用到。\nNX_Page* NX_PageFromPtr(NX_BuddySystem* system, void *ptr);\n\n"},"programing-manual/mm/heap.html":{"url":"programing-manual/mm/heap.html","title":"heapCache虚拟内存管理","keywords":"","body":"内核虚拟内存管理之堆内存\n一、描述\n对于应用程序来说,可以使用 malloc 和 free 来动态地分配内存,那么,对于内核来说,也需要这样的功能。\n所以,需要在内核中实现同样的功能,在 nxos 里面,它们是 NX_MemAlloc 和 NX_MemFree。\n我们是使用基于缓存的链表来管理堆,这种方式的原理是,在释放一个页面后,会放到一个链表上面,下次分配的时候,直接从链表获取内存对象即可。\n二、原理\n在 heap cache 算法中,每个小的对象都有一个对应的链表来管理内存对象,分配的时候先去链表上获取对象,\n没有对象才重新从物理内存管理器中分配,有的话就直接从链表上面摘取。\n释放的时候,也是先释放到链表上面,当链表超出了最大链表长度阈值的时候,才会释放到物理内存分配器中。\n在 heap cache 中,内存对象被划分成3类,小(16byte size size size > 1mb)内存对象。\n对于小内存对象,会划分得比较细,如:16, 32, 48, 64, 80, 96, 112, 128等。\n对于中内存对象,就是使用一个链表来管理。\n对于大内存对象,就直接从物理内存管理器分配和释放,不使用链表管理。\n三、框架图\n\n四、接口\n内核分配堆内存的接口,需要传入待分配内存的大小,即可获取一个内存地址,如果为空,那么就是分配失败了。\n通常,内核会使用 NX_MemAlloc 去分配内存。\nvoid *NX_HeapAlloc(NX_Size size);\n#define NX_MemAlloc(size) NX_HeapAlloc(size)\n\n内存释放堆内存的时候,需要传入内存对象地址,并返回释放的状态。\n通常,内核会使用 NX_MemFree 去释放内存。\nNX_Error NX_HeapFree(void *object);\n#define NX_MemFree(ptr) NX_HeapFree(ptr)\n\n除此之外,还提供了一个获取某个内存对象大小的功能,传入地址即可获取内存对象所在的 cache 的大小。\n使用的时候需要注意,必须是通过 NX_HeapAlloc 分配的内存对象。\nNX_Size NX_HeapGetObjectSize(void *object);\n\n"},"programing-manual/mm/vmspace.html":{"url":"programing-manual/mm/vmspace.html","title":"vmspace虚拟地址空间","keywords":"","body":"进程虚拟内存管理之虚拟空间\n一、描述\n进程在启动前,需要加载对应的代码、数据到内存中,然后才开始执行。\n在进程的运行过程中也会涉及到堆的分配,栈的扩展等。\n对进程的内存管理,是对它的虚拟地址进行管理。由于会有多个进程的存在,所以会对每个进程的虚拟地址\n进行独立的管理,于是进程地址空间就出现了。\n进程地址空间(vmspace)就是用来管理进程的虚拟地址的。由于不同地址会有不同的用途,于是会有虚拟地址节点(vmnode)来管理\n不同用法的地址。\n二、原理\n进程地址空间的管理使用链表来维护每一个节点,节点是根据虚拟地址的值来进行线性排序,低地址在链表的开头,高地址在链表的结尾。\n地址空间通过映射和解除映射来进行管理,类似于分配和释放的操作。\n映射某段空间的时候,会先检测地址是否被使用,如果已经被使用了,就不能直接使用这块地址。没有被使用,就可以在地址空间中添加一个\nvmnode,节点记录了地址的信息以及这段地址的属性。\n值得注意的是,映射的时候,还会去对内存进行物理内存映射,只有映射后,进程才能访问该地址。\n解除映射的时候,会先判断该地址是否映射,已经映射才能解除。会先解除物理内存映射,然后再把 vmnode 删除。\n三、框架图\n\n四、接口\n虚拟地址在映射的时候,需要指定对应的地址空间,然后就是传入一个想要映射的地址,如果为0,那么就会自动分配一个地址。\n以及这个地址对应的内存大小,内存节点的属性,已经一些扩展的标志。\n在解析 elf 格式的可执行程序的时候,需要映射一段内存来储存代码和数据,就会用到映射功能。\n以及在做进程的堆分配和栈扩展的时候,都会使用到。\nNX_Error NX_VmspaceMap(NX_Vmspace *space,\n NX_Addr addr,\n NX_Size size,\n NX_U32 attr,\n NX_U32 flags,\n void **outAddr);\n\n/* 指定了虚拟地址需要映射到的物理地址,映射的时候,就把虚拟地址映射到该物理地址(未来做共享内存的时候会用到) */\nNX_Error NX_VmspaceMapWithPhy(NX_Vmspace *space,\n NX_Addr vaddr,\n NX_Addr paddr,\n NX_Size size,\n NX_U32 attr,\n NX_U32 flags,\n void **outAddr);\n\n解除地址映射的时候,需要制定虚拟地址和内存大小,如果在已经映射的内存空间中匹配到vmnode,就可以将其解除映射,并释放其\n映射的物理内存。\nNX_Error NX_VmspaceUnmap(NX_Vmspace *space, NX_Addr addr, NX_Size size);\n\n"},"programing-manual/sched/sched.html":{"url":"programing-manual/sched/sched.html","title":"调度管理","keywords":"","body":"调度管理\n在现代操作系统中,多任务已成为标配,也就是一个处理器可以“同时”执行多个任务,这样可以最大化利用处理器,并且支持更多的功能。\n由于任务数量众多,如何管理它们,是要做到公平运行还是谁先谁后,这和应用场景密切相关。\n在嵌入式领域,rtos的实时性是非常重要的。简单来说,就是一个优先级最高的任务在执行的时候,低优先级的任务得不到执行,如果有更高\n的任务被唤醒,就得立即切换过去执行。\n而在桌面和服务器领域,需要保证任务的公平性,即使优先级比较低,也要能够得到运行。\n在内核中,涉及到多任务的是线程管理,调度算法,多核调度。\n一. 线程管理\n二. 多核调度\n"},"programing-manual/sched/thread.html":{"url":"programing-manual/sched/thread.html","title":"线程管理","keywords":"","body":"线程管理\n一. 描述\n内核的最小调度单位是线程,每个线程都有自己独立的栈,寄存器组,以及一些运行信息等。\n以线程为最小调度单元的好处是可以很方便支持内核态以及用户态的多线程,并且层次框架也比较好,容易实现。\n每个线程都有一个其对应的线程结构体,使用其来记录线程的信息,比如线程链表,线程状态,线程栈等基础信息。\n在创建一个线程后,可以运行该线程,可以让线程去完成一些独立的工作。内核中的 idle 线程, deamon 线程等都有自己独立的工作任务。\n二. 原理\n当前实现的线程结构体如下:\nstruct NX_Thread\n{\n /* thread list */\n NX_List list;\n NX_List globalList;\n NX_List exitList;\n NX_List processList; /* list for process */\n\n NX_Spin lock; /* lock for thread */\n\n /* thread info */\n NX_ThreadState state;\n NX_I32 tid; /* thread id, -1 means no alloc failed */\n NX_ThreadHandler handler;\n void *threadArg;\n char name[NX_THREAD_NAME_LEN];\n\n /* thread stack */\n NX_U8 *stackBase; /* stack base */\n NX_Size stackSize; \n NX_U8 *stack; /* stack top */\n\n /* thread sched */\n NX_U32 timeslice;\n NX_U32 ticks;\n NX_U32 fixedPriority; /* fixed priority, does not change dynamically */\n NX_U32 priority; /* dynamic priority, or in the case of time-sharing scheduling priority will change dynamically */\n NX_U32 needSched;\n NX_U32 isTerminated;\n NX_UArch onCore; /* thread on which core */\n NX_UArch coreAffinity; /* thread would like to run on the core */\n\n /* thread resource */\n NX_ThreadResource resource;\n};\ntypedef struct NX_Thread NX_Thread;\n\n在线程结构体中,有链表,基础信息,栈信息,调度信息,以及内核的资源。\n最开始,内核是没有线程概念的,处理器只有一个执行流。\n在完成内核的初始化后,会创建 idle 线程,来保证处理器至少能够\n拿到1个线程执行,避免内核跑飞。\n当处理器调用 NX_SchedToFirstThread 的时候,就去获取一个线程来运行。\n此时,处理器就进入线程环境,开启线程调度生涯。\n每个线程执行一段时间后,就会切换到其它线程执行。这个切换可能是主动的,也可能是被动的。线程在阻塞(block)和让出(yield)的时候是属于线程主动发起切换。在\n产生时钟中断的时候,会去减少线程的时间片,时间片为0后,再去切换线程,这是属于线程被动切换。\n由于线程的切换速度非常快,一般在 1ms~100ms 就会发起一次切换。这样,在人看来,就是多个任务在\n同时运行。比如你一边听歌,一边写代码,其实就是音乐播放器和代码编辑器这两个任务在快速切换而形成的效果。\n\n线程是具有优先级的,优先级高的线程先运行,优先级低的线程后运行。在 nxos 中,分为实时优先级和分时优先级。实时优先级是,只要有高的优先级,就不能运行低的优先级。而分时优先级是高低优先级线程都能得到运行,只是低优先级线程运行的时间更少而已。优先级 [0, 6] 属于分时优先级,优先级 [7, MAX - 1] 属于实时优先级。在使用过程中,通常使用宏,而不是直接使用数字。优先级宏如下:\n\n/* time-sharing priority */\n#define NX_THREAD_PRIORITY_IDLE 0 /* idle thread priority */\n#define NX_THREAD_PRIORITY_LOW 1 /* low level priority */\n#define NX_THREAD_PRIORITY_NORMAL 3 /* normal level priority */\n#define NX_THREAD_PRIORITY_HIGH 6 /* high level priority */\n\n#define NX_THREAD_PRIORITY_RT_MIN (NX_THREAD_PRIORITY_HIGH + 1) /* real time min priority */\n#define NX_THREAD_PRIORITY_RT_MAX (NX_THREAD_MAX_PRIORITY_NR - 1) /* real time max priority */\n\n三、框架图\n\n四. 接口\n线程的创建是 NX_ThreadCreate , 传入线程的名字 name ,线程处理函数 handler 以及参数 arg , 还有重要的优先级 priority,即可创建一个线程,返回线程的地址。\n但是注意,此时只是创建了线程,还没有启动线程。\nNX_Thread *NX_ThreadCreate(const char *name, NX_ThreadHandler handler, void *arg, NX_U32 priority);\n\n销毁一个线程是只需要传入线程地址即可。注意,销毁不代表把线程从运行队列中摘除,只是释放线程占用的内存。\nNX_Error NX_ThreadDestroy(NX_Thread *thread);\n\n在线程创建后,如果需要把线程绑定到某个处理器,则可以设置处理器亲和性,使得该线程被绑定在指定的线程上运行。\nNX_Error NX_ThreadSetAffinity(NX_Thread *thread, NX_UArch coreId);\n\n线程创建好后,需要启动线程,调用 NX_ThreadStart 就可以启动线程,线程就可以开始运行了。\nNX_Error NX_ThreadStart(NX_Thread *thread);\n\n有时候需要终止某个线程的运行,就需要使用 NX_ThreadTerminate 去终止线程,传入线程指针即可。\nNX_Error NX_ThreadTerminate(NX_Thread *thread);\n\n线程完成了自己的工作后,可以主动退出运行,调用 NX_ThreadExit 函数即可退出当前线程的运行。\nvoid NX_ThreadExit(void);\n\n很多情况下,需要获取当前线程,可以使用 NX_ThreadSelf 获取自己的线程指针。\nNX_Thread *NX_ThreadSelf(void);\n\n线程有一个让出当前执行的操作,就是暂时不允许,希望把运行机会让给其它线程,做一个\"好人\",此时调用 NX_ThreadYield 就可以让出执行权。值得注意的是,本线程不会阻塞,会在下一个时机再次被调度。\nvoid NX_ThreadYield(void);\n\n当线程需要休眠的时候,就需要传入休眠的时间, 在 nxos 内核中,休眠的单位是毫秒,休眠 microseconds 时间长度后,就会被唤醒,继续往后执行。\nNX_Error NX_ThreadSleep(NX_UArch microseconds);\n\n"},"programing-manual/sched/smp.html":{"url":"programing-manual/sched/smp.html","title":"SMP多核调度","keywords":"","body":"多核调度\n一. 描述\n自从进入21世纪,处理器的性能就有了瓶颈,不再迅猛增长。此时就有人提出多个处理器一起工作的方式,来弥补处理器性能的问题。\n二. 原理\n多核的实现是需要硬件支持的,操作系统内核只是根据硬件做一定的抽象,做好多核间的同步与互斥。\n多核中很重要的一个机制就是自旋锁,当需要访问公共资源的时候,就需要自旋锁来上锁,才能保证多个核同时访问数据的正确性。自旋锁依赖于原子操作,而原子操作又需要硬件做支持。\n一般情况下,第一个引导处理器(Boot Processor)启动后,进入内核,完成初始化,再由引导处理器去唤醒其它处理器,通常称为应用处理器(Application Processor)。 AP 启动后,会进行一些初始化,然后参加到调度工作中。而调度队列的实现就需要依赖于原子操作来保证对公共队列访问的正确性。\n三、框架图\n \n \n \n \n SMP多核启动流程 \n \n\n\n \n \n \n \n SMP负载均衡 \n \n\n"},"programing-manual/process/process.html":{"url":"programing-manual/process/process.html","title":"进程管理","keywords":"","body":"进程管理\n一. 描述\n进程是具有独立的线性地址空间的线程集合,是线程的容器。在现代操作系统中,硬件的 MMU (内存管理单元)为虚拟内存的实现奠定基础。\n线程 + MMU 就可以升级为进程。除此之外,还会有一些其它进程独有的资源。\n进程执行独立的程序,程序运行出故障也不会导致系统出现故障。因此可以把一些服务程序放到用户态作为进程执行,当服务出错的时候不会导致\n内核崩溃。\n二. 原理\n进程的实现依赖于 MMU ,来实现进程的虚拟地址空间。每个进程都有一个 MMU 映射表,切换进程的时候需要修改硬件 MMU 寄存器,访问的地址都是新的 MMU 映射的虚拟地址。\n由于切换了 MMU 后,访问的地址会发生变化。因此,为了能够保证访问内核的时候是正确的,在映射 MMU 的时候,每个进程都会把部分\n页表项映射到内核,并设置权限为内核才能访问,这样就能实现切换 MMU 的时候,内核也能够正常运行,新进程的地址访问也不会出错。\n那么 MMU 究竟是何物?MMU 是虚拟地址转换成为物理地址的硬件机制。在开启 MMU 前,访问的地址都是物理地址,\n即直接访问的是内存的地址。比如内存只有 32MB ,那么访问的地址就只能是在 32MB 以内进行数据存取。\n当开启 MMU 后,访问的地址就是虚拟地址了。此时访问的地址,会通过 MMU 转换成那 32MB 内的物理地址,\n再去对物理地址进行存取。比如虚拟地址是 0xF0000000 ,显然超过了 32MB 的内存范围,但是,只要在访问前映射 0xF0000000 到\n 32MB 内的物理地址,就能正确地进行数据存取,不然,则会产生页面故障。\n三、框架图\n\n四. 接口\n创建进程的时候,需要从文件系统上加载程序的代码和数据,然后再去执行进程的代码。\n启动进程的时候,需要传入进程的名字 name ,要加载程序的路径 path ,以及进程标志 flags。\nNX_Error NX_ProcessLaunch(char *name, char *path, NX_U32 flags);\n\n进程执行结束的时候,需要退出,并传入退出时候的状态码。\nvoid NX_ProcessExit(int exitCode);\n\n"},"programing-manual/process/syscall.html":{"url":"programing-manual/process/syscall.html","title":"系统调用","keywords":"","body":"系统调用\n一. 描述\n在现代操作系统中,分为了内核态和用户态。内核态是内核程序本身,可以对设备资源进行管理核控制。而用户态只能够去调用内核提供的服务,不能够直接对资源进行访问。\n这么做的目的是为了避免用户恶意程序对系统的损坏,对设备进行恶意操作。于是用户态核与内核态之间的接口就出现了,它就是系统调用。\n系统调用是指用户态程序通过特殊的指令陷入到内核态,执行内核态提供的服务程序,然后再返回到用户态。\n支持特权保护的处理器架构中,都提供了模式切换的指令。至少需要有两个特权级,一个用于内核态,特权更高,可以直接访问硬件。另外一个用于用户态,\n只能通过系统调用执行内核提供好的服务。在 x86 架构中,有4个特权级(ring0, ring1, ring2, ring3),在 riscv 架构中,有3个特权级(Machine, Supervisor, User)。\n二. 原理\n系统调用的实现,是基于特权级切换指令实现的,一般都是中断或者异常。用户态通过调用这些指令,就会产生一个中断或者异常,处理器会去中断表中查找系统调用指令对应的处理函数,然后就根据系统调用的 API 进行内核服务的分发,去调用对应的内核函数。\n值得注意的是,在执行系统调用期间,需要打开中断,避免在系统调用时出现死循环,导致内核卡死。\n三、框架图\n\n四. 接口\n系统调用表是在内核固定下来的,不同的架构只要根据固定的 API 值,就能获取到对应的内核服务功能,然后以函数指针的方式去调用执行即可。\nNX_SyscallHandler NX_SyscallGetHandler(NX_SyscallApi api);\n\n"},"programing-manual/interrupt/irq.html":{"url":"programing-manual/interrupt/irq.html","title":"中断系统","keywords":"","body":"中断管理\n一、描述\n中断是由处理器支持的一个临时打断当前执行流的功能,可分为设备中断和处理器异常。设备中断就是当网卡设备收到数据后会产生一个中断,打断处理器当前在处理的事情,去处理网络数据包。异常中断就是当处理器执行了一个不存在的指令或者访问了一个没有权限的内存地址,处理器就会中断当前的执行流,去对异常做一个处理,一般都是 kill 当前的进程。\n二、原理\n中断管理的实现是基于处理器的中断管理机制的,不同的架构具体实现机制可能有差别,但是在大体逻辑上都是一致的,因此可以抽象出一套统一的接口来供上层使用。\n由于中断数量会比较多,因此,都会有一个中断表来注册中断。然后由一个寄存器或者多个寄存器来记录该表的地址。产生中断的时候会去查表,根据具体的中断号去找对应的中断处理函数,简单来说就是去调用中断的回调函数。\n中断是可以全局打开和关闭的,打开后才会响应中断。除此之外,对于每一个具体的中断,都可以打开和关闭,在禁止了网卡中断后,即使打开了全局中断,也收不到网络数据包了。但是,异常是不可以屏蔽的,异常是来告诉内核出现一些问题了,需要根据具体的异常做处理。有的异常是不可以修复的,会导致系统死机,有的异常时可以修复的,比如页故障,可以拿来实现页面延迟映射, COW 等机制。\n三、框架图\n\n四、接口\n需要注册某个中断的时候,需要传入中断号,绑定中断处理函数,设置中断的参数数据,设置中断的名字。\nNX_Error NX_IRQ_Bind(NX_IRQ_Number irqno,\n NX_IRQ_Handler handler,\n void *data,\n char *name,\n NX_U32 flags);\n\n当需要注销某个中断的时候,只需要传入中断号以及注册时的数据即可。相当于解除了中断函数的绑定。\nNX_Error NX_IRQ_Unbind(NX_IRQ_Number irqno, void *data);\n\n注册了中断后,并不能产生中断,还需要解除中断的屏蔽(unmask),相当于打开中断。除此之外,如果不希望产生该中断,则需要屏蔽某个中断(mask),相当于关闭中断。\nNX_Error NX_IRQ_Unmask(NX_IRQ_Number irqno);\nNX_Error NX_IRQ_Mask(NX_IRQ_Number irqno);\n\n前面有讲到关于全局中断的打开和关闭,全局中断的打开是 NX_IRQ_Enable 函数,相反关闭则是\n NX_IRQ_Disable 。由于有的时候只是为了暂时关闭中断,处理完后需要恢复中断的状态,于是则需要使用保存中断的状态和恢复中断的状态,即 NX_IRQ_SaveLevel 和 NX_IRQ_RestoreLevel 。\n#define NX_IRQ_Enable() NX_IRQ_ControllerInterface.enable()\n#define NX_IRQ_Disable() NX_IRQ_ControllerInterface.disable()\n#define NX_IRQ_SaveLevel() NX_IRQ_ControllerInterface.saveLevel()\n#define NX_IRQ_RestoreLevel(level) NX_IRQ_ControllerInterface.restoreLevel(level)\n\n"},"programing-manual/interrupt/delay_queue.html":{"url":"programing-manual/interrupt/delay_queue.html","title":"延迟队列","keywords":"","body":"中断延迟队列\n一、描述\n中断延迟队列是一种延迟处理中断的机制,类似于 linux 中断机制中的中断下半部分,用来进行具体的中断处理。\n中断的要求是快速地响应中断,并且是关闭了全局中断的,然后回到之前的工作。而延迟队列就是来完成这个工作的,产生了中断后,只进行最少的工作,\n然后激活中断队列工作,然后就返回,完成了本次中断。等到没有中断的时候,再去从延迟队列中获取一个工作来处理其对应的中断下半部分处理工作。\n二、原理\n中断延迟队列在某个驱动或者内核组件中会进行初始化。当产生中断的时候,在中断处理函数中,只对中断产生时的数据进行保存,不对中断产生时的数据进行处理,\n而是处理中断延迟工作,然后就直接返回。等到响应了该中断之后,再去调用延迟队列中的工作。\n由于中断是具有一定优先级的,有的中断需要先处理,而有的中断则可以后处理,因此就有了多个中断队列,每个队列的优先级是不同的。至于需要加入哪种队列,\n是在该延迟中断工作初始化的时候设定的。\n工作队列的优先级如下,其中 NX_IRQ_FAST_QUEUE 优先级最高, NX_IRQ_SLOW_QUEUE 优先级最低。\nenum NX_IRQ_DelayQueue \n{\n NX_IRQ_FAST_QUEUE = 0,\n NX_IRQ_NORMAL_QUEUE,\n NX_IRQ_PERIOD_QUEUE,\n NX_IRQ_SCHED_QUEUE,\n NX_IRQ_SLOW_QUEUE,\n NX_IRQ_QUEUE_NR,\n};\n\n内核的定时器属于 NX_IRQ_FAST_QUEUE ,这样才能保证时间的精度。\n而内核的任务调度属于 NX_IRQ_SCHED_QUEUE ,及时调度的精度低一点也没有太大影响。\n三、框架图\n\n四、接口\n创建一个延迟的中断工作,需要传入中断工作处理函数入口,以及函数执行时的参数,就可以创建一个延迟的工作对象。\nNX_IRQ_DelayWork *NX_IRQ_DelayWorkCreate(NX_IRQ_WorkHandler handler, void *arg, NX_U32 flags);\n\n如果是一个静态对象,不需要创建,那么可以直接调用初始化,并传入该对象的地址即可,参数同上。\nNX_Error NX_IRQ_DelayWorkInit(NX_IRQ_DelayWork *work, NX_IRQ_WorkHandler handler, void *arg, NX_U32 flags);\n\n有创建工作,那么就有销毁工作,只需要传入工作对象的地址即可。\nNX_Error NX_IRQ_DelayWorkDestroy(NX_IRQ_DelayWork *work);\n\n创建了一个中断工作对象,就需要将其加入到某个延迟队列中,只需要传入队列和工作对象的地址即可。\nNX_Error NX_IRQ_DelayQueueEnter(NX_IRQ_DelayQueue queue, NX_IRQ_DelayWork *work);\n\n和加入延迟队列相反,有离开延迟队列,那么和加入的参数一样,只是意思相反而已。\nNX_Error NX_IRQ_DelayQueueLeave(NX_IRQ_DelayQueue queue, NX_IRQ_DelayWork *work);\n\n最后,当有中断产生的时候,就可以去激活中断工作,那么则需要调用 NX_IRQ_DelayWorkHandle 来处理工作\n对象即可,传入工作对象的地址即可。\nNX_Error NX_IRQ_DelayWorkHandle(NX_IRQ_DelayWork *work);\n\n"},"programing-manual/timer/timer.html":{"url":"programing-manual/timer/timer.html","title":"定时器","keywords":"","body":"定时器\n一、描述\n定时器是基于系统时钟实现的,精度比较低(1ms~10ms),可以用于线程的休眠,以及对于休眠精度不高的场景。\n二、原理\n当时钟中断产生的时候,会改变ticks的值,与此同时也会去检测是否有定时器超时,如果有定时器超时,则会去处理定时器超时函数。\n有一个定时器链表来记录所有等待超时的定时器,值得注意的是,它们是通过线性的方式插入到链表中的。\n最先超时的定时器会插入到链表头,超时时间比较久的定时器会被加入到链表的末尾。\n除此之外,还有一个最近超时的时间变量,来记录下一个即将超时的定时器,可以用它来检测是否需要去检测定时器链表。\n当有一个定时器的ticks到达了最近超时定时器的ticks值的时候,就去检测定时器链表,如果有多个同样超时的定时器,\n就会将他们全部处理,调用定时器超时处理函数,然后更新最近超时定时器的ticks。\n三、框架图\n\n四、接口\n创建定时器需要指定需要超时的时间 milliseconds ,超时后调用的处理函数 handler ,处理函数参数 arg,\n以及定时器的标志 flags。\n标志有多重,表明不同类型的定时器。 ONESHOT 表示只超时一次, PERIOD 表示周期性地按照 milliseconds 来进行超时。\n#define NX_TIMER_ONESHOT 0x01 /* timer type is one shot */\n#define NX_TIMER_PERIOD 0x02 /* timer type is period */\n\nNX_Timer *NX_TimerCreate(NX_UArch milliseconds, \n NX_Bool (*handler)(struct NX_Timer *, void *arg), void *arg, \n int flags);\n\n如果是对静态的定时器进行初始化,只需要调用 NX_TimerInit 并传入定时器的地址即可。\nNX_Error NX_TimerInit(NX_Timer *timer, NX_UArch milliseconds, \n NX_Bool (*handler)(struct NX_Timer *, void *arg), void *arg, \n int flags);\n\n在定时器还没开始运行的时候,可以销毁一个定时器,调用 NX_TimerDestroy, 只需要传入定时器对象地址即可。\nNX_Error NX_TimerDestroy(NX_Timer *timer);\n\n创建定时器后需要调用 NX_TimerStart 启动它,才可以在超时后调用回调函数。\nNX_Error NX_TimerStart(NX_Timer *timer);\n\n当需要停止定时器的时候,调用 NX_TimerStop 即可。\nNX_Error NX_TimerStop(NX_Timer *timer);\n\n"},"programing-manual/port/riscv/riscv.html":{"url":"programing-manual/port/riscv/riscv.html","title":"riscv架构移植","keywords":"","body":"RISC-V架构移植\n一、描述\nRISC-V(发音为“risk-five”)是一个基于精简指令集(RISC)原则的开源指令集架构(ISA)。\n与大多数指令集相比,RISC-V指令集可以自由地用于任何目的,允许任何人设计、制造和销售RISC-V芯片和软件。虽然这不是第一个开源指令集,但它具有重要意义,因为其设计使其适用于现代计算设备(如仓库规模云计算机、高端移动电话和微小嵌入式系统)。设计者考虑到了这些用途中的性能与功率效率。该指令集还具有众多支持的软件,这解决了新指令集通常的弱点。\n该项目2010年始于加州大学伯克利分校,但许多贡献者是该大学以外的志愿者和行业工作者。\nRISC-V指令集的设计考虑了小型、快速、低功耗的现实情况来实做,但并没有对特定的微架构做过度的设计。\n截至2017年5月,RISC-V已经确立了版本2.22的用户空间的指令集(userspace ISA),而特权指令集(privileged ISA)也处在草案版本1.10。\n(以上摘自百度百科)\n二、架构简述\n1. 指令集\nRISC-V被设计成可扩展的,可以配置的,根据不同的应用场景可以生产带有不同功能扩展的处理器。\n\n2. 特权模式\nRISC-V目前有4种特权模式(Machine, Hypervisor,Supervisor, User)。\n机器模式用于固件程序代码执行,例如 OpenSBI, RustSBI 等,但是在 rtos 和裸机开发种,很多时候都是直接使用机器模式。\nHypervisor 虚拟化模式用于使用虚拟化的场景,目前还在开发阶段。\n操作系统更多运行在 Supervisor 监管者模式,这样可以和 User 更贴近,也不用管太多机器模式需要做的事情。通常, OpenSBI 和 RustSBI 初始化完成后,会跳转到 Supervisor 模式,进入内核。内核只需要链接到 SBI 指定的地址就行了。使用 SBI 的好处是,可以直接使用串口的输入输出,很方便调试,不用自己从机器模式跳转到 Supervisor 模式,降低开发的复杂度。\nUser 用户模式就是应用程序执行的模式,需要通过系统调用进入到 Supervisor 模式去调用内核提供的服务。\n\n3. 寄存器\nRISCV(RV32)具有32个整数寄存器组(取名为:x0~x31),其中31个是通用寄存器(x1~x31),它们存储整数数值,寄存器x0是硬件连线的常数0。当你设计的RISCV架构处理器实现了浮点扩展时,还必须有32个浮点寄存器f0~f31。对于RV32,其x寄存器是32位宽度的,XLEN=32,对于RV64,它们是64位宽度的,XLEN=64。\n\n\n特权级寄存器的命名规则,特权模式+寄存器名字,表示只能在该特权级使用。比如status寄存器,在机器模式有mstatus,监管模式有sstatus。\n.jpg)\n上图为机器模式状态寄存器(rv64)\n.jpg)\n上图为机器模式状态寄存器(rv32)\n3. 中断管理\nRISC-V中断分为两种类型,一种是同步中断,即ECALL、EBREAK等指令所产生的中断,另一种是异步中断,即GPIO、UART等外设产生的中断。\nRISC-V的中断管理由处理器核局部中断CLINT(CoreLocalInterrupt)和平台级中断控制器PLIC(PlatformLevelInterruptController)组成。CLINT分为软件中断核计时器中断,负责响应处理器的异常核和计时器中断。PLIC负责处理外设的中断。\n\n中断表地址需要写入管理者模式的向量基址寄存器 STVEC ,产生中断后,就去该寄存器保存的中断向量表地址找中断号对应的中断服务。\nSupervisor模式的中断的打开与关闭是由状态寄存器 SSTATUS 中的 SIE 控制的,置为1则表示使能中断,置为0则表示禁用中断。\n4. MMU内存管理单元\nRISC-V的MMU支持多种模式,有Sv32/Sv39/Sv48/Sv57/Sv64等。不同的模式映射的页面等级,页面大小是有差异的。在64位处理器种最常用的是Sv39,它是3级4KB页面大小映射。\n监管者模式的页表的地址是由地址转换寄存器 SATP 保存的,其格式如下:\n\n具体字段的解析如下:\n\nMode - MMU 地址翻译模式\n\n\n\n\nValue\nName\nDescription\n\n\n\n\n0\nBare\nNo translation or protection\n\n\n1-7\n-\nReserved\n\n\n8\nSv39\nPage-based 39-bit virtual addressing\n\n\n9\nSv48\nPage-based 48-bit virtual addressing\n\n\n10\nSv57\nReserved for page-based 57-bit virtual addressing\n\n\n11\nSv64\nReserved for page-based 64-bit virtual addressing\n\n\n12-15\n-\nReserved\n\n\n\n当 Mode 为 0 时,MMU 关闭。\n\nASID – 当前 ASID。表示当前程序的 ASID 号。\nPPN – 硬件回填根 PPN。第一级硬件回填使用的 PPN (Phsical Page Number)。\n\n三、代码移植\n移植一个新的平台需要实现如下内容:\n|内容 |描述 |\n| ------- | ---------- |\n| 内核入口 | 不同的架构内核入口代码有差异,需要根据架构来实现 |\n| 平台初始化 | 调用平台的初始化代码 |\n| 原子操作 | 原子操作用于对数据的加减运算不会被打断,以及一些原子级别的数据交换等 |\n| 内存屏障 | 内存屏障前的所有读写操作完成后才能执行屏障后的读写操作 |\n| 计时器时钟 | 计时器时钟用于驱动多线程的切换和内核定时器 |\n| 线程上下文 | 上下文切换是多线程实现的根基 |\n| 中断管理 | 中断管理接口对内核以及驱动都是至关重要的 |\n| MMU虚拟内存管理 | 虚拟地址的实现和访问,MMU的切换,映射和解除页面映射 |\n| 进程管理 | 进程管理相关操作是实现进程的必要条件 |\n| SMP多核 | 对处理器多核的启动和初始化 |\n所有需要对接的接口都存放在 src/arch/riscv64/port 目录下面,新的平台只需要支持这些接口的功能即可。\n1. 内核入口\n在 nxos 中,使用了 OpenSBI 和 RustSBI 作为机器模式的固件,qemu_riscv64平台选择了 OpenSBI ,其内核的入口地址为 0x80200000,\nk210 选择了 RustSBI,其内核的入口地址为 0x80020000, RustSBI 针对 k210 做了一些兼容,使用起来比较简单。\n在 SBI 执行结束后,会从机器模式跳转到位于监护者模式的内核中,并且寄存器 a0 记录了当前处理器核心的 id ,可以根据寄存器的值来判断处理器 id。\n入口地址在链接脚本中写的是 _Start 这个符号,因此会进入 sbi_entry.S 的 _Start 执行。\n\n文件:src/arch/riscv64/kernel/sbi_entry.S\n\n/**\n * Copyright (c) 2018-2022, NXOS Development Team\n * SPDX-License-Identifier: Apache-2.0\n * \n * Contains: Riscv64 entry \n * \n * Change Logs:\n * Date Author Notes\n * 2021-10-1 JasonHu Init\n */\n\n .section .text.start\n .extern NX_Main\n\n .globl CPU_StackTop0\n .globl CPU_StackTop1\n .globl CPU_StackTop2\n .globl CPU_StackTop3\n\n .global _Start\n_Start:\n li t0, 0\n beq a0, t0, _SetSP0\n li t0, 1\n beq a0, t0, _SetSP1\n li t0, 2\n beq a0, t0, _SetSP2\n li t0, 3\n beq a0, t0, _SetSP3\n\n j _EnterMain\n\n_SetSP0:\n la sp, CPU_StackTop0\n j _EnterMain\n\n_SetSP1:\n la sp, CPU_StackTop1\n j _EnterMain\n\n_SetSP2:\n la sp, CPU_StackTop2\n j _EnterMain\n\n_SetSP3:\n la sp, CPU_StackTop3\n j _EnterMain\n\n_EnterMain:\n csrw sscratch, sp /* first set sscrach as cpu stack here */\n csrc sstatus, 0x2 /* disable interrupt */\n call NX_Main\n\nloop:\n j loop\n\n /* set in data seciton, avoid clear bss to clean stack */\n .section .data.stack\n .align 12\n\nCPU_Stack0:\n .space 8192\nCPU_StackTop0:\n\nCPU_Stack1:\n .space 8192\nCPU_StackTop1:\n\nCoreStack2:\n .space 8192\nCPU_StackTop2:\n\nCoreStack3:\n .space 8192\nCPU_StackTop3:\n\n该代码简单地设置了栈就进入了 NX_Main 执行,那么入口程序的移植就完成了。\n2. 平台初始化\n在平台初始化 NX_HalPlatformInit 中,进行初始化,初始化完串口后,就能使用打印功能了。\n然后再初始化中断,初始化物理内存管理。\n在 NX_HalPlatformStage2中,可以使用内核的功能,内存分配,中断注册等。\n因此 NX_HalDirectUartStage2 就注册了串口中断,可以接受输入。\n\n文件:src/platform/qemu_riscv64/hal/init.c\n\n/**\n * Copyright (c) 2018-2022, NXOS Development Team\n * SPDX-License-Identifier: Apache-2.0\n * \n * Contains: Init Riscv64 Qemu platfrom \n * \n * Change Logs:\n * Date Author Notes\n * 2021-10-1 JasonHu Init\n */\n\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\n#define NX_LOG_LEVEL NX_LOG_INFO\n#define NX_LOG_NAME \"INIT\"\n#include \n\nNX_INTERFACE NX_Error NX_HalPlatformInit(NX_UArch coreId)\n{\n NX_HalClearBSS();\n\n /* NOTE: init trap first before do anything */\n CPU_InitTrap(coreId);\n\n NX_HalDirectUartInit();\n\n sbi_init();\n sbi_print_version();\n\n NX_LOG_I(\"Hello, QEMU Riscv64!\");\n\n PLIC_Init(NX_True);\n\n NX_HalPageZoneInit();\n\n return NX_EOK;\n}\n\nNX_INTERFACE NX_Error NX_HalPlatformStage2(void)\n{\n NX_LOG_I(\"stage2!\");\n\n NX_HalDirectUartStage2();\n\n return NX_EOK;\n}\n\n串口可以配置为调用 SBI 实现输出,也可以通过自己操作寄存器实现。在早期,调用 SBI 串口来输出是非常方便的。\n实现 NX_HalConsoleOutChar 函数后,就可以使用 NX_Printf 和 NX_LOG_* 函数来打印消息。\n\n文件:src/platform/qemu_riscv64/drivers/direct_uart.c\n\n/**\n * Copyright (c) 2018-2022, NXOS Development Team\n * SPDX-License-Identifier: Apache-2.0\n * \n * Contains: Direct uart driver \n * low-level driver routines for 16550a UART.\n * \n * Change Logs:\n * Date Author Notes\n * 2021-10-1 JasonHu Init\n */\n\n#include \n#include \n#include \n#include \n#include \n\n#ifdef CONFIG_NX_UART0_FROM_SBI\n#include \n#endif\n\n#include \n\n// the UART control registers.\n// some have different meanings for\n// read vs write.\n// see http://byterunner.com/16550.html\n#define RHR 0 // receive holding register (for input bytes)\n#define THR 0 // transmit holding register (for output bytes)\n#define IER 1 // interrupt enable register\n#define IER_RX_ENABLE (1 \n3. 原子操作\n原子操作需要实现对数据的原子设置,获取,加法,减法,数据交换等。由于 gcc 内置了原子操作的函数,\n这里只需要调用 gcc 内置的原子操作即可。\n\n文件:src/arch/riscv64/port/atomic.c\n\n/**\n * Copyright (c) 2018-2022, NXOS Development Team\n * SPDX-License-Identifier: Apache-2.0\n * \n * Contains: HAL NX_Atomic \n * \n * Change Logs:\n * Date Author Notes\n * 2021-12-1 JasonHu Init\n */\n\n#include \n\nNX_PRIVATE void NX_HalAtomicSet(NX_Atomic *atomic, long value)\n{\n atomic->value = value;\n}\n\nNX_PRIVATE long NX_HalAtomicGet(NX_Atomic *atomic)\n{\n return atomic->value;\n}\n\nNX_PRIVATE void NX_HalAtomicAdd(NX_Atomic *atomic, long value)\n{\n /* gcc build-in functions */\n __sync_fetch_and_add(&atomic->value, value);\n}\n\nNX_PRIVATE void NX_HalAtomicSub(NX_Atomic *atomic, long value)\n{\n __sync_fetch_and_sub(&atomic->value, value);\n}\n\nNX_PRIVATE void NX_HalAtomicInc(NX_Atomic *atomic)\n{\n __sync_fetch_and_add(&atomic->value, 1);\n}\n\nNX_PRIVATE void NX_HalAtomicDec(NX_Atomic *atomic)\n{\n __sync_fetch_and_sub(&atomic->value, 1);\n}\n\nNX_PRIVATE void NX_HalAtomicSetMask(NX_Atomic *atomic, long mask)\n{\n __sync_fetch_and_or(&atomic->value, mask);\n}\n\nNX_PRIVATE void NX_HalAtomicClearMask(NX_Atomic *atomic, long mask)\n{ \n __sync_fetch_and_and(&atomic->value, ~mask);\n}\n\nNX_PRIVATE long NX_HalAtomicSwap(NX_Atomic *atomic, long newValue)\n{\n return __sync_lock_test_and_set(&((atomic)->value), newValue);\n}\n\nNX_PRIVATE long NX_HalAtomicCAS(NX_Atomic *atomic, long old, long newValue)\n{\n return __sync_val_compare_and_swap(&atomic->value, old, newValue);\n}\n\nNX_INTERFACE struct NX_AtomicOps NX_AtomicOpsInterface = \n{\n .set = NX_HalAtomicSet,\n .get = NX_HalAtomicGet,\n .add = NX_HalAtomicAdd,\n .sub = NX_HalAtomicSub,\n .inc = NX_HalAtomicInc,\n .dec = NX_HalAtomicDec,\n .setMask = NX_HalAtomicSetMask,\n .clearMask = NX_HalAtomicClearMask,\n .swap = NX_HalAtomicSwap,\n .cas = NX_HalAtomicCAS,\n};\n\n4. 内存屏障\n在 risc-v 架构中,内存全(读和写)屏障使用 gcc 内置函数 __sync_synchronize 实现,\n内存读/写屏障使用 fence 指令去实现。内存指令屏障使用 fence.i 指令实现。\n\n文件:src/arch/riscv64/port/barrier.c\n\n/**\n * Copyright (c) 2018-2022, NXOS Development Team\n * SPDX-License-Identifier: Apache-2.0\n * \n * Contains: HAL Memory Barrier\n * \n * Change Logs:\n * Date Author Notes\n * 2021-12-9 JasonHu Init\n */\n\n#include \n\nNX_PRIVATE void NX_HalMemBarrier(void)\n{\n __sync_synchronize();\n}\n\nNX_PRIVATE void NX_HalMemBarrierRead(void)\n{\n NX_CASM(\"fence\":::\"memory\");\n}\n\nNX_PRIVATE void NX_HalMemBarrierWrite(void)\n{\n NX_CASM(\"fence\":::\"memory\");\n}\n\nNX_PRIVATE void NX_HalMemBarrierInstruction(void)\n{\n NX_CASM(\"fence.i\":::\"memory\");\n}\n\nNX_INTERFACE struct NX_MemBarrierOps NX_MemBarrierOpsInterface = \n{\n .barrier = NX_HalMemBarrier,\n .barrierRead = NX_HalMemBarrierRead,\n .barrierWrite = NX_HalMemBarrierWrite,\n .barrierInstruction = NX_HalMemBarrierInstruction,\n};\n\n5. 计时器时钟\n硬件时钟会按照一定的频率去增长当前定时器寄存器的值,在 qemu 中这个频率是 10MHZ 。\n如果当前定时器的值超过了超时定时器寄存器的值的时候,就会触发一个中断。注意:前提是打开了定时器中断。\n在做时钟定时器初始化的时候,需要先关闭 Supervisor 模式的定时器中断,然后再设置超时定时器的值。\n这是操作需要通过 SBI 去实现,而获取操作可以直接通过 rdtime 指令获取。\n由于我们想实现1秒钟产生 NX_TICKS_PER_SECOND (一般在100~1000)次定时器中断的效果,\n所以需要计算出产生一次中断,需要间隔多少个tick即可。\n当超时后,就会产生一个中断,于是就设置下一个中断产生时的超时值。\n\n文件:src/arch/riscv64/port/clock.c\n\n/**\n * Copyright (c) 2018-2022, NXOS Development Team\n * SPDX-License-Identifier: Apache-2.0\n * \n * Contains: Clock for system \n * \n * Change Logs:\n * Date Author Notes\n * 2021-10-16 JasonHu Init\n */\n\n#include \n#include \n#include \n\n#include \n#include \n#include \n\n#define NX_LOG_NAME \"Clock\"\n#include \n\n#define NX_TIMER_CLK_FREQ 10000000 /* qemu has 10MHZ clock frequency */\n\nNX_PRIVATE NX_U64 TickDelta = NX_TIMER_CLK_FREQ / NX_TICKS_PER_SECOND;\n\nNX_PRIVATE NX_U64 GetTimerCounter()\n{\n NX_U64 ret;\n NX_CASM (\"rdtime %0\" : \"=r\"(ret));\n return ret;\n}\n\nvoid NX_HalClockHandler(void)\n{\n NX_ClockTickGo();\n /* update timer */\n sbi_set_timer(GetTimerCounter() + TickDelta);\n}\n\nNX_INTERFACE NX_Error NX_HalInitClock(void)\n{\n /* Clear the Supervisor-Timer bit in SIE */\n ClearCSR(sie, SIE_STIE);\n\n /* Set timer */\n sbi_set_timer(GetTimerCounter() + TickDelta);\n\n /* Enable the Supervisor-Timer bit in SIE */\n SetCSR(sie, SIE_STIE);\n return NX_EOK;\n}\n\n6. 线程上下文\n上下文的切换分为上下文的初始化,从当前线程切换到下一个线程,直接切换到下一个线程。\n初始化线程上下文是在栈上构建一个线程的上下文,当第一次切换到该线程的时候,寄存器就会使用栈中的值。\n在函数 NX_HalContextInit 中,需要构建的上下文参数是线程的入口 startEntry 和线程结束时执行的函数 exitEntry,\n以及线程运行时的参数 arg ,以及将这些数据构建在栈顶 stackTop 之下,最后返回栈低。\n预留一个上下文空间后,设置参数为 a0 ,因为risc-v中c语言函数参数是 a0~a7 。\n入口地址使用 epc 保存,因为上下文切换的时候会模拟一次异常返回,返回后就到这个异常地址处执行。\n结束时执行的函数使用 ra 保存,它是返回地址的意思,表示线程返回后就去执行该函数。\n线程栈使用 sp 寄存器保存。\n还有一个很重要的地方就是对状态寄存器 sstatus 的设置,\n需要能够访问用户态的内存,需要在返回后开启中断以及设置为 Supervisor 模式(因为线程的切换是在内核中完成的)。\n\n文件:src/arch/riscv64/port/context.c\n\n/**\n * Copyright (c) 2018-2022, NXOS Development Team\n * SPDX-License-Identifier: Apache-2.0\n * \n * Contains: NX_Thread context \n * \n * Change Logs:\n * Date Author Notes\n * 2021-10-16 JasonHu Init\n */\n\n#include \n#include \n#include \n#include \n#include \n#include \n\nNX_IMPORT void NX_HalContextSwitchNext(NX_Addr nextSP);\nNX_IMPORT void NX_HalContextSwitchPrevNext(NX_Addr prevSP, NX_Addr nextSP);\n\nNX_PRIVATE void *NX_HalContextInit(void *startEntry, void *exitEntry, void *arg, void *stackTop)\n{\n NX_U8 *stack = NX_NULL;\n NX_HalContext *context = NX_NULL;\n\n stack = (NX_U8 *)stackTop;\n stack = (NX_U8 *)NX_ALIGN_DOWN((NX_UArch)stack, sizeof(NX_UArch));\n\n stack -= sizeof(NX_HalContext);\n context = (NX_HalContext *)stack;\n\n NX_MemZero(context, sizeof(NX_HalContext));\n\n context->a0 = (NX_UArch)arg;\n context->epc = (NX_UArch)startEntry;\n context->sp = (NX_UArch)(((NX_UArch)stack) + sizeof(NX_HalContext));\n context->ra = (NX_UArch)exitEntry;\n\n /**\n * allow to access user space memory,\n * return to supervisor mode,\n * enable interrupt\n */\n#ifdef CONFIG_NX_PLATFORM_K210\n /* NOTICE: in k210, SSTATUS_SUM mean disable Supervisor Access User memroy */\n context->sstatus = SSTATUS_SPP | SSTATUS_SPIE;\n#else\n context->sstatus = SSTATUS_SUM | SSTATUS_SPP | SSTATUS_SPIE;\n#endif\n return (void *)stack;\n}\n\nNX_INTERFACE struct NX_ContextOps NX_ContextOpsInterface = \n{\n .init = NX_HalContextInit,\n .switchNext = NX_HalContextSwitchNext,\n .switchPrevNext = NX_HalContextSwitchPrevNext,\n};\n\n在上下文切换的时候,需要注意的是,传入的是线程的栈的地址,可以从地址中取出线程当前栈的值。\n使用这种方式的话,就非常方便移植到其它架构上。\n在 NX_HalContextSwitchNext 中,获取了栈的值后,就从栈中恢复寄存器上下文,然后调用 sret 返回。\n由于 epc 设置了线程的入口地址,那么 sret 返回后就可以让 pc 等于 epc ,那么就切换到线程里面去了。\n至于在 NX_HalContextSwitchPrevNext 中,多了对当前线程的上下文的保存的工作,然后切换到下一个线程。\n\n文件:src/arch/riscv64/kernel/context.S\n\n/**\n * Copyright (c) 2018-2022, NXOS Development Team\n * SPDX-License-Identifier: Apache-2.0\n * \n * Contains: NX_Thread context \n * \n * Change Logs:\n * Date Author Notes\n * 2021-12-01 JasonHu Init\n */\n\n.text\n\n#define __ASSEMBLY__\n#include \n#include \n\n/**\n * void NX_HalContextSwitchNext(NX_Addr nextSP);\n */\n.globl NX_HalContextSwitchNext\nNX_HalContextSwitchNext:\n LOAD sp, (a0) /* sp = *nextSP */\n\n RESTORE_CONTEXT\n sret\n\n/**\n * void NX_HalContextSwitchPrevNext(NX_Addr prevSP, NX_Addr nextSP);\n */\n.globl NX_HalContextSwitchPrevNext\nNX_HalContextSwitchPrevNext:\n mv t0, sp\n\n /**\n * set as supervisor mode and enable interupt \n * make sure kernel mode thread do context switch\n */\n li t1, SSTATUS_SPP | SSTATUS_SPIE | SSTATUS_SUM\n csrs sstatus, t1\n\n /**\n * set `sepc` as `ra`, `ra` saved return address of NX_HalContextSwitchPrevNext\n * when do `sret`, will return from NX_HalContextSwitchPrevNext\n */\n csrw sepc, ra\n\n /* save context to stack */\n SAVE_CONTEXT\n\n /* save old sp to stack, instead the sp in sscratch */\n STORE t0, CTX_SP_OFF * REGBYTES(sp)\n\n /* save sp to from thread, *from = `sp` */\n STORE sp, (a0)\n\n LOAD sp, (a1) /* sp = *nextSP */\n\n /* restore context from stack */\n RESTORE_CONTEXT\n\n /* supervisor return, `pc` = `sepc` */\n sret\n\n7. 中断管理\n在中断中,使能 NX_HalIrqEnable 和禁用 NX_HalIrqDisable 中断只需要对 sstatus 寄存器的 SSTATUS_SIE 位做置位和清理的操作即可。\n除此之外,还提供了对当前中断状态保存和恢复的操作 NX_HalIrqSaveLevel 和 NX_HalIrqRestoreLevel。\n该操作只是多了对 sstatus 寄存器的 SSTATUS_SIE 位保存和恢复。\n除此之外就是对某个中断的使能 NX_HalIrqUnmask 和禁用 NX_HalIrqMask ,以及中断处理完后的应答处理 NX_HalIrqAck。\n这3个接口都是对 PLIC 的封装。\n\n文件:src/arch/riscv64/port/interrupt.c\n\n/**\n * Copyright (c) 2018-2022, NXOS Development Team\n * SPDX-License-Identifier: Apache-2.0\n * \n * Contains: interrupt manage\n * \n * Change Logs:\n * Date Author Notes\n * 2021-10-31 JasonHu Init\n */\n\n#include \n#include \n#include \n#include \n#include \n\nNX_PRIVATE NX_Error NX_HalIrqUnmask(NX_IRQ_Number irqno)\n{\n if (irqno = NX_NR_IRQS)\n {\n return NX_EINVAL;\n }\n\n return PLIC_EnableIRQ(NX_SMP_GetBootCore(), irqno);\n}\n\nNX_PRIVATE NX_Error NX_HalIrqMask(NX_IRQ_Number irqno)\n{\n if (irqno = NX_NR_IRQS)\n {\n return NX_EINVAL;\n }\n\n return PLIC_DisableIRQ(NX_SMP_GetBootCore(), irqno);\n}\n\nNX_PRIVATE NX_Error NX_HalIrqAck(NX_IRQ_Number irqno)\n{\n if (irqno = NX_NR_IRQS)\n {\n return NX_EINVAL;\n }\n\n return PLIC_Complete(NX_SMP_GetBootCore(), irqno);\n}\n\nNX_PRIVATE void NX_HalIrqEnable(void)\n{\n WriteCSR(sstatus, ReadCSR(sstatus) | SSTATUS_SIE);\n}\n\nNX_PRIVATE void NX_HalIrqDisable(void)\n{\n WriteCSR(sstatus, ReadCSR(sstatus) & ~SSTATUS_SIE);\n}\n\nNX_PRIVATE NX_UArch NX_HalIrqSaveLevel(void)\n{\n NX_UArch level = 0;\n level = ReadCSR(sstatus);\n WriteCSR(sstatus, level & ~SSTATUS_SIE);\n return level & SSTATUS_SIE;\n}\n\nNX_PRIVATE void NX_HalIrqRestoreLevel(NX_UArch level)\n{\n WriteCSR(sstatus, ReadCSR(sstatus) | (level & SSTATUS_SIE));\n}\n\nNX_INTERFACE NX_IRQ_Controller NX_IRQ_ControllerInterface = \n{\n .unmask = NX_HalIrqUnmask,\n .mask = NX_HalIrqMask,\n .ack = NX_HalIrqAck,\n .enable = NX_HalIrqEnable,\n .disable = NX_HalIrqDisable,\n .saveLevel = NX_HalIrqSaveLevel,\n .restoreLevel = NX_HalIrqRestoreLevel,\n};\n\n8. MMU虚拟内存管理\n目前支持的是mmu-sv39,3级页表,页表和物理页都是4kb大小。\nNX_HalMapPage 是映射虚拟地址,会自动分配物理地址并映射页面。\nNX_HalMapPageWithPhy 映射虚拟地址,但是会指定物理地址,就不用自动分配物理地址了。\nNX_HalUnmapPage 解除地址映射,解除后就不能访问了。\nNX_HalVir2Phy 可以通过虚拟地址找到其映射的物理地址。\nNX_HalSetPageTable 设置页表的地址到硬件寄存器中,当访问虚拟地址的时候,会根据设置的页表进行地址转换。\nNX_HalGetPageTable 可以获取页表的地址。\nNX_HalEnable 是使能 MMU ,所有地址都变成虚拟地址了。\n\n文件:src/arch/riscv64/port/mmu.c\n\nNX_PRIVATE void *NX_HalMapPage(NX_Mmu *mmu, NX_Addr virAddr, NX_Size size, NX_UArch attr)\n{\n NX_ASSERT(mmu);\n if (!attr)\n {\n return NX_NULL;\n }\n\n virAddr = virAddr & NX_PAGE_ADDR_MASK;\n size = NX_PAGE_ALIGNUP(size);\n\n NX_UArch level = NX_IRQ_SaveLevel();\n void *addr = __MapPage(mmu, virAddr, size, attr);\n NX_IRQ_RestoreLevel(level);\n return addr;\n}\n\nNX_PRIVATE void *NX_HalMapPageWithPhy(NX_Mmu *mmu, NX_Addr virAddr, NX_Addr phyAddr, NX_Size size, NX_UArch attr)\n{\n NX_ASSERT(mmu);\n if (!attr)\n {\n return NX_NULL;\n }\n\n virAddr = virAddr & NX_PAGE_ADDR_MASK;\n phyAddr = phyAddr & NX_PAGE_ADDR_MASK;\n size = NX_PAGE_ALIGNUP(size);\n\n NX_UArch level = NX_IRQ_SaveLevel();\n void *addr = __MapPageWithPhy(mmu, virAddr, phyAddr, size, attr);\n NX_IRQ_RestoreLevel(level);\n return addr;\n}\n\nNX_PRIVATE NX_Error NX_HalUnmapPage(NX_Mmu *mmu, NX_Addr virAddr, NX_Size size)\n{\n NX_ASSERT(mmu);\n\n virAddr = virAddr & NX_PAGE_ADDR_MASK;\n size = NX_PAGE_ALIGNUP(size);\n\n NX_Addr addrStart = virAddr;\n NX_Addr addrEnd = virAddr + size - 1;\n NX_Size pages = GET_PF_ID(addrEnd) - GET_PF_ID(addrStart) + 1;\n\n NX_UArch level = NX_IRQ_SaveLevel();\n NX_Error err = __UnmapPage(mmu, virAddr, pages);\n NX_IRQ_RestoreLevel(level);\n return err;\n}\n\nNX_PRIVATE void *NX_HalVir2Phy(NX_Mmu *mmu, NX_Addr virAddr)\n{\n NX_ASSERT(mmu);\n\n NX_Addr pagePhy;\n NX_Addr pageOffset;\n\n MMU_PDE *pageTable = (MMU_PDE *)mmu->table;\n\n MMU_PTE *pte = PageWalk(pageTable, virAddr, NX_False);\n if (pte == NX_NULL)\n {\n NX_PANIC(\"vir2phy walk fault!\");\n }\n\n if (!PTE_USED(*pte))\n {\n NX_PANIC(\"vir2phy pte not used!\");\n }\n\n pagePhy = PTE2PADDR(*pte);\n pageOffset = virAddr % NX_PAGE_SIZE;\n return (void *)(pagePhy + pageOffset);\n}\n\nNX_PRIVATE void NX_HalSetPageTable(NX_Addr addr)\n{\n WriteCSR(satp, MAKE_SATP(addr));\n MMU_FlushTLB();\n}\n\nNX_PRIVATE NX_Addr NX_HalGetPageTable(void)\n{\n NX_Addr addr = ReadCSR(satp);\n return (NX_Addr)GET_ADDR_FROM_SATP(addr);\n}\n\nNX_PRIVATE void NX_HalEnable(void)\n{\n MMU_FlushTLB();\n}\n\nNX_INTERFACE struct NX_MmuOps NX_MmuOpsInterface = \n{\n .setPageTable = NX_HalSetPageTable,\n .getPageTable = NX_HalGetPageTable,\n .enable = NX_HalEnable,\n .mapPage = NX_HalMapPage,\n .mapPageWithPhy = NX_HalMapPageWithPhy,\n .unmapPage = NX_HalUnmapPage,\n .vir2Phy = NX_HalVir2Phy,\n};\n\n9. 进程管理\nNX_HalProcessInitUserSpace 用于在进程创建的时候,创建进程的页表 ,并复制内核的页表项。\nNX_HalProcessFreePageTable 用于在进程退出的时候释放页表。 \nNX_HalProcessSwitchPageTable 用于在进程切换的时候切换页表。\nNX_HalProcessSyscallDispatch 用于分发系统调用,不同的架构传参数的方式会有区别,因此需要特殊处理。\nNX_HalProcessExecuteUser 用于进程从内核跳到用户态执行。\nNX_HalProcessGetKernelPageTable 用于获取内核的页表。\n\n文件:src/arch/riscv64/port/process.c\n\n/**\n * Copyright (c) 2018-2022, NXOS Development Team\n * SPDX-License-Identifier: Apache-2.0\n * \n * Contains: Process for RISCV64\n * \n * Change Logs:\n * Date Author Notes\n * 2022-1-16 JasonHu Init\n */\n\n#include \n#include \n#include \n#include \n#include \n#define NX_LOG_NAME \"syscall\"\n#define NX_LOG_LEVEL NX_LOG_INFO\n#include \n#include \n#include \n#include \n#include \n\nNX_PRIVATE NX_Error NX_HalProcessInitUserSpace(NX_Process *process, NX_Addr virStart, NX_Size size)\n{\n void *table = NX_MemAlloc(NX_PAGE_SIZE);\n if (table == NX_NULL)\n {\n return NX_ENOMEM;\n }\n NX_MemZero(table, NX_PAGE_SIZE);\n NX_MemCopy(table, NX_HalGetKernelPageTable(), NX_PAGE_SIZE);\n NX_MmuInit(&process->vmspace.mmu, table, virStart, size, 0);\n return NX_EOK;\n}\n\nNX_PRIVATE NX_Error NX_HalProcessFreePageTable(NX_Vmspace *vmspace)\n{\n NX_ASSERT(vmspace);\n if(vmspace->mmu.table == NX_NULL)\n {\n return NX_EFAULT;\n }\n NX_MemFree(vmspace->mmu.table);\n return NX_EOK;\n}\n\nNX_PRIVATE NX_Error NX_HalProcessSwitchPageTable(void *pageTableVir)\n{\n NX_Addr pageTablePhy = (NX_Addr)NX_Virt2Phy(pageTableVir);\n /* no need switch same page table */\n if (pageTablePhy != NX_MmuGetPageTable())\n {\n NX_MmuSetPageTable(pageTablePhy);\n }\n return NX_EOK;\n}\n\nvoid NX_HalProcessSyscallDispatch(NX_HalTrapFrame *frame)\n{\n NX_SyscallWithArgHandler handler = (NX_SyscallWithArgHandler)NX_SyscallGetHandler((NX_SyscallApi)frame->a7);\n NX_ASSERT(handler);\n\n NX_LOG_D(\"riscv64 syscall api: %x, arg0:%x, arg1:%x, arg2:%x, arg3:%x, arg4:%x, arg5:%x, arg6:%x\",\n frame->a7, frame->a0, frame->a1, frame->a2, frame->a3, frame->a4, frame->a5, frame->a6);\n\n frame->a0 = handler(frame->a0, frame->a1, frame->a2, frame->a3, frame->a4, frame->a5, frame->a6);\n frame->a7 = 0; /* clear syscall api */\n frame->epc += 4; /* skip ecall instruction */\n\n NX_LOG_D(\"riscv64 syscall return: %x\", frame->a0);\n}\n\nNX_IMPORT void NX_HalProcessEnterUserMode(void *args, const void *text, void *userStack);\nNX_PRIVATE void NX_HalProcessExecuteUser(const void *text, void *userStack, void *kernelStack, void *args)\n{\n NX_LOG_D(\"riscv64 process enter user: %p, user stack %p\", text, userStack);\n NX_HalProcessEnterUserMode(args, text, userStack);\n NX_PANIC(\"should never return after into user\");\n}\n\nNX_PRIVATE void *NX_HalProcessGetKernelPageTable(void)\n{\n return NX_HalGetKernelPageTable();\n}\n\nNX_INTERFACE struct NX_ProcessOps NX_ProcessOpsInterface = \n{\n .initUserSpace = NX_HalProcessInitUserSpace,\n .switchPageTable = NX_HalProcessSwitchPageTable,\n .getKernelPageTable = NX_HalProcessGetKernelPageTable,\n .executeUser = NX_HalProcessExecuteUser,\n .freePageTable = NX_HalProcessFreePageTable,\n};\n\n10. SMP多核\n引导核初始化完成后,会初始化内核,在内核初始化完成后,就会进入启动应用核的阶段 NX_HalCoreBootApp。\n如果支持多核,就可以在这个时候去唤醒其他核。不支持的话返回 NX_ENORES 没有资源即可。\n唤醒应用核只需要调用 SBI 提供的唤醒核心功能即可。\n唤醒后,应用核会进入 NX_HalCoreEnterApp, 应用核只需要设置中断表地址,初始化自己的中断控制器即可。\n还有值得注意的是,获取处理器的索引 NX_HalCoreGetIndex。该索引是在处理器数组中的索引,不管什么处理器 id 值,\n都会被映射成索引,相当于是处理器 id 的 hash 值,其返回值范围为 0~NX_MULTI_CORES_NR - 1。\n\n文件:src/arch/riscv64/port/smp.c\n\n/**\n * Copyright (c) 2018-2022, NXOS Development Team\n * SPDX-License-Identifier: Apache-2.0\n * \n * Contains: HAL Multi Core support\n * \n * Change Logs:\n * Date Author Notes\n * 2021-12-9 JasonHu Init\n */\n\n#include \n#include \n#include \n#include \n#define NX_LOG_NAME \"Multi Core\"\n#include \n\n#include \n#include \n#include \n#include \n#include \n\nNX_IMPORT NX_Addr TrapEntry0;\nNX_IMPORT NX_Addr TrapEntry1;\nNX_IMPORT NX_Addr TrapEntry2;\nNX_IMPORT NX_Addr TrapEntry3;\n\n/**\n * Within SBI, we can't read mhartid, so I try to use `trap entry` to see who am I.\n */\nNX_PRIVATE NX_UArch NX_HalCoreGetIndex(void)\n{\n NX_Addr trapEntry = ReadCSR(stvec);\n\n if (trapEntry == (NX_Addr)&TrapEntry0)\n {\n return 0;\n }\n else if (trapEntry == (NX_Addr)&TrapEntry1)\n {\n return 1;\n }\n else if (trapEntry == (NX_Addr)&TrapEntry2)\n {\n return 2;\n }\n else if (trapEntry == (NX_Addr)&TrapEntry3)\n {\n return 3;\n }\n /* should never be here */\n while (1);\n}\n\nNX_PRIVATE NX_Error NX_HalCoreBootApp(NX_UArch bootCoreId)\n{\n\n NX_LOG_I(\"boot core is:%d\", bootCoreId);\n NX_UArch coreId;\n for (coreId = 0; coreId \n四、移植总结\n对于 nxos 新架构的移植,都是按照一套统一的接口去实现的。\n在调试过程中会遇到很多问题,需要耐心地调试。\n通常,都是在启动后尽快地实现串口调试,以便能够知道自己跑到什么地方了。\n最开始是可以不开启 MMU 的,最开始不需要跑进程,\n只需要实现 atomic.c、barrier.c、clock.c、context.c、interrupt.c即可。\n如果只是需要运行起来,不需要线程环境,那么就只需要 atomic.c、barrier.c即可。\n移植过程是需要慢慢琢磨,长期积累,才能实现更好的代码。\n"},"programing-manual/user/api.html":{"url":"programing-manual/user/api.html","title":"API设计","keywords":"","body":"API应用程序接口\n本文档存放的是用户程序的编程接口的设计说明。\nNXOS的API接口分为几个大类。进程,线程,内存管理,时间管理,枢纽系统,文件系统,设备管理,网络管理,图形管理,安全管理,用户态驱动框架。\n进程管理\n\n\n\n功能\n函数\n\n\n\n\n创建进程\nint ProcessCreate(char name, char path, int flags, char cmd, void env)\n\n\n退出进程\nvoid ProcessExit(int exitCode)\n\n\n终止进程\nint ProcessTerminate(int pid)\n\n\n获取进程ID\nint ProcessGetId(void)\n\n\n等待进程退出\nint ProcessWait(int pid, int timeout, int flags)\n\n\n\n线程管理\n\n\n\n功能\n函数\n\n\n\n\n创建线程\nint ThreadCreate(ThreadHandler handler, void *arg, USize stackSize, int flags)\n\n\n退出线程\nvoid ThreadExit(int exitCode)\n\n\n获取线程ID\nint ThreadGetId(void)\n\n\n终止线程\nint ThreadTerminate(int tid)\n\n\n挂起线程\nint ThreadSuspend(int tid)\n\n\n恢复线程\nint ThreadResume(int tid)\n\n\n等待线程退出\nint ThreadWait(int tid, int timeout, int flags)\n\n\n创建互斥体\nMutex MutexCreate(int attr, char name)\n\n\n删除互斥体\nint MutexDelete(Mutex *mutex)\n\n\n初始化互斥体\nint MutexInit(Mutex mutex, int attr, char name)\n\n\n获取互斥体\nint MutexAcquire(Mutex *mutex)\n\n\n释放互斥体\nint MutexRelease(Mutex *mutex)\n\n\n尝试获取互斥体\nint MutexTryAcquire(Mutex *mutex)\n\n\n创建条件变量\nCondition ConditionCreate(int attr, char name)\n\n\n删除条件变量\nint ConditionDelete(Condition *cond)\n\n\n初始化条件变量\nint ConditionInit(Condition cond, int attr, char name)\n\n\n休眠等待条件变量\nint ConditionSleep(Condition cond, Mutex mutex)\n\n\n唤醒休眠等待条件的单个线程\nint ConditionWake(Condition *cond)\n\n\n唤醒休眠等待条件的全部线程\nint ConditionWakeAll(Condition *cond)\n\n\n分配一个tls\nint TlsAlloc(void)\n\n\n释放一个tls\nint TlsFree(int tlsIndex)\n\n\n设置tls的值\nint TlsSetValue(int tlsIndex, void *value)\n\n\n获取tls的值\nvoid TlsGetValue(int tlsIndex)\n\n\n\n内存管理\n\n\n\n功能\n函数\n\n\n\n\n分配内存\nvoid *MemAlloc(USize size)\n\n\n释放内存\nint MemFree(void *object)\n\n\n映射内存\nvoid MemMap(void addr, USize size, int attr)\n\n\n解除映射内存\nint MemUnmap(void *addr)\n\n\n复制内存\nvoid MemCopy(void dest, void src, USize size)\n\n\n移动内存\nvoid MemMove(void dest, void src, USize size)\n\n\n填充内存\nvoid MemFill(void *addr, USize size, U8 value)\n\n\n清空内存\nvoid MemZero(void *addr, USize size)\n\n\n\n时间管理\n\n\n\n功能\n函数\n\n\n\n\n获取当前的时间\nvoid TimeGetCurrent(TimeSytem *time)\n\n\n设置当前的时间\nvoid TimeSetCurrent(TimeSytem *time)\n\n\n获取系统运行的时间\nUSize TimeGetClock(void)\n\n\n\n文件系统\n\n\n\n功能\n函数\n\n\n\n\n创建文件\nNX_Error NX_FileCreate(char *path, int attr)\n\n\n删除文件\nNX_Error NX_FileDelete(char *path)\n\n\n打开文件\nNX_FD NX_FileOpen(char *path, int flags, int attr)\n\n\n关闭文件\nNX_Error NX_FileClose(NX_FD fd)\n\n\n读取文件\nSSize NX_FileRead(NX_FD fd, void *buf, USize bytes)\n\n\n写入文件\nSSize NX_FileWrite(NX_FD fd, void *buf, USize bytes)\n\n\n索引文件\nOffset NX_FileSeek(NX_FD fd, Offset offset, int seekMethod)\n\n\n获取文件偏移\nOffset NX_FileTellOffset(NX_FD fd)\n\n\n检查文件结束\nNX_Bool NX_FileIsEnd(NX_FD fd)\n\n\n检查文件结束\nNX_Bool NX_FileAccess(char *path, int attr)\n\n\n创建目录\nNX_Bool NX_DirectoryCreate(char *path, int attr)\n\n\n删除目录\nNX_Bool NX_DirectoryDelete(char *path)\n\n\n打开目录\nNX_Dir DirectoryOpen(char *path, int flags)\n\n\n关闭目录\nNX_Error DirectoryClose(NX_Dir dir)\n\n\n读取目录\nNX_DirEntry *DirectoryRead(NX_Dir dir)\n\n\n重置读取位置\nNX_Error DirectoryRewind(NX_Dir dir)\n\n\n\n网络系统\n参考socket套接字接口设计\n\n\n\n功能\n函数\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n设备管理\n\n\n\n功能\n函数\n\n\n\n\n创建设备\nint DeviceCreate(char *path, int attr)\n\n\n删除设备\nint DeviceDelete(char *path)\n\n\n打开设备\nint DeviceOpen(char *path, int flags)\n\n\n关闭设备\nint DeviceClose(int dev)\n\n\n读取设备\nISize DeviceRead(int dev, void *buf, USize len, Offset offset)\n\n\n写入设备\nISize DeviceWrite(int dev, void *buf, USize len, Offset offset)\n\n\n写入设备\nISize DeviceControl(int dev, int cmd, void *arg)\n\n\n\n枢纽系统\n等hub system设计好了再设计接口,目前还没有概念\n\n\n\n功能\n函数\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n图形系统\n暂不设计,等内核基本功能完成后再设计\n\n\n\n功能\n函数\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n安全管理\n暂不需要\n\n\n\n功能\n函数\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n用户态驱动框架\n等内核基础功能完成后实现\n\n\n\n功能\n函数\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"},"tutorial/code-style.html":{"url":"tutorial/code-style.html","title":"代码风格","keywords":"","body":"NXOS 编程风格\n本文档是关于NXOS的代码编程风格的描述。开发者必须遵守本文档规范进行开发。NXOS系统内核使用C语言作为主要开发语言,因此以下规则仅仅适用于C语言代码。\n1.目录名称\n目录名称采用首字母大写的形式,子目录应该是属于父目录的内容,需要有相关性。例如:Drivers/Disk/\n2.文件名称\n文件名称也是使用首字母大写,如果有缩写,可以全部都大写。文件命名尽量不要使用通用化、使用频率高的名称。例如:MutexLock.c\n3.头文件定义\nC语言头文件为了避免多次重复包含,需要定义一个符号。这个符号的定义形式请采用如下的风格:\n#ifndef __FILE__\n#define __FILE__\n/* header file content */\n#endif /* __FILE__ */\n\n即定义的符号两侧采用 \"_\" 以避免重名,另外也可以根据文件名中是否包含多个词语而采用 \"\" 连接起来。例如:\n__DRIVER_KEYBOARD__\n4.头文件注释\n在每个源文件文件头上,应该包括相应的版权信息,文件描述,Change Log 记录:\n/**\n * Copyright (c) 2018-2021, BookOS Development Team\n * SPDX-License-Identifier: Apache-2.0\n * \n * Contains: This file is a code style example\n * \n * Change Logs:\n * Date Author Notes\n * 2021-9-12 JasonHu Init\n * 2021-10-1 JasonHu Add xxx\n */\n\n例如采用如上的形式。\n5.变量命名\n变量采用小驼峰命名风格,即首字母小写,后续单词首字母大写,例如:\nmyThread, tmpFileBuffer\n\n6.函数命名\n函数采用大驼峰命名风格,即每个单词的首字母都大写,如果单词是用的缩写,那么单词之间需要用\"_\"隔开,例如:\nThreadFindByName\nVFS_CreateFile\n\n如果函数参数为空,必须使用void作为入口函数,例如:\nCpu *CpuGetCurrent(void)\n\n7.结构体定义\n结构体命名使用大驼峰风格,结构体成员使用小驼峰命名,如果成员是函数指针,则使用大驼峰。\nstruct SoundDevice\n{\n char name[SOUND_DEVICE_NAME_LEN];\n int reference;\n void (*Write)(void *buffer, NX_Size len);\n};\n\n其中\"{\"和\"}\"需要单独使用一行。\n结构体的类型定义是为了消除struct关键字,可以和结构体名一致。\ntypedef struct SoundDevice SoundDevice;\n\n如果需要在类型定义中使用指针,则需要使用Ptr后缀或者其他可以表达意思的单词指明。\ntypedef struct Device *DevicePtr;\n\n8.枚举定义\n枚举结构名也是用大驼峰,枚举成员使用全大写,单词间用\"_\"隔开。\nenum SoundType\n{\n SOUND_AC97,\n SOUND_PC,\n SOUND_HD,\n};\ntypedef enum SoundType SoundType;\n\n9.宏定义\n使用大写作为名字,单词间使用\"_\"隔开,例如:\n#define DEVICE_NAME_LEN 32\n\n当宏需要使用多行的时候,则使用空格+\"\\\"的形式进行换行,例如:\n#define ConsolePrintColor(color, str) \\\n ConsoleSetColor(color); \\\n ConsolePrint(str); \\\n ConsoleRestoreColor()\n\n10.注释编写\n请使用英文做为注释,使用中文注释将意味着在编写代码时需要来回不停的切换中英文输入法从而打断编写代码的思路。并且使用英文注释也能够比较好的与中国以外的技术者进行交流。除非必须引用原来的文本的时候,就可以写中文。\n源代码的注释不应该过多,更多的说明应该是代码做了什么,仅当个别关键点才需要一些相应提示性的注释以解释一段复杂的算法它是如何工作的。对语句的注释只能写在它的上方或右方,其他位置都是非法的。\n注意,\"//\"注释只能放到右边。\n/* Single line comment */\n/**\n * Multi-line comments \n * Line1\n * Line2\n */\n\nbufSize = 16; // set buffer Size\n11.缩进以及分行\n缩进请采用 4 个空格的方式。如果没有什么特殊意义,请在 \"{\" 后进行分行,并在下一行都采用缩进的方式,例如:\n if (condition)\n {\n /* xxx */\n }\n\n唯一的例外是 switch 语句,switch-case 语句采用 case 语句与 switch 对齐的方式, 例如:\n switch (data)\n {\n case data1:\n break;\n case data2:\n break;\n default:\n break;\n }\n\n12.大括号与空格\n从代码阅读角度,建议每个大括号单独占用一行,而不是跟在语句的后面,例如:\n if (condition)\n {\n /* xxx */\n }\n\n匹配的大括号单独占用一行,代码阅读起来就会有相应的层次而不会容易出现混淆的情况。空格建议在非函数方式的括号调用前留一个空格以和前面的进行区分,例如:\n if (x \n建议在括号前留出一个空格(涉及的包括 if、for、while、switch 语句),而运算表达式中,运算符与字符串间留一个空格。另外,不要在括号的表达式两侧留空格,例如:\n /* X: Bad!!! */\n if ( x \n有一个例外,就是如果遇到循环函数,里面不会执行代码的情况,括号就直接写在右边。\n while (x \n13.函数指针类型定义\n在使用函数指针类型定义的时候,需要使用Handler后缀,来表示是一个处理函数。\ntypedef void (*SoundCallbackHandler)(void *buffer, NX_Size len);\n\nSoundCallbackHandler sndHandler;\n\n14.函数参数太多\n当函数参数过多的时候,一行写不下,那么就需要把每个参数写成一行。\nNX_Thread NX_CreateThread(char *threadName,\n ThreadHandler threadHandler,\n void *param,\n void *stackBase,\n NX_Size stackSize,\n int priority)\n{\n ... \n}\n\n15.宏条件定义\n当使用宏条件#if, #else, #endif这种时,需要在开头和结尾后面写上注释来帮助开发这快速找到对应的宏。\n#ifdef NX_HAS_SMP\nxxx\n#else\n#ifdef NX_HAS_ONECORE\nyyy\n#endif /* NX_HAS_ONECORE */\n#endif /* NX_HAS_SMP */\n\n总结\n相信看到最后,您已经对我们的编程规范有了一定的了解,那么就开始您的NXOS开发之旅吧!\n"},"tutorial/commit-rule.html":{"url":"tutorial/commit-rule.html","title":"提交规则","keywords":"","body":"代码提交日志规则CommitRule\n当我们添加代码要提交到git仓库中时,我们需要统一下规范,这样不会显得整个项目乱糟糟的,当然是需要花点时间来学习和改变的。每次提交的代码尽量短小,涉及范围不要太广,专注于某个领域。\n每次提交,Commit message 都包括两个部分:header和body。\n(): \n\n\n\n其中,header 是必需的,body 可以省略。\n不管是哪一个部分,任何一行都不得超过72个字符(或100个字符)。这是为了避免自动换行影响美观。\nHeader\nHeader部分只有一行,包括三个字段:type(必需)、scope(可选)和subject(必需)。\ntype\n用于说明 commit 的类别,只允许使用下面7个标识。\n\nfeat:新功能(feature)\nfix:修补bug\ndocs:文档(documentation)\nstyle: 格式(不影响代码运行的变动)\nrefactor:重构(即不是新增功能,也不是修改bug的代码变动)\ntest:增加测试\nbuild : 改变了build工具 如 xbuild改成了xmake\nrevert : 撤销上一次的 commit\nchore : 构建过程或辅助工具的变动,比如把grub改成了UEFI。\n\n如果type为feat和fix,则该 commit 将肯定出现在 Change log 之中。其他情况(docs、chore、style、refactor、test)由你决定,要不要放入 Change log,建议是不要。\nscope\nscope用于说明 commit 影响的范围,比如文件系统,进程管理,内存管理等等,视项目不同而不同。\n例如在mm,thread,fs等。\n如果你的修改影响了不止一个scope,你可以使用*代替。\nsubject\nsubject是 commit 目的的简短描述,不超过50个字符。\n其他注意事项:\n\n以动词开头,使用第一人称现在时,比如change,而不是changed或changes\n第一个字母小写\n结尾不加句号(.)\n\nBody\nBody 部分是对本次 commit 的详细描述,可以分成多行。下面是一个范例。\nAdd fatfs, suport fat12, fat16, fat32, exfat.\n\n- fat12: used for floppy\n- fat32: used for sdcard/harddisk\n\n有两个注意点:\n\n使用第一人称现在时,比如使用change而不是changed或changes。\n永远别忘了第2行是空行\n应该说明代码变动的动机,以及与以前行为的对比。\n\n举例\nfeat(mm): add buddy system\n\nAdd simple buddy system code, it works weel.\nfix(mm): bug on buddy alloc page\ndocs(mm): add buddy system doc\nstyle(*): add NX_ prefix for all kernel function\nrefactor(mm): update buddy system\ntest(mm): add utest for buddy system\nrevert: feat(mm): add buddy system\n"},"tutorial/menuconfig.html":{"url":"tutorial/menuconfig.html","title":"菜单配置","keywords":"","body":"菜单配置\nmenuconfig简介\nmenuconfig是一个可以在终端显示的图形化配置界面,他不仅可以极大的方便我们对于配置文件的修改, 还能自动处理依赖关系。\n在NXOS中使用menuconfig\nNXOS使用了一个python开发的menuconfig,它的跨平台性以及易用性成为了我们的首选。\n对于开发者而言,我们已经做好了配置,你只需要知道如何去使用即可。\n在根目录中,打开一个终端,在配置了环境变量之后,就可以使用配置了。\n\n更新配置文件\n当你要使用某个平台的配置时,需要通过设置默认配置来进行选择。\nmake defconfig\n\n\n进行菜单配置,就可以选择你想要的功能或者进行某些功能的配置。配置完后,可以根据菜单的提示进行退出或者保存。\nmake menuconfig\n\n\n完成配置后,就可以进行编译了,编译的时候就会根据最新的配置进行编译。\n# 只编译\nmake\n# 编译并运行\nmake run\n\n\n最后,如果想要保存当前的配置到选中的平台,则需要在执行save操作才行。操作完后,你所修改的配置就保存了,当切换到其它平台后,这个配置依然存在,只需要重复第一步,更新一下配置即可。\nmake saveconfig\n\n\n\n"},"tutorial/toolchains.html":{"url":"tutorial/toolchains.html","title":"工具链","keywords":"","body":"工具链\n本文档存放了工具链的下载地址,搭建编译环境的时候需要下载工具链后再进行编译。\n一、Windows环境工具\n\n下载工具链\n\nx86-64/i386工具链:\n服务器下载(较慢)\n百度网盘链接,提取码:NXOS\nrisc-v64工具链:\n服务器下载(较慢)\n百度网盘链接,提取码:NXOS\n\n解压到工具目录下面\n\n下载到本地后,需要手动解压到一个目录下面,然后对工具链的bin路径配置环境变量。\n例如:\n解压到路径:nxos-toolchains\\x86_64-elf-gcc\n配置环境变量时的路径:nxos-toolchains\\x86_64-elf-gcc\\bin\n二、Linux环境工具\nLinux工具链只需要从软件包管理器下载安装即可:\nx86-64/i386工具链:apt install gcc\nrisc-v64/32工具链: apt install gcc-riscv64-unknown-elf\n"},"tutorial/utest.html":{"url":"tutorial/utest.html","title":"单元测试","keywords":"","body":"测试\n单元测试\n针对函数单元进行测试,测试函数的基本功能,稳定性,健壮性,覆盖率。\n着重点:参数,返回值,功能。\n/* 最小的单元测试 */\nNX_TEST(TestUnitName)\n{\n ASSERT_TRUE(...)\n ASSERT_FALSE(...)\n\n EXCEPT_TRUE(...)\n EXCEPT_FALSE(...)\n}\n\n/* 进入单元时执行 */\nNX_TEST_SETUP(TestUnitName)\n{\n\n}\n\n/* 退出单元时执行 */\nNX_TEST_CLEAN(TestUnitName)\n{\n\n}\n\n/* 单元测试表,填写要测试的单元 */\nNX_TEST_TABLE(TestCaseName)\n{\n NX_TEST_UNIT(TestUnitName), /* 不带setup和clean的单元 */\n NX_TEST_UNIT_SETUP(TestUnitName), /* 带setup的单元 */\n NX_TEST_UNIT_CLEAN(TestUnitName), /* 带clean的单元 */\n NX_TEST_UNIT_SETUP_CLEAN(TestUnitName), /* 带setup和clean的单元 */\n};\n\n/* 进入一个单元测试时执行 */\nNX_TEST_CASE_SETUP(TestCaseName)\n{\n return NX_EOK;\n}\n\n/* 退出一个单元测试时执行 */\nNX_TEST_CASE_CLEAN(TestCaseName)\n{\n return NX_EOK;\n}\n\n/* 定义一个单元测试 */\nNX_TEST_CASE(TestCaseName);\n\n举例:单元测试自身测试\nNX_TEST(Test)\n{\n NX_ASSERT_TRUE(1);\n NX_ASSERT_TRUE(NX_True);\n NX_ASSERT_FALSE(0);\n NX_ASSERT_FALSE(NX_False);\n}\n\nNX_TEST(Test1)\n{\n NX_ASSERT_EQ(1, 1);\n NX_ASSERT_NE(0, 1);\n\n NX_ASSERT_LT(3, 5);\n NX_ASSERT_LE(3, 3);\n NX_ASSERT_LE(3, 4);\n NX_ASSERT_GT(4, 3);\n NX_ASSERT_GE(3, 3);\n\n char *p = NX_NULL;\n NX_ASSERT_NULL(p);\n char *q = (char *) 0x1000;\n NX_ASSERT_NOT_NULL(q);\n}\n\nNX_TEST(Test2)\n{\n NX_ASSERT_IN_RANGE(1, 0, 5);\n NX_ASSERT_IN_RANGE(4, 0, 5);\n NX_ASSERT_IN_RANGE(1, 1, 5);\n NX_ASSERT_IN_RANGE(5, 1, 5);\n\n NX_ASSERT_NI_RANGE(1, 2, 5);\n NX_ASSERT_NI_RANGE(0, 1, 5);\n NX_ASSERT_NI_RANGE(6, 1, 5);\n NX_ASSERT_NI_RANGE(5, 1, 4);\n}\n\nNX_TEST(Test3)\n{\n NX_ASSERT_STREQ(\"hello\", \"hello\");\n char *s = \"world!\";\n NX_ASSERT_STREQ(s, \"world!\");\n\n char buf0[32] = {0x10, 0x20, 0x30,};\n char buf1[32] = {0x10, 0x20, 0x30,};\n NX_ASSERT_BUFEQ(buf0, buf1, 32);\n\n NX_ASSERT_STRNE(\"hello\", \"world\");\n s = \"hello!\";\n NX_ASSERT_STRNE(s, \"world!\");\n\n char buf2[32] = {0x40, 0x50, 0x60,};\n NX_ASSERT_BUFNE(buf1, buf2, 32);\n}\n\nNX_TEST_SETUP(Test)\n{\n NX_ASSERT_TRUE(1);\n}\n\nNX_TEST_CLEAN(Test)\n{\n NX_ASSERT_FALSE(0);\n}\n\nNX_TEST_TABLE(UTest)\n{\n NX_TEST_UNIT(Test),\n NX_TEST_UNIT_SETUP_CLEAN(Test),\n NX_TEST_UNIT(Test1),\n NX_TEST_UNIT(Test2),\n NX_TEST_UNIT(Test3),\n};\n\nNX_TEST_CASE_SETUP(UTest)\n{\n NX_ASSERT_TRUE(1);\n return NX_EOK;\n}\n\nNX_TEST_CASE_CLEAN(UTest)\n{\n NX_ASSERT_FALSE(0);\n return NX_EOK;\n}\n\nNX_TEST_CASE(UTest);\n\n最精简框架:\nNX_TEST(yyy)\n{\n}\n\nNX_TEST_TABLE(xxx)\n{\n NX_TEST_UNIT(yyy),\n};\n\nNX_TEST_CASE(xxx);\n\n使用方法\n在menuconfig中,打开单元测试功能,选取需要测试的单元,退出保存。\n在命令行中输入命令即可开始测试:\nmake run TC=y # TC是TestCase的缩写,表示启用测试案例。\n"}}} \ No newline at end of file diff --git a/_book/tutorial/code-style.html b/_book/tutorial/code-style.html new file mode 100644 index 0000000000000000000000000000000000000000..46fc9ed12708f98a6b94c7a687e08403dc553f2b --- /dev/null +++ b/_book/tutorial/code-style.html @@ -0,0 +1,852 @@ + + + + + + + 代码风格 · book for nxos + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                    +
                                    + + + + + + + + +
                                    + +
                                    + +
                                    + + + + + + + + +
                                    +
                                    + +
                                    +
                                    + +
                                    + +

                                    NXOS 编程风格

                                    +

                                    本文档是关于NXOS的代码编程风格的描述。开发者必须遵守本文档规范进行开发。NXOS系统内核使用C语言作为主要开发语言,因此以下规则仅仅适用于C语言代码。

                                    +

                                    1.目录名称

                                    +

                                    目录名称采用首字母大写的形式,子目录应该是属于父目录的内容,需要有相关性。例如:Drivers/Disk/

                                    +

                                    2.文件名称

                                    +

                                    文件名称也是使用首字母大写,如果有缩写,可以全部都大写。文件命名尽量不要使用通用化、使用频率高的名称。例如:MutexLock.c

                                    +

                                    3.头文件定义

                                    +

                                    C语言头文件为了避免多次重复包含,需要定义一个符号。这个符号的定义形式请采用如下的风格:

                                    +
                                    #ifndef __FILE__
                                    +#define __FILE__
                                    +/* header file content */
                                    +#endif /* __FILE__ */
                                    +
                                    +

                                    即定义的符号两侧采用 "_" 以避免重名,另外也可以根据文件名中是否包含多个词语而采用 "" 连接起来。例如:

                                    +
                                    __DRIVER_KEYBOARD__
                                    +

                                    4.头文件注释

                                    +

                                    在每个源文件文件头上,应该包括相应的版权信息,文件描述,Change Log 记录:

                                    +
                                    /**
                                    + * Copyright (c) 2018-2021, BookOS Development Team
                                    + * SPDX-License-Identifier: Apache-2.0
                                    + * 
                                    + * Contains: This file is a code style example
                                    + * 
                                    + * Change Logs:
                                    + * Date           Author            Notes
                                    + * 2021-9-12      JasonHu           Init
                                    + * 2021-10-1      JasonHu           Add xxx
                                    + */
                                    +
                                    +

                                    例如采用如上的形式。

                                    +

                                    5.变量命名

                                    +

                                    变量采用小驼峰命名风格,即首字母小写,后续单词首字母大写,例如:

                                    +
                                    myThread, tmpFileBuffer
                                    +
                                    +

                                    6.函数命名

                                    +

                                    函数采用大驼峰命名风格,即每个单词的首字母都大写,如果单词是用的缩写,那么单词之间需要用"_"隔开,例如:

                                    +
                                    ThreadFindByName
                                    +VFS_CreateFile
                                    +
                                    +

                                    如果函数参数为空,必须使用void作为入口函数,例如:

                                    +
                                    Cpu *CpuGetCurrent(void)
                                    +
                                    +

                                    7.结构体定义

                                    +

                                    结构体命名使用大驼峰风格,结构体成员使用小驼峰命名,如果成员是函数指针,则使用大驼峰。

                                    +
                                    struct SoundDevice
                                    +{
                                    +    char name[SOUND_DEVICE_NAME_LEN];
                                    +    int reference;
                                    +    void (*Write)(void *buffer, NX_Size len);
                                    +};
                                    +
                                    +

                                    其中"{"和"}"需要单独使用一行

                                    +

                                    结构体的类型定义是为了消除struct关键字,可以和结构体名一致。

                                    +
                                    typedef struct SoundDevice SoundDevice;
                                    +
                                    +

                                    如果需要在类型定义中使用指针,则需要使用Ptr后缀或者其他可以表达意思的单词指明。

                                    +
                                    typedef struct Device *DevicePtr;
                                    +
                                    +

                                    8.枚举定义

                                    +

                                    枚举结构名也是用大驼峰,枚举成员使用全大写,单词间用"_"隔开。

                                    +
                                    enum SoundType
                                    +{
                                    +    SOUND_AC97,
                                    +    SOUND_PC,
                                    +    SOUND_HD,
                                    +};
                                    +typedef enum SoundType SoundType;
                                    +
                                    +

                                    9.宏定义

                                    +

                                    使用大写作为名字,单词间使用"_"隔开,例如:

                                    +
                                    #define DEVICE_NAME_LEN    32
                                    +
                                    +

                                    当宏需要使用多行的时候,则使用空格+"\"的形式进行换行,例如:

                                    +
                                    #define ConsolePrintColor(color, str) \
                                    +    ConsoleSetColor(color); \
                                    +    ConsolePrint(str); \
                                    +    ConsoleRestoreColor()
                                    +
                                    +

                                    10.注释编写

                                    +

                                    请使用英文做为注释,使用中文注释将意味着在编写代码时需要来回不停的切换中英文输入法从而打断编写代码的思路。并且使用英文注释也能够比较好的与中国以外的技术者进行交流。除非必须引用原来的文本的时候,就可以写中文。

                                    +

                                    源代码的注释不应该过多,更多的说明应该是代码做了什么,仅当个别关键点才需要一些相应提示性的注释以解释一段复杂的算法它是如何工作的。对语句的注释只能写在它的上方或右方,其他位置都是非法的。

                                    +

                                    注意,"//"注释只能放到右边。

                                    +
                                    /* Single line comment  */
                                    +/**
                                    + * Multi-line comments 
                                    + * Line1
                                    + * Line2
                                    + */
                                    +
                                    +bufSize = 16;    // set buffer Size
                                    +

                                    11.缩进以及分行

                                    +

                                    缩进请采用 4 个空格的方式。如果没有什么特殊意义,请在 "{" 后进行分行,并在下一行都采用缩进的方式,例如:

                                    +
                                        if (condition)
                                    +    {
                                    +        /* xxx */
                                    +    }
                                    +
                                    +

                                    唯一的例外是 switch 语句,switch-case 语句采用 case 语句与 switch 对齐的方式, 例如:

                                    +
                                        switch (data)
                                    +    {
                                    +    case data1:
                                    +        break;
                                    +    case data2:
                                    +        break;
                                    +    default:
                                    +        break;
                                    +    }
                                    +
                                    +

                                    12.大括号与空格

                                    +

                                    从代码阅读角度,建议每个大括号单独占用一行,而不是跟在语句的后面,例如:

                                    +
                                        if (condition)
                                    +    {
                                    +        /* xxx */
                                    +    }
                                    +
                                    +

                                    匹配的大括号单独占用一行,代码阅读起来就会有相应的层次而不会容易出现混淆的情况。空格建议在非函数方式的括号调用前留一个空格以和前面的进行区分,例如:

                                    +
                                        if (x <= y)
                                    +    {
                                    +        /* xxx */
                                    +    }
                                    +
                                    +    for (i = 0; i < MAX_CPU_NR; i++)
                                    +    {
                                    +        /* xxx */
                                    +    }
                                    +
                                    +

                                    建议在括号前留出一个空格(涉及的包括 if、for、while、switch 语句),而运算表达式中,运算符与字符串间留一个空格。另外,不要在括号的表达式两侧留空格,例如:

                                    +
                                        /* X: Bad!!! */
                                    +    if ( x <= y )
                                    +    {
                                    +        /* xxx */
                                    +    }
                                    +
                                    +    /* V: Good! */
                                    +    if (x <= y)
                                    +    {
                                    +        /* xxx */
                                    +    }
                                    +
                                    +

                                    有一个例外,就是如果遇到循环函数,里面不会执行代码的情况,括号就直接写在右边。

                                    +
                                        while (x < y) {}
                                    +    for (;;) {}
                                    +
                                    +

                                    13.函数指针类型定义

                                    +

                                    在使用函数指针类型定义的时候,需要使用Handler后缀,来表示是一个处理函数。

                                    +
                                    typedef void (*SoundCallbackHandler)(void *buffer, NX_Size len);
                                    +
                                    +SoundCallbackHandler sndHandler;
                                    +
                                    +

                                    14.函数参数太多

                                    +

                                    当函数参数过多的时候,一行写不下,那么就需要把每个参数写成一行。

                                    +
                                    NX_Thread NX_CreateThread(char *threadName,
                                    +    ThreadHandler threadHandler,
                                    +    void *param,
                                    +    void *stackBase,
                                    +    NX_Size stackSize,
                                    +    int priority)
                                    +{
                                    +    ...   
                                    +}
                                    +
                                    +

                                    15.宏条件定义

                                    +

                                    当使用宏条件#if, #else, #endif这种时,需要在开头和结尾后面写上注释来帮助开发这快速找到对应的宏。

                                    +
                                    #ifdef NX_HAS_SMP
                                    +xxx
                                    +#else
                                    +#ifdef NX_HAS_ONECORE
                                    +yyy
                                    +#endif    /* NX_HAS_ONECORE */
                                    +#endif    /* NX_HAS_SMP */
                                    +
                                    +

                                    总结

                                    +

                                    相信看到最后,您已经对我们的编程规范有了一定的了解,那么就开始您的NXOS开发之旅吧!

                                    + + +
                                    + +
                                    +
                                    +
                                    + +

                                    results matching ""

                                    +
                                      + +
                                      +
                                      + +

                                      No results matching ""

                                      + +
                                      +
                                      +
                                      + +
                                      +
                                      + +
                                      + + + + + + + + + + +
                                      + + +
                                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_book/tutorial/commit-rule.html b/_book/tutorial/commit-rule.html new file mode 100644 index 0000000000000000000000000000000000000000..78c6efb2edb8068d6c150cca1d71043961fe1c25 --- /dev/null +++ b/_book/tutorial/commit-rule.html @@ -0,0 +1,745 @@ + + + + + + + 提交规则 · book for nxos + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                      +
                                      + + + + + + + + +
                                      + +
                                      + +
                                      + + + + + + + + +
                                      +
                                      + +
                                      +
                                      + +
                                      + +

                                      代码提交日志规则CommitRule

                                      +

                                      当我们添加代码要提交到git仓库中时,我们需要统一下规范,这样不会显得整个项目乱糟糟的,当然是需要花点时间来学习和改变的。每次提交的代码尽量短小,涉及范围不要太广,专注于某个领域。

                                      +

                                      每次提交,Commit message 都包括两个部分:header和body。

                                      +
                                      <type>(<scope>): <subject>
                                      +<BLANK LINE>
                                      +<body>
                                      +
                                      +

                                      其中,header 是必需的,body 可以省略。 +不管是哪一个部分,任何一行都不得超过72个字符(或100个字符)。这是为了避免自动换行影响美观。

                                      + +

                                      Header部分只有一行,包括三个字段:type(必需)、scope(可选)和subject(必需)。

                                      +

                                      type

                                      +

                                      用于说明 commit 的类别,只允许使用下面7个标识。

                                      +
                                        +
                                      • feat:新功能(feature)
                                      • +
                                      • fix:修补bug
                                      • +
                                      • docs:文档(documentation)
                                      • +
                                      • style: 格式(不影响代码运行的变动)
                                      • +
                                      • refactor:重构(即不是新增功能,也不是修改bug的代码变动)
                                      • +
                                      • test:增加测试
                                      • +
                                      • build : 改变了build工具 如 xbuild改成了xmake
                                      • +
                                      • revert : 撤销上一次的 commit
                                      • +
                                      • chore : 构建过程或辅助工具的变动,比如把grub改成了UEFI。
                                      • +
                                      +

                                      如果type为featfix,则该 commit 将肯定出现在 Change log 之中。其他情况(docschorestylerefactortest)由你决定,要不要放入 Change log,建议是不要。

                                      +

                                      scope

                                      +

                                      scope用于说明 commit 影响的范围,比如文件系统,进程管理,内存管理等等,视项目不同而不同。

                                      +

                                      例如在mm,thread,fs等。

                                      +

                                      如果你的修改影响了不止一个scope,你可以使用*代替。

                                      +

                                      subject

                                      +

                                      subject是 commit 目的的简短描述,不超过50个字符。

                                      +

                                      其他注意事项:

                                      +
                                        +
                                      • 以动词开头,使用第一人称现在时,比如change,而不是changed或changes
                                      • +
                                      • 第一个字母小写
                                      • +
                                      • 结尾不加句号(.)
                                      • +
                                      +

                                      Body

                                      +

                                      Body 部分是对本次 commit 的详细描述,可以分成多行。下面是一个范例。

                                      +
                                      Add fatfs, suport fat12, fat16, fat32, exfat.
                                      +
                                      +- fat12: used for floppy
                                      +- fat32: used for sdcard/harddisk
                                      +
                                      +

                                      有两个注意点:

                                      +
                                        +
                                      • 使用第一人称现在时,比如使用change而不是changed或changes。
                                      • +
                                      • 永远别忘了第2行是空行
                                      • +
                                      • 应该说明代码变动的动机,以及与以前行为的对比。
                                      • +
                                      +

                                      举例

                                      +
                                      feat(mm): add buddy system
                                      +
                                      +Add simple buddy system code, it works weel.
                                      +
                                      fix(mm): bug on buddy alloc page
                                      +
                                      docs(mm): add buddy system doc
                                      +
                                      style(*): add NX_ prefix for all kernel function
                                      +
                                      refactor(mm): update buddy system
                                      +
                                      test(mm): add utest for buddy system
                                      +
                                      revert: feat(mm): add buddy system
                                      +
                                      + +
                                      + +
                                      +
                                      +
                                      + +

                                      results matching ""

                                      +
                                        + +
                                        +
                                        + +

                                        No results matching ""

                                        + +
                                        +
                                        +
                                        + +
                                        +
                                        + +
                                        + + + + + + + + + + + + + + +
                                        + + +
                                        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_book/tutorial/menuconfig.html b/_book/tutorial/menuconfig.html new file mode 100644 index 0000000000000000000000000000000000000000..bdc5e4c8a0f7870c9e0b3416cf005a385920f8e5 --- /dev/null +++ b/_book/tutorial/menuconfig.html @@ -0,0 +1,714 @@ + + + + + + + 菜单配置 · book for nxos + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                        +
                                        + + + + + + + + +
                                        + +
                                        + +
                                        + + + + + + + + +
                                        +
                                        + +
                                        +
                                        + +
                                        + +

                                        菜单配置

                                        + +

                                        menuconfig是一个可以在终端显示的图形化配置界面,他不仅可以极大的方便我们对于配置文件的修改, 还能自动处理依赖关系。

                                        +

                                        在NXOS中使用menuconfig

                                        +

                                        NXOS使用了一个python开发的menuconfig,它的跨平台性以及易用性成为了我们的首选。

                                        +

                                        对于开发者而言,我们已经做好了配置,你只需要知道如何去使用即可。

                                        +

                                        在根目录中,打开一个终端,在配置了环境变量之后,就可以使用配置了。

                                        +
                                          +
                                        1. 更新配置文件

                                          +

                                          当你要使用某个平台的配置时,需要通过设置默认配置来进行选择。

                                          +
                                          make defconfig
                                          +
                                          +
                                        2. +
                                        3. 进行菜单配置,就可以选择你想要的功能或者进行某些功能的配置。配置完后,可以根据菜单的提示进行退出或者保存。

                                          +
                                          make menuconfig
                                          +
                                          +
                                        4. +
                                        5. 完成配置后,就可以进行编译了,编译的时候就会根据最新的配置进行编译。

                                          +
                                          # 只编译
                                          +make
                                          +# 编译并运行
                                          +make run
                                          +
                                          +
                                        6. +
                                        7. 最后,如果想要保存当前的配置到选中的平台,则需要在执行save操作才行。操作完后,你所修改的配置就保存了,当切换到其它平台后,这个配置依然存在,只需要重复第一步,更新一下配置即可。

                                          +
                                          make saveconfig
                                          +
                                          +
                                        8. +
                                        + + +
                                        + +
                                        +
                                        +
                                        + +

                                        results matching ""

                                        +
                                          + +
                                          +
                                          + +

                                          No results matching ""

                                          + +
                                          +
                                          +
                                          + +
                                          +
                                          + +
                                          + + + + + + + + + + + + + + +
                                          + + +
                                          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_book/tutorial/quick-start.html b/_book/tutorial/quick-start.html new file mode 100644 index 0000000000000000000000000000000000000000..9765e7777b6997e969b9aadb2370bfd61098c630 --- /dev/null +++ b/_book/tutorial/quick-start.html @@ -0,0 +1,773 @@ + + + + + + + 虚拟平台运行 · book for nxos + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                          +
                                          + + + + + + + + +
                                          + +
                                          + +
                                          + + + + + + + + +
                                          +
                                          + +
                                          +
                                          + +
                                          + +

                                          快速入门

                                          +

                                          欢迎来到NXOS内核!NXOS是一个跨平台的简洁的高性能,高稳定性的操作系统内核,它将应用于桌面操作系统领域,服务器操作系统领域以及移动终端操作系统领域。

                                          +

                                          本文档将带您从入门到劝退。

                                          +

                                          一、开发环境搭建

                                          +

                                          1. 编译器工具链

                                          +

                                          在获取NXOS的系统源码后,您需要下载编译NXOS的工具链(点我跳转),下载好后,进行环境变量的配置。

                                          +

                                          2. 虚拟机

                                          +

                                          我们采用的是世界上最流行的QEMU虚拟机,各种平台都有支持,刚好有我们需要的版本。

                                          +

                                          a. Windows环境

                                          +

                                          下载链接:https://qemu.weilnetz.de/w64/

                                          +

                                          选择最新版本下载即可。下载后,安装到一个路径,再把路径配置到Path系统环境变量中即可。

                                          +

                                          b. Linux环境

                                          +

                                          可以直接在终端中输入命令安装:

                                          +
                                          # Ubuntu/Kali Linux: 
                                          +sudo apt-get install qemu-system-i386
                                          +sudo apt-get install qemu-system-riscv64
                                          +# Red hat/Fedora/Centos: 
                                          +sudo yum install qemu-system-i386
                                          +sudo yum install qemu-system-riscv64
                                          +
                                          +

                                          3. 其他工具

                                          +

                                          其他涉及到的工具:python mtools make git genisoimage mkfs grub2

                                          +

                                          a. Windows环境

                                          +

                                          (cmder) 推荐的一个不错的终端(非必须)下载后安装即可。

                                          +

                                          (python)下载后安装即可。

                                          +

                                          (git)下载后安装即可。

                                          +

                                          为了方便,我们将其他比较小的工具已经打包在一个工具包里面了,下载解压后,手动添加对应的工具到系统环境变量即可。

                                          +

                                          nxos-windows-tools服务器下载(速度较慢,请耐心等待)

                                          +

                                          下载后需要解压出来,然后将每一个目录配置到Path系统环境变量中(最好是配置到环境变量的最前面,避免和其它系统已经存在的工具冲突),解压后您将会有:

                                          +
                                          nxos-windows-tools/
                                          +nxos-windows-tools/genisoimage
                                          +nxos-windows-tools/grub-2.04
                                          +nxos-windows-tools/mkfs
                                          +nxos-windows-tools/mtools
                                          +

                                          b. Linux环境

                                          +

                                          可以直接在终端中输入命令安装:

                                          +
                                          # Ubuntu/Kali Linux: 
                                          +sudo apt-get install python mtools make git genisoimage mkfs grub2 truncate
                                          +# Red hat/Fedora/Centos: 
                                          +sudo yum install python mtools make git genisoimage mkfs grub2 truncate
                                          +
                                          +

                                          二、编译和运行

                                          +

                                          进入到NXOS目录中,在目录中打开一个终端。

                                          +

                                          1. 快速体验

                                          +
                                          # 1. 设置环境变量
                                          +setup.bat # Windows环境
                                          +source setup.sh # linux环境
                                          +
                                          +# 2. 配置环境并运行
                                          +make prepare && make defconfig && make run
                                          +
                                          +
                                            +
                                          • 输入 Ctrl+a x 退出 QEMU
                                          • +
                                          • 输入 Ctrl+d 退出 GDB
                                          • +
                                          +

                                          2. 步骤拆解

                                          +
                                            +
                                          • 设置临时环境变量,在目录中有脚本来设置,直接运行即可。windows使用batlinux使用sh
                                          • +
                                          +
                                          # Windows下设置i386环境并设置PLATFORM=x86-i386
                                          +setup.bat
                                          +# Windows下设置riscv64环境PLATFORM=riscv64-qemu_riscv64
                                          +setup.bat riscv64-qemu_riscv64
                                          +
                                          +# Linux下设置i386环境并设置PLATFORM=x86-i386
                                          +source setup.sh
                                          +# Linux下设置riscv64环境PLATFORM=riscv64-qemu_riscv64
                                          +source setup.sh riscv64-qemu_riscv64
                                          +
                                          +
                                            +
                                          • 为选中的平台做初始化(仅仅第一次编译的时候需要),会为每一个平台下载平台特别需要的工具到平台中。
                                          • +
                                          +
                                          # 第一次执行时,为平台做初始化
                                          +make prepare
                                          +
                                          +
                                            +
                                          • 加载平台的默认配置,会读取选中的平台的默认menuconfig配置到工作区中。
                                          • +
                                          +
                                          make defconfig
                                          +
                                          +
                                            +
                                          • 使用菜单配置进行个性化剪裁。可以选择打开或者关闭某些功能,设置一些变量等。配置完成后需要按ESC键退出,退出后会生成新的配置头文件。
                                          • +
                                          +
                                          make menuconfig
                                          +
                                          +
                                            +
                                          • 编译源码并运行,默认使用QEMU虚拟机模拟运行,按下小写的ctrl+x后再按下a则可以退出QEMU运行。
                                          • +
                                          +
                                          # 第一次编译一个新的平台的时候需要clean一下
                                          +make clean
                                          +# 编译源码并运行
                                          +make run
                                          +# 仅仅编译源码
                                          +make
                                          +
                                          +
                                            +
                                          • 调试完成后,需要将配置信息和文件保存到对应平台中,使得配置永久生效。
                                          • +
                                          +
                                          make saveconfig
                                          +
                                          + + +
                                          + +
                                          +
                                          +
                                          + +

                                          results matching ""

                                          +
                                            + +
                                            +
                                            + +

                                            No results matching ""

                                            + +
                                            +
                                            +
                                            + +
                                            +
                                            + +
                                            + + + + + + +
                                            + + +
                                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_book/tutorial/toolchains.html b/_book/tutorial/toolchains.html new file mode 100644 index 0000000000000000000000000000000000000000..912ac933e4117c14e9060504a250e5607d194b1c --- /dev/null +++ b/_book/tutorial/toolchains.html @@ -0,0 +1,708 @@ + + + + + + + 工具链 · book for nxos + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                            +
                                            + + + + + + + + +
                                            + +
                                            + +
                                            + + + + + + + + +
                                            +
                                            + +
                                            +
                                            + +
                                            + +

                                            工具链

                                            +

                                            本文档存放了工具链的下载地址,搭建编译环境的时候需要下载工具链后再进行编译。

                                            +

                                            一、Windows环境工具

                                            +
                                              +
                                            1. 下载工具链
                                            2. +
                                            +

                                            x86-64/i386工具链:

                                            +

                                            服务器下载(较慢)

                                            +

                                            百度网盘链接,提取码:NXOS

                                            +

                                            risc-v64工具链:

                                            +

                                            服务器下载(较慢)

                                            +

                                            百度网盘链接,提取码:NXOS

                                            +
                                              +
                                            1. 解压到工具目录下面
                                            2. +
                                            +

                                            下载到本地后,需要手动解压到一个目录下面,然后对工具链的bin路径配置环境变量。

                                            +

                                            例如:

                                            +

                                            解压到路径:nxos-toolchains\x86_64-elf-gcc

                                            +

                                            配置环境变量时的路径:nxos-toolchains\x86_64-elf-gcc\bin

                                            +

                                            二、Linux环境工具

                                            +

                                            Linux工具链只需要从软件包管理器下载安装即可:

                                            +

                                            x86-64/i386工具链:apt install gcc

                                            +

                                            risc-v64/32工具链: apt install gcc-riscv64-unknown-elf

                                            + + +
                                            + +
                                            +
                                            +
                                            + +

                                            results matching ""

                                            +
                                              + +
                                              +
                                              + +

                                              No results matching ""

                                              + +
                                              +
                                              +
                                              + +
                                              +
                                              + +
                                              + + + + + + + + + + + + + + +
                                              + + +
                                              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_book/tutorial/utest.html b/_book/tutorial/utest.html new file mode 100644 index 0000000000000000000000000000000000000000..ce66443a42ab379697c9e50e8dacfffd19c682d4 --- /dev/null +++ b/_book/tutorial/utest.html @@ -0,0 +1,835 @@ + + + + + + + 单元测试 · book for nxos + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                              +
                                              + + + + + + + + +
                                              + +
                                              + +
                                              + + + + + + + + +
                                              +
                                              + +
                                              +
                                              + +
                                              + +

                                              测试

                                              +

                                              单元测试

                                              +

                                              针对函数单元进行测试,测试函数的基本功能,稳定性,健壮性,覆盖率。 +着重点:参数,返回值,功能。

                                              +
                                              /* 最小的单元测试 */
                                              +NX_TEST(TestUnitName)
                                              +{
                                              +    ASSERT_TRUE(...)
                                              +    ASSERT_FALSE(...)
                                              +
                                              +    EXCEPT_TRUE(...)
                                              +    EXCEPT_FALSE(...)
                                              +}
                                              +
                                              +/* 进入单元时执行 */
                                              +NX_TEST_SETUP(TestUnitName)
                                              +{
                                              +
                                              +}
                                              +
                                              +/* 退出单元时执行 */
                                              +NX_TEST_CLEAN(TestUnitName)
                                              +{
                                              +
                                              +}
                                              +
                                              +/* 单元测试表,填写要测试的单元 */
                                              +NX_TEST_TABLE(TestCaseName)
                                              +{
                                              +    NX_TEST_UNIT(TestUnitName), /* 不带setup和clean的单元 */
                                              +    NX_TEST_UNIT_SETUP(TestUnitName), /* 带setup的单元 */
                                              +    NX_TEST_UNIT_CLEAN(TestUnitName), /* 带clean的单元 */
                                              +    NX_TEST_UNIT_SETUP_CLEAN(TestUnitName), /* 带setup和clean的单元 */
                                              +};
                                              +
                                              +/* 进入一个单元测试时执行 */
                                              +NX_TEST_CASE_SETUP(TestCaseName)
                                              +{
                                              +    return NX_EOK;
                                              +}
                                              +
                                              +/* 退出一个单元测试时执行 */
                                              +NX_TEST_CASE_CLEAN(TestCaseName)
                                              +{
                                              +    return NX_EOK;
                                              +}
                                              +
                                              +/* 定义一个单元测试 */
                                              +NX_TEST_CASE(TestCaseName);
                                              +
                                              +

                                              举例:单元测试自身测试

                                              +
                                              NX_TEST(Test)
                                              +{
                                              +    NX_ASSERT_TRUE(1);
                                              +    NX_ASSERT_TRUE(NX_True);
                                              +    NX_ASSERT_FALSE(0);
                                              +    NX_ASSERT_FALSE(NX_False);
                                              +}
                                              +
                                              +NX_TEST(Test1)
                                              +{
                                              +    NX_ASSERT_EQ(1, 1);
                                              +    NX_ASSERT_NE(0, 1);
                                              +
                                              +    NX_ASSERT_LT(3, 5);
                                              +    NX_ASSERT_LE(3, 3);
                                              +    NX_ASSERT_LE(3, 4);
                                              +    NX_ASSERT_GT(4, 3);
                                              +    NX_ASSERT_GE(3, 3);
                                              +
                                              +    char *p = NX_NULL;
                                              +    NX_ASSERT_NULL(p);
                                              +    char *q = (char *) 0x1000;
                                              +    NX_ASSERT_NOT_NULL(q);
                                              +}
                                              +
                                              +NX_TEST(Test2)
                                              +{
                                              +    NX_ASSERT_IN_RANGE(1, 0, 5);
                                              +    NX_ASSERT_IN_RANGE(4, 0, 5);
                                              +    NX_ASSERT_IN_RANGE(1, 1, 5);
                                              +    NX_ASSERT_IN_RANGE(5, 1, 5);
                                              +
                                              +    NX_ASSERT_NI_RANGE(1, 2, 5);
                                              +    NX_ASSERT_NI_RANGE(0, 1, 5);
                                              +    NX_ASSERT_NI_RANGE(6, 1, 5);
                                              +    NX_ASSERT_NI_RANGE(5, 1, 4);
                                              +}
                                              +
                                              +NX_TEST(Test3)
                                              +{
                                              +    NX_ASSERT_STREQ("hello", "hello");
                                              +    char *s = "world!";
                                              +    NX_ASSERT_STREQ(s, "world!");
                                              +
                                              +    char buf0[32] = {0x10, 0x20, 0x30,};
                                              +    char buf1[32] = {0x10, 0x20, 0x30,};
                                              +    NX_ASSERT_BUFEQ(buf0, buf1, 32);
                                              +
                                              +    NX_ASSERT_STRNE("hello", "world");
                                              +    s = "hello!";
                                              +    NX_ASSERT_STRNE(s, "world!");
                                              +
                                              +    char buf2[32] = {0x40, 0x50, 0x60,};
                                              +    NX_ASSERT_BUFNE(buf1, buf2, 32);
                                              +}
                                              +
                                              +NX_TEST_SETUP(Test)
                                              +{
                                              +    NX_ASSERT_TRUE(1);
                                              +}
                                              +
                                              +NX_TEST_CLEAN(Test)
                                              +{
                                              +    NX_ASSERT_FALSE(0);
                                              +}
                                              +
                                              +NX_TEST_TABLE(UTest)
                                              +{
                                              +    NX_TEST_UNIT(Test),
                                              +    NX_TEST_UNIT_SETUP_CLEAN(Test),
                                              +    NX_TEST_UNIT(Test1),
                                              +    NX_TEST_UNIT(Test2),
                                              +    NX_TEST_UNIT(Test3),
                                              +};
                                              +
                                              +NX_TEST_CASE_SETUP(UTest)
                                              +{
                                              +    NX_ASSERT_TRUE(1);
                                              +    return NX_EOK;
                                              +}
                                              +
                                              +NX_TEST_CASE_CLEAN(UTest)
                                              +{
                                              +    NX_ASSERT_FALSE(0);
                                              +    return NX_EOK;
                                              +}
                                              +
                                              +NX_TEST_CASE(UTest);
                                              +
                                              +

                                              最精简框架:

                                              +
                                              NX_TEST(yyy)
                                              +{
                                              +}
                                              +
                                              +NX_TEST_TABLE(xxx)
                                              +{
                                              +    NX_TEST_UNIT(yyy),
                                              +};
                                              +
                                              +NX_TEST_CASE(xxx);
                                              +
                                              +

                                              使用方法

                                              +

                                              在menuconfig中,打开单元测试功能,选取需要测试的单元,退出保存。 +在命令行中输入命令即可开始测试:

                                              +
                                              make run TC=y # TC是TestCase的缩写,表示启用测试案例。
                                              +
                                              + +
                                              + +
                                              +
                                              +
                                              + +

                                              results matching ""

                                              +
                                                + +
                                                +
                                                + +

                                                No results matching ""

                                                + +
                                                +
                                                +
                                                + +
                                                +
                                                + +
                                                + + + + + + + + + + +
                                                + + +
                                                + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +