Giter Club home page Giter Club logo

tobudos's People

Contributors

acevest avatar amazingkenneth avatar animala avatar chimeh avatar daishengdong avatar davidlin1577 avatar derekduke avatar illusionlee avatar iysheng avatar jackie11911 avatar jer6y avatar jiejietop avatar jieranzhi avatar ky-zhang-x avatar mculover666 avatar mybays avatar rise0chen avatar royye-tencent avatar royye62 avatar slightc avatar squallbest avatar supowang avatar supowang1989 avatar supperthomas avatar tluio avatar twowinter avatar wangnuannuan avatar wmlhub avatar yangqings avatar yangyuanxin avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

tobudos's Issues

执行make_mac_stm32cubeide_code.sh会删除同目录文件

这个脚本文件在苹果系统执行时,会将同目录的其他文件夹删除,并且不会有任何警告!作为一名刚上手的初学者,这个地方坑了我好几次,删除了我好几个重要文件!对开发者体验很不友好,代码注释较少,没有找到使用文档。
我提交了PR单独修复此文件,请审核,谢谢。

移植时出现KeilMDK 编译报错:error: declaration may not appear after executable statement in block

在 tos_cpu.c 文件中
KNL k_stack_t *cpu_task_stk_init(void *entry,
void *arg,
void *exit,
k_stack_t *stk_base,
size_t stk_size)
{
cpu_data_t *sp;

sp = (cpu_data_t *)&stk_base[stk_size];
sp = (cpu_data_t *)((cpu_addr_t)sp & 0xFFFFFFF8);

#if TOS_CFG_TASK_STACK_DRAUGHT_DEPTH_DETACT_EN > 0u
uint8_t *slot = (uint8_t *)&stk_base[0];
for (; slot < (uint8_t *)sp; ++slot) {
*slot = 0xCC;
}

在keil的编译器中,变量声明不能放在在执行语句之后,在移植的时候会报错。

关于使用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会导致这个问题

IAR环境m3内核移植TencentOS tiny存在pendsv上下文切换汇编问题(本人已解决,但不知是否存在隐患)

本人使用stm32f103cbt6进行开发(m3内核),iar环境下移植tos完成后,执行程序测试调度器,发现跑了3秒左右程序报错,经过一系列调试和错误日志分析,最终跟踪到了tos/arch中的port_s.S文件中,pendsv中断汇编部分存在问题,由于本人不具备分析汇编指令的能力。多次尝试下,考虑到arm-v7m\cortex-m3\iccarm下的port_s.S和arm-v7m\cortex-m0+\iccarm下的port_s.S中的pendsv中断部分有些不同,将arm-v7m\cortex-m0+\iccarm下的port_s.S的pendsv代码段复制到arm-v7m\cortex-m3\iccarm下的port_s.S中,再执行程序,发现程序已经不会存在硬件错误问题。但由于权威因素,本人并不确定其部分的修改是否支持长期稳定。希望能得到反馈。并更新项目。详细问题链接:https://blog.csdn.net/fangjiaze444/article/details/107873748

建议内核类型中新增布尔类型定义k_bool_t

在阅读内核代码过程中,发现多个内核函数返回值使用到布尔量,

#define K_TRUE              (1u)
#define K_FALSE             (0u)

但是部分内核函数定义和声明使用int型(举例如下),建议在tos_ktypes.h中新增k_bool_t类型进行优化,提高可读性

__STATIC__ int event_is_match(k_event_flag_t event, k_event_flag_t flag_expect, k_event_flag_t *flag_match, k_opt_t opt_pend)
{
    if (opt_pend & TOS_OPT_EVENT_PEND_ALL) {
        if ((event & flag_expect) == flag_expect) {
            *flag_match = flag_expect;
            return K_TRUE;
        }
    } else if (opt_pend & TOS_OPT_EVENT_PEND_ANY) {
        if (event & flag_expect) {
            *flag_match = event & flag_expect;
            return K_TRUE;
        }
    }
    return K_FALSE;
}

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));'

md文档有错字

在使用的时候, 并需要全部实现, 只需实现下列几个核心的接口即可: 这句有歧义

关于tos_task_destroy_dyn文档说明有误

__STATIC__ k_err_t task_destroy_dyn(k_task_t *task),
该函数声明如上,文档里的函数名写错了,没有tos_前缀。函数声明为static,并不是一个对外开放的接口,实际销毁动态创建的任务还是调用tos_task_destroy(),然后在tos_task_destroy()内部调用task_destroy_dyn()
文档路径 /doc/05.SDK_Manual.md

GCC 编译警告 & README链接未更新

image
按照移植教程,警告如图所示state_str未初始化,初始化为NULL后警告消失

另外README.md文件的部分链接地址未更新(开发指南等),与./doc/目录下文件名不匹配

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?

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.

TencentOS_tiny_EVB_MX_Plus与TencentOS_tiny_EVB_LX两个开发板的PM25文件出错了

如下文件名是传感器解析,不过内容却是一个shell的实现代码,并不是PM25传感器的驱动代码,请知悉。

TencentOS-tiny/board/TencentOS_tiny_EVB_LX/BSP/Hardware/PM25/sensor_parser.h
TencentOS-tiny/board/TencentOS_tiny_EVB_LX/BSP/Hardware/PM25/sensor_parser.c

TencentOS-tiny/board/TencentOS_tiny_EVB_MX_Plus/BSP/Hardware/PM25/sensor_parser.c
TencentOS-tiny/board/TencentOS_tiny_EVB_MX_Plus/BSP/Hardware/PM25/sensor_parser.h

ICCARM中的port_config.h有bug

启动FPU后会HardFault_Handler 应该是这样写,
#ifndef ARMVFP
#define TOS_CFG_CPU_ARM_FPU_EN 0u
#else
#define TOS_CFG_CPU_ARM_FPU_EN 1u
#endif

在nrf52840上开发TencentOS

您好,在plateform和board中看到有nrf52840的目录,请问是可以直接在nrf52840上运行example下的例程吗?

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 {
/************/
};

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

tos_at.c的at_parser问题

在at_parser的如下代码中,先释放了信号,后拷贝at_echo的buf,在这之间可能发生任务调度导致at_echo被提前释放而hardfault

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_NEWLINE &&
        at_echo->status == AT_ECHO_STATUS_NONE) {
        at_echo_status_set(at_echo);
}

if (at_echo->buffer) {
    at_echo_buffer_copy(recv_cache, at_echo);
}

一些期盼和设想

最近国内各大厂商都在做物联网操作系统的东西,我都十分关注。从最早的华为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)东西,作为大厂,你们的颜面何在?

是否有对树莓派的支持?

目前TencentOS-tiny是否有对任何版本的树莓派的支持?如果暂无但有计划支持,我是否有机会参与对树莓派的BSP开发?PS:甚至目前看到对Cortex-A系列的板子支持非常少,除了已有的支持之外,还需要开发者对哪些板子做内核移植或BSP外设开发或诸如TFlite Micro等推理框架的移植,可以提供一些建议吗?

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) { \
            ; \
        } \
    }

k_mmheap_ctl_t结构体占用3204字节内存,能否优化

嵌入式设备内存本身比较紧张,一般分配的堆内存也不会太大,假设我开辟了一个2K大小的堆,这个用于管理堆内存的结构体使用的空间比我的堆空间还大,很浪费内存。对于STM32F103C8T6这种只有20KB内存的芯片来说,占用3204字节的内存真的太大了,如果使用其他低成本芯片,想要移植TencentOS-tiny就变得非常困难,希望这个结构体能尽快优化

编译后查看map文件如下
k_mmheap_ctl 0x200018d0 Data 3204 tos_global.o(.bss)

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

下边是一些由于使用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赋值初始化。

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申请的内存会泄露

如何编译内核代码?

Linux内核代码在x86平台上编译可以用make menuconfig和make之类的命令,但是该内核源码没有发现Makefile。所以请问应该如何编译该内核代码?

nimble的blehr例程无法搜索到服务

  • 问题现象
    编译,烧录,可以广播,可以连接,但是无法发现服务。
  • 原因
    手机搜索服务时候,start_handle大小端错误0x0001句柄变成了0x0100。
  • 解决方案

将endian.h文件

#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__

改为

#if defined (__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)

diffota may work fail

Hi,
Thanks for your open source for tencentos-tiny and the ota souce code, i test with the diffota, it work well, but some time the makediff tool may work fail.
when use the diff tool,it may not generate the diff file,i am sure the new bin is base the old bin,(the old bin is the preversion,and then i add some funciton base preversion and generate the new bin )
the diff log and the old new bin is listed

图片
图片

v3 v4.zip

net/lwip/port/src/sys_arch.c中内存泄露问题

在net/lwip/port/src/sys_arch.c中好像有一些内存泄露的问题:
227内存申请失败,221行内存泄露
234行任务创建失败,221行,227行内存泄露
255行消息创建失败,250行内存泄露

想请问一下,“任务栈的吃水深度”是什么意思?

doc/5.TencentOS-tiny-SDK文档.md

tos_task_stack_draught_depth

k_err_t tos_task_stack_draught_depth(k_task_t *task, int *depth);
  • 功能描述

    获取一个任务栈的最大吃水深度。

  • 参数解释

    IN/OUT 参数名 描述
    [in] task 任务结构体描述符
    [out] depth 任务栈的吃水深度
  • 返回值

    K_ERR_NONE 任务栈状态正常。

    K_ERR_TASK_STK_OVERFLOW 任务栈溢出。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.