TencentOS tiny is a real-time operating system developed by Tencent for the Internet of Things

Overview

开放原子开源基金会首批孵化项目

license PRs Welcome Build status

(English Documents Available)

一、TencentOS Tiny 简介

TencentOS tiny 是腾讯面向物联网领域开发的实时操作系统,具有低功耗,低资源占用,模块化,安全可靠等特点,可有效提升物联网终端产品开发效率。TencentOS tiny 提供精简的 RTOS 内核,内核组件可裁剪可配置,可快速移植到多种主流 MCU (如 STM32 全系列)及模组芯片上。而且,基于 RTOS 内核提供了丰富的物联网组件,内部集成主流物联网协议栈(如 CoAP/MQTT/TLS/DTLS/LoRaWAN/NB-IoT 等),可助力物联网终端设备及业务快速接入腾讯云物联网平台。

1、TencentOS tiny整体架构

TencentOS tiny 主体架构图,从下到上主要包括:

CPU 库 :TencentOS tiny 支持的 CPU IP 核架构,当前主要支持 ARM Cortex M0/3/4/7,Cortex A7,RISC-V、MSP430、AVR、STM8 等。

驱动管理层 :包括板级支持包(BSP,主要由 MCU 芯片厂家开发与维护)、硬件抽象层(HAL,主要由 TencentOS tiny 提供,方便不同芯片的适配与移植)、设备驱动(Drivers,例如 Wi-Fi、GPRS、LoRa 等模块的驱动程序)。

内核 :TencentOS tiny 实时内核包括任务管理、实时调度、时间管理、中断管理、内存管理、异常处理、软件定时器、链表、消息队列、信号量、互斥锁、事件标志等模块。

IoT 协议栈:TencentOS tiny 提供 lwip、AT Adapter、SAL 层,支持不同的网络硬件,例如以太网、串口 Wi-Fi、GPRS、NB-IoT、4G 等通信模块。TCP/IP 网络协议栈上提供常用的物联网协议栈,例如 CoAP、MQTT,支撑终端业务快速接入腾讯云。

安全框架:TencentOS tiny 为了确保物联网终端数据传输安全以及设备认证安全,提供了完整的安全解决方案。安全框架提供的 DTLS 和 TLS 安全协议,加固了 COAP 及 MQTT 的传输层,可确保物联网终端在对接腾讯云时实现安全认证和数据加密;另外针对低资源的终端硬件,安全框架还提供与腾讯云 IoTHub 配套的密钥认证方案,确保资源受限设备也能在一定程度上实现设备安全认证。

组件框架:TencentOS tiny 提供文件系统、KV 存储、自组网、JS 引擎、低功耗框架、设备框架、OTA、调试工具链等一系列组件,供用户根据业务场景选用。

开放 API(规划开发中):TencentOS tiny 将在协议中间件和框架层上提供开放 API 函数,方便用户调用中间件功能,使用户无需过多关心中间件具体实现,快速对接腾讯云,实现终端业务上云的需求,期望最大程度减少终端物联网产品开发周期,节省开发成本。

示例应用:TencentOS tiny 提供的示例代码,模块测试代码等,方便用户参考使用。

2、TencentOS tiny 优势

(1).小体积

最小内核:RAM 0.6KB,ROM 1.8KB 典型 LoraWAN 及传感器应用:RAM 3.3KB,ROM 12KB

(2).低功耗

休眠最低功耗低至 2uA 支持外设功耗管理框架

(3).丰富的 IoT 组件

集成主流 IoT 协议栈 多种通信模组SAL层适配框架; 支持 OTA 升级 提供简单易用端云 API,加速用户业务接入腾讯云

(4).可靠的安全框架

多样化的安全分级方案 均衡安全需求&成本控制

(5).良好的可移植性

内核及IoT组件高度解耦,提供标准适配层 提供自动化移植工具,提升开发效率

(6).便捷的调试手段

提供云化的最后一屏调试功能 故障现场信息自动上传云平台,方便开发人员调试分析

3、TencentOS tiny携手合作伙伴共建IoT生态

TencentOS tiny 自开源发布以来也在努力发展合作伙伴,期待合作共赢,共同扩展 IoT 应用生态。目前已经与多家 MCU/IP 核厂家达成了合作,包括意法半导体、恩智浦半导体、兆易半导体、ARM、华大半导体、芯来科技等;也与无线 SOC 和模组厂家达成了广泛的合作关系,包括瑞兴恒方、国民技术、Nordic 蓝牙、亮牛半导体、有人物联网等,

除了MCU和模组外,TencentOS tiny 也积极推进终端产品及项目的落地,目前已经形成了AI智慧农业、智能货柜、智慧会议室等方案,并且在腾讯内部与微信支付、腾讯云智慧行业、 AI 平台部、腾讯微瓴、QQ family 达成内部合作,共同扩展行业生态;同时也开始积极发展外部客户,目前与深圳光合显示科技的墨水屏零售标签、鑫悦购充电桩等达成业务合作。TencentOS tiny 将携手合作伙伴为物联网终端厂家提供更优质的 IoT 终端软件解决方案,方便各种物联网设备快速接入腾讯云,共同扩展 IoT 生态,更好地支撑智慧城市、智能水表、智能家居、智能穿戴、车联网等多种行业应用。

欢迎 IoT 相关项目合作,有合作需求的请邮件联系 TencentOS tiny 官方工作人员,邮箱地址 : [email protected]

二、TencentOS tiny 代码目录

三、TencentOS tiny 参考文档

1、移植指南

2、TencentOS tiny 开发指南

3、TencentOS tiny 腾讯云大学视频教程

四、TencentOS tiny 开源协议

五、TencentOS tiny 支持的物联网平台

TencentOS tiny 能支持物联网终端设备和业务快速接入腾讯云物联网平台 IoT Explorer

TencentOS tiny 结合腾讯云物联网开发平台 IoT Explorer,已经构筑起连接通讯芯片到云开发的能力,加上已经建设完成的国内最大规模 LoRa 网络,腾讯彻底打通从芯片通讯开发、网络支撑服务,物理设备定义管理,数据分析和多场景应用开发等全链条IoT云开发服务能力,重新定义了物联网开发模式,助力亿级设备多方式多模式低门槛接入腾讯云服务。作为物联网基础设施建设服务者,腾讯将持续打造开放的物联网生态体系,促进物联网生态良性发展。

六、TencentOS tiny 快速入门参考

TencentOS tiny 联合合作伙伴(南京厚德物联网)设计了定制开发板,如下图:

七、贡献代码

    1. 在您自己的 GitHub 账户下 Fork TencentOS tiny 开源项目;
    1. 根据您的需求在本地 clone 一份 TencentOS tiny 代码;
    1. 您修改或者新增功能后,push 到您 fork 的远程分支;
    1. 创建 pull request,向 TencentOS tiny 官方开发分支提交合入请求;
    1. TencentOS tiny 研发团队会定期 review 代码,通过测试后合入。

八、加入TencentOS tiny官方QQ技术交流群

扫码加群,请备注 TencentOS tiny 开发者,工作人员会根据备注进行审核:

九、第三方开发者评测

1.基于 TencentOS tiny 的环境监测实战项目 【TencentOS tiny】环境监测实战项目最终完整版 感谢阿正的贡献

2.基于野火 stm32f103 开发板上移植的 TencentOS tiny 例程、源码剖析、视频讲解。 感谢 CSDN 博客专家杰杰的贡献

简单上手:

深度源码分析:

配套例程:

视频教程:

相关PPT资料:

Comments
  • 关于使用MQTT接收数据时遇到错误,导致了程序硬复位

    关于使用MQTT接收数据时遇到错误,导致了程序硬复位

    我将Tencentos移植到主芯片为stm32的程序中,使用4g模块接收服务器的数据(mqtt格式),但在做测试时发现一个导致程序复位的问题:解析消息时长度不对,不知道有没有人遇到过同样的问题,求解!

    我的接收任务如下: `static void mqtt_rec_task(void *arg) { uint8_t read_data[256]; int read_len = 0; k_err_t err;

    while (1) {
    	err = tos_sem_pend(&sem_rec, TOS_TIME_FOREVER);
    
    	//收取MQTT消息
    	read_len = tos_mqtt_receive(rec_topic, rec_topic_len, read_data,
    			sizeof(read_data));
    	if (read_len >= 0) {
    		read_data[read_len] = 0;
    		if(read_len >= 3) {
    			iDebugPrint(DBG_LEV_VERBOSE,
    					"---------->topic: %s, payload: %02x%02x%02x, payload_len: %d\r\n",
    					rec_topic, read_data[0], read_data[1], read_data[2], read_len);
    		}
    		if (rec_data_pro_fun) {
    			rec_data_pro_fun(read_data, read_len);
    		}
    		mqtt_connected_state = 1;
    	}
    
    	if (err != K_ERR_NONE) {
    
    	}
    }
    

    }`

    遇到问题后调试定位到tos_mqtt_receive函数中,为详细查找问题,在里面添加了打印函数,其它代码不动: `int tos_mqtt_receive(char *topic, int topic_len, unsigned char *payload, int payload_len) { int topic_copy_len, qos; unsigned char dup, retained; unsigned short packet_id; unsigned char *incoming_data; int incoming_data_len, payload_copy_len; MQTTString incoming_topic; unsigned char buffer[BUFFER_LEN];

    if (MQTTPacket_read(buffer, sizeof(buffer), transport_getdata) != PUBLISH)	 {
        return -1;
    }
    
    if (MQTTDeserialize_publish(&dup, &qos, &retained, &packet_id,
                                    &incoming_topic, &incoming_data, &incoming_data_len,
                                    buffer, sizeof(buffer)) != 1) {
        return -1;
    }
    
    if (payload) {
        payload_copy_len = incoming_data_len < payload_len ? incoming_data_len : payload_len;
        /**printf("len_2:%d\n",payload_copy_len);**/
        memcpy(payload, incoming_data, payload_copy_len);
    }
    
    if (topic) {
        topic_copy_len = incoming_topic.lenstring.len < topic_len ? incoming_topic.lenstring.len : topic_len;
        /**printf("len_3:%d\n",topic_copy_len);**/
        strncpy(topic, incoming_topic.lenstring.data, topic_copy_len);
        if (topic_copy_len <= topic_len - 1) {
            topic[topic_copy_len] = '\0';
        }   
    }
    
    return incoming_data_len;
    

    } `

    接收一帧完整的消息LOG如下: V:len_1:38

    [09:45:25.732]收←◆V:len_2:3 V:len_3:31 V:---------->topic: vehicle/541235795641023/control, payload: 020301, payload_len: 3

    分两次接收如下: V:len_1:27

    [09:45:13.811]收←◆V:len_1:11 V:len_2:3 V:len_3:31 V:---------->topic: vehicle/541235795641023/control, payload: 020301, payload_len: 3

    出问题的LOG如下: V:len_1:13

    [09:45:51.701]收←◆V:len_1:25

    [09:45:51.731]收←◆V:len_2:-1410437840 //以下是复位LOG I:============================== I: HELLO WORLD I:============================== I:--------SYSTEM RESET STATE CHECK-------- E:System Software reset E:System Pin reset I:---------------------------------------- I:host task create

    tos_mqtt_receive函数中payload_copy_len 的数据为负数,小于我定的payload_len,而在下一句数据拷贝时导-1410437840(补码0xABEE 6D30‬)太大而导致数组溢出。

    求解: 为什么MQTTDeserialize_publish会导致这个问题

    opened by yintianlan 11
  • 一些期盼和设想

    一些期盼和设想

    最近国内各大厂商都在做物联网操作系统的东西,我都十分关注。从最早的华为LiteOS,当下火热的RT-Thread,还有稍有亮色的AliOS-things,小厂如SylixOS,都江堰OS之类的林林总总.....,感叹我大汉民族正在文艺复兴的同时,又不免心生悲凉。。。 对比老牌的uC-OS\Contiki\freeRTOS,我们的特色在哪里?RT-Thread,AliOS-things,还是给了点骄傲,先不论内核的先进性,RT-Thread,AliOS-things易用性还算有起色,RT-Thread的仿Linux编译模式,AliOS-things的SCons再次封装包裹,都给开发者带来了不一样的体验,但用起来还是那么的笨拙。JAVA、Node程序员永远不知道嵌入式程序员的苦,嵌入式程序员永远不知道纯软程序员的爽。 不想长篇大论了,我感觉STM32CubeMx+freeRTOS正走在我梦想的道路上,但生态还局限在STM系列内。Arm MBedOS在Porting过程中还算及格。至于RT-Thread,想法挺好,但用起来真的想吐槽。 我想说的是什么?其实很简单。就是能不能把你们的系统内核、组件的颗粒度做小,配置方便些,组件化编程。做个包管理器,做个脚手架配置。真的难吗?另外,我真的不想用Keil了,最好把C也放到板凳上,用Rust好吗? 还有,清华本科的学生一样都能做的(https://github.com/rcore-os/rCore)东西,作为大厂,你们的颜面何在?

    opened by j-w-huang 11
  • 未初始化结构体成员被使用问题

    未初始化结构体成员被使用问题

    下边是一些由于使用kernel/core/tos_task.c中的tos_task_create函数造成的使用未初始化变量的问题,某些情况下会创建task失败。如果有不当的地方请见谅!

    宏定义TOS_CFG_OBJECT_VERIFY_EN > 0u 因为在tos_task_create第100行的宏定义TOS_OBJ_TEST_RC中调用了knl_object_verify这个函数,这个函数使用了tos_task_create第一个参数task的成员task->knl_obj.type

    1、components/connectivity/mqttclient/common/log/arch/tencentos-tiny/arch.c
    33行: salof_alloc为task申请的内存,没有初始化 35行: &task作为参数传递给tos_task_create 修复:这个好像没有salof_calloc,可以用tos_mmheap_calloc替换,但是破坏代码一致性了

    2、components/connectivity/mqttclient/platform/TencentOS-tiny/platform_thread.c
    21行:platform_memory_alloc为thread申请内存,没有初始化 24行:&(thread->thread)作为参数传递给tos_task_create 修复:platform_memory_alloc换成platform_memory_calloc

    3、osal/posix/pthread.c
    554行:tos_mmheap_alloc为stackaddr申请内存,没有初始化 564行:把stackaddr的地址赋给了the_ctl 585行:&the_ctl->ktask作为参数传递给tos_task_create了 修复:使用tos_mmheap_calloc

    4、kernel/core/tos_task.c 补充宏定义TOS_CFG_TASK_DYNAMIC_CREATE_EN > 0u 253行:tos_mmheap_alloc为the_task申请内存,没有初始化 265行: the_task作为参数传递给tos_task_create了 修复:使用tos_mmheap_calloc

    对于以上问题的修复使用了calloc,但是calloc使用了memset,性能开销可能比较大,如果其它成员不存在未初始化使用的话,可以考虑单独为task->knl_obj.type赋值初始化。

    opened by tluio 9
  •  error: redefinition of typedef 'k_task_t'

    error: redefinition of typedef 'k_task_t'

    我试图将tos移植到一块RISC-V架构的蓝牙开发板上,使用gcc 4.5.1进行编译,在编译第一个文件tos_completion.o就报如题错误,查看了一下源码,确实在tos_pend.h中有如下代码

    typedef struct k_task_st k_task_t;

    而在tos_task.h 文件中有这个结构体的具体定义

    typedef struct k_task_st {
    /************/
    }k_task_t;
    

    我用别的GCC编译器编译这些代码是没有问题的,但是使用我这个平台的GCC编译就报错。

    我将tos_pend.h中的部分代码修改为如下形式

    typedef struct k_task_st {
    /************/
    };
    

    修改后可以编译通过。 目前还没有移植成功,请问我这样更改是不是会有其他问题?

    opened by ospanic 5
  • No tos_hal_uart_read() function in /net/at/src/tos_at.c

    No tos_hal_uart_read() function in /net/at/src/tos_at.c

    According to my understanding, there should be one task in tos_at.c which can keep receiving data from the UART port and store the data in recv_cache of AT_AGENT. However, I cannot find that tos_hal_uart_read() implemented in tos_at.c and I am also facing problems letting my Wi-Fi module (ESP8266) function properly.

    opened by txaty 4
  • [bug] fixed in sim7600ce.c

    [bug] fixed in sim7600ce.c

    1. if (rssi == 99 || ber != 99) { return -1; } this is a bug, as datasheet show, value 99 means 'not known or not detectable', so it should been fixed as below: if (rssi == 99 || ber == 99) { return -1; }
    opened by DavidLin1577 4
  • components/fs/kv/tos_kv.c中内存泄漏问题

    components/fs/kv/tos_kv.c中内存泄漏问题

    在tos_kv.c中发现了一些疑似内存泄漏的问题,不知道是否可以触发,建议检查一下 1、如果第344行和340行的if语句都为假,第329行为prev_key申请的内存会泄露 2、如果621行的item_out为NULL,并且从624行返回的话,第571行为item申请的内存以及第261行为kv_buf申请的内存会泄露

    opened by tluio 3
  • for NUCLEO_STM32L073RZ board, added lorawan example in IAR, and added support for LIS3MDL and LPS22…

    for NUCLEO_STM32L073RZ board, added lorawan example in IAR, and added support for LIS3MDL and LPS22…

    for NUCLEO_STM32L073RZ board, added lorawan example in IAR, and added support for LIS3MDL and LPS22HB sensors

    1. modified the HTS221: removed magic numbers, added a sensor_tempnhumi_t struct to accommodate temperature and humidity data
    2. added .h and .c files for LIS3MDL magnetic sensor
    3. added .h and .c files for LPS22HB pressure sensor
    4. added IAR (EWARM) project for lorawan example
    5. added bsp.c and bsp.h to manager the sensors
    opened by jieranzhi 3
  • devices/rhf76_lora/RHF76.c的函数rhf76_incoming_data_process数组处理错误

    devices/rhf76_lora/RHF76.c的函数rhf76_incoming_data_process数组处理错误

    1.定义__STATIC__ char incoming_data_buffer[128];,数组长度是128,但是在函数内部 memset(incoming_data_buffer, 0x00, 512));,此时清零的长度是512,这会导致内存泄漏 应该修复成memset(incoming_data_buffer, 0x00, 128));,但为了避免类似错误,使用 memset(incoming_data_buffer, 0x00, sizeof(incoming_data_buffer)); 2.STATIC char incoming_data_buffer[128]; but in function memset(incoming_data_buffer, 0x00, 512); define is 128, memset is 512. 3. so we fixed this replace with 'sizeof(incoming_data_buffer)', just like this 'memset(incoming_data_buffer, 0x00, sizeof(incoming_data_buffer));'

    opened by DavidLin1577 3
  • about function tos_list_add_tail

    about function tos_list_add_tail

    API STATIC_INLINE void tos_list_add_tail(k_list_t *node, k_list_t *list) { _list_add(node, list->prev, list); }

    Should the function meaned tos_list_add_prev?

    opened by yang-an-china 3
  • printf

    printf

    Hi please pre-define/enable/disable printf in tos_klib.h some like this:

    /* in config file */
    //#define USE_PRINTF 
    #define PRINTF(...)
    
    
    // currently we use default microlib supplied by mdk
    #define tos_kprintf(...)         PRINTF(__VA_ARGS__);
    
    #define tos_kprintln(...)   \
        PRINTF(__VA_ARGS__); \
        PRINTF("\n");
    
    #define TOS_ASSERT_AUX(exp, function, line) \
        if (!(exp)) { \
            tos_kprintln("assert failed: %s %d\n", function, line); \
            tos_knl_sched_lock(); \
            tos_cpu_int_disable(); \
            while (K_TRUE) { \
                ; \
            } \
        }
    
    opened by Wiz-IO 3
  • Add micropython component

    Add micropython component

    • commit 7cc072b 中改正了动态创建任务不能正确销毁的问题
    • commit affe557 中对 stm32l4xx 的 tos_hal_uart.c 中 tos_hal_uart_init 函数进行了一点小修改
    • commit f93d085 中开启了小熊派开发板的 quadspi 和 sdmmc 功能
    • commit 1514f1c 中增加了小熊派开发板上的 Flash 芯片 w25q64JV 的驱动,依赖于 commit f93d085
    • commit afeaebd 中在小熊派开发板上增加了 fatfs_through_vfs demo,这个 demo 可能会出现 ROM 空间不足的问题,把 logo.h 注释掉可以解决这个问题,依赖于 commit 1514f1c
    • commit dd76146 中增加了 MicroPython 的核心代码和移植代码,依赖于 commit 7cc072b 和 affe557
    • commit 3e4ceb8 中在小熊派开发板上增加了 MicroPython 的 demo 工程。其中,micropython_basic_demo 是基础版的 demo,micropython_extra_demo 是扩展版的demo,详情可以查看 micropython_basic_demo 工程目录下的 README.md 了解基本用法。依赖于 commit 1514f1c 和 dd76146。
    opened by KY-zhang-X 1
  • 接收的消息同时含有期望的字符串和“OK”时,at_echo->__expect_notify还没来得及获取,at_echo->status = AT_ECHO_STATUS_EXPECT;就立马有被任务“at_parser”更新成at_echo->status = AT_ECHO_STATUS_OK;

    接收的消息同时含有期望的字符串和“OK”时,at_echo->__expect_notify还没来得及获取,at_echo->status = AT_ECHO_STATUS_EXPECT;就立马有被任务“at_parser”更新成at_echo->status = AT_ECHO_STATUS_OK;

        if (at_parse_status == AT_PARSE_STATUS_EXPECT) {
            at_echo->status = AT_ECHO_STATUS_EXPECT;
            if (at_echo->__is_expecting) {
                tos_sem_post(&at_echo->__expect_notify);
            }
        } else if (at_parse_status == AT_PARSE_STATUS_OK) {
            if (!at_echo->__is_expecting) {
            	at_echo->status = AT_ECHO_STATUS_OK;
                tos_sem_post(&at_echo->__status_set_notify);
            }
        } else if (at_parse_status == AT_PARSE_STATUS_FAIL) {
            at_echo->status = AT_ECHO_STATUS_FAIL;
            if (!at_echo->__is_expecting) {
                tos_sem_post(&at_echo->__status_set_notify);
            }
        } else if (at_parse_status == AT_PARSE_STATUS_ERROR) {
            at_echo->status = AT_ECHO_STATUS_ERROR;
            if (!at_echo->__is_expecting) {
                tos_sem_post(&at_echo->__status_set_notify);
            }
        }
    
    opened by zhaoxwgit 3
  • TencentOS Tiny 捐赠开放原子开源基金会后第一次导师会议纪要

    TencentOS Tiny 捐赠开放原子开源基金会后第一次导师会议纪要

    (一)会议概况 参会人员 马涛、许勇、汪礼超、王世伟、赵健、龚旋(有事暂未参加)

    主持人:汪礼超 记录人:王世伟 会议时间:2021年10月19日下午17:30-18:00 会议地点:线上

    (二)议题 议题1: 导师和项目组成员相互简介

    马涛-阿里 基金会TOC

    许勇roger:腾讯开源管理办公室 基金会TOC

    汪礼超supowang:TencentOS-Tiny项目负责人

    赵健jackjzhao:TencentOS-Tiny解决方案负责人

    王世伟vitosw:TencentOS-Tiny开源版本负责人

    并且讨论了关于项目的一些问题: 基金会物联网工作组成立之后的职责?运作方式?(马涛) 基金会物联网工作组停滞是否需要反馈推动?(roger) 关于PR提交者是否及时签署CLA?(roger)

    议题2:同步孵化项目毕业标准 汪礼超向项目组通告了基金会项目孵化毕业标准,告知TencentOS Tiny项目需要在组织规范,责任人员,项目规划,代码合规,质量、github管理方式等方面进行完善。 结论:按照开放原子开源基金会发布孵化项目毕业标准 进行check,列出需要整改的项。

    议题3:导师辅导项目策略 汪礼超向项目组简介了基金会导师辅导项目指南(2021试行版),以及导师的相关职责。 结论: 项目组可以跟导师多进行沟通,反馈问题,寻求帮助。

    项目组在下次导师会议前给出TencentOS Tiny 项目功能开发规划,并给出达到毕业要求需要整改的工作项规划及时间表,完成后发到邮件和github issue; 2021年12月完成项目进展Report,发送给各位TOC 项目辅导前期,导师与项目社区定期沟通,帮助项目发展和给予一定指导:时间暂定为每个月一次,19号左右,如遇节假日顺延到第一个工作日,会议议题提前2周进行采集,并将讨论议题提前5个工作日通过邮件列表和github发布(2021年导师会议:11月19日、12月20日)

    opened by Supowang 0
  • 关于TencentOS-tiny   ota_diff  ring =1 时的patch_test 错误

    关于TencentOS-tiny ota_diff ring =1 时的patch_test 错误

    您好!

    打搅了!不知您是否还在维护这个项目!

    最近在学习TencentOS-tiny,在学习diff ota 部分时发现有的文件产生patch文件时报错。 报错log如下:

    D:\Project\study_obj\c_obj\TencentOS-tiny\TencentOS-tiny\components\ota\tools\diff\out\target>diff.exe -v -b 2048 -n 0.2 -o 0.1 gd_0.1.bin gd_0.2.bin patch.bin RUN bsdiff algorithm ... PARSING bspatch ... VERIFY cmd integrity ... SEARCHING safe block ... BUILD dependency graph ... ANALYSING dependency graph ...

    ====== simplified relied relationship list ====== MAKING final patch ... is ring ][%0]- [################################ ][%31]/ -----------ring=0-------------- [topo_ring_break] graph is ring [#####################################################################################################][%100]/ -----------ring=1--------------

    blk_len=2048 the_blk_len=2048 blk_cnt=87 I=5 N=3 C=21 D=1517 ctrl_blk=0x10BB5A8 diff_blk=10BB5BD extra_blk=10BBBAA cursor: 1517 blk_len=2048 cursor: 1992 blk_len=2048 cursor: 2048 blk_len=2048 I=6 N=2 C=14 D=1992 ctrl_blk=0x10BB5A8 diff_blk=10BB5B6 extra_blk=10BBD7E cursor: 1992 blk_len=2048 cursor: 2048 blk_len=2048 I=7 N=2 C=14 D=1992 ctrl_blk=0x10BB5A8 diff_blk=10BB5B6 extra_blk=10BBD7E cursor: 1992 blk_len=2048 cursor: 2048 blk_len=2048 I=8 N=2 C=14 D=1992 ctrl_blk=0x10BB5A8 diff_blk=10BB5B6 extra_blk=10BBD7E cursor: 1992 blk_len=2048 cursor: 2048 blk_len=2048 I=9 N=2 C=14 D=2048 ctrl_blk=0x10BB5A8 diff_blk=10BB5B6 extra_blk=10BBDB6 cursor: 1992 blk_len=2048 cursor: 2048 blk_len=2048 I=10 N=2 C=14 D=1992 ctrl_blk=0x10BB5A8 diff_blk=10BB5B6 extra_blk=10BBD7E cursor: 1992 blk_len=2048 cursor: 2048 blk_len=2048 I=11 N=2 C=14 D=2048 ctrl_blk=0x10BB5A8 diff_blk=10BB5B6 extra_blk=10BBDB6 cursor: 1992 blk_len=2048 cursor: 2048 blk_len=2048 I=12 N=2 C=14 D=2048 ctrl_blk=0x10BB5A8 diff_blk=10BB5B6 extra_blk=10BBDB6 cursor: 1992 blk_len=2048 cursor: 2048 blk_len=2048 I=13 N=2 C=14 D=2048 ctrl_blk=0x10BB5A8 diff_blk=10BB5B6 extra_blk=10BBDB6 cursor: 1992 blk_len=2048 cursor: 2048 blk_len=2048 I=14 N=2 C=14 D=2048 ctrl_blk=0x10BB5A8 diff_blk=10BB5B6 extra_blk=10BBDB6 cursor: 1992 blk_len=2048 cursor: 2048 blk_len=2048 I=15 N=2 C=14 D=2048 ctrl_blk=0x10BB5A8 diff_blk=10BB5B6 extra_blk=10BBDB6 cursor: 1992 blk_len=2048 cursor: 2048 blk_len=2048 I=16 N=2 C=14 D=2048 ctrl_blk=0x10BB5A8 diff_blk=10BB5B6 extra_blk=10BBDB6 cursor: 1992 blk_len=2048 cursor: 2048 blk_len=2048 I=17 N=2 C=14 D=2048 ctrl_blk=0x10BB5A8 diff_blk=10BB5B6 extra_blk=10BBDB6 cursor: 1992 blk_len=2048 cursor: 2048 blk_len=2048 I=18 N=2 C=14 D=2048 ctrl_blk=0x10BB5A8 diff_blk=10BB5B6 extra_blk=10BBDB6 cursor: 1992 blk_len=2048 cursor: 2048 blk_len=2048 I=19 N=2 C=14 D=1992 ctrl_blk=0x10BB5A8 diff_blk=10BB5B6 extra_blk=10BBD7E cursor: 1992 blk_len=2048 cursor: 2048 blk_len=2048 I=20 N=2 C=14 D=1992 ctrl_blk=0x10BB5A8 diff_blk=10BB5B6 extra_blk=10BBD7E cursor: 1992 blk_len=2048 cursor: 2048 blk_len=2048 I=21 N=2 C=14 D=2048 ctrl_blk=0x10BB5A8 diff_blk=10BB5B6 extra_blk=10BBDB6 cursor: 1992 blk_len=2048 cursor: 2048 blk_len=2048 I=22 N=3 C=21 D=2048 ctrl_blk=0x10BB5A8 diff_blk=10BB5BD extra_blk=10BBDBD cursor: 722 blk_len=2048 cursor: 880 blk_len=2048 cursor: 2048 blk_len=2048 I=23 N=2 C=14 D=2048 ctrl_blk=0x10BB5A8 diff_blk=10BB5B6 extra_blk=10BBDB6 cursor: 880 blk_len=2048 cursor: 2048 blk_len=2048 I=24 N=2 C=14 D=2048 ctrl_blk=0x10BB5A8 diff_blk=10BB5B6 extra_blk=10BBDB6 cursor: 880 blk_len=2048 cursor: 2048 blk_len=2048 I=25 N=2 C=14 D=2048 ctrl_blk=0x10BB5A8 diff_blk=10BB5B6 extra_blk=10BBDB6 cursor: 880 blk_len=2048 cursor: 2048 blk_len=2048 I=26 N=2 C=14 D=2048 ctrl_blk=0x10BB5A8 diff_blk=10BB5B6 extra_blk=10BBDB6 cursor: 880 blk_len=2048 cursor: 2048 blk_len=2048 I=4 N=1 C=7 D=2048 ctrl_blk=0x10BB5A8 diff_blk=10BB5AF extra_blk=10BBDAF cursor: 2048 blk_len=2048 I=3 N=1 C=7 D=2048 ctrl_blk=0x10BB5A8 diff_blk=10BB5AF extra_blk=10BBDAF cursor: 2048 blk_len=2048 I=2 N=1 C=7 D=2048 ctrl_blk=0x10BB5A8 diff_blk=10BB5AF extra_blk=10BBDAF cursor: 2048 blk_len=2048 I=1 N=1 C=7 D=2048 ctrl_blk=0x10BB5A8 diff_blk=10BB5AF extra_blk=10BBDAF cursor: 2048 blk_len=2048 I=0 N=1 C=7 D=2048 ctrl_blk=0x10BB5A8 diff_blk=10BB5AF extra_blk=10BBDAF cursor: 2048 blk_len=2048 I=27 N=2 C=14 D=2048 ctrl_blk=0x10BB5A8 diff_blk=10BB5B6 extra_blk=10BBDB6 cursor: 880 blk_len=2048 cursor: 2048 blk_len=2048 I=28 N=2 C=14 D=2048 ctrl_blk=0x10BB5A8 diff_blk=10BB5B6 extra_blk=10BBDB6 cursor: 880 blk_len=2048 cursor: 2048 blk_len=2048 I=29 N=3 C=21 D=2048 ctrl_blk=0x10BB5A8 diff_blk=10BB5BD extra_blk=10BBDBD cursor: 355 blk_len=2048 cursor: 699 blk_len=2048 cursor: 2048 blk_len=2048 I=30 N=2 C=14 D=2048 ctrl_blk=0x10BB5A8 diff_blk=10BB5B6 extra_blk=10BBDB6 cursor: 684 blk_len=2048 cursor: 2048 blk_len=2048 I=31 N=2 C=14 D=2048 ctrl_blk=0x10BB5A8 diff_blk=10BB5B6 extra_blk=10BBDB6 cursor: 684 blk_len=2048 cursor: 2048 blk_len=2048 I=32 N=2 C=14 D=2048 ctrl_blk=0x10BB5A8 diff_blk=10BB5B6 extra_blk=10BBDB6 cursor: 684 blk_len=2048 cursor: 2048 blk_len=2048 I=33 N=2 C=14 D=2048 ctrl_blk=0x10BB5A8 diff_blk=10BB5B6 extra_blk=10BBDB6 cursor: 684 blk_len=2048 cursor: 2048 blk_len=2048 I=34 N=2 C=14 D=2048 ctrl_blk=0x10BB5A8 diff_blk=10BB5B6 extra_blk=10BBDB6 cursor: 684 blk_len=2048 cursor: 2048 blk_len=2048 I=35 N=2 C=14 D=2048 ctrl_blk=0x10BB5A8 diff_blk=10BB5B6 extra_blk=10BBDB6 cursor: 684 blk_len=2048 cursor: 2048 blk_len=2048 I=36 N=2 C=14 D=2048 ctrl_blk=0x10BB5A8 diff_blk=10BB5B6 extra_blk=10BBDB6 cursor: 684 blk_len=2048 cursor: 2048 blk_len=2048 I=37 N=2 C=14 D=2048 ctrl_blk=0x10BB5A8 diff_blk=10BB5B6 extra_blk=10BBDB6 cursor: 684 blk_len=2048 cursor: 2048 blk_len=2048 I=38 N=2 C=14 D=2048 ctrl_blk=0x10BB5A8 diff_blk=10BB5B6 extra_blk=10BBDB6 cursor: 684 blk_len=2048 cursor: 2048 blk_len=2048 I=39 N=2 C=14 D=2048 ctrl_blk=0x10BB5A8 diff_blk=10BB5B6 extra_blk=10BBDB6 cursor: 684 blk_len=2048 cursor: 2048 blk_len=2048 I=40 N=2 C=14 D=2048 ctrl_blk=0x10BB5A8 diff_blk=10BB5B6 extra_blk=10BBDB6 cursor: 684 blk_len=2048 cursor: 2048 blk_len=2048 I=41 N=2 C=14 D=2048 ctrl_blk=0x10BB5A8 diff_blk=10BB5B6 extra_blk=10BBDB6 cursor: 684 blk_len=2048 cursor: 2048 blk_len=2048 I=42 N=2 C=14 D=2048 ctrl_blk=0x10BB5A8 diff_blk=10BB5B6 extra_blk=10BBDB6 cursor: 684 blk_len=2048 cursor: 2048 blk_len=2048 I=43 N=2 C=14 D=2048 ctrl_blk=0x10BB5A8 diff_blk=10BB5B6 extra_blk=10BBDB6 cursor: 684 blk_len=2048 cursor: 2048 blk_len=2048 I=44 N=2 C=14 D=2048 ctrl_blk=0x10BB5A8 diff_blk=10BB5B6 extra_blk=10BBDB6 cursor: 684 blk_len=2048 cursor: 2048 blk_len=2048 I=45 N=2 C=14 D=2048 ctrl_blk=0x10BB5A8 diff_blk=10BB5B6 extra_blk=10BBDB6 cursor: 684 blk_len=2048 cursor: 2048 blk_len=2048 I=46 N=2 C=14 D=2048 ctrl_blk=0x10BB5A8 diff_blk=10BB5B6 extra_blk=10BBDB6 cursor: 684 blk_len=2048 cursor: 2048 blk_len=2048 I=47 N=2 C=14 D=2048 ctrl_blk=0x10BB5A8 diff_blk=10BB5B6 extra_blk=10BBDB6 cursor: 684 blk_len=2048 cursor: 2048 blk_len=2048 I=48 N=2 C=14 D=2048 ctrl_blk=0x10BB5A8 diff_blk=10BB5B6 extra_blk=10BBDB6 cursor: 684 blk_len=2048 cursor: 2048 blk_len=2048 I=49 N=2 C=14 D=2048 ctrl_blk=0x10BB5A8 diff_blk=10BB5B6 extra_blk=10BBDB6 cursor: 684 blk_len=2048 cursor: 2048 blk_len=2048 I=50 N=2 C=14 D=2048 ctrl_blk=0x10BB5A8 diff_blk=10BB5B6 extra_blk=10BBDB6 cursor: 684 blk_len=2048 cursor: 2048 blk_len=2048 I=51 N=2 C=14 D=2048 ctrl_blk=0x10BB5A8 diff_blk=10BB5B6 extra_blk=10BBDB6 cursor: 684 blk_len=2048 cursor: 2048 blk_len=2048 I=52 N=2 C=14 D=2048 ctrl_blk=0x10BB5A8 diff_blk=10BB5B6 extra_blk=10BBDB6 cursor: 684 blk_len=2048 cursor: 2048 blk_len=2048 I=53 N=5 C=35 D=2046 ctrl_blk=0x10BB5A8 diff_blk=10BB5CB extra_blk=10BBDC9 cursor: 684 blk_len=2048 cursor: 1404 blk_len=2048 cursor: 1566 blk_len=2048 cursor: 1568 blk_len=2048 cursor: 2048 blk_len=2048 ERROR: line number[1325], function[patch_test] msg[wrong patch!] ERROR: line number[1427], function[ota_diff] msg[patch test failed!] ERROR: line number[202], function[make_patch] msg[ota_diff failed ] make patch failed

    ================================= 后来经过不断的测试发现如果ring 为0 就没有问题。如果ring >0 就会包这个错误!

    因此请教一下是不是要先判断图里是否有环,再解环,再处理数据?

    应为对这部分的算法不了解,不知怎么改,所以请教你一下。

    测试的bin文件见附件! diff_ota_testbin.zip

    opened by suncheng7808 1
Releases(v2.5.0)
  • v2.5.0(Mar 23, 2022)

    版本修复内容

    • 修复内核中任务休眠后无法挂起的bug
    • 修复内核中tick值转换ms值的接口问题
    • 修复EC600S模组驱动中重启无法获取到模组ready的问题
    • 修复shell组件的bug

    版本添加内容

    • 内核中添加对于idle任务的保护,无法移除
    • AT框架添加对多模组的支持
    • 添加对于TencentOS-Tiny AIoT开发板的BSP支持
    • 添加对于RISC-V开发板(CH32V307)的BSP支持
    Source code(tar.gz)
    Source code(zip)
  • v2.1.0(Jan 25, 2021)

KePOS is a 64-bit operating system. Design and implement your own operating system

KePOS is a 64-bit operating system. The purpose of this system is to combine the theoretical knowledge and practice of the operating system, and to deepen the understanding of the operating system.

null 65 Jul 27, 2022
Updates the Wii's current system time with the real world time.

Fix Wii System Time This is a homebrew tool I made for the Wii a while ago. It updates the current system time with the real world time via worldtimea

Puzzle 2 Dec 21, 2021
Repository for building and operating REVOLVER: An automatic protein purification system for gravity columns. Developed at the University of Toronto.

REVOLVER: An automated protein purification system This repository contains all the hardware and firmware files to build and operate REVOLVER: an auto

Laboratory for Metabolic Systems Engineering 3 Jun 14, 2022
Final Assignment for Embedded Real Time Operating Systems at UCSD Extension.

Final Assignment for Embedded Real Time Operating Systems at UCSD Extension. This program is for a certificate in Embedded Software Engineering at UCSD. We used FreeRTOS running on a STM32L475G Microcontroller.

Max Guerrero 2 Jun 26, 2022
A tiny operating system specialized for saving a kernel crash dump.

boot2dump A tiny operating system which takes a filename and memory buffer, saves it into the disk, and reboots the computer. It's initially designed

Seiya Nuta 5 Jan 4, 2022
An Operating System made in my spare time.

DarshOS Features Shell/Command Line Keyboard Input Might add in the future File System and Commands for File System IDT Networking GUI Setup / depende

null 8 Jun 29, 2022
Analytics In Real-time (AIR) is a light-weight system profiling tool

Analytics In Real-time Analytics In Real-time (AIR) is a light-weight system profiling tool that provides a set of APIs for profiling performance, lat

null 2 Mar 3, 2022
Fugu/fg is a system for procedurally generating animated geometric forms in real-time

Fugu/fg is a system for procedurally generating animated geometric forms in real-time. Fugu can be downloaded from http://bp.io/fugu, an online refere

Benjamin Porter 1 Sep 18, 2019
Operating system project - implementing scheduling algorithms and some system calls for XV6 OS

About XV6 xv6 is a modern reimplementation of Sixth Edition Unix in ANSI C for multiprocessor x86 and RISC-V systems.

Amirhossein Rajabpour 21 Sep 18, 2022
Hobbyist Operating System targeting x86_64 systems. Includes userspace, Virtual File System, An InitFS (tarfs), Lua port, easy porting, a decent LibC and LibM, and a shell that supports: piping, file redirection, and more.

SynnixOS Epic Hobby OS targeting x86_64 CPUs, it includes some hacked together functionality for most essential OSs although, with interactivity via Q

RaidTheWeb 41 Jul 30, 2022
Libnaomi - Toolchain and system library enabling hobby/homebrew software to be developed for the Sega Naomi platform.

Naomi Toolchain & Libraries A minimal Naomi homebrew environment, very loosely based off of KallistiOS toolchain work but bare metal and implemented f

Jennifer Taylor 20 Jul 20, 2022
Do funny things with your DEF CON 29 badge.

DC29 Badge Stuff What's in the repo Funny music code Firmware used (in case of updates) Dumping/flashing the firmware To access firmware: hold down bo

duk 16 Aug 23, 2021
One of the most useless things I ever made

pios One of the most useless things I ever made About this project This is an operating system with the only purpose of calculating pi (and Euler's nu

Der Bejijing 1 Nov 22, 2021
Do funny things with your DEF CON 29 badge.

DC29 Badge Stuff What's in the repo Funny music code Firmware used (in case of updates) Dumping/flashing the firmware To access firmware: hold down bo

duk 16 Aug 23, 2021
A reviewer can help you memorize things

Reviewer What is a reviewer? A reviewer can help you memorize things Can't memorize things clearly? You probably need to review it everyday. When it c

Bowen Wan 2 Feb 11, 2022
A simple tool used to upgrade things quicker in the online game Rust.

ex0 Rust Tool ??️ What is this? ⚡ This is a simple script with multiple tools such as a code enterer and a auto upgrade feature! ??️ Features ⚡ Any se

Alfie 4 Aug 20, 2022
A set of one-line C++ macros to simplify the creation of reccurent things in Qt projects

QDefs A set of one-line C++ macros to simplify the creation of reccurent things in Qt projects (like Qt Meta Properties) so that doing them in C++ is

null 2 Jan 28, 2022
Real-time 2D fluid simulator with lots of visualization options.

Fluid Simulator Building Start by cloning the program and all submodules using the following command: git clone --recursive https://github.com/linusmo

Linus Mossberg 26 Jun 20, 2022
Real-time application of DIVeR

DIVeR: Real-time CUDA Application This repo contains the code for the real-time application of DIVeR implemented in Python+CUDA. Setup python 3.8 pyto

null 47 Sep 27, 2022