标签: iar

ANSI C中的自我分配

我目前正在开发一个嵌入式C项目,我"继承"了一些包含语句的旧代码,例如:

rxStruct = rxStruct;
Run Code Online (Sandbox Code Playgroud)

其中rxStruct是一个变量.

这些陈述有什么用?

c embedded ansi iar

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

UART代码端口后的TI MSP430中断问题

我将MSP430F2013处理器用于没有UART的应用程序.我需要一个UART,因此我使用TI的示例代码"msp430x20x3_ta_uart2400.c"来模拟使用定时器模块.这一切都运行良好(使用IAR Embedded Workbench编译),使用PuTTY测试它以将字符传输到开发板,并使用环回将它们回显到终端.

这是一个降低风险的练习,现在我已将该代码移植到我的应用程序的状态机中.完成此操作后,我遇到了有关定时器中断和低功耗睡眠模式的问题.这是我进入低功耗(睡眠)模式的代码片段:

// Prepare the UART to receive one byte.
prepare_receiver();

// Enter low power mode 1.
__bis_SR_register(LPM1_bits + GIE);

// Check whether the full message has been received.
if(true == get_message_complete())
{
    process_event(e_euart_message_received, NULL);
}
Run Code Online (Sandbox Code Playgroud)

我在调试器(C-Spy)上看到的是,有时它会bis_SR_register()在第一个条目上执行该行,然后转到if语句,即忽略我要求它进入睡眠状态的事实.在其他情况下,当它确实进入睡眠状态时,ISR会正确触发并最终将我带回if语句以继续执行程序(正如我所料).但是,如果我尝试跳到下一个语句,应用程序会冻结第一行,即我无法前进.

我想不出任何功能上与我正在做的TI示例有什么不同,所以我认为我的问题必须与我如何移植它有关.例如,我的Timer ISR和我在这里发布的代码是在不同的编译单元 - 这种决定会对事情有什么影响吗?我知道我的问题可能有点模糊,但不幸的是我无法发布我的所有代码,所以相反,我正在寻找有MSP经验的人,他可能会提出一些建议,或者一些潜在的陷阱,我可能已陷入其中.

embedded debugging interrupt msp430 iar

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

不了解 ARM 硬件堆栈(使用 IAR)

我目前正在使用 IAR Embedded Workbench 为 NXP LPC2378 micro 进行开发。我想我遇到了问题,因为 CPU 不断崩溃,我的 IRQ 和 CSTACK 需要更大,我注意到这些区域会“渗入”到周围的内存区域。我想我真的不明白这些和其他内存区域的用途是什么?我使用了一个 RTOS (CMX),它为 ISR 保留了 RAM,但这似乎是为了不同的东西。

当我使用 RTOS 时,IRQ_STACK、CSTACK、SVC_STACK、FIQ_STACK、UND_STACK 和 ABT_STACK 用于什么,或者它们是完全独立的东西?

c microcontroller arm microprocessors iar

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

在IAR Embedded Work Bench中重命名

是否可以重命名工作区或项目?我使用的是6.5_2(虽然我有以前版本4.0,6.0的完整版本)

iar

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

printf的格式化缓冲区在哪里?

我在一个受限制的嵌入式系统上工作.

目前我们使用snprintf缓冲区,然后使用另一个语句,将缓冲区打印到串口:

  char temp_buffer[256];
  int bytes_written = snprintf(temp_buffer, sizeof(temp_buffer),
                      "Solar system has %d planets\n",
                      10);
  if (bytes_written > 0)
  {
    Serial_Port_Output(temp_buffer, bytes_written);
  }
Run Code Online (Sandbox Code Playgroud)

我想切换到printf直接写入串口.根据我们的编译器文档,我拦截了函数调用以输出数据以使用串行端口.(接口使用块写入:地址和字符数).

printf函数可以使用字符缓冲区进行格式化,例如整数或浮点到文本.

问题:

  1. printf用于格式化的缓冲区在哪里?(在我做出改变之前,其他有探究的人都想知道.)
  2. 这是编译器(平台)依赖的问题吗?

平台:Arm7tdmi处理器,片上系统(SOC),IAR EW编译器.

c c++ embedded printf iar

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

IAR 项目的典型 gitignore 文件

我正在处理 IAR 项目,我的问题是 git 存储库可以忽略 IAR 项目中的哪个文件。所有项目设置文件和源文件混合在 git log 中非常无聊并且不利于版本控制,有人能提出好的建议吗?

太感谢了。

git iar

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

使用STM32处理器与SD卡通信 - SDIO协议

我正在使用基于微控制器STM32F401RET6的Nucleo F401Re板.我连接到主板上的Micro SD插槽,并有兴趣将数据写入SD卡并从中读取数据.我使用软件STM32CubeX生成代码,特别是带有内置函数的SD库.我试着编写一个简单的代码,将一个数组写入一个特定的数组,然后尝试读取相同的数据.代码如下:

  int main(void)
{
  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* Configure the system clock */
  SystemClock_Config();

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USART2_UART_Init();
  MX_SDIO_SD_Init();

  char buffer[14] = "Hello, world\n";
  uint32_t to_send[512] ; // Te
  uint32_t to_receive[512];
  uint64_t address = 150; 
  HAL_SD_WriteBlocks(&hsd, to_send, address, 512, 1);
  HAL_SD_ReadBlocks(&hsd, to_receive, address, 512, 1);


  while (1)
  {
      HAL_UART_Transmit(&huart2, (uint8_t *)buffer, 14, 1000);
      HAL_UART_Transmit(&huart2, (uint8_t *)to_receive, 512, 1000);

}
Run Code Online (Sandbox Code Playgroud)

代码在函数HAL_Init()的中间停止,我收到以下消息:

The stack pointer …
Run Code Online (Sandbox Code Playgroud)

c stm32 iar stm32f4discovery

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

FreeRTOS 配置TICK_RATE_HZ

我使用的是带有 5.4 版 FreeRTOS 的 MSP430f5438。

我有一个有趣的问题,我无法弄清楚。

基本上,当我将 configTICK_RATE_HZ 设置为不同的值时,LED 闪烁得更快或更慢;它应该保持相同的速率。我将 configTICK_RATE_HZ 设置得越高,它闪烁得越慢,而当我将 TICK_RATE 设置得越低时,它就会闪烁得越快。

vTaskDelayUntil( &xLastFlashTime, xFlashRate ); 无论 configTICK_RATE_HZ 是多少,LED 应该每秒只闪烁一次。我逐步检查了 xFlashRate 以进行确定。它总是 = configTICK_RATE_HZ。代码:

xFlashRate = ledFLASH_RATE_BASE;//my flash base rate is 1000ms
xFlashRate /= portTICK_RATE_MS; //so xFlashrate = whatever configTICK_RATE_HZ equals

/* We need to initialise xLastFlashTime prior to the first call to vTaskDelayUntil().*/ 
xLastFlashTime = xTaskGetTickCount();
for(;;) { 
vTaskDelayUntil( &xLastFlashTime, xFlashRate ); vParTestToggleLED( uxLED ); 
flashled();//this should happen every 1 second.
}
Run Code Online (Sandbox Code Playgroud)

当我将 configtick_rate_hz 设置为 1000 …

c rtos msp430 iar freertos

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

使用IAR工具批量构建

我正在尝试使用IAR工具批量构建项目.处理器是CC2530,它在IDE中构建良好.我已经按照批量构建(项目/批量构建)的文档进行操作,并创建了一个.cspy文件,该文件假定是我的批处理文件,但在该文件的注释中,它表明我需要一个调试文件(.ubrof)来执行用它.我找不到.ubrof文件,我搜索了整个项目目录结构.另外,我希望我的批量构建能够在没有调试信息的情况下构建生产版本.

我在哪里可以获得.ubrof文件?如何使用IAR工具进行生产批量构建?

embedded build iar

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

IAR 项目变量,如 $PROJ_DIR$

IAR 中是否有可能添加额外的项目变量,例如$PROJ_DIR$指定我的项目环境?

我喜欢让我的项目保持便携性和适应性。

setup-project iar

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