问题标签 [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.
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,
codewarrior - 如何配置 flexray 节点以发送 16 字有效负载?
尝试在 Freescale NCV7383 演示中编辑 Flexray_UNIFIED_cfg.c(使用 CW5.1 和 MC9S12XF512)以发送具有不同帧 ID 的更大数据包以匹配我的汽车目标系统。你们中的任何一个人曾经摸过 flexray 吗?谢谢。
javascript - 确定是否有足够的票证更改 - 1 个测试用例失败
对于 CodeWars 上的这个 Kata Level 6 问题,9 个测试中有8个通过了。奇怪的事情:CodeWars 不会告诉我哪个测试用例失败了。
这是我的代码。也许这里有人可以帮忙?太感谢了。
这是问题:
新的“复仇者联盟”电影刚刚上映!电影院售票处有很多人排着长队。他们每个人都有一张 100、50 或 25 美元的钞票。“复仇者联盟”的门票价格为 25 美元。
Vasya 目前是一名文员。他想把一张票卖给这条线上的每个人。
如果 Vasya 最初没有钱并严格按照人们排队的顺序出售门票,Vasya 是否可以向每个人出售一张票并给他找零?
返回YES,如果 Vasya 可以向每个人出售一张票并给零钱。否则返回NO。
例子:
c - _f_data_rom 链接描述文件符号
我正在研究 32 位微控制器和codewarrior
编译器的启动代码,因为我们必须处理链接器脚本。启动代码中用于初始化的某些变量RAM
来自stack
链接描述文件。
链接描述文件用不同的地址初始化这些变量。问题是一个变量的地址错误。在链接器脚本中,它通过以下命令初始化 _f_data_rom
。
- 谁能告诉我链接器如何初始化为堆栈、RAM 初始化提供地址的变量?
- 这个命令是什么意思
_f_data_rom
?
看起来像
usb - Coldfire 微处理器 MCF5272 USB 模块停止触发中断
这是我多年来一直试图解决的问题,定期花费 1-2 个月的时间。
我正在使用 Metrowerks IDE 和 ColdFire C 编译器 MCFCCompiler 4.0 版来构建使用 USB 模块与主机通信的嵌入式代码。带有这种硬件的产品已经推出了八年并且相当成功。然而,这些年来我们收到了来自现场的抱怨,称与主机的通信偶尔会挂断,操作无法恢复。
我使用 USB 嗅探器和 Coldfire 调试硬件跟踪了错误,这是我在其中找到代码的条件和场景。
通信中断发生在固件端,而不是主机上的驱动程序。
仅当从多个线程快速发送主机(Windows 7)的 USB 固件命令时才会发生挂起。每个固件命令都会回复主机。因此,通过 USB 端口的流量最大。
我正在使用摩托罗拉提供的实现,该实现在 USB-STAND-ALONE-DRIVER_V03.pdf 中有详细记录(谷歌会为您找到它)。有两个函数是我关注的重点,它们应该很好地配合使用:usb_in_service(由中断处理程序调用)和 usb_tx_data(启动传输,在某些时候会产生中断)。
实现了 usb_tx_data 函数,以便在 USB fifo 仍有数据要发送到主机时退出。但是等待fifo清除会使代码进入无限循环。
尽管 USB 模块的寄存器内容告诉我中断已启用,但此后不再发生中断。
我检查了 USB 模块没有收到重置事件,也没有挂起。
主要问题是错误是在 USB 模块硬件中还是在代码中。我没有发现任何指向这个问题的勘误表。如果是代码,那么逻辑没有考虑到的整体在哪里?
紧追不舍,因为我们正在制作基于相同固件的新产品线,在解决此问题之前我无法发布它。
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]。我假设这个参数只能采用项目文件路径,但如果我错了,或者如果有不同的方法来识别这个参数的项目,我很想知道!
这是错误输出——不确定完整的回溯是否会有所帮助
非常感谢您对此的帮助!-罗斯
microcontroller - 编译器不支持微控制器
我有一个基本问题。对于微控制器项目,我们需要一个支持该特定微控制器的编译器。但是,如果编译器不支持特定的微控制器,那么这意味着什么?换句话说''编译器支持这个微控制器''是什么意思?任何详细的描述将不胜感激。
谢谢
assembly - 可以使用 ARM 工具链在 CW 10.6 上停用拇指互通吗?
我正在使用 CodeWarrior 为MCU v10.6 IDE
. 它是来自 NXP 的基于 Eclipse 的 IDE。该项目以 NXP 的 K21 SoC 为目标(确切地说是 a MK21FN1M0M12
,它嵌入了 a cortex-m4
,armv7-m
)。CodeWarrior 配置为使用 ARM 工具链。
我遇到了与拇指交互相关的崩溃。此功能由 IDE 启用,无法停用。
由于armv7-m
只支持 thumb2,所以一开始使用 thumb-interwork 似乎没有意义。但我可能在这里遗漏了一些东西。所有代码都在拇指指令中正确生成。
通过指针进行间接函数调用时遇到麻烦。功能代码在链接阶段得到一个奇数地址,这没关系(这表明它是拇指代码)。但是,当通过指针调用它时,会生成一条 BLX 指令(我想链接器在这里将原始 BL 更新为 BLX)并且函数指针的值保持不变!由于指针的值是偶数,跳转指示内核切换到 ARM 模式。因此崩溃。
我认为链接器将 BL 升级为 BLX,因为拇指交互功能被激活。在 CodeWarrior for 上MCU v10.6
,这是强制的,我无法禁用它。我被告知这是该工具“处理器所必需的”,并且无法单击相关复选框(Properties->C/C++ Build->Settings
ARM CPU。处理器设置为"cortex-m4"
)。
我不明白为什么,因为这是armv7-m
. 此外,它似乎给我带来了麻烦。我想我在这里遗漏了一些东西。
您能否帮助我了解发生了什么和/或告诉我是否有办法在 CodeWarrior 上禁用拇指互通?
谢谢和最好的问候,
皮埃尔
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
,你知道,因为结构实际上并不包含数据,而是包含指针。
我将如何继续实现能够包含和修改来自多个寄存器的位的结构?(我想这里的问题是,在内存中,这些位不是一个接一个的,我想这会更容易)。甚至可能吗?我希望是的。
scale - CRGFLG 寄存器,最后一位未设置
我正在使用 FreeScale 9S12C 微控制器并在 Code Warrior 中进行编码。我正在尝试为序列 10011 创建一个 SEQ 检测器。当我进行模拟时,程序卡在函数DelayGate
中,其他一切似乎都正常。似乎 CRGFLG 寄存器中的最后一位从未像预期的那样设置。我相信它应该在每个实时时钟周期结束时设置。我设置RTICTL = 0b01000000
了,所以实时时钟的周期应该是 1.024 毫秒。所以我的预期行为是程序应该停留在DelayGate
大约 1.024 毫秒然后退出,但是程序永远停留在延迟门中并且永远不会退出。由于某种原因,CRGFLG 中的最后一位似乎永远不会被设置,我不知道为什么。感谢任何人都可以为我提供的任何帮助!这是我的代码。我'
当我编译我得到的唯一警告是
- 函数调用的结果在这一行被忽略:
UpdateStatetask(input,state)
- 这是这一行的旧式函数调用:
int UpdateStatetask(input, state){
这些警告不应该导致我遇到的问题。谢谢你的帮助!