• [问题求助] STM32F103VC移植LiteOS编译报错
    各位大神,我在移植LiteOS到STM32F103VC的过程中,编译报如下错误,能否告知一下应该怎么办?PS:在startup的.s文件startup_stm32f10x_hd.s里面没有看到有配置堆起始和结束地址的地方,是否有其他的.s文件里有然后后面的_get_IPSR能否帮忙解释一下是什么东西?谢谢!
  • [技术干货] 【Demo】Huawei LiteOS + (NB-IoT / WIFI / 2G ) + OceanConnect平台 的端云Demo
    一、Huawei LiteOS 开源代码仓库网址  https://github.com/liteos二、Huawei LiteOS 资料网站(中英文)  https://liteos.github.io/三、Huawei LiteOS + (NB-IoT / WIFI / 2G ) + OceanConnect平台的端云Demo(1)《Huawei LiteOS动手实验室》简介:Huawei LiteOS动手实验室,通过精心设计一站式实战课程,带领学员从0开发一款物联网产品,融合Huawei LiteOS / (NB-IoT or WIFI or 2G) / OceanConnect云平台三大技术领域,直击开发者三大痛点,打通“云-管-端”解决方案。(2)下面是LiteOS / NB-IoT / OceanConnect的端云方案参考案例:【code】Huawei_LiteOS_Demo4in1_v10.rar【源代码】基于LiteOS + NB + OC的解决方案,包括OneTemp(智慧农业)、OneLight(智慧灯杆)、OneGPS(物流跟踪)、OneSmoke(烟感消防)4套解决方案。Lightintensityproject_APP_code_OneLight.zip【源代码】Android Studio手机APP 项目工程OneLight_光强监测_APP.apkOneLight APP安装包 【手把手教程】如何快速获取OceanConnect平台账号?.pdf跟我学从0开始开发一款物联网产品OneLight.pdf跟我学制作Profile.pdf跟我学在线制作编解码插件.pdf跟我学在线模拟NB设备.pdf跟我学使用NB-IoT连接OceanConnect物联网平台.pdf跟我学LiteOS调测OneLight.pdf体验OneLight手机APP.pdfHuawei LiteOS_NB-IoT_OceanConnect物联网开发实战 v2.3.pdf(3)下面是LiteOS / WIFI / OceanConnect的端云方案参考案例:【code】Huawei_LiteOS_DemoSDK_v10.rar【源代码】基于LiteOS + SDK + WIFI + OC的解决方案智慧农业。【手把手教程】OceanConnect平台配置教程:(1)制作profile(2)编解码插件(3)模拟测试IoT平台(4)绑定WIFI设备(5)数据上传和命令下发Demo调试过程:(1)IoT平台新建设备(2)设置为非DTLS模式(3)设置WIFI登陆信息(4)查看IoT平台数据(5)查看串口数据注意:此Demo采用非DTLS,也可以采用加密DTLSHuawei LiteOS_NB-IoT_OceanConnect物联网开发实战 v2.3.pdf(4)下面是LiteOS / 2G / OceanConnect的端云方案参考案例: 【code】LiteOS_SDK_AgentTiny_2G.rar【源代码】基于LiteOS + SDK + 2G + OC的电量监测方案。【手把手教程】OceanConnect平台配置教程(1)profile配置参数(2)编解码配置参数(5)手机APP与OceanConnect平台交互界面:  (6)源代码、软件、教程、文档等下载地址链接:https://pan.baidu.com/s/1DBHwhXWMgWCyDi2xzpJb8g密码:yr1e 
  • [问题求助] LiteOS-master连接云平台,device侧的profile信息如何设置?
    最近在做ARM板连接华为云平台的案例,按照开发流程首先在云平台上创建了NB设备,编写了插件,使用NB设备模拟器绑定了设备,进行了数据的收发模拟在网上找了一个 LiteOS-master 的例程,手头只有407的开发板,因此参照例程中429的代码移植到了407上,做了一个UDP的测试,能够正常的收发数据LiteOS-master例程连接 https://pan.baidu.com/s/174hadMx208RWtXAk9ZWUfA之前没有做过LWM2M,不太了解profile的配置信息该如何填写,只找到了远端IP并且做了修改,其他关于device的信息不知道在什么位置,截取了部分log内容供参考正在查找DHCP服务器,请稍等...........正在获取地址...网卡en的MAC地址为:................2.0.0.72.0.58通过DHCP获取到IP地址..............192.168.1.108通过DHCP获取到子网掩码............255.255.255.0通过DHCP获取到的默认网关..........192.168.1.1[INFO][1024][atiny_init_objects:121] Trying to init objects[lwm2m_init:98] Entering[lwm2m_step:459] timeoutP: 2306079593729152688[lwm2m_step:464] State: STATE_INITIAL[object_getServers:803] Entering[object_getServers:815] objID 0[object_getServers:815] objID 1[object_getServers:815] objID 3[object_getServers:815] objID 4[object_getServers:815] objID 5[object_getServers:815] objID 19[object_getServers:819] number 6[lwm2m_data_new:184] size: 3[lwm2m_data_encode_bool:447] value: false[lwm2m_data_encode_int:311] value: 123[lwm2m_data_encode_int:311] value: 10[lwm2m_data_decode_bool:457] Entering[lwm2m_data_decode_bool:508] result: 1, value: false[lwm2m_data_decode_int:321] Entering[lwm2m_data_decode_int:376] result: 1, value: 123[lwm2m_data_new:184] size: 1[lwm2m_data_encode_int:311] value: 123[lwm2m_data_decode_int:321] Entering[lwm2m_data_decode_int:376] result: 1, value: 123[lwm2m_data_free:202] size: 1[lwm2m_data_new:184] size: 2[lwm2m_data_encode_int:311] value: 50000[lwm2m_data_encode_string:236] "UQ"[lwm2m_data_decode_int:321] Entering[lwm2m_data_decode_int:376] result: 1, value: 50000[lwm2m_data_free:202] size: 2[lwm2m_data_free:202] size: 3[registration_start:515] State: STATE_REGISTER_REQUIRED[object_getRegisterPayloadBufferLength:569] Entering[object_getRegisterPayload:640] Entering[INFO][1157][lwm2m_connect_server:246] Now come into Connection creation in lwm2m_connect_server.[INFO][1167][connection_create:96] now come into connection_create!!![INFO][1173][connection_create:111] uri is coap://139.159.140.34:5683[SOCKET][atiny_net_connect:98] try to do name resolution now...[SOCKET][atiny_net_connect:106] do name resolution succeed[SOCKET][atiny_net_connect:158] UDP create socket and bind to server(139.159.140.34:5683) finished[INFO][1202][lwm2m_connect_server:263] Connection creation successfully in lwm2m_connect_server.[transaction_new:198] method: 2, altPath: "佰 U", mID: 16211, token_len: 4[transaction_new:200] NULL[transaction_new:277] send token is 83[transaction_new:277] send token is 63[transaction_new:277] send token is 1[transaction_new:277] send token is 0[transaction_new:281] Exiting on success[transaction_send:405] Entering[transaction_send:407] transaction_send: ver 0, type 0, tkl 4, code 0.02, mid 16211, Content type: 40[transaction_send:409] time:1254[INFO][1257][lwm2m_buffer_send:351] call connection_send in lwm2m_buffer_send, length is 112[transaction_send:468] send 0 bytes, retrans_counter:2[observe_step:628] Entering[registration_step:1351] contextP State: STATE_REGISTERING[registration_step:1356] targetP Status: STATE_REG_PENDING[transaction_step:497] Entering[lwm2m_step:574] Final timeoutP: 2306079593729152688[lwm2m_step:576] Final state: STATE_REGISTERINGreport ret:0[lwm2m_handle_packet:243] Entering[lwm2m_handle_packet:247] Parsed: ver 1, type 2, tkl 4, code 2.01, mid 16211, Content type: 0[transaction_handleResponse:320] Entering,message->code: 65[prv_handleRegistrationReply:230] come into  prv_handleRegistrationReply!![prv_handleRegistrationReply:247] Registration successful,location_path is /rd/44440003[transaction_remove:306] Entering[transaction_free:292] Entering[INFO][1410][atiny_notify_stack_rpt_data_change:145] data change cnt 1 uri(flag:0x7, objId:19, instId:0, resId:0)[lwm2m_resource_value_changed:492] /19/0/0[lwm2m_step:459] timeoutP: 2306079593729152688[lwm2m_step:464] State: STATE_REGISTERING[registration_getStatus:544] State: STATE_REGISTERING[registration_getStatus:551] targetP->status: STATE_REGISTERED[registration_getStatus:574] reg_status: STATE_REGISTEREDnotify:stat:0[observe_step:628] Entering[registration_step:1351] contextP State: STATE_READY[registration_step:1356] targetP Status: STATE_REGISTERED[transaction_step:497] Entering[lwm2m_step:574] Final timeoutP: 2306079593729152688[lwm2m_step:576] Final state: STATE_READY[lwm2m_handle_packet:243] Entering[lwm2m_handle_packet:247] Parsed: ver 1, type 0, tkl 8, code 0.01, mid 35821, Content type: 0[handle_request:148] Entering[uri_decode:102] altPath: "佰 U"[uri_decode:198] /19/0/0[dm_handleRequest:205] Code: 01, server status: STATE_REGISTERED[dm_handleRequest:206] /19/0/0[object_readData:176] /19/0/0[lwm2m_data_new:184] size: 1[object_readData:233] result: 2. 5, size: 1[observe_handleRequest:210] Code: 01, server status: STATE_REGISTERED[observe_handleRequest:211] /19/0/0[lwm2m_data_free:202] size: 1[message_send:458] Entering[message_send:460] Size to allocate: 22[message_send:467] coap_serialize_message() returned 15[INFO][1545][lwm2m_buffer_send:351] call connection_send in lwm2m_buffer_send, length is 15[INFO][1554][atiny_notify_stack_rpt_data_change:145] data change cnt 1 uri(flag:0x7, objId:19, instId:0, resId:0)[lwm2m_resource_value_changed:492] /19/0/0[lwm2m_resource_value_changed:508] Found an observation[lwm2m_resource_value_changed:509] /19/0/0[lwm2m_resource_value_changed:515] Tagging a watcher[lwm2m_step:459] timeoutP: 2306079593729152688[lwm2m_step:464] State: STATE_READY[registration_getStatus:544] State: STATE_READY[registration_getStatus:551] targetP->status: STATE_REGISTERED[registration_getStatus:574] reg_status: STATE_REGISTERED[observe_step:628] Entering[observe_step:643] /19/0/0[observe_app_step:533] Entering[object_readData:176] /19/0/0[lwm2m_data_new:184] size: 1[object_readData:233] result: 2. 5, size: 1[lwm2m_data_serialize:625] /19/0/0[lwm2m_data_serialize:626] size: 1, formatP: LWM2M_CONTENT_OPAQUE[lwm2m_data_serialize:658] Final format: LWM2M_CONTENT_OPAQUE[transaction_new:198] method: 69, altPath: "佰 U", mID: 16212, token_len: 8[transaction_new:200] NULL[transaction_new:281] Exiting on success[transaction_send:405] Entering[transaction_send:407] transaction_send: ver 0, type 0, tkl 8, code 2.05, mid 16212, Content type: 42[transaction_send:409] time:1671[INFO][1674][lwm2m_buffer_send:351] call connection_send in lwm2m_buffer_send, length is 22[transaction_send:468] send 0 bytes, retrans_counter:2[observe_app_step:599] notify con msg, cookie:0 type:1[lwm2m_data_free:202] size: 1[object_readData:176] /19/0/0[lwm2m_data_new:184] size: 1[ERR][1703][atiny_dequeue_rpt_data:274] dequeue empty rpt list[ERR][1709][prv_read_data:151] atiny_dequeue_rpt_data fail,ret=-5[object_readData:233] result: 4. 4, size: 1[lwm2m_data_free:202] size: 1[registration_step:1351] contextP State: STATE_READY[registration_step:1356] targetP Status: STATE_REGISTERED[transaction_step:497] Entering[lwm2m_step:574] Final timeoutP: 2306079593729152688[lwm2m_step:576] Final state: STATE_READY[lwm2m_handle_packet:243] Entering[lwm2m_handle_packet:247] Parsed: ver 1, type 0, tkl 5, code 0.01, mid 35822, Content type: 0[handle_request:148] Entering[uri_decode:102] altPath: "佰 U"[uri_decode:198] /4/0/8[dm_handleRequest:205] Code: 01, server status: STATE_REGISTERED[dm_handleRequest:206] /4/0/8[object_read:249] /4/0/8[object_readData:176] /4/0/8[lwm2m_data_new:184] size: 1[lwm2m_data_encode_int:311] value: 21103[object_readData:233] result: 2. 5, size: 1[lwm2m_data_serialize:625] /4/0/8[lwm2m_data_serialize:626] size: 1, formatP: LWM2M_CONTENT_TEXT[lwm2m_data_serialize:658] Final format: LWM2M_CONTENT_TEXT[lwm2m_data_free:202] size: 1[object_read:266] result: 2. 5, length: 5[message_send:458] Entering[message_send:460] Size to allocate: 20[message_send:467] coap_serialize_message() returned 16[INFO][1828][lwm2m_buffer_send:351] call connection_send in lwm2m_buffer_send, length is 16[lwm2m_step:459] timeoutP: 2306079593729152688[lwm2m_step:464] State: STATE_READY[registration_getStatus:544] State: STATE_READY[registration_getStatus:551] targetP->status: STATE_REGISTERED[registration_getStatus:574] reg_status: STATE_REGISTERED[observe_step:628] Entering[observe_step:643] /19/0/0[observe_app_step:533] Entering[object_readData:176] /19/0/0[lwm2m_data_new:184] size: 1[ERR][1876][atiny_dequeue_rpt_data:274] dequeue empty rpt list[ERR][1882][prv_read_data:151] atiny_dequeue_rpt_data fail,ret=-5[object_readData:233] result: 4. 4, size: 1[lwm2m_data_free:202] size: 1[registration_step:1351] contextP State: STATE_READY[registration_step:1356] targetP Status: STATE_REGISTERED[transaction_step:497] Entering[lwm2m_step:574] Final timeoutP: 2306079593729152688[lwm2m_step:576] Final state: STATE_READY[lwm2m_handle_packet:243] Entering[lwm2m_handle_packet:247] Parsed: ver 1, type 2, tkl 0, code 0.00, mid 16212, Content type: 0[transaction_handleResponse:320] Entering,message->code: 0type:1 cookie:0 status:4[transaction_remove:306] Entering[transaction_free:292] Entering[lwm2m_step:459] timeoutP: 2306079593729152688[lwm2m_step:464] State: STATE_READY[registration_getStatus:544] State: STATE_READY[registration_getStatus:551] targetP->status: STATE_REGISTERED[registration_getStatus:574] reg_status: STATE_REGISTERED[observe_step:628] Entering[observe_step:643] /19/0/0[observe_app_step:533] Entering[object_readData:176] /19/0/0[lwm2m_data_new:184] size: 1[ERR][1986][atiny_dequeue_rpt_data:274] dequeue empty rpt list[ERR][1992][prv_read_data:151] atiny_dequeue_rpt_data fail,ret=-5[object_readData:233] result: 4. 4, size: 1[lwm2m_data_free:202] size: 1[registration_step:1351] contextP State: STATE_READY[registration_step:1356] targetP Status: STATE_REGISTERED[transaction_step:497] Entering[lwm2m_step:574] Final timeoutP: 2306079593729152688[lwm2m_step:576] Final state: STATE_READY[lwm2m_handle_packet:243] Entering[lwm2m_handle_packet:247] Parsed: ver 1, type 0, tkl 1, code 0.01, mid 35823, Content type: 0[handle_request:148] Entering[uri_decode:102] altPath: "佰 U"[uri_decode:198] /4/0/0[dm_handleRequest:205] Code: 01, server status: STATE_REGISTERED[dm_handleRequest:206] /4/0/0[object_read:249] /4/0/0[object_readData:176] /4/0/0[lwm2m_data_new:184] size: 1[lwm2m_data_encode_int:311] value: 0[object_readData:233] result: 2. 5, size: 1[lwm2m_data_serialize:625] /4/0/0[lwm2m_data_serialize:626] size: 1, formatP: LWM2M_CONTENT_TEXT[lwm2m_data_serialize:658] Final format: LWM2M_CONTENT_TEXT[lwm2m_data_free:202] size: 1[object_read:266] result: 2. 5, length: 1[message_send:458] Entering[message_send:460] Size to allocate: 12[message_send:467] coap_serialize_message() returned 8[INFO][2110][lwm2m_buffer_send:351] call connection_send in lwm2m_buffer_send, length is 8[lwm2m_step:459] timeoutP: 2306079593729152688[lwm2m_step:464] State: STATE_READY[registration_getStatus:544] State: STATE_READY[registration_getStatus:551] targetP->status: STATE_REGISTERED[registration_getStatus:574] reg_status: STATE_REGISTERED[observe_step:628] Entering[observe_step:643] /19/0/0[observe_app_step:533] Entering[object_readData:176] /19/0/0[lwm2m_data_new:184] size: 1[ERR][2159][atiny_dequeue_rpt_data:274] dequeue empty rpt list[ERR][2165][prv_read_data:151] atiny_dequeue_rpt_data fail,ret=-5[object_readData:233] result: 4. 4, size: 1[lwm2m_data_free:202] size: 1[registration_step:1351] contextP State: STATE_READY[registration_step:1356] targetP Status: STATE_REGISTERED[transaction_step:497] Entering[lwm2m_step:574] Final timeoutP: 2306079593729152688[lwm2m_step:576] Final state: STATE_READY
  • [技术干货] LiteOS内核函数深度解析
    笔者:狐狸老了(mhw_0517@163.com)感谢狐狸老了(化名)对LiteOS的研究和分享,此内核函数解析主要基于LiteOS内核V1.0版本进行编写和修缮,难免有不足和疏漏之处,还请指正,可以在下方留言或邮箱交流。文内对LiteOS内核相关的功能:任务、系统调度、内存池管理、静态内存、动态内存、消息队列、事件、互斥锁、信号量、软件定时器等等涉及到的结构体或功能函数都进行了非常详尽的说明,文档结构如下,具体请至附件中下载LiteOS内核函数解析-RTOS内核原理-狐狸老了.pdf( 预览 )
  • [技术干货] LiteOS_BPI_STM32F103R8T6x移植好的模板工程程序
    刚刚给大家分享了《Huawei_LiteOS_STM32移植教程_Keil》,经过好几天的移植操作,终于完成了LiteOS_BPI_STM32F103R8T6x工程的搭建。希望我发的移植教程能对大家起到帮助,大家一定要耐心尝试一下哦!工程使用说明:1:工程使用keil工具打开,工程文件路径为 LiteOS_BPI_STM32F103R8T6x\projects\STM32F103RB_BPI\HuaweiLiteOS.uvprojx2: 工程中移植了LiteOS到stm32f103rb上,并且只驱动了与nb模块通讯的uart   其他的串口以及spi等均没有根据该开发板进行驱动验证。3:nb的demo在ocean_nb_sample.c中实现,los_dev_st_uart.c是采用了双缓冲并且是中断模式的串口驱动4:LiteOS_BPI_STM32F103R8T6x\peripheral\neul_bc95.c是nb模块的简易驱动,仅供参考。其他说明:  目前因为没有实际的nb信号所以没有进行相关的联网测试,只是实现了简单的nb模块驱动流程。liteos的相关内容,比如接口如何使用可以参考如下网址内容https://github.com/LITEOS/LiteOS_Kernel 下面为大家附上一下我移植成功的一些图片,希望各位大神多多指点。#include "los_config.h" #include "los_bsp_led.h" #include "los_bsp_key.h" #include "los_bsp_uart.h" #include "los_inspect_entry.h" #include "los_demo_entry.h" #include "cmsis_os.h" #include <string.h> #include "stm32f1xx_hal.h" #include "los_dev_st_uart.h" extern void LOS_EvbSetup(void); static void MX_GPIO_Init(void) {   /* GPIO Ports Clock Enable */   __HAL_RCC_GPIOD_CLK_ENABLE(); } void SystemClock_Config(void); void SystemClock_Config(void) {   RCC_OscInitTypeDef RCC_OscInitStruct;   RCC_ClkInitTypeDef RCC_ClkInitStruct;     /**Initializes the CPU, AHB and APB busses clocks      */   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;   RCC_OscInitStruct.HSEState = RCC_HSE_ON;   RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;   RCC_OscInitStruct.HSIState = RCC_HSI_ON;   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;   RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;   if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)   {     _Error_Handler(__FILE__, __LINE__);   }     /**Initializes the CPU, AHB and APB busses clocks      */   RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK                               |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;   RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;   RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;   RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;   if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)   {     _Error_Handler(__FILE__, __LINE__);   }     /**Configure the Systick interrupt time      */   HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);     /**Configure the Systick      */   HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);   /* SysTick_IRQn interrupt configuration */   HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0); } /* USER CODE BEGIN 4 */ /* USER CODE END 4 */ #ifdef USE_FULL_ASSERT /**    * @brief Reports the name of the source file and the source line number    * where the assert_param error has occurred.    * @param file: pointer to the source file name    * @param line: assert_param error line source number    * @retval None    */ void assert_failed(uint8_t* file, uint32_t line) {   /* USER CODE BEGIN 6 */   /* User can add his own implementation to report the file name and line number,     ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */   /* USER CODE END 6 */ } #endif static UINT32 g_uwboadTaskID; LITE_OS_SEC_TEXT VOID LOS_BoadExampleTskfunc(VOID) {     while (1)     {         //LOS_EvbLedControl(LOS_LED2, LED_ON);         LOS_EvbUartWriteStr("Board Test\n");         LOS_TaskDelay(500);         //LOS_EvbLedControl(LOS_LED2, LED_OFF);         LOS_TaskDelay(500);     } } void LOS_BoadExampleEntry(void) {     UINT32 uwRet;     TSK_INIT_PARAM_S stTaskInitParam;     (VOID)memset((void *)(&stTaskInitParam), 0, sizeof(TSK_INIT_PARAM_S));     stTaskInitParam.pfnTaskEntry = (TSK_ENTRY_FUNC)LOS_BoadExampleTskfunc;     stTaskInitParam.uwStackSize = LOSCFG_BASE_CORE_TSK_IDLE_STACK_SIZE;     stTaskInitParam.pcName = "BoardDemo";     stTaskInitParam.usTaskPrio = 10;     uwRet = LOS_TaskCreate(&g_uwboadTaskID, &stTaskInitParam);     if (uwRet != LOS_OK)     {         return;     }     return; } static char tb1[500]; static char rtb1[500]; void init_testuart(void * pvParameters) {     int len;     int ret = 0;     ret = los_dev_uart_init(LOS_STM32F103_UART4, 9600, tb1, 500);     if (ret != 0)     {         while(1);     } while(1) {         //len = uart_data_read(tb1, 500, 0);         len = los_dev_uart_read(3, rtb1, 100, 5000);         if (len > 0)             los_dev_uart_write(3, rtb1, len, 100); osDelay(10); } } static char tb12[500]; static char rtb12[500]; void init_testuart2(void * pvParameters) {     int len;     int ret = 0;     ret = los_dev_uart_init(LOS_STM32F103_UART2, 9600, tb12, 500);     if (ret != 0)     {         while(1);     } while(1) {         //len = uart_data_read(tb1, 500, 0);         len = los_dev_uart_read(1, rtb12, 100, 5000);         if (len > 0)             los_dev_uart_write(1, rtb12, len, 100); osDelay(10); } } /***************************************************************************** Function    : main Description : Main function entry Input       : None Output      : None Return      : None  *****************************************************************************/ LITE_OS_SEC_TEXT_INIT int main(void) { UINT32 uwRet; osThreadDef_t thread_def;     /*         add you hardware init code here         for example flash, i2c , system clock ....      */     /*Init LiteOS kernel */     uwRet = LOS_KernelInit();     if (uwRet != LOS_OK) {         return LOS_NOK;     }     //HAL_init();....     HAL_Init();     /* Configure the system clock to 216 MHz */     SystemClock_Config();     MX_GPIO_Init();     /* Enable LiteOS system tick interrupt */     LOS_EnableTick();     /*         Notice: add your code here         here you can create task for your function          do some hw init that need after systemtick init      */     //LOS_EvbSetup();//init the device on the dev baord          //MX_RTC_Init();//enable RTC          //LOS_Demo_Entry();     //LOS_Inspect_Entry();     //LOS_BoadExampleEntry();     thread_def.name = "Test"; thread_def.stacksize = 1900; thread_def.tpriority = osPriorityLow; thread_def.pthread = (os_pthread)init_testuart; //osThreadCreate(&thread_def, NULL);     thread_def.name = "Test2"; thread_def.stacksize = 1900; thread_def.tpriority = osPriorityLow; thread_def.pthread = (os_pthread)init_testuart2; //osThreadCreate(&thread_def, NULL); //neul_bc95_create_data_task();          LOS_OceanCon_NB_Sample();          //LOS_PostBox_NB_Sample();     /* Kernel start to run */     LOS_Start();     for (;;);     /* Replace the dots (...) with your own code. */ }当然还有一些其他的配置文件,我这里只给大家分享一下main.c所在的文件。编译一下没有错误,只要几个警告。警告是因为定义了几个变量没有使用,此处不用担心。大概就是这个样子了,大家可能在移植过程中会遇到一些问题,所以我在此处把我移植好的工程分享给大家。LiteOS_BPI_STM32F103R8T6x.rar希望能对大家有一点点帮助。
  • [技术干货] Huawei_LiteOS_STM32移植教程_Keil
    Huawei_LiteOS_STM32移植教程_Keil.pdf( 预览 )
  • [技术干货] 【Mike教你物联网开发】基于LiteOS和OceanConnect平台进行FOTA升级
    进行FOTA升级,首先要准备好固件包。我们可以直接用keil生成.bin文件作为初始的固件包。1.  打开keil,在user选项卡中选中“Run#1”并输入命令:    E:\Keil_v5\ARM\ARMCC\bin\fromelf.exe --bin -o .\bin\out.bin .\Objects\Huawei_LiteOS.axf        命令中包含fromelf.exe文件地址,输出bin文件的地址与文件名,以及axf文件的地址。            2.  在得到out.bin文件后,需要对这个bin文件加上包头。这个步骤涉及到 LiteOS源码中 提供的代码与rsa公私钥。在我们测试FOTA功能时,可以直接使用github上提供的公私钥,实际应用时可以通 gen_key.py 或者 openssl 生成公私钥。在这里我直接使用github上提供的公私钥。 3.  运行packet_software.py,命令为:python package_software.py -c ./config.xml -o ./out_head.bin -i ./out.bin    其中config.xml中指定了固件包版本号(需与代码中定义的一致才能通过校验)与checksum方法;out_head.bin为输出的加上包头的固件包,也是我们要进行签名并上传到IOT平台的文件;out.bin是上一步中用keil生成的bin包。 4.  得到out_head.bin后,需要对其进行签名。    首先将其压缩为zip文件,然后使用OC账号登陆https://139.159.139.219:8843,下载离线签名工具:          打开离线签名工具,选择RSA2048+SHA256签名算法生成新的公私钥,对zip压缩文件进行签名并验签。     验签成功后,在IOT平台上传离线签名工具生成的公钥。         然后再上传完成签名的固件包。注意:设备类型、厂商名称、型号、协议必须与应用的Profile严格一致,否则固件包上传失败!          到此已经完成了固件包的制作与上传。需要注意的是,进行FOTA升级需要设备profile中选中OM维护中固件升级选项,且存在omCapability能力,如下图所示:  可以导出现有profile,复制红色部分进行添加。5.  目前仅支持以群组的方式进行FOTA升级。所以我们还需要创建群组并绑定设备:      到这里,云侧所有准备工作已经完成。接下来讨论代码上的要求。FOTA升级需要bootloader进行引导。所以除了app的代码,还需要bootloader代码(参考https://github.com/LiteOS/LiteOS/tree/develop/targets/Cloud_STM32F429IGTx_FIRE中的实现)。根据自己开发板的资源,可以选择将固件包下载到外置的spi flash或者内置的flash。对于这两种方法github上均提供了对应的api,在自己的代码中进行调用即可。还有一个需要修改的地方是公私钥的模数与指数:  模数与指数可以通过openssl得到,也可以在线进行解析:http://tool.chacuo.net/cryptrsakeyparse 完成了上述准备工作后,我们在IOT平台发起FOTA升级任务,选择好群组以及固件包,即可进行FOTA升级。
  • [技术干货] 【Mike教你物联网开发】LiteOS+NB模组连接OC平台——BC28单模组程序烧录教程
    在BC28单模组(无外接MCU)对接华为OC平台的程序烧录过程中,需要使用一款专门开发的烧录软件:UE Updater。本文将基于此软件详细介绍烧录过程,软件请 自行下载。软件截图如下:  在烧录时,首先正确选择模组使用的COM口。注意这里需要区分串口打印LOG使用的COM口与真正往模组中烧录代码所使用的COM口。 正确选择端口后,首先选择BC28模组自身需要的镜像BC28JAR01A05.fwpkg进行烧录。此时write config与No Baud Switch两个选项都要选中:  正确配置后,点击update,所有项目的状态由update pending变为update complete则BC28镜像烧录完成:  接下来烧录我们的业务代码,在这里以华为与中国联通合作的一个项目为例。该项目demo在无锡世界物联网博览会上进行了现场展示。选择镜像文件unicom_backup.fwpkg,注意此时仅选择No Baud Switch,不选write config:  同样地,所有项目的状态由update pending变为update complete时,烧录完成。  如果在上述烧录过程中出现下图所示的现象,则需要reset模组。  烧录完成后,通过串口工具可以看到模组的上报日志:  在OC平台上也可以对应的看到上报的数据: 
  • [技术干货] 【Mike教你物联网开发】LiteOS+NB模组连接OC平台——骐俊ML2510 NB模组
    骐俊ML2510 NB模组内置了COAP,LWM2M协议。与BC95类似,ML2510针对华为OC平台有一套AT指令,可以方便地与OC平台进行对接。 对接OC主要有三个步骤:  首先在los_nb_init函数中初始化NB模组。中间涉及的AT指令主要有:AT+NRB,AT+CFUN,AT+CGATT, AT+CSQ以及AT+NCDP。需要注意的是,在执行命令AT+NCDP之前,必须先在OC平台注册设备,且设备编号必须设置为设备的IMEI码。 然后通过函数los_nb_notify注册数据处理函数。程序就是在函数nb_cmd_data_ioctl中处理云平台下发的命令。“+NNMI”是模组接收到数据后生成的前缀(前提是设置AT+NNMI=1):  经过注册后,若数据帧前缀为”+NNMI”,则可以确定该条数据是云平台下发的命令。云平台命令处理的一般流程是:云平台下发命令,模组收到命令后通过串口向MCU发送字符串”+NNMI:<length>,<data>”。此时会触发串口中断,进入中断响应函数: 可以看到,中断响应函数中将串口数据存入结构体at的recv_buf成员中,完成后释放信号量recv_sem。释放该信号量会唤醒任务at_recv_task:该任务在等待信号量recv_sem,因此在串口中断响应函数执行完后会被唤醒。在函数cloud_cmd_matching()中,会判断los_nb_notify中设置的“+NNMI”是否是接收到字符串的子串。若是,则说明该数据是平台下发命令,调用命令处理函数nb_cmd_data_ioctl,进行相应的操作。 最后是数据上报,通过函数los_nb_report完成。需要注意,上报数据的格式必须与云平台profile中所定义的格式一致,否则会出现上报数据全部无法识别的错误。比如,制作profile时将数据定义为长度为5的定长字符串,若需要上报数据”234”,则需要将数据长度用空格补到5,变为“  234”。
  • [技术干货] 【Mike教你物联网开发】LiteOS移植到GD32F350教程(Keil版)
    一、 打开keil创建一个新的工程。在device中选择我们的目标开发板GD32F350RB。                 如果之前没有下载过相应的PACK,则需要手动下载:         二、 在“manage project items”中,建立分组如下:         三、 将源文件加入对应的分组。在这里可以参照github上现有的工程。比如我参照的是同一家厂商生产的GD32F450i_EVAL开发板的工程。添加源码时,诸如startup,liteos/cmsis,kernel以及examples分组中的代码可以直接从参考工程中复制过来。而Drivers/GD32Fxxx_standard_peripheral中的代码要改成我们下载的PACK中官方提供的代码, liteos/arch中的los_Dispatch_keil.S要根据自己处理器的架构进行选择并添加。在这里我选择cortex-m4版本的代码。user分组中先将官方提供的代码进行替换(system_gd32fxxx.c,gd32fxxx_eval.c),其它代码先原样添加,下一步中统一进行修改。                     à               à   四、 参照其它现有工程添加完源码后,需要对代码进行一定的修改。需要修改的地方主要包括:         1. 头文件。比如 #include "gd32f4xx.h"需改为 #include "gd32f3x0.h",等等。         2. 硬件初始化。比如串口初始化,需要改为当前开发板的串口初始化函数,等等。         3. 注意部分官方代码与OS代码可能存在的重复定义问题,如gd32f3x0.h中第157行                与los_typedef.h中第81~87行        从上面可以看到,两处代码对TRUE和FALSE进行了重复定义,导致编译出错。在这里我将gd32f3x0.h中第157行注释。 五、进行了上面的修改后,开始目标设置。各选项如下:                         注:16k ram,128k flash                                                                      这里要特别注意的是,不能直接使用keil生成的sct文件。需要做相应的修改。由于GD32F350RB开发板有16k ram,128k flash,对文件修改如下: ; ************************************************************* ; *** Scatter-Loading Description File generated by uVision *** ; ************************************************************* LR_IROM1 0x08000000 0x00020000  {    ; load region size_region     ER_IROM1 0x08000000 0x00020000  {    ; load address = execution address         *.o (RESET, +First)         *(InRoot$$Sections)         .ANY (+RO)         * (LOS_HEAP_INFO)     }     VECTOR 0x20000000 0x400  {    ; Vector         * (.data.vector)     }     RW_IRAM1 0x20000400 0x00003800  {    ; RW data         ;.ANY (+RW +ZI)         * (.data, .bss)         * (LOS_HEAP)     }     ARM_LIB_STACKHEAP 0x20003C00 EMPTY 0x400  {    ;LiteOS MSP     } }                  六、设置完成后,可以编译通过。为了验证OS移植是否成功,我们可以调用examples中的LOS_Inspect_Entry()函数。该函数会对OS中所涉及的任务、内存、队列、信号量、定时器等等各种功能进行测试。根据串口打印的测试结果可以判断OS移植是否成功(需要定义宏LOS_KERNEL_DEBUG_OUT)。在这里我们的输出如下: ******************************************************************************* LOS_TaskLock() Success! Example_TaskHi create Success! Example_TaskLo create Success! Enter TaskHi Handler. Enter TaskLo Handler. TaskHi LOS_TaskDelay Done. TaskHi LOS_TaskSuspend Success. TaskHi LOS_TaskResume Success. Inspect TASK success   Example_Event wait event 0x1 . Example_TaskEntry_Event write event . Example_Event,read event :0x1 . EventMask:1 EventMask:0 Inspect EVENT success   create the queue success! recv message:test is message 0 recv message:test is message 1 recv message:test is message 2 recv message:test is message 3 recv message:test is message 4 recv message failure,error:200061d delete the queue success! Inspect MSG success   Example_SemTask2 try get sem g_usSemID wait forever. Example_SemTask1 try get sem g_usSemID ,timeout 10 ticks. Example_SemTask2 get sem g_usSemID and then delay 20ticks . Example_SemTask1 timeout and try get sem g_usSemID wait forever. Example_SemTask2 post sem g_usSemID . Example_SemTask1 wait_forever and got sem g_usSemID success. Inspect SEM success   task2 try to get mutex, wait forever. task2 get mutex g_Testmux01 and suspend 100 Tick. task1 try to get mutex, wait 10 Tick. task1 timeout and try to get  mutex, wait forever. task2 resumed and post the g_Testmux01 task1 wait forever,got mutex g_Testmux01 success. Inspect MUTEX success   LOS_CyclePerTickGet = 108000 . LOS_TickCountGet = 1044 . LOS_TickCountGet after delay = 1244 . Inspect SYSTIC success   create Timer1 success . create Timer2 success . start Timer1 sucess . stop Timer1 sucess . g_timercount1=1 . tick_last1=2544 . delete Timer1 failed . start Timer2 success . g_timercount2=1 . tick_last2=2644 . g_timercount2=2 . tick_last2=2744 . g_timercount2=3 . tick_last2=2844 . g_timercount2=4 . tick_last2=2944 . g_timercount2=5 . tick_last2=3044 . g_timercount2=6 . tick_last2=3144 . g_timercount2=7 . tick_last2=3244 . g_timercount2=8 . tick_last2=3344 . g_timercount2=9 . tick_last2=3444 . g_timercount2=10 . tick_last2=3544 . Inspect TIMER success   initial...... node add and tail add...... add node success add tail success delete node...... delete node success Inspect LIST success   Mem box init ok! . Mem box alloc ok . *p_num = 828 . clear data ok  *p_num = 0 . Mem box free ok! . Inspect S_MEM success   mempool init ok! mem alloc ok *p_num = 828 mem free ok! Inspect D_MEM success   Inspect completed,gInspectErrCnt = [0] *******************************************************************************可以观察输出是否合理。若最后得到gInspectErrCnt = [0]则说明移植成功。
  • [技术干货] 【Mike教你物联网开发】LiteOS蓝牙连接demo实例(nrf51822)
    硬件环境nRF51822开发板:提供32k RAM, 256k ROMFire debugger:与nRF51822按下图所示方式连接 软件环境Keil5.25LightBlue:手机应用商店搜索下载app即可  接下来,我们开始实现这个demo~首先,我们需要将SoftDevice下载到板子中去。由于我拿到的板子已经下载好了,所以这一步就省略啦~如果你的板子是新买的可以参考下面这个网址:http://infocenter.nordicsemi.com/index.jsp?topic=%2Fcom.nordic.infocenter.sdk51.v10.0.0%2Fgetting_started_softdevice.html在这个demo中我使用的是s110(s110_nrf51_8.0.0_softdevice.hex)。需要特别注意的是,SoftDevice本身会占用8k的RAM和96k的ROM。 在keil中打开项目工程(见附件。适配Nordic官方的nRF51_SDK_10.0.0_dc26b5e SDK)。工程build后需要进一步的配置。点击“options for target…”,弹出下图的对话框。  在target选项卡中,将IROM1的起始地址Start与大小Size分别设为0x18000与0x28000。这是因为上面提到SoftDevice会占用96k的ROM,而基于CORTEX-M0架构的程序是从地址0x00000000处开始的。因此前96k的ROM(0x00000~0x17fff)不能使用。供我们使用的地址从0x18000开始,且可用大小为256k-96k=160k(0x28000)。RAM的起始地址为0x20000000,SoftDevice占用8k,即0x20000000~0x20001fff,可用地址从0x20002000开始,RAM剩余大小为32k-8k=24k(0x6000)。 接下来打开Debug选项卡。调试器选择CMSIS-DAP Debugger。Settings使用默认值即可。   设置完成后ctrl+F5开始Debug。我们直接运行Run(F5)。此时51822板子上的绿色指示灯开始闪烁,表明其正在等待蓝牙连接。打开手机app LightBlue,可以搜到蓝牙设备Nordic_LiteOS_HRM,也就是我们在main.c 中定义的DEVICE_NAME。点击这个设备就完成了蓝牙连接。App界面如下图所示。 此时51822的绿色指示灯保持常亮,表明蓝牙连接已经建立。最后给出51822购买链接:https://item.taobao.com/item.htm?spm=a230r.1.14.18.36403dc7UpsumE&id=37035490461&ns=1&abbucket=5#detail 
  • [技术干货] Huawei LiteOS资源查找导航
    资源获取地址基础介绍3分钟快速了解LiteOS全面了解LiteOS资源获取开源代码下载玩转LiteOS内核源码实例LiteOS开发指南 LiteOS SDK开发指南LiteOS API参考LiteOS移植指南参与贡献端云完整开发实例LiteOS+ (NB-IoT / WIFI / 2G ) + OceanConnect平台 的端云DemoLiteOS端云开发套件资料兆易创新GigaDevice中科创达ThunderSoft利尔达Lierda钛比科技Terabits比派科技Banana-pi物联网俱乐部IoTClub鹏立科技NB476亿琪软件YiqiSoft准捷电子LiteOne_OpenCPU视频教程物联网俱乐部NB-IoT系列课程朱老师物联网大讲堂NB-IoT系列课程2018往期活动华为IoT达人计划第二期(进行中)寻找IoT达人第一期·对接云平台(已结束)LiteOS黑客松2018上海站(已结束)LiteOS Workshop线下技术沙龙往期视频LiteOS相关网站平台LiteOS官网开发者社区技术论坛如果您对LiteOS感兴趣,欢迎加入LiteOS官方技术交流微信群加 [LiteOS小管家] 微信:HWLiteOS回复关键字:姓名-公司拉你入群本帖会持续刷新,如若感兴趣请点赞,同时欢迎收藏LiteOS板块,最先获取一手资源!任何疑问欢迎在本帖下方交流欢迎关注LiteOS官方微信公众号合作相关诉求请发送至官方邮箱:liteos@huawei.com
  • [技术干货] 3分钟带你了解Huawei LiteOS——快速了解是什么?关键技术有哪些?可以应用到哪些领域?
    for english version, please go to the bottom of the page——————————————————————————————————————————————————English Version—————————————————————————————————————————————————————————————————————
  • [技术干货] Huawei LiteOS移植指南
    本文将以STM32为例,基于Keil MDK-ARM、IAR EWARM、GCC等编译工具,详细介绍移植的全流程。移植之前,请您先确认所使用开发板是否已经在Huawei LiteOS支持列表中。如果在,那么您可以直接获取对应的代码包,进行开发,不需要阅读本文进行额外的移植工作;如果您所使用的开发板不在列表中,您可以参考本教程,完成相应的移植工作。STM32系列大致步骤如下,详细步骤请参考:https://liteos.github.io/porting/ 环境准备开发板和相关工具STM32Cube构建裸机工程其他方式获取裸机工程GitHub源码下载OS移植STM32系列:Keil MDK-ARM、IAR EWARM、SW4STM32、Makefile、GCC等都有举例,可根据需要参阅移植后验证验证实验设计验证测试结果物联网俱乐部EVB_M1开发板移植请参考:https://bbs.huaweicloud.com/forum/thread-12430-1-1.html 如果页面内容有误,或您有更好的修改建议,再或是您有兴趣移植到其他开发板并写了对应移植说明,可通过点击页面下方的 [在GitHub上编辑此页](如下图所示),在源文件内提交修改,成为LiteOS开源贡献者,会有精美礼品相送并有机会成为“华为IoT达人”一员。期待您的贡献和建议:)任何疑问欢迎直接在本帖下方留言
  • [行业资讯] LiteOS黑客松2018上海站完美收官!附获奖项目介绍和成果展示PPT!
    兄弟是与你并肩作战,编码不分昼夜,昂首向前兄弟是即使蓬头垢面,依然相视一笑,埋头苦干 两天一夜的奋战,这场属于极客们的技术盛宴——“Huawei LiteOS Hackathon上海站”完美收官!经过激烈紧张的角逐,最终7支队伍从24支参赛队伍中脱颖而出,分获一二三等奖及最佳创意奖。其中,利尔达团队凭借其“NB-IoT Tracker”项目,夺得桂冠。  上海站Hackathon作为Huawei LiteOS整个2017年黑客松的收官之战,解锁了很多个第一:第一次邀请到了史上最强评委阵容、第一次招募到外籍开发者团队参赛,也是第一次与安创空间合作,并圆满成功。欣喜于这么多的第一次,也期待着更多的下一次。同时希望能够与参加本次大赛的团队,日后有更紧密的交流与合作。  决赛当天分为上下午两场,上午参赛团队们进行最后冲刺并提交作品,下午各个团队上台路演,评委们根据标准进行打分,评选出最后的优胜者。作品需要在中午12:00前提交,当距离截止时间只剩最后3小时的时候,现场气氛前所未有的紧张,好像都希望在最后的时间里,能把作品完善的好些,再好些,让队友们都满意。 最强评审团:Huawei LiteOS开源发展团队总经理钟优平(左5)、华为物联网产业生态发展部部长吴晓东(左4)、华为OceanConnect物联网平台生态发展高级经理徐飞(左3)、安创空间跨境生态创新部总经理朱敏(左1)、ARM嵌入式市场经理杨瑞(右2)、上海市物联网行业协会理事长潘君才(左2)、兆易创新产品市场总监金光一(右5)、钛比科技技术专家主任史治国教授(右4)、上海贝岭股份有限公司投资部高级投资经理钱华(右3)、云汉芯城市场副总裁李剑峰(右1)决赛中每个团队需要上台演讲,只有7分钟的时间介绍自己的项目。分秒必争,时间到了的最后一秒也不愿落下一句话。 “王者”之争,一触即发。一等奖 NB-IoT Trakcer来自利尔达团队的方叶波、王世东,他们所开发的定位防丢产品,使用了华为NB-IoT的Hi2110V120芯片,基于Huawei LiteOS,大胆摒弃传统的GPRS+GPS方案,采用了NB-IoT+GPS的方案,待机时间极大延长,有效解决传统方案高功耗带来的续航问题。该项目除了可应用于老人和小孩的防丢,还可应用在畜牧业放养、物流的跟踪等各行各业各领域,并且可提供硬件+软件+服务+保险的整体定位防丢系统解决方案。 https://bbs.huaweicloud.com/forum/thread-12475-1-1.html二等奖1. 智能工厂YiFactory——该智能工厂物联网解决方案,由上海亿琪软件有限公司组成的团队提出并实现。  多种传感器接入,实时传入云端(嵌入Huawei LiteOS并与OceanConnect集成),独立安装,可选多种传输方式。多种适配与选择,自然让YiFactory的优势获得评委们的青睐。https://bbs.huaweicloud.com/forum/thread-12477-1-1.html 2. 距离空间分析交互平台Magnet Smart Networking 是一家专注于连接人和周遭空间的智能高新科技公司,也是首家能够在2D和AR中精准定位的同时,在地图上显示出个人在空间内的活动位置及定制化个人信息的公司。  通过深度分析用户行为(例如动作模式),提升用户间交互,旨在帮助用户为他们的顾客提供实时个性化的定制,现场演示生动且有趣。https://bbs.huaweicloud.com/forum/thread-12476-1-1.html 三等奖  1. 智慧电表当前抄表业务存在效率低下、故障检测难、电力应用缺少科学的检测与统计等问题,来自智洋的团队给出了精彩的答案。 通过分析LPWA的需求及应用场景,基于Huawei LiteOS和Boudica V120芯片,充分发挥优势NB-IoT的优势,并打通到OceanConnect的连接,通过软硬件一体化解决方案,助力智慧城市升级。https://bbs.huaweicloud.com/forum/thread-12478-1-1.html 2. 温湿度采集器通过NB-IoT无线通讯技术,与温湿度传感器的有效结合,实现了冷链产品的温湿度信息与工作状态的实时监控与管理。这一项目的开发者,来自利尔达冷链应用组。  该项目可广泛应用于冷库、冷藏车、冷柜、冰箱等全冷链过程的食品和药物温湿度监控,实现市场需求和冷链资源间的高效匹配对接,降低系统成本,提高冷链资源综合利用率。https://bbs.huaweicloud.com/forum/thread-12481-1-1.html 3. 智慧路灯基于石墨烯LED路灯和物联网的智慧路灯系统从物理层面大幅降低城市路灯能源消耗的同时,更加实现了路灯自动巡检和集中管控,来自上海增容数据科技有限公司的团队,带来了这城市级新型智慧照明解决方案。  基于华为海思Hi2110平台的医院BC95模组,使用Huawei LiteOS做任务调度,对接OceanConnect云平台,提供高亮长寿命照明、先进的控制系统、丰富的接口支持、多个智慧系统链接。 https://bbs.huaweicloud.com/forum/thread-12480-1-1.html最佳创意奖 智能远程医疗监测来自迪格微电子有限公司的团队,现场开发并完成了远程实时健康监测的项目。https://bbs.huaweicloud.com/forum/thread-12482-1-1.html 随着颁奖的结束,Huawei LiteOS Hackathon上海站也步入尾声,列席嘉宾应邀做最后的简短演讲,与在场开发者分享。 华为物联网产业生态发展部部长吴晓东表示,本次大赛团队项目覆盖度很广,包含了建筑、医疗、工业等行业,看到了很多自己工作领域外的创意项目。 兆易创新产品市场总监金光一为参赛者提出了宝贵建议,参赛项目可以在方案中多加完善商业化方面的内容,细化项目领域,这样才更能吸引到投资人。 ARM嵌入式市场经理杨瑞叮嘱创业团队在有项目想法的时候,不要急着动手,先研究一下本领域是否已有先例是否成功,如若失败了要多学习失败心得。云汉芯城市场副总裁李剑峰欣喜于看到初创团队和在校学生参与到物联网的发展中来,希望开发者团队多关注项目的市场性、安全性、行业门槛、专利产品等方面的问题,这样更能事半功倍。比赛宣布结束,各个团队将各奔东西,回归原本的工作生活。愿两天一夜的黑客马拉松,能为你们留下美好的回忆,带给你们拼搏的动力、积极的勇气、自觉的高效。整个2017年,Huawei LiteOS共举办了三届黑客马拉松。从北京、深圳、上海这一路走来,越来越多志同道合的物联网开发爱好者或开源爱好者同我们一起,通过线上或线下的积极参与,为华为物联网的开发者生态建设,画上浓墨重彩的一笔。而我们共同的18年,即将启航。
总条数:623 到第
上滑加载中