问题标签 [codewarrior]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
261 浏览

c - CodeWarrior 从 event.c 中获取变量值

进入上下文我这样做:通过输入到驱动器(A4988)的脉冲频率的变化来驱动步进电机(对于这个问题,没有必要知道它的功能)。现在改变了脉冲的频率(它们改变了发动机转速)。您需要知道,对于电机轴 1 整圈必须获得 200 个脉冲(发动机每步 1.8° 度)。

我得到了引擎,让他在 1 秒内转了一圈。周期 = 0.005s

为了对此进行编程,我使用了组件:TimerUnit_LDD。频率为 163840 Hz 计数

在整回合1的情况下,经常使用这个功能。

---- main.c

TU1_Enable (TU1_DeviceData);  TU1_SetPeriodTicks (TU1_DeviceData, 410);   

参数 410 与我想要的周期进行比较,发送脉冲通过更改引脚的值来编程,同时考虑到高脉冲和低脉冲,如下所示:

----- 事件.c

TU1_OnCounterRestart void (* UserDataPtr LDD_TUserData) {  Step1_NegVal ();  }

严重的周期公式为 819.2,考虑到上述严重的近似于 409.6 和 410(在示波器中看到的频率为 200 Hz(ok)。

已经在上下文中输入问题是这样的:

---- main.c

TU1_Enable (TU1_DeviceData); // Enable the counter TU1_SetPeriodTicks (TU1_DeviceData, 410); // Setting the desired period

for (;;) {            TU1_Enable (TU1_DeviceData);            WAIT1_Waitms (1000); // Rotation time  TU1_Enable (TU1_DeviceData); // Disable the counter }

使用此代码,我尝试检查频率计算是否正确,并且在一秒钟内转一圈。但发生的情况是它提供了旋转但偏移了一点。我想这会经历每行代码所需的运行时。

我想知道的是,如何获得事件中变量的数值?我怎么能做这样的事情。

---- main.c

TU1_Enable (TU1_DeviceData); // Initialize the counter TU1_SetPeriodTicks (TU1_DeviceData, 410); // Setting the desired period

for (;;) { for (;;) {       if (GetValue (x) == 200) break; // GetValue (x) This function is what I want to achieve } WAIT1_Waitms (1000); }

----- 事件.c

TU1_OnCounterRestart void (* UserDataPtr LDD_TUserData) {  Step1_NegVal (); x = x + 1;  }

GetValue (x) 此函数将获取Events.c 中x 的值,并定义多个脉冲来控制espefico。

取一个变量并受计数器影响,这达到 200(1 秒内 1 转)。

这可以确定,menera 是孤独而孤独的,不多也不少,只有 200 个脉冲。

我要求这个和我对 CNC 机器的程序一样具体,并且太重要了,精度是最高的。

我希望你能理解,我会说西班牙语,这是由 Chrome 翻译的

C语言编程,飞思卡尔KL25Z,CodeWarrior,OPEN_SDA,

0 投票
0 回答
47 浏览

codewarrior - 如何配置 flexray 节点以发送 16 字有效负载?

尝试在 Freescale NCV7383 演示中编辑 Flexray_UNIFIED_cfg.c(使用 CW5.1 和 MC9S12XF512)以发送具有不同帧 ID 的更大数据包以匹配我的汽车目标系统。你们中的任何一个人曾经摸过 flexray 吗?谢谢。

0 投票
2 回答
976 浏览

javascript - 确定是否有足够的票证更改 - 1 个测试用例失败

对于 CodeWars 上的这个 Kata Level 6 问题,9 个测试中有8个通过了。奇怪的事情:CodeWars 不会告诉我哪个测试用例失败了。

这是我的代码。也许这里有人可以帮忙?太感谢了。

这是问题

新的“复仇者联盟”电影刚刚上映!电影院售票处有很多人排着长队。他们每个人都有一张 100、50 或 25 美元的钞票。“复仇者联盟”的门票价格为 25 美元。

Vasya 目前是一名文员。他想把一张票卖给这条线上的每个人。

如果 Vasya 最初没有钱并严格按照人们排队的顺序出售门票,Vasya 是否可以向每个人出售一张票并给他找零?

返回YES,如果 Vasya 可以向每个人出售一张票并给零钱。否则返回NO

例子:

0 投票
1 回答
86 浏览

c - _f_data_rom 链接描述文件符号

我正在研究 32 位微控制器和codewarrior编译器的启动代码,因为我们必须处理链接器脚本。启动代码中用于初始化的某些变量RAM来自stack链接描述文件。

链接描述文件用不同的地址初始化这些变量。问题是一个变量的地址错误。在链接器脚本中,它通过以下命令初始化 _f_data_rom

  • 谁能告诉我链接器如何初始化为堆栈、RAM 初始化提供地址的变量?
  • 这个命令是什么意思_f_data_rom

看起来像

0 投票
0 回答
113 浏览

usb - Coldfire 微处理器 MCF5272 USB 模块停止触发中断

这是我多年来一直试图解决的问题,定期花费 1-2 个月的时间。

我正在使用 Metrowerks IDE 和 ColdFire C 编译器 MCFCCompiler 4.0 版来构建使用 USB 模块与主机通信的嵌入式代码。带有这种硬件的产品已经推出了八年并且相当成功。然而,这些年来我们收到了来自现场的抱怨,称与主机的通信偶尔会挂断,操作无法恢复。

我使用 USB 嗅探器和 Coldfire 调试硬件跟踪了错误,这是我在其中找到代码的条件和场景。

  1. 通信中断发生在固件端,而不是主机上的驱动程序。

  2. 仅当从多个线程快速发送主机(Windows 7)的 USB 固件命令时才会发生挂起。每个固件命令都会回复主机。因此,通过 USB 端口的流量最大。

  3. 我正在使用摩托罗拉提供的实现,该实现在 USB-STAND-ALONE-DRIVER_V03.pdf 中有详细记录(谷歌会为您找到它)。有两个函数是我关注的重点,它们应该很好地配合使用:usb_in_service(由中断处理程序调用)和 usb_tx_data(启动传输,在某些时候会产生中断)。

  4. 实现了 usb_tx_data 函数,以便在 USB fifo 仍有数据要发送到主机时退出。但是等待fifo清除会使代码进入无限循环。

  5. 尽管 USB 模块的寄存器内容告诉我中断已启用,但此后不再发生中断。

  6. 我检查了 USB 模块没有收到重置事件,也没有挂起。

主要问题是错误是在 USB 模块硬件中还是在代码中。我没有发现任何指向这个问题的勘误表。如果是代码,那么逻辑没有考虑到的整体在哪里?

紧追不舍,因为我们正在制作基于相同固件的新产品线,在解决此问题之前我无法发布它。

0 投票
0 回答
94 浏览

command-line - 如何通过命令行 CodeWarrior 更改引用?

我从引用另一个项目的存储库中下载了一个项目。我真的很想用 Codewarrior 10.4 的命令行工具来构建这个项目。但是,我的 .project 文件中的引用路径与它在我的计算机上引用的项目的位置不对应。我需要一种命令行、编程方式将参考路径更改为我机器上的正确位置。所以我尝试了

ecd -references -project project_pathName -allConfigs -remove wrongReferencePathName,然后运行 ​​ecd -references -project project_pathName -allConfigs -add correctReferencePathName

但是第一个命令给了我一个找不到文件的错误。所以,看起来我只能删除对我系统上实际存在的项目的引用,并且无法摆脱对我文件系统上甚至不是有效位置的项目的虚假引用。

有没有办法从命令行删除一个错误的引用,一个不对应于有效项目位置的引用?如果没有,你能想到我可以解决这个问题的任何其他方式吗?

就上下文而言,我们公司通常避免此问题的方式是通过在 .wsd 文件中表示我们的项目及其引用。我们将文件拖放到 CodeWarrior GUI 中,这会自动修复所有 .project 文件中的所有引用。问题是我们无法弄清楚如何从命令行调用 wsd 文件。如果您知道这样做的任何方法,它实际上比回答我的其他问题更有帮助!

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

我为 wrongReferencePathName 尝试了多个选项。上面我测试了“file:/C:/Development/DSM33/DSM33_India/DSM33_FS_v02.02/AlphaBoot”,但我也尝试了“C:/Development/DSM33/DSM33_India/DSM33_FS_v02.02/AlphaBoot”和“C:\Users\罗斯\桌面\Round2\DM3\飞思卡尔\DSM33_FS_v02.02\Firmware.project”。他们都产生了同样的错误。我正在尝试的路径在我的文件系统中不存在——我的文件系统中引用的项目有不同的路径——所以我得到一个 fileNotFoundException 是有道理的。可能是引用工具在提供的引用路径中查找 .project 或 .cproject 文件,如果找不到,则会崩溃。如果这是真的,我可能会尝试在我的系统中欺骗虚假文件路径并复制 .project 文件,但这真的很痛苦。它' 也可能是我没有正确使用 referencedProjectLocation 参数——参考命令语法是 ecd -references -project path [-config name | -allConfigs] (-list | -add | -remove) 引用了ProjectLocation [buildConfigurationName]。我假设这个参数只能采用项目文件路径,但如果我错了,或者如果有不同的方法来识别这个参数的项目,我很想知道!

这是错误输出——不确定完整的回溯是否会有所帮助

非常感谢您对此的帮助!-罗斯

0 投票
1 回答
144 浏览

microcontroller - 编译器不支持微控制器

我有一个基本问题。对于微控制器项目,我们需要一个支持该特定微控制器的编译器。但是,如果编译器不支持特定的微控制器,那么这意味着什么?换句话说''编译器支持这个微控制器''是什么意思?任何详细的描述将不胜感激。

谢谢

0 投票
1 回答
117 浏览

assembly - 可以使用 ARM 工具链在 CW 10.6 上停用拇指互通吗?

我正在使用 CodeWarrior 为MCU v10.6 IDE. 它是来自 NXP 的基于 Eclipse 的 IDE。该项目以 NXP 的 K21 SoC 为目标(确切地说是 a MK21FN1M0M12,它嵌入了 a cortex-m4armv7-m)。CodeWarrior 配置为使用 ARM 工具链。

我遇到了与拇指交互相关的崩溃。此功能由 IDE 启用,无法停用。

由于armv7-m只支持 thumb2,所以一开始使用 thumb-interwork 似乎没有意义。但我可能在这里遗漏了一些东西。所有代码都在拇指指令中正确生成。

通过指针进行间接函数调用时遇到麻烦。功能代码在链接阶段得到一个奇数地址,这没关系(这表明它是拇指代码)。但是,当通过指针调用它时,会生成一条 BLX 指令(我想链接器在这里将原始 BL 更新为 BLX)并且函数指针的值保持不变!由于指针的值是偶数,跳转指示内核切换到 ARM 模式。因此崩溃。

我认为链接器将 BL 升级为 BLX,因为拇指交互功能被激活。在 CodeWarrior for 上MCU v10.6,这是强制的,我无法禁用它。我被告知这是该工具“处理器所必需的”,并且无法单击相关复选框(Properties->C/C++ Build->SettingsARM CPU。处理器设置为"cortex-m4")。

我不明白为什么,因为这是armv7-m. 此外,它似乎给我带来了麻烦。我想我在这里遗漏了一些东西。

您能否帮助我了解发生了什么和/或告诉我是否有办法在 CodeWarrior 上禁用拇指互通?

谢谢和最好的问候,

皮埃尔

0 投票
4 回答
616 浏览

c - 如何从 C 中的现有变量创建位域

我正在使用 CodeWarrior V10.6 中的摩托罗拉 HCS08 µCU,我正在尝试创建一个extern包含来自现有寄存器的位的位域。在 µCU 标头中创建位域的方式就像

例如,这将使寄存器值通过PTAD = 0x01、 或更改PTAD_PTAD0 = 1。这个定义对于 PTAD, PTBD, PTCD, ... PTGD 基本相同,唯一改变的是地址。

我尝试从以前的现有变量中创建自定义位域是

我会将位域创建并初始化为LCDDSTR lcd = {{&PTGD_PTGD6, &PTBD_PTBD5, ...}},因为由于某种原因,如何根据 C 编程语言标准初始化结构中LCDSTR lcd = {*.Bits.DB0 = &PTGD_PTGD6, *.Bits.DB1 = &PTBD_PTBD5, ...}的初始化(将其视为结构,请再次纠正我)中的建议不适用于此编译器(它确实适用于在线编译器)。

但是,正如您所看到的,我正在对位进行分组,并且(如果可以的话)我将能够通过执行*lcd.Bits.DB0 = 1或类似的操作来更改实际寄存器的值,但如果我这样做lcd.Byte = 0x00,我会改变中包含的内存地址的最后一个(我认为)字节lcd.Bits.DB0,你知道,因为结构实际上并不包含数据,而是包含指针。

我将如何继续实现能够包含和修改来自多个寄存器的位的结构?(我想这里的问题是,在内存中,这些位不是一个接一个的,我想这会更容易)。甚至可能吗?我希望是的。

0 投票
0 回答
62 浏览

scale - CRGFLG 寄存器,最后一位未设置

我正在使用 FreeScale 9S12C 微控制器并在 Code Warrior 中进行编码。我正在尝试为序列 10011 创建一个 SEQ 检测器。当我进行模拟时,程序卡在函数DelayGate中,其他一切似乎都正常。似乎 CRGFLG 寄存器中的最后一位从未像预期的那样设置。我相信它应该在每个实时时钟周期结束时设置。我设置RTICTL = 0b01000000了,所以实时时钟的周期应该是 1.024 毫秒。所以我的预期行为是程序应该停留在DelayGate大约 1.024 毫秒然后退出,但是程序永远停留在延迟门中并且永远不会退出。由于某种原因,CRGFLG 中的最后一位似乎永远不会被设置,我不知道为什么。感谢任何人都可以为我提供的任何帮助!这是我的代码。我'

当我编译我得到的唯一警告是

  1. 函数调用的结果在这一行被忽略:UpdateStatetask(input,state)
  2. 这是这一行的旧式函数调用int UpdateStatetask(input, state){

这些警告不应该导致我遇到的问题。谢谢你的帮助!