liuduanfei
liuduanfei
This guy hasn't written anything yet

注册于 2 years ago

回答
318
文章
1
关注者
5

看门狗根据功能一般有 独立看门狗(IWDG),窗口看门狗(WWDG),看门狗定时器(WDT),还有芯片叫做看门狗计数器。。。😂建议看芯片手册,看看这些狗的区别吧。

裸机怎么写,,rtt下怎么写 没什么区别

直接用 rt-studio 不香嘛,rt-studio是基于Eclipse的😂。

按照标准应该在./components/drivers/include/drivers/目录下,直接包含rtdevice.h就行,估计是当时直接放在./components/drivers/sensors/目录下,后来又补充到include目录下的吧😂

image.png
系统没跟新吧,截图是最新的,添加了RT_SENSOR_CLASS_TOF的支持。

网上搜了一下

其实是使用GCC编译的问题。对GCC还是要多了解些。

修改STM32的固件库V3.5的core_cm3.c文件:

uint32_t __STREXB(uint8_t value, uint8_t *addr)
{
   uint32_t result=0;

   //__ASM volatile ("strexb %0, %2, [%1]" : "=r" (result) : "r" (addr), "r" (value) );//yiming del 2012.04.09
   __ASM volatile ("strexb %0, %2, [%1]" : "=&r" (result) : "r" (addr), "r" (value) );//yiming add 2012.04.09
   return(result);
}

uint32_t __STREXH(uint16_t value, uint16_t *addr)
{
   uint32_t result=0;

   //__ASM volatile ("strexh %0, %2, [%1]" : "=r" (result) : "r" (addr), "r" (value) );//yiming del 2012.04.09
   __ASM volatile ("strexh %0, %2, [%1]" : "=&r" (result) : "r" (addr), "r" (value) );//yiming add 2012.04.09
   return(result);
}

看这个是否可以呢

/* recursive search .mp3 file */
static void music_scan(char *path)
{
    DIR *dirp = RT_NULL;
    int len = 0;

    struct dirent *d = RT_NULL;
    struct stat sta;
    struct music *new;

    dirp = opendir(path);
    chdir(path);
    while((d = readdir(dirp)) != NULL)
    {
        stat(d->d_name,&sta);
        if(!(rt_strcmp(d->d_name,".") && rt_strcmp(d->d_name,"..")))
        {
            continue;
        }

        if(S_ISDIR(sta.st_mode))
        {
            music_scan(d->d_name);
        }

        len = rt_strlen(d->d_name);

        if(!(rt_strcmp(&d->d_name[len-4],".mp3")))
        {
            new = rt_calloc(1, sizeof(struct music));
            new->num = music_num++;
            rt_strncpy(new->mname, d->d_name, len);
            if (!getcwd(new->mpath, PATH_LEN))
            {
                LOG_E("get dir failed!");
            }
            rt_sprintf(new->mpath, "%s/%s",new->mpath, new->mname);
            rt_list_insert_before(&music, &new->list);
        }
    }
    closedir(dirp);

    /* back to the root dir */
    chdir("/");
}

参考这个代码,这是递归查找当前目录下所有的.mp3文件。换成你自己的逻辑就行了。

很明显,BSP_USING_I2C1 下面都是灰色的,说明没有地方定义这个宏。你需要在 board.h 中自己定义相应的宏和引脚配置。

/* recursive search .mp3 file */
static void music_scan(char *path)
{
    DIR *dirp = RT_NULL;
    int len = 0;

    struct dirent *d = RT_NULL;
    struct stat sta;
    struct music *new;

    dirp = opendir(path);
    chdir(path);
    while((d = readdir(dirp)) != NULL)
    {
        stat(d->d_name,&sta);
        if(!(rt_strcmp(d->d_name,".") && rt_strcmp(d->d_name,"..")))
        {
            continue;
        }

        if(S_ISDIR(sta.st_mode))
        {
            music_scan(d->d_name);
        }

        len = rt_strlen(d->d_name);

        if(!(rt_strcmp(&d->d_name[len-4],".mp3")))
        {
            new = rt_calloc(1, sizeof(struct music));
            new->num = music_num++;
            rt_strncpy(new->mname, d->d_name, len);
            if (!getcwd(new->mpath, PATH_LEN))
            {
                LOG_E("get dir failed!");
            }
            rt_sprintf(new->mpath, "%s/%s",new->mpath, new->mname);
            rt_list_insert_before(&music, &new->list);
        }
    }
    closedir(dirp);

    /* back to the root dir */
    chdir("/");
}

参考一下 art-pi-net-player 中扫描mp3文件的实现吧。

查看一下代码,是不是在读取数据的时候有线程让出。你自己没有写不代表没有。

回到
顶部

发布
问题

投诉
建议