- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在尝试使用 MSP430 (MSP43 G2553) 制作随机数生成器,然后为伪随机数生成器创建算法。我有这两个过程的代码,还有用于使用 LED 测试程序的代码。由于某种原因,我遇到了一些似乎无法解决的错误。我将附上代码和错误以获得对语法的第二意见。
#include <msp430g2553.h>
#include "rand.h"
/**
* Random number generator.
*
* NOTE: This affects Timer A.
*
* Algorithm from TI SLAA338:
* http://www.ti.com/sc/docs/psheets/abstract/apps/slaa338.htm
*
* @return 16 random bits generated from a hardware source.
*/
unsigned int rand(); {
int i, j;
unsigned int result = 0;
/* Save state */
unsigned int TACCTL0_old = TACCTL0;
unsigned int TACTL_old = TACTL;
/* Set up timer */
TACCTL0 = CAP | CM_1 | CCIS_1; // Capture mode, positive edge
TACTL = TASSEL_2 | MC_2; // SMCLK, continuous up
/* Generate bits */
for (i = 0; i < 16; i++) {
unsigned int ones = 0;
for (j = 0; j < 5; j++) {
while (!(CCIFG & TACCTL0)); // Wait for interrupt
TACCTL0 &= ~CCIFG; // Clear interrupt
if (1 & TACCR0) // If LSb set, count it
ones++;
}
result >>= 1; // Save previous bits
if (ones >= 3) // Best out of 5
result |= 0x8000; // Set MSb
}
/* Restore state */
TACCTL0 = TACCTL0_old;
TACTL = TACTL_old;
return result;
}
/**
* Pseudo-random number generator.
*
* Implemented by a 16-bit linear congruential generator.
* NOTE: Only treat the MSB of the return value as random.
*
* @param state Previous state of the generator.
* @return Next state of the generator.
*/
unsigned int prand(unsigned int state) {
return (M * state + I); // Generate the next state of the LCG
}
这是 RNG 和 PRNG 的代码。错误列表:
Warning[Pa050]: non-native end of line sequence detected (this diagnostic is only issued once) E:\Downloads\msp430-rng-master\rand.h 1
Error[Pe169]: expected a declaration E:\Downloads\msp430-rng-master\rand.c 18
Error[Pe169]: expected a declaration E:\Downloads\msp430-rng-master\rand.c 39
Error[Pe169]: expected a declaration E:\Downloads\msp430-rng-master\rand.c 41
Error[Pe169]: expected a declaration E:\Downloads\msp430-rng-master\rand.c 45
Error[Pe169]: expected a declaration E:\Downloads\msp430-rng-master\rand.c 47
Warning[Pe012]: parsing restarts here after previous syntax error E:\Downloads\msp430-rng-master\rand.c 50
Error[Pe077]: this declaration has no storage class or type specifier E:\Downloads\msp430-rng-master\rand.c 51
Error[Pe147]: declaration is incompatible with "unsigned short volatile TA0CTL @ 0x160" (declared at line 527 of "C:\Program Files (x86)\IAR Systems\Embedded E:\Downloads\msp430-rng-master\rand.c 51
Workbench 6.5\430\inc\msp430g2553.h")
Error[Be022]: location address not allowed for initialized variables (writable variables without the __no_init attribute) E:\Downloads\msp430-rng-master\rand.c 51
Error[Pe020]: identifier "TACTL_old" is undefined E:\Downloads\msp430-rng-master\rand.c 51
Error[Pe169]: expected a declaration E:\Downloads\msp430-rng-master\rand.c 53
Error[Pe169]: expected a declaration E:\Downloads\msp430-rng-master\rand.c 54
Warning[Pe012]: parsing restarts here after previous syntax error E:\Downloads\msp430-rng-master\rand.c 68
测试代码为:
#include <msp430g2553.h>
#include <signal.h>
#include <isr_compat.h>
#include "rand.h"
#define LED_OUT P1OUT
#define LED_DIR P1DIR
#define LED_RED BIT0
#define LED_GREEN BIT6
#define BLINK_DELAY 1200 // 200 ms at 6 KHz
#define BITS_RAND 16
#define BITS_PRAND 8 // Using only the MSB of the prand state
int failure = 0;
/**
* Set up the timers and blink!
*/
void prepare_to_blink() {
BCSCTL3 |= LFXT1S_2; // Set LF to VLO = 12 KHz
BCSCTL1 |= DIVA_1; // ACLK = LF / 2 = 6 KHz
TACCR0 = BLINK_DELAY; // Set the timer
TACTL = TASSEL_1 | MC_1; // TACLK = ACLK; up to CCR0
TACCTL1 = CCIE | OUTMOD_3; // TA1 interrupt enable; PWM set/reset
__bis_SR_register(LPM3_bits | GIE); // LPM3 w/ interrupt
}
int interrupt(TIMERA1_VECTOR) blink_LED (void) {
TACCTL1 &= ~CCIFG; // Unset interrupt flag
if (failure) // Toggle LEDs
LED_OUT ^= LED_RED;
else
LED_OUT ^= LED_GREEN;
}
/******************************************************************************
* Monobit
*
* SP 800-22 Rev. 1a
* http://csrc.nist.gov/publications/nistpubs/800-22-rev1a/SP800-22rev1a.pdf
******************************************************************************/
/* The hardware RNG is slow, so limit test to 400 bits. */
#define MONOBIT_TIMES_RAND 25 // 400 / BITS_RAND
/* Each 8-bit number tested with monobit contributes 8 bits, so in the worst
* case, the signed 16-bit bucket can store information about this many
* numbers: */
#define MONOBIT_TIMES_PRAND 4095 // (2 ^ 15 - 1) / BITS_PRAND
/* The maximum absolute value of the sum bucket after a monobit test, where
* 0.01 is the minimum P-value and inverfc is the inverse of the complementary
* error function. */
#define MONOBIT_MAX_VAL_RAND 51 // inverfc(0.01) * sqrt(2) * sqrt(400)
#define MONOBIT_MAX_VAL_PRAND 466 // inverfc(0.01) * sqrt(2) * sqrt(2 ^ 15 - 1)
/**
* Monobit test for rand().
*
* Returns 0 on success; otherwise otherwise.
*/
int monobit_rand() {
int sum = 0;
int i, j;
for (i = 0; i < MONOBIT_TIMES_RAND; i++) {
int r = rand();
/* Add up all the bits, taking 0 to mean -1. */
for (j = 0; j < BITS_RAND; j++) {
sum += r & 0x1 ? 1 : -1;
r >>= 1;
}
}
if (sum < 0)
sum = 0 - sum; // Absolute value
return sum > MONOBIT_MAX_VAL_RAND;
}
/**
* Monobit test for prand().
*
* Returns 0 on success; otherwise otherwise.
*/
int monobit_prand() {
int state = rand();
int sum = 0;
int i, j;
for (i = 0; i < MONOBIT_TIMES_PRAND; i++) {
int r = state >> (16 - BITS_PRAND); // Ignore the least significant bits
/* Add up all the bits, taking 0 to mean -1. */
for (j = 0; j < BITS_PRAND; j++) {
sum += r & 0x1 ? 1 : -1;
r >>= 1;
}
state = prand(state);
}
if (sum < 0)
sum = 0 - sum; // Absolute value
return sum > MONOBIT_MAX_VAL_PRAND;
}
/**
* Store the failure code on the top of the stack and alternate flashing the
* LEDs to signify failure.
*
* Never returns!
*/
void fail(int code) {
asm("push %0" : : "r" (code));
failure = 1;
LED_OUT &= ~LED_GREEN;
prepare_to_blink();
}
/**
* Run though all the tests.
*
* Both LEDs are lit up while testing, and one will blink once the tests are
* done, depending on the outcome.
*/
void main() {
LED_DIR |= LED_RED | LED_GREEN;
LED_OUT |= LED_RED | LED_GREEN;
if (monobit_rand())
fail(0xdead);
if (monobit_prand())
fail(0xbeef);
LED_OUT &= ~LED_RED;
prepare_to_blink();
}
以及编译时的错误列表:
Warning[Pa050]: non-native end of line sequence detected (this diagnostic is only issued once) E:\Downloads\msp430-rng-master\rand.h 1
Error[Pe169]: expected a declaration E:\Downloads\msp430-rng-master\test.c 34
Warning[Pe012]: parsing restarts here after previous syntax error E:\Downloads\msp430-rng-master\test.c 116
Warning[Pe1051]: standard requires that parameter "TIMERA1_VECTOR" be given a type by a subsequent declaration ("int" assumed) E:\Downloads\msp430-rng-master\test.c 34
Error[Pe130]: expected a "{" E:\Downloads\msp430-rng-master\test.c 117
Warning[Pe940]: missing return statement at end of non-void function "interrupt" E:\Downloads\msp430-rng-master\test.c 117
Error[Pe018]: expected a ")" E:\Downloads\msp430-rng-master\test.c 126
Warning[Pe223]: function "monobit_rand" declared implicitly E:\Downloads\msp430-rng-master\test.c 144
Warning[Pe223]: function "monobit_prand" declared implicitly E:\Downloads\msp430-rng-master\test.c 147
最佳答案
您的语法不正确。请参阅以下行:
无符号 int rand(); {
这一行应为:
无符号 int rand() {
编辑
在您的测试代码中,您有以下内容:
int 中断(TIMERA1_VECTOR)blink_LED(void){
我从未见过以这种方式定义的中断服务例程。相反,它应该像这样定义(在 IAR EW430 中):
#pragma vector=TIMERA1_VECTOR
__interrupt void blink_LED(void) {
关于c - 使用 MSP430 的 RNG/PRNG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24302937/
我开发了一个 RNG 算法并生成随机数,现在我想测试生成的输出的随机性。我从 nist(sts) 下载了一个测试套件。有一个选项可以提供输入二进制文件来测试随机性。但我不知道如何生成这些二进制文件。我
因此,我编写了一个函数(以及一个 RNG 函数,上述函数调用该函数)来将随机数量的星号打印到控制台窗口,直到达到 90 个空格。星号代表汽车的运动,90个空格是轨道的长度。下面我包含的代码打印随机数量
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 8 年前。 Improve
我正在尝试为我的模拟器重现一些行为。 我有一个百分比支票,从 30% 到 70% 不等。问题是它不是严格随机的。这是我提取的实时数据: https://docs.google.com/spreadsh
这个问题在这里已经有了答案: How to generate a random integer in the range [0,n] from a stream of random bits wit
我目前正在实现一个代表 52 张牌的牌组的 Deck 类。它使用 boost Random 库来洗牌代表卡片的整数。 #include #include #include "constants.h
在本文的最后一个示例 (http://www.daniweb.com/software-development/cpp/threads/1769/c-random-numbers) 中,作者声称这是一
我想使用 在我的 C++ 应用程序中使用多个 RNG .播种它们的最佳方法是什么?我担心当使用来自单个 RNG 的随机数为每个 RNG 播种时,来自不同 RNG 的随机数会过于相关。 最佳答案 如果
现在我正在使用 Mersenne Twister RNG 并执行 Fisher-Yates 洗牌算法 100 次: std::vector shufCards; for(int i =
我正在开发一款纸牌游戏,我需要洗牌算法来做得很好,并且每次游戏运行时都不同,并且没有可预测的纸牌序列。 我正在使用 Mersenne twister 算法,但它仍然需要一个种子,所以实际上,虽然它产生
我可以使用两种方法中的一种来创建具有两个重要特征的伪随机数序列 - (1) 它可以在不同的机器上重现,并且 (2) 该序列从不重复范围内的数字,直到所有数字都被发出. 我的问题是 - 这些方法中的任何
我有一段冗长而复杂的源代码,它使用带有修复种子的随机数生成器。 这段代码是一个模拟器,这个模拟器的参数就是这个RNG给出的随机值。当我在同一台机器上执行代码时,无论我尝试多少次,输出都是一样的。但是当
我在想这个问题。我听说全局变量不好,它们会损害代码的可维护性、可用性、可重用性等。但在这种情况下,我还能做什么呢?也就是说,我有一个“伪随机数生成器”(PRNG),正如人们所知,它们涉及一种内部状态,
回复 this question我运行了以下 VBA 实验: Sub Test() Dim i As Long, A As Variant Dim count1 As Long, co
我知道我可以用例如设置 RNGversion RNGversion("3.5.2") 但是是否可以查询我当前使用的 R 版本? 编辑: 我的问题是版本 3.6.0 发生了一些变化,这在 RNGkind
我今天刚开始学习JavaScript,这个很简单的问题给我带来了麻烦。这只是较大代码段的一部分,但我将其隔离以尝试修复它。这是: document.write(blarg()); func
我制作了一个随机数生成器,如果有人在没有数字的情况下使用它,它会崩溃如何确保用户输入是否是字符串,它不会崩溃,而是说“无效参数”? static int random; static String s
好吧,我正在编写一个与 cpu 对抗的程序,但每次它都会先失败然后致命,我会分解我的代码,以便让你们更容易提供帮助。 进口: import javax.swing.JOptionPane; impor
我的问题是http://rcpp-devel.r-forge.r-project.narkive.com/qJMEsvOK/setting-the-r-random-seed-from-rcpp的后续
作为一个学习 Haskell 的 Java 人,我已经习惯了思考一切的新方法,但我花了半天时间尝试用简单的 RNG 实现一些东西,但一无所获。在 Java 中,我可以创建一个静态 RNG 并使用 Cl
我是一名优秀的程序员,十分优秀!