Спойлер
Код: Выделить всё
uint16_t rnd(uint16_t limit){
uint32_t result = rand();
return (uint16_t)(((uint64_t)(result) * limit) / (RAND_MAX)); // где RAND_MAX = 0x7fffffff
}Код: Выделить всё
uint16_t rnd(uint16_t limit){
uint32_t result = rand();
return (uint16_t)(((uint64_t)(result) * limit) / (RAND_MAX)); // где RAND_MAX = 0x7fffffff
}Нет, это библиотечная функция stdlib.hEddy_Em писал(а):rand() - твой?
Код: Выделить всё
char *ptr = (void*)RAMSTART;
uint32_t seed=0;
for(uint16_t i=0; i < (RAMEND-RAMSTART-1); i++){
seed += CRC_32BitsCompute(ptr++);
}
srand(seed);Было бы хорошо, но "бы" мешает.a797945 писал(а):а для этого может достаточно делить на 80000000h
Код: Выделить всё
return (uint16_t)((uint32_t)((uint32_t)(result>>16) * limit) / (RAND_MAX>>16));Код: Выделить всё
uint32_t getRand(){
uint32_t r = 0;
for(int i = 0; i < 16; ++i){
r <<= 1;
r |= (getADCval(0) & 1);
r <<= 1;
r |= (getADCval(1) & 1);
}
r ^= r << 13;
r ^= r >> 17;
r ^= r << 5;
return r;
}Код: Выделить всё
xspeed[Nballs] = ((int)getRand()) % SPEEDMAX;
yspeed[Nballs] = ((int)getRand()) % SPEEDMAX;Код: Выделить всё
.section .text.Reset_Handler
.weak Reset_Handler
.type Reset_Handler, %function
Reset_Handler:
ldr r0, =_eram
mov sp, r0 /* set stack pointer */
/* Copy the data segment initializers from flash to SRAM */
movs r1, #0
b LoopCopyDataInit
CopyDataInit:
ldr r3, =_sidata
ldr r3, [r3, r1]
str r3, [r0, r1]
adds r1, r1, #4
LoopCopyDataInit:
ldr r0, =_sdata
ldr r3, =_edata
adds r2, r0, r1
cmp r2, r3
bcc CopyDataInit
ldr r2, =_sbss
b LoopFillZerobss
/* Zero fill the bss segment. */
FillZerobss:
movs r3, #0
str r3, [r2]
adds r2, r2, #4
LoopFillZerobss:
ldr r3, = _ebss
cmp r2, r3
bcc FillZerobss
/* Call the clock system intitialization function.*/
bl SystemInit
/* Call the application's entry point.*/
bl main
А вы, что, не поняли что я пытаюсь сделать?MLX90640 писал(а):Сканировать SRAM? А что там предполагаете увидеть?
Код: Выделить всё
srand(seed);Вот именно, пока не произошло копирование из флеша .... эти ячейки имеют рандомное значение и оно всегда разное. Можете сами убедиться.MLX90640 писал(а):Тот участок асма это не сканирование, а копирование из флеша константных значений и обнуление неинициализованных глобальных и статич переменных.
Код: Выделить всё
56
210
222
109
210
27
99
28
66
22
Код: Выделить всё
49
152
183
232
225
47
178
223
243
128
Код: Выделить всё
206
131
188
119
163
105
5
51
188
193