小编Col*_*lin的帖子

强制链接器将相同的代码放在 2 个部分中

我试图强制链接器(来自 XC32 的 ld)将相同的可执行代码放置在闪存的两个不同部分中。

该应用程序使得代码可以作为独立应用程序运行,并且复位向量可以被引导加载程序覆盖,然后引导加载程序可以分支到伪复位向量。

我的链接器脚本的相关部分是

MEMORY
{
  kseg1_boot_mem     : ORIGIN = 0xBFC00000, LENGTH = 0x480
  bootload_boot_mem  : ORIGIN = 0x9D1F0000, LENGTH = 0x480
}

SECTIONS
{
  .reset 0xBFC00000 :
  {
    KEEP(*(.reset))
  } > kseg1_boot_mem

  .bootloadreset 0x9D1F0000 :
  {
    KEEP(*(.reset))
  } > bootload_boot_mem
}
Run Code Online (Sandbox Code Playgroud)

使用它,0xBFC00000 处的区域按预期填充,但没有放置在 0x9D1F0000 处。我尝试将选项 --no-gc-sections 传递给链接器,但似乎没有任何区别。

我的问题是:是否可以强制链接器将相同的代码放入 2 个不同的部分,以及如何这样做?

linker pic ld

5
推荐指数
1
解决办法
1085
查看次数

在C++中每个类成员之前是可接受的用法访问说明符

我写了一些代码c ++

public class SomeClass 
{
private: 
   int m_CurrentStatus;
   int m_PreviouseStatus;
public:
   int get_CurrentStatus() { return m_CurrentStatus; }
   int get_PreviouseStatus() { return m_PreviouseStatus; }
}
Run Code Online (Sandbox Code Playgroud)

在c#风格

public class SomeClass 
{
private:  int m_CurrentStatus;
private:  int m_PreviouseStatus;
public:   int get_CurrentStatus() { return m_CurrentStatus; }
public:   int get_PreviouseStatus() { return m_PreviouseStatus; }
}
Run Code Online (Sandbox Code Playgroud)

在每个成员之前这样的用法访问说明符是可以接受的吗?或者麻烦编译器花费更多时间进行编译或其他效果?代码编译成功,没有警告.

c++

5
推荐指数
1
解决办法
110
查看次数

最小化窗口到系统托盘

我已经创建了一个SDL2应用程序,并希望它最小化到系统托盘,而不是出现在任务栏中.

SDL_MinimizeWindow没有做我想要的,它离开任务栏图标.有没有办法用SDL实现这一目标?

windows sdl-2

3
推荐指数
1
解决办法
1079
查看次数

使用 gcc 在 ARM Cortex M4 上交换交替字节的最快方法

我需要在使用 ARM Cortex M4 处理器的嵌入式系统中尽快交换缓冲区中的备用字节。我用的是海湾合作委员会。数据量可变,但最大略高于 2K。转换一些额外的字节并不重要,因为我可以使用超大的缓冲区。

我知道 ARM 有这REV16条指令,我可以用它来交换 32 位字中的交替字节。我不知道的是:

  1. 有没有一种方法可以在 gcc 中获取这条指令而无需求助于汇编程序?该__builtin_bswap16内在函数似乎仅对 16 位字进行操作。一次转换 4 个字节肯定比转换 2 个字节快。

  2. Cortex M4 是否有重排序缓冲区和/或寄存器重命名?如果不是,当我在部分展开的循环中转换缓冲区的双字时,我需要做什么来最大限度地减少管道停顿?

例如,这段代码是否有效,其中REV16适当定义为解决(1):

uint32_t *buf = ... ;
size_t n = ... ;  // (number of bytes to convert + 15)/16
for (size_t i = 0; i < n; ++i)
{
    uint32_t a = buf[0];
    uint32_t b = buf[1];
    uint32_t c = buf[2];
    uint32_t d = buf[3];
    REV16(a, a);
    REV16(b, b);
    REV16(c, c); …
Run Code Online (Sandbox Code Playgroud)

gcc arm endianness

3
推荐指数
1
解决办法
1万
查看次数

是否可以使用STM32生成CAN总线错误?

对于我的项目之一,我想生成一些CAN总线错误(例如,位填充或CRC错误)。

这只是我的一个小主意,但您认为有可能实现吗?我知道所有协议内容都是由CAN驱动程序处理的,但我也不是CAN通信专家,所以也许我有点希望可以实现此错误生成。你怎么看 ?

我正在使用STM32微控制器和TJA CAN收发器。

c embedded can-bus stm32

3
推荐指数
1
解决办法
249
查看次数

标签 统计

arm ×1

c ×1

c++ ×1

can-bus ×1

embedded ×1

endianness ×1

gcc ×1

ld ×1

linker ×1

pic ×1

sdl-2 ×1

stm32 ×1

windows ×1