查看: 3283|回复: 11
收起左侧

[DemoCode下载] 新唐NuMicro_M051+小嵌操作系统AIOS例程

[复制链接]

7

主题

17

帖子

51

积分

初级技术员

 楼主| 发表于 2017-3-21 23:35 | 显示全部楼层 |返回版面|阅读模式
开发平台Keil v5+ & IAR
例程代码如下,欢迎朋友们评估使用:




后期若有调整,会在小嵌操作系统官方网站(aios.io)更新;

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册 手机登录

x

87

主题

3670

帖子

1万

积分

资深工程师

发表于 2017-3-22 17:50 | 显示全部楼层 |返回版面
看来新唐在搞这个系统,不错好东西,我要认真学学。
     

62

主题

1990

帖子

6004

积分

高级工程师

发表于 2017-3-22 21:01 | 显示全部楼层 |返回版面
下载看看这个系统有什么好玩的。

75

主题

1930

帖子

5799

积分

高级工程师

发表于 2017-3-22 21:41 | 显示全部楼层 |返回版面
  1. /**********************************************************************************************************
  2. AIOS(Advanced Input Output System) - An Embedded Real Time Operating System (RTOS)
  3. Copyright (C) 2012~2017 SenseRate.Com All rights reserved.
  4. http://www.aios.io -- Documentation, latest information, license and contact details.
  5. http://www.SenseRate.com -- Commercial support, development, porting, licensing and training services.
  6. --------------------------------------------------------------------------------------------------------
  7. Redistribution and use in source and binary forms, with or without modification,
  8. are permitted provided that the following conditions are met:
  9. 1. Redistributions of source code must retain the above copyright notice, this list of
  10. conditions and the following disclaimer.
  11. 2. Redistributions in binary form must reproduce the above copyright notice, this list
  12. of conditions and the following disclaimer in the documentation and/or other materials
  13. provided with the distribution.
  14. 3. Neither the name of the copyright holder nor the names of its contributors may be used
  15. to endorse or promote products derived from this software without specific prior written
  16. permission.
  17. --------------------------------------------------------------------------------------------------------
  18. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  19. "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
  20. THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
  21. PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
  22. CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
  23. EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  24. PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
  25. OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
  26. WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
  27. OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
  28. ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  29. --------------------------------------------------------------------------------------------------------
  30. Notice of Export Control Law
  31. --------------------------------------------------------------------------------------------------------
  32. SenseRate AIOS may be subject to applicable export control laws and regulations, which might
  33. include those applicable to SenseRate AIOS of U.S. and the country in which you are located.
  34. Import, export and usage of SenseRate AIOS in any manner by you shall be in compliance with such
  35. applicable export control laws and regulations.
  36. ***********************************************************************************************************/

  37. #include <stdio.h>
  38. #include "M051Series.h"
  39. //AIOS
  40. #include "AIOS.h"

  41. #define PLLCON_SETTING  CLK_PLLCON_50MHz_HXT
  42. #define PLL_CLOCK       50000000

  43. OSTimerHandle_t                        Timer500msHandle        = NULL;
  44. OSTaskHandle_t                         CtrlTaskHandle                = NULL;
  45. OSTaskHandle_t                         LedTaskHandle                = NULL;
  46. OSSemHandle_t                         LedSemHandle                = NULL;

  47. void CtrlTask( void *pvParameters );
  48. void LedTask( void *pvParameters );
  49. void Timer500ms( void *pvParameters );


  50. void SYS_Init(void)
  51. {
  52.         /*---------------------------------------------------------------------------------------------------------*/
  53.         /* Init System Clock                                                                                       */
  54.         /*---------------------------------------------------------------------------------------------------------*/

  55.         /* Enable Internal RC 22.1184MHz clock */
  56.         CLK->PWRCON |= CLK_PWRCON_OSC22M_EN_Msk;

  57.         /* Waiting for Internal RC clock ready */
  58.         while(!(CLK->CLKSTATUS & CLK_CLKSTATUS_OSC22M_STB_Msk));

  59.         /* Switch HCLK clock source to Internal RC and and HCLK source divide 1 */
  60.         CLK->CLKSEL0 &= ~CLK_CLKSEL0_HCLK_S_Msk;
  61.         CLK->CLKSEL0 |= CLK_CLKSEL0_HCLK_S_HIRC;
  62.         CLK->CLKDIV &= ~CLK_CLKDIV_HCLK_N_Msk;
  63.         CLK->CLKDIV |= CLK_CLKDIV_HCLK(1);

  64.         /* Enable external XTAL 12MHz clock */
  65.         CLK->PWRCON |= CLK_PWRCON_XTL12M_EN_Msk;

  66.         /* Waiting for external XTAL clock ready */
  67.         while(!(CLK->CLKSTATUS & CLK_CLKSTATUS_XTL12M_STB_Msk));

  68.         /* Set core clock as PLL_CLOCK from PLL */
  69.         CLK->PLLCON = PLLCON_SETTING;
  70.         while(!(CLK->CLKSTATUS & CLK_CLKSTATUS_PLL_STB_Msk));
  71.         CLK->CLKSEL0 &= (~CLK_CLKSEL0_HCLK_S_Msk);
  72.         CLK->CLKSEL0 |= CLK_CLKSEL0_HCLK_S_PLL;

  73.         /* Update System Core Clock */
  74.         /* User can use SystemCoreClockUpdate() to calculate PllClock, SystemCoreClock and CycylesPerUs automatically. */
  75.         //SystemCoreClockUpdate();
  76.         PllClock        = PLL_CLOCK;            // PLL
  77.         SystemCoreClock = PLL_CLOCK / 1;        // HCLK
  78.         CyclesPerUs     = PLL_CLOCK / 1000000;  // For SYS_SysTickDelay()

  79.         /* Enable UART module clock */
  80.         CLK->APBCLK |= CLK_APBCLK_UART0_EN_Msk;

  81.         /* Select UART module clock source */
  82.         CLK->CLKSEL1 &= ~CLK_CLKSEL1_UART_S_Msk;
  83.         CLK->CLKSEL1 |= CLK_CLKSEL1_UART_S_HXT;

  84.         /*---------------------------------------------------------------------------------------------------------*/
  85.         /* Init I/O Multi-function                                                                                 */
  86.         /*---------------------------------------------------------------------------------------------------------*/

  87.         /* Set P3 multi-function pins for UART0 RXD , TXD and CKO */
  88.         SYS->P3_MFP &= ~(SYS_MFP_P30_Msk | SYS_MFP_P31_Msk);
  89.         SYS->P3_MFP |= (SYS_MFP_P30_RXD0 | SYS_MFP_P31_TXD0);
  90. }

  91. void UART0_Init()
  92. {
  93.         /*---------------------------------------------------------------------------------------------------------*/
  94.         /* Init UART                                                                                               */
  95.         /*---------------------------------------------------------------------------------------------------------*/
  96.         /* Reset UART0 */
  97.         SYS->IPRSTC2 |=  SYS_IPRSTC2_UART0_RST_Msk;
  98.         SYS->IPRSTC2 &= ~SYS_IPRSTC2_UART0_RST_Msk;

  99.         /* Configure UART0 and set UART0 Baudrate */
  100.         UART0->BAUD = UART_BAUD_MODE2 | UART_BAUD_MODE2_DIVIDER(__HXT, 115200);
  101.         UART0->LCR = UART_WORD_LEN_8 | UART_PARITY_NONE | UART_STOP_BIT_1;
  102. }

  103. static void SetupHardware(void)
  104. {
  105.         /* Unlock protected registers */
  106.         SYS_UnlockReg();

  107.         /* Init System, peripheral clock and multi-function I/O */
  108.         SYS_Init();

  109.         /* Lock protected registers */
  110.         SYS_LockReg();

  111.         /* Init UART0 for printf */
  112.         UART0_Init();

  113.         printf("\n\nCPU [url=home.php?mod=space&uid=72445]@[/url] %dHz\n", SystemCoreClock);

  114.         /*
  115.                 This sample code will blinking LED on NuTiny EVB board of M058SSAN.
  116.                 The I/O for LED is P2.3 or P3.6
  117.         */

  118.         printf("+---------------------------------------+\n");
  119.         printf("|    NuTiny EVB LED Sample Code         |\n");
  120.         printf("+---------------------------------------+\n");

  121.         /* Init P2.3 and P3.6 to be output mode */
  122.         P2->PMD = (P2->PMD & ~(0x3 << 2*3)) | (1 << 2*3);
  123.         P3->PMD = (P3->PMD & ~(0x3 << 2*6)) | (1 << 2*6);  
  124. }

  125. /*---------------------------------------------------------------------------------------------------------*/
  126. /*  Main Function                                                                                          */
  127. /*---------------------------------------------------------------------------------------------------------*/
  128. int32_t main(void)
  129. {
  130.         SetupHardware();

  131.         //创建500ms的定时器,分配定时器服务函数为Timer500ms
  132.         Timer500msHandle = OSTimerCreate(OSM2T(500), OS_TRUE, Timer500ms, NULL, "T500ms");
  133.         //创建信号量
  134.         LedSemHandle        = OSSemCreate(0);
  135.         //创建任务,控制LED灯
  136.         CtrlTaskHandle        = OSTaskCreate(CtrlTask, NULL, OSMINIMAL_STACK_SIZE, OSLOWEAST_PRIORITY+1, "Ctrl" );
  137.         LedTaskHandle        = OSTaskCreate(LedTask, NULL, OSMINIMAL_STACK_SIZE, OSLOWEAST_PRIORITY+1, "Led" );

  138.         OSTimerStart(Timer500msHandle);

  139.         // Start the scheduler.
  140.         OSStart();
  141.                
  142.         //if everything is ok, can't reach here
  143.         for( ;; );  
  144. }

  145. void CtrlTask( void *pvParameters )
  146. {
  147.         for( ;; )
  148.         {
  149.                 OSSemPost(LedSemHandle);       

  150.                 OSTaskSleep( OSM2T(500) );        
  151.         }
  152. }

  153. void LedTask( void *pvParameters )
  154. {
  155.         for( ;; )
  156.         {
  157.                 OSSemPend(LedSemHandle, OSPEND_FOREVER_VALUE);       
  158.                 /* Toggle P2.3 */
  159.                 P23 ^= 1;

  160.                 /* Toggle P3.6 */
  161.                 P36 ^= 1;               
  162.         }
  163. }

  164. void Timer500ms( void *pvParameters )
  165. {
  166.         // 500ms软件定时器.
  167. }
复制代码
     

19

主题

261

帖子

846

积分

高级技术员

发表于 2017-3-23 10:07 | 显示全部楼层 |返回版面
本帖最后由 iwqt1983 于 2017-3-23 10:28 编辑

这个操作系统对存储器的占用还是有太大了,最好做到1-1.5KB的RAM,FLash不要超过6KB  如何做到 官方网站上宣传的“系统占用资源少,最小内核ROM 2K字节,RAM 几百个字节。http://www.senserate.com/dynamic/AIOS-v1.0.0-1.html
请问有使用说明书吗?最好有个详细讲解,大家才可以放心的去使用。
共同发展,共同富裕。

75

主题

1930

帖子

5799

积分

高级工程师

发表于 2017-3-23 11:41 | 显示全部楼层 |返回版面
iwqt1983 发表于 2017-3-23 10:07
这个操作系统对存储器的占用还是有太大了,最好做到1-1.5KB的RAM,FLash不要超过6KB  如何做到 官方网站上 ...

看了官方,有简明使用教程的,确实不错,好东西。

75

主题

1930

帖子

5799

积分

高级工程师

发表于 2017-3-23 11:41 | 显示全部楼层 |返回版面
希望多多的支持各种单片机,另外多多的教程。
     

19

主题

261

帖子

846

积分

高级技术员

发表于 2017-3-23 11:42 | 显示全部楼层 |返回版面
如何精简少内核,希望出个精简单教程,说明使用方法。
共同发展,共同富裕。

5

主题

76

帖子

228

积分

中级技术员

发表于 2017-4-27 23:12 | 显示全部楼层 |返回版面
感谢前辈分享。

2

主题

98

帖子

318

积分

资深技术员

发表于 2017-4-30 16:25 | 显示全部楼层 |返回版面
有没MODBUS的例程

83

主题

1870

帖子

5628

积分

高级工程师

发表于 2017-4-30 23:00 | 显示全部楼层 |返回版面
新出的一块RTOS,而且非常好学。

83

主题

1870

帖子

5628

积分

高级工程师

发表于 2017-4-30 23:12 | 显示全部楼层 |返回版面
什么时候Proteus支持这个仿真就给力了。
您需要登录后才可以回帖 登录 | 注册 手机登录

本版积分规则

分享 快速回复 返回顶部 返回列表