小编Oli*_*ver的帖子

强制gnu make来重建受编译器定义影响的对象

我有一个makefile,它在命令行中获取选项

make OPTION_1=1
Run Code Online (Sandbox Code Playgroud)

根据该值,它将向对象子集添加其他编译器定义.

ifeq ($(OPTION_1), 1)
CC_FLAGS += -DOPTION_1_ON
endif
Run Code Online (Sandbox Code Playgroud)

定义中的更改会影响包含的头文件内容 - 存根或实现会暴露给目标文件.

如何通过此选项更改来重建受影响的文件?

makefile gnu-make

24
推荐指数
1
解决办法
6833
查看次数

在Windows上进行(并行作业)

什么设置适用于GNU在Windows上进行并行作业(-j)?

我已经尝试使用MinGW make 3.81将shell设置为cmd.exe,这适用于创建多个进程但是使用"等待作业"消息失败.

这可以工作,什么是最好的设置?(MinGW/Cygwin/???)有人能指出一个可以测试的工作示例吗?

build-process makefile gnu-make

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

嵌入式平台开发(!C)

我很想知道C的替代品在嵌入式开发者世界中有多受欢迎,例如Ada ......

我只使用过C(带有一点汇编程序),但是我的目标资源非常有限.在这个空间还有什么其他的东西吗?什么赢得了机顶盒的商品?

如果!C的根本原因是什么?

  • 编译器支持目标
  • Trace\static分析工具
  • 其他...

谢谢.

embedded development-environment

14
推荐指数
2
解决办法
2316
查看次数

Python列表过滤:从列表列表中删除子集

使用Python如何通过有序子集匹配减少列表列表[[..],[..],..]

在此问题的上下文中,列表L是列表的子集,M如果M包含所有成员L,并且顺序相同.例如,列表[1,2]是列表[1,2,3]的子集,但不是列表[2,1,3]的子集.

输入示例:

a. [[1, 2, 4, 8], [1, 2, 4, 5, 6], [1, 2, 3], [2, 3, 21], [1, 2, 3, 4], [1, 2, 3, 4, 5, 6, 7]]
b. [[2, 16, 17], [1, 2, 3, 4, 5, 6, 7], [1], [1, 2, 3, 4], [1, 2], [17, 18, 19, 22, 41, 48], [2, 3], [1, 2, 3], [50, 69], [1, 2, 3], [2, 3, 21], [1, 2, 3], …
Run Code Online (Sandbox Code Playgroud)

python list

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

CMake Eclipse构建配置

我想用CMake生成一个Eclipse CDT项目,其中生成的Eclipse项目包含定义的构建类型作为IDE中的可选构建配置.

例如:

if(CMAKE_CONFIGURATION_TYPES)
   set(CMAKE_CONFIGURATION_TYPES PRODUCT_A PRODUCT_B)
   set(CMAKE_CONFIGURATION_TYPES "${CMAKE_CONFIGURATION_TYPES}" CACHE STRING
     "Reset the configurations to what we need"
     FORCE)
 endif()

SET(CMAKE_C_FLAGS_PRODUCT_A
    "-DF_ENABLE_FEATURE_A -DF_ENABLE_FEATURE_B
    )

SET(CMAKE_C_FLAGS_PRODUCT_B
    "-DF_ENABLE_FEATURE_A
    )
Run Code Online (Sandbox Code Playgroud)

使用上述方法,Visual Studio项目生成器为我提供了构建配置选择product_A product_B并正确突出显示活动代码.

但是,如果我生成Eclipse项目,那么构建配置就不存在了.

如何使这个项目适用于Eclipse项目?

eclipse build cmake

7
推荐指数
1
解决办法
1407
查看次数

保护EEPROM数据不被修改

一般来说,我会通过在ROM映像中放置一些独特且随机的内容并将其用作种子来加密EEPROM内容以停止提取并在图像模块之后重新编程.

一个明显的缺陷似乎是,这并没有停止以一个空白的替换EEPROM外部芯片的形式篡改...哦看起来回到第一次使用状态,让我们要求钥匙保存!


选择组件对我来说不是一个选项,硬件平台已经定义.EEPROM在器件的使用寿命期间被编程为配置和状态改变,因此断开擦除线也是不可行的.

我正在寻求关于可能的解决方案的意见,以防止假冒(第一次运行)状态的伪造,因为这将允许保存敏感数据和解锁设备的功能.

我相信分组密码(ECB模式)足以保护敏感数据,可能在顶部!这种方法连同多份副本,腌制一种而不是另一种,应该使得花钱和时间来应对这些措施在经济上是不值得的.

c security embedded

4
推荐指数
1
解决办法
1446
查看次数

忽略不存在的先决条件

make 继续构建并说当我的依赖文件说对象依赖于已移动的头文件时,一切都是最新的.

如果运行make -d以捕获评估,我看到:

Considering target file `../build/out/src/manager.o'.
     Looking for an implicit rule for `../build/out/src/manager.o'.
     No implicit rule found for `../build/out/src/manager.o'.
      Pruning file `../product/build/config/product.conf'.
      Pruning file `../build/out/opt_cc.txt'.
      Considering target file `../mem/src/manager.c'.
       Looking for an implicit rule for `../mem/src/manager.c'.
       No implicit rule found for `../mem/src/manager.c'.
       Finished prerequisites of target file `../mem/src/manager.c'.
      No need to remake target `../mem/src/manager.c'.
      Pruning file `../mem/mem.h'.
     Finished prerequisites of target file `../build/out/src/manager.o'.
     Prerequisite `../product/build/config/product.conf' is older than target `../build/out/src/manager.o'.
     Prerequisite `../build/out/opt_cc.txt' is older than target …
Run Code Online (Sandbox Code Playgroud)

makefile gnu-make

4
推荐指数
2
解决办法
5698
查看次数

将内存公开为只读

在C中,一个函数可以向一个函数公开内存,它在较低级别"管理"为只调用那些调用该函数的人(暴露其地址).return * const没有效果,但我想知道我是否忽略了编程勾号?

谢谢.

const uint8_t * get_value(int index) 
{
static uint8_t data[2] = {0, 0};
return (const uint8_t *)&data[index];
}

int main(void)
{
uint8_t * value;
value = get_value(1);

*value += 1;
return 0;
}
Run Code Online (Sandbox Code Playgroud)

@j_random_hacker对我的问题提出了一个很好的妥协建议,它提供了我正在寻找的额外障碍,以防止随意误用该数据.

typedef struct
{
    const uint8_t * value;
    const uint8_t size;

} readonly_t;

readonly_t get_value(int index, int size) 
{
    static uint8_t data[2] = {0, 0};
    uint8_t rsize;

    /* ... validate index, size params */

    readonly_t r = { &data[index], rsize }; …
Run Code Online (Sandbox Code Playgroud)

c pointers memory-management

2
推荐指数
1
解决办法
263
查看次数

奇怪的Eclipse C++ #define行为

(过度依赖IDE的情况)

我有一些遗留的C代码,我编译为C++,用于单元测试.C源是C++知道的,因为它有条件地基于环境定义.

例如(PRIVATE做出决定static):

#if!defined __cplusplus
#define PRIVATE1 PRIVATE
#endif
Run Code Online (Sandbox Code Playgroud)

...

PRIVATE1 const int some_var;
Run Code Online (Sandbox Code Playgroud)

问题是我似乎无法找出PRIVATE1解决问题或在C++中解决的问题,如果我添加一个声明但是没有指明在哪里,编译器会抱怨重新定义?

我搜索了我的MinGW/gcc包含路径,C++ ISO规范和我可用的C++书籍都无济于事.

编辑:

当然,我在发布之前检查了命令行和makefile.

c c++ eclipse build-error

0
推荐指数
1
解决办法
1285
查看次数