hunxiyi 发表于 2014-3-5 11:01:09

RTT官方源码里的一个编译警告

1.2.0出来,想移植一下stm32f10x,直接用的是官方源码bsp下面的stm3210x
有3个警告,前两个都是声明,头文件之类的,很好解决
但最后一个警告是:

..\..\libcpu\arm\cortex-m3\context_rvds.S(206): warning: A1581W: Added 2 bytes of padding at address 0xd6





指向这206行。。。。汇编实在 是无能为力

想问一下这个怎么解决啊

aozima 发表于 2014-3-5 11:41:16

写一行NOP即可解决。比如这段汇编最后编译出来是18或19字节,编译器会自动填充成20字节,并给个警告。手动添加一个NOP就20字节了。

Nuker 发表于 2014-3-5 11:42:34

GIYF
关键字padding

Eric2013 发表于 2014-3-5 12:18:57

前几天升级FreeRTOS到V8.0.0的时候,其中的PendSV中断也是这样的,加个NOP指令。

hunxiyi 发表于 2014-3-5 15:43:35

本帖最后由 hunxiyi 于 2014-3-5 15:45 编辑

最下面是application.c里面的内容
我在移植f107的时候,用两个LED灯来交替闪烁
但是只有屏蔽掉int rt_application_init(void)函数中的
init_thread = rt_thread_create("init",
                                 rt_init_thread_entry, RT_NULL,
                                 2048, 8, 20);
语句【71行】时候,实验现象才正确,不屏蔽这句的时候,现象就不正确,只有一个LED常亮

我看论坛写那个RTT例程连载的 jiezhi320 的例程中,有的例子也是屏蔽这个线程初始化,有的又没有屏蔽
不知道这个线程初始化里面哪个东西是有冲突的吗

我的水平刚入门,希望大家不吝赐教,谢谢{:handshake:}

#include <board.h>
#include <rtthread.h>

#include "led.h"

#ifdef RT_USING_DFS
#include <dfs_fs.h>
#endif

#ifdef RT_USING_COMPONENTS_INIT
#include <components.h>
#endif /* RT_USING_COMPONENTS_INIT */

ALIGN(RT_ALIGN_SIZE)
static rt_uint8_t led_stack[ 512 ];
static struct rt_thread led_thread;

static void led_thread_entry(void* parameter)
{
    rt_hw_led_init();

    while (1)
    {
      rt_hw_led_on(0);
      rt_hw_led_off(1);
      rt_thread_delay( RT_TICK_PER_SECOND/2 ); /* sleep 0.5 second and switch to other thread */

      rt_hw_led_off(0);
      rt_hw_led_on(1);
      rt_thread_delay( RT_TICK_PER_SECOND/2 );
    }
}

void rt_init_thread_entry(void* parameter)
{
    {
      extern void rt_platform_init(void);
      rt_platform_init();
    }

#ifdef RT_USING_COMPONENTS_INIT
    /* initialization RT-Thread Components */
    rt_components_init();
#endif

    /* Filesystem Initialization */
#if defined(RT_USING_DFS) && defined(RT_USING_DFS_ELMFAT)
    {
      /* mount sd card fat partition 1 as root directory */
      if (dfs_mount("sd0", "/", "elm", 0, 0) == 0)
      {
            rt_kprintf("File System initialized!\n");
      }
      else
      {
            rt_kprintf("File System initialzation failed!\n");
      }
    }
#endif /* RT_USING_DFS && RT_USING_DFS_ELMFAT */
}

int rt_application_init(void)
{
    rt_thread_t init_thread;

    rt_err_t result;


   
#if (RT_THREAD_PRIORITY_MAX == 32)
//    init_thread = rt_thread_create("init",
//                                 rt_init_thread_entry, RT_NULL,
//                                 2048, 8, 20);
#else
    init_thread = rt_thread_create("init",
                                 rt_init_thread_entry, RT_NULL,
                                 2048, 80, 20);
#endif

    if (init_thread != RT_NULL)
    {
      rt_thread_startup(init_thread);
    }
   
    /* init led thread */
    result = rt_thread_init(&led_thread,
                            "led",
                            led_thread_entry,
                            RT_NULL,
                            (rt_uint8_t*)&led_stack,
                            sizeof(led_stack),
                            20,
                            5);
    if (result == RT_EOK)
    {
      rt_thread_startup(&led_thread);
    }
   
    return 0;
}

hunxiyi 发表于 2014-3-5 15:46:14

aozima 发表于 2014-3-5 11:41
写一行NOP即可解决。比如这段汇编最后编译出来是18或19字节,编译器会自动填充成20字节,并给个警告。手动 ...

非常感谢,问题已经解决了
可现在一个新的问题,麻烦你看一下
在5楼,谢谢!

hunxiyi 发表于 2014-3-5 15:46:43

Eric2013 发表于 2014-3-5 12:18
前几天升级FreeRTOS到V8.0.0的时候,其中的PendSV中断也是这样的,加个NOP指令。 ...

非常感谢你,确实加个NOP就行了
现在有个新的问题麻烦你一下
在5楼,谢谢

Eric2013 发表于 2014-3-5 17:34:07

hunxiyi 发表于 2014-3-5 15:46
非常感谢你,确实加个NOP就行了
现在有个新的问题麻烦你一下
在5楼,谢谢 ...

不好意思哈,我还没有学过RTT,只学过我签名中的几个

hunxiyi 发表于 2014-3-5 19:00:21

Eric2013 发表于 2014-3-5 17:34
不好意思哈,我还没有学过RTT,只学过我签名中的几个

同样谢谢!你啊{:handshake:}
页: [1]
查看完整版本: RTT官方源码里的一个编译警告