标签: iar

命令提示错误"C:\ Program"未被识别为内部或外部命令,可运行程序或批处理文件

我正在尝试运行以下批处理命令.该命令已从IDE中提取,因此已确认正在运行.得到下面提到的错误.

我用双引号尝试了一些变化,但它们没有用.即使在powershell上它也有相同的信息.

C:\Program Files\IAR Systems\Embedded Workbench 7.0\430\bin\icc430.exe F:\CP001\source\Meter\Main.c -D Hardware_P20E -D Calibration_code -D _Optical -D _Configuration_TS0382 -o F:\CP001\Temp\C20EO\Obj\ --no_cse --no_unroll --no_inline --no_code_motion --no_tbaa --debug -D__MSP430F425 -e --double=32 --dlib_config C:\Program Files\IAR Systems\Embedded Workbench 7.0\430\lib\dlib\dl430fn.h -Ol --multiplier=16 --segment __data16=DATA16 --segment __data20=DATA20
Run Code Online (Sandbox Code Playgroud)

命令提示符

更新:

尝试使用引号解决方案会以某种方式混淆编译器

在此输入图像描述

command-line batch-file msp430 iar

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

编译器按位不运算的优化

我有一个简单的函数测试,如果两个数组彼此相反。它们似乎是相同的,只是tmp变量不同。一个有效,另一个无效。我一辈子都无法弄清楚为什么编译器会对此进行优化-如果确实存在优化问题(我的编译器是IAR Workbench v4.30.1)。这是我的代码:

// this works as expected
uint8 verifyInverseBuffer(uint8 *buf, uint8 *bufi, uint32 len)
{
  uint8 tmp;
  for (uint32 i = 0; i < len; i++)
  {
    tmp = ~bufi[i];
    if (buf[i] != tmp)
    {
      return 0;
    }
  }
  return 1;  
}

// this does NOT work as expected (I only removed the tmp!)
uint8 verifyInverseBuffer(uint8 *buf, uint8 *bufi, uint32 len)
{
  for (uint32 i = 0; i < len; i++)
  {
    if (buf[i] != (~bufi[i]))
    { …
Run Code Online (Sandbox Code Playgroud)

c c++ embedded iar

31
推荐指数
3
解决办法
1180
查看次数

按应用程序访问链接描述文件中定义的符号

在我的链接器脚本文件中,我定义了两个符号

define symbol _region_RAM_start__     = 0xC0000000;
define symbol _region_RAM_end__       = 0xC00fffff; 
Run Code Online (Sandbox Code Playgroud)

然后我将它们导出,如下所示

export symbol _region_RAM_start__;
export symbol _region_RAM_end__;
Run Code Online (Sandbox Code Playgroud)

从applciation代码,我尝试访问这些符号

extern const unsigned int _region_RAM_start__;
extern const unsigned int _region_RAM_end__;
....
int GetRAMSize()
{
    int size = 0;
    unsigned int address_1 = _region_RAM_start__;
    unsigned int address_2 = _region_RAM_end__;
    size = address_2 - address_1 + 1U;
    return size;
}
Run Code Online (Sandbox Code Playgroud)

现在,我希望返回值为0x00100000,但是,我得到的只是0.所以,当我转向调试器时,我注意到_region_RAM_start__和_region_RAM_end__分别具有值0xC0000000和0xC00fffff,但是address_1和address_2的值为0 .

编译器优化设置为"无".这一直困扰着我一段时间.在这里我是否有一些非常明显的东西(除了我不应该首先这样做)

解决方案 感谢nm的答案

  unsigned int address_1 = (unsigned int) (&_region_RAM_start__);
Run Code Online (Sandbox Code Playgroud)

否则address_1和address_2都包含垃圾值(即分别在地址0xC0000000和0xC00fffff处可用的值,但从此代码的角度来看是垃圾)

c linker iar

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

我需要购买IAR,Code Composer 4或MSP430开发的其他东西

到目前为止,我一直在使用IAR,但它有时会崩溃并且没有代码完成.此外,我使用的其他开发环境是基于eclipse的.我应该买哪一个?

embedded iar

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

C中带有@符号的奇怪定义

我在嵌入式C源文件中遇到了以下定义:

const preamble_t OAD_Preamble @ ".preamble" =
{
  HAL_OAD_RC_MAX,       // Default program length of max if not using post-processing tool.
  OAD_MANUFACTURER_ID,  // Manufacturer ID
  OAD_TYPE_ID,          // Image Type
  0x00000001            // Image Version
};
Run Code Online (Sandbox Code Playgroud)

我不知道@部分,你能帮我解决这个问题吗?

编辑:这是在IAR编译器中,与TI SoC一起使用.

c embedded iar

9
推荐指数
1
解决办法
157
查看次数

刷新 uC 时更新 STM32F4 上的 RTC

有没有办法在STM32F4上上传程序时用计算机信息更新RTC?例如,计算机上的日期和时间信息是:12h40 11/09/2018,当我用IAR/AC6刷新微控制器时,RTC被设置为这些信息?

stm32 iar

9
推荐指数
1
解决办法
822
查看次数

有没有理由在C语言中声明一些"volatile const"但在C++中只是"volatile"?

我在我的项目中使用了一个头文件,其中包含以下定义:

#ifdef __cplusplus
  extern "C" {
#endif 

#ifdef __cplusplus
  #define   __I     volatile             /*!< Defines 'read only' permissions*/
#else
  #define   __I     volatile const       /*!< Defines 'read only' permissions*/
#endif
Run Code Online (Sandbox Code Playgroud)

__I被用作在另一头文件如下:

    typedef struct {   
    // more members before         
      __I  uint32_t  CR;   /*!< GPIO Commit*/
    // more members after

    } GPIOA_Type;

#define GPIOF_BASE                      0x40025000UL
#define GPIOF                           ((GPIOA_Type *) GPIOF_BASE)
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么__I在C中使用const而不是在C++中?您仍然可以修改CR指向的值,因为您有地址,但我只是好奇为什么定义__I不同.

对于任何感兴趣的人来说,这些__I定义来自IAR Embedded Workbench ARM for Cortex-M4,结构来自德州仪器LM4F120H5QR CMSIS文件.

c c++ iar cmsis cortex-m

8
推荐指数
1
解决办法
578
查看次数

在Linux中使用Dongle运行IAR Embedded Workbench for Arm的建议

我正在运行Ubuntu 10.04和Wine 1.2.我能够安装IAR软件,但无法找到加密狗许可证.无论如何在Wine和Ubuntu中使用加密狗许可证还是我必须使用PC许可证?

提前致谢..

linux ubuntu iar ubuntu-10.04

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

错误[P​​e513]:无法将类型为"void*"的值分配给"uint8_t*"类型的实体

我试图将C项目转换为C++.

在C项目中,我在编译成c ++时反击了这个错误:

错误[P​​e513]:无法将类型为"void*"的值分配给"uint8_t*"类型的实体

以下代码给出了此错误:

#define RAM32Boundary  0x20007D00
uint8_t *pNextRam;
pNextRam = (void*)RAM32Boundary;// load up the base ram
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释这在C中做了什么以及如何将其转换为C++?

c c++ embedded iar

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

C编译器错误或程序错误?

我正在使用IAR C编译器来构建嵌入式微应用程序(特别是瑞萨的uPD78F0537).在这个应用程序中,我使用两个嵌套的for循环来初始化一些数据,如下面的MCVE所示:

#include <stdio.h>

#define NUM_OF_OBJS 254
#define MAX_OBJ_SIZE 4

unsigned char objs[NUM_OF_OBJS][MAX_OBJ_SIZE];
unsigned char srcData[NUM_OF_OBJS][MAX_OBJ_SIZE];

void main(void)
{
    srcData[161][2] = 10;

    int x, y;
    for (x = 0; x < NUM_OF_OBJS; x++)
    {
        for (y = 0; y < MAX_OBJ_SIZE; y++)
        {
            objs[x][y] = srcData[x][y];
        }
    }

    printf("%d\n", (int) objs[161][2]);
}
Run Code Online (Sandbox Code Playgroud)

输出值为0,而不是10.

编译器为for循环生成以下代码:

     13              int x, y;
     14              for (x = 0; x < NUM_OF_OBJS; x++)
   \   0006   14....         MOVW      DE,#objs
   \   0009   16....         MOVW      HL,#srcData
     15 …
Run Code Online (Sandbox Code Playgroud)

c embedded iar

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

标签 统计

iar ×10

c ×6

embedded ×5

c++ ×3

batch-file ×1

cmsis ×1

command-line ×1

cortex-m ×1

linker ×1

linux ×1

msp430 ×1

stm32 ×1

ubuntu ×1

ubuntu-10.04 ×1