Вс апр 03, 2022 10:17:17
Вс апр 03, 2022 12:32:20
Вс апр 03, 2022 13:00:00
#include "stdint.h"
struct W24
{
uint8_t b1;
uint8_t b2;
uint8_t b3;
};
void foo(volatile W24 *w24, const uint32_t a, bool f)
{
uint16_t tmp = ((a&0xF800)<<1) | (f?(1L<<11):0) | (a&0x700);
w24->b1=(a<<1)>>16; w24->b2=tmp>>8; w24->b3=a;
}
volatile W24 y;
int main()
{
uint32_t a=0;
volatile bool f = true;
while (1)
{
foo(&y,a,f);
a++;
}
}
Вс апр 03, 2022 17:47:50
Ну по чему медленнее, то ваше было, а вот 52 и 47, 40 и 36, мое. Не вижу тут в 2 раза, какие-то 11-12 тактов разница, в пользу iar.VladislavS писал(а):что GCC в 2 раза медленнее код делает.
Не думаю что там забористо будет, возможно будет значительно хуже.VladislavS писал(а):Попробуй их на ARM, должно быть забористо.
Вс апр 03, 2022 18:43:28
Вс апр 03, 2022 18:59:19
iar-arm
мой его
51 такт 33 без inline
34 23 inline
Вт апр 12, 2022 15:49:16
, где (xy) - исходная точка, (x1y1) - результат поворота, а (x0y0) - точка, относительно которой делается поворотx1=(x-x0)∗cos(ϕ)−(y-y0)∗sin(ϕ) + x0
y1=(x-x0)∗sin(ϕ)+(y-y0)∗cos(ϕ) + y0
#include <stdio.h>
#include <stdint.h>
#include <math.h>
#define CENTER 127
void rotate(int *x, int *y, float a){
int tx = *x - CENTER;
int ty = *y - CENTER;
tx = tx * cos(a) - ty * sin(a);
ty = tx * sin(a) + ty * cos(a);
ty += CENTER;
tx += CENTER;
*x=tx; *y = ty;
}
int x, y;
int x0 = 127;
int y0 = 127;
float r;
int main(void) {
// your code goes here
for(uint8_t i = 0; i<60; i++){
x = 127; y = 200;
rotate(&x, &y, i * 3.1415 * 2 / 60);
rotate(&x0, &y0, i * 3.1415 * 2 / 60);
r = sqrt((x0-x)*(x0-x)+(y0-y)*(y0-y));
printf("i=%d, x0=%d, y0=%d, x=%d, y=%d, r=%f\n", i,x0, y0, x, y, r);
}
return 0;
}
вот тут все можно еще раз проверить: https://ideone.com/vdqbQxi=0, x0=127, y0=127, x=127, y=200, r=73.000000
i=1, x0=127, y0=127, x=120, y=198, r=71.344238
i=2, x0=127, y0=127, x=112, y=195, r=69.634758
i=3, x0=127, y0=127, x=105, y=189, r=65.787537
i=4, x0=127, y0=127, x=98, y=181, r=61.294373
i=5, x0=127, y0=127, x=91, y=172, r=57.628117
i=6, x0=127, y0=127, x=85, y=161, r=54.037025
i=7, x0=127, y0=127, x=79, y=149, r=52.801514
i=8, x0=127, y0=127, x=73, y=135, r=54.589375
i=9, x0=127, y0=127, x=68, y=123, r=59.135437
i=10, x0=127, y0=127, x=64, y=109, r=65.520988
i=11, x0=127, y0=127, x=61, y=97, r=72.498276
i=12, x0=127, y0=127, x=58, y=84, r=81.301903
i=13, x0=127, y0=127, x=56, y=73, r=89.202019
i=14, x0=127, y0=127, x=55, y=64, r=95.671310
i=15, x0=127, y0=127, x=55, y=56, r=101.118744
i=16, x0=127, y0=127, x=55, y=48, r=106.887794
i=17, x0=127, y0=127, x=56, y=43, r=109.986366
i=18, x0=127, y0=127, x=58, y=39, r=111.825760
i=19, x0=127, y0=127, x=61, y=38, r=110.801628
i=20, x0=127, y0=127, x=64, y=36, r=110.679718
i=21, x0=127, y0=127, x=68, y=37, r=107.615051
i=22, x0=127, y0=127, x=73, y=39, r=103.247276
i=23, x0=127, y0=127, x=79, y=41, r=98.488579
i=24, x0=127, y0=127, x=85, y=44, r=93.021500
i=25, x0=127, y0=127, x=91, y=46, r=88.639717
i=26, x0=127, y0=127, x=98, y=49, r=83.216583
i=27, x0=127, y0=127, x=105, y=51, r=79.120163
i=28, x0=127, y0=127, x=112, y=53, r=75.504967
i=29, x0=127, y0=127, x=120, y=54, r=73.334846
i=30, x0=127, y0=127, x=127, y=55, r=72.000000
i=31, x0=127, y0=127, x=134, y=54, r=73.334846
i=32, x0=127, y0=127, x=142, y=53, r=75.504967
i=33, x0=127, y0=127, x=149, y=51, r=79.120163
i=34, x0=127, y0=127, x=156, y=49, r=83.216583
i=35, x0=127, y0=127, x=163, y=46, r=88.639717
i=36, x0=127, y0=127, x=169, y=44, r=93.021500
i=37, x0=127, y0=127, x=175, y=41, r=98.488579
i=38, x0=127, y0=127, x=181, y=39, r=103.247276
i=39, x0=127, y0=127, x=186, y=37, r=107.615051
i=40, x0=127, y0=127, x=190, y=36, r=110.679718
i=41, x0=127, y0=127, x=193, y=38, r=110.801628
i=42, x0=127, y0=127, x=196, y=39, r=111.825760
i=43, x0=127, y0=127, x=198, y=43, r=109.986366
i=44, x0=127, y0=127, x=199, y=48, r=106.887794
i=45, x0=127, y0=127, x=199, y=55, r=101.823380
i=46, x0=127, y0=127, x=199, y=64, r=95.671310
i=47, x0=127, y0=127, x=198, y=73, r=89.202019
i=48, x0=127, y0=127, x=196, y=84, r=81.301903
i=49, x0=127, y0=127, x=193, y=97, r=72.498276
i=50, x0=127, y0=127, x=190, y=109, r=65.520988
i=51, x0=127, y0=127, x=186, y=123, r=59.135437
i=52, x0=127, y0=127, x=181, y=135, r=54.589375
i=53, x0=127, y0=127, x=175, y=149, r=52.801514
i=54, x0=127, y0=127, x=169, y=161, r=54.037025
i=55, x0=127, y0=127, x=163, y=172, r=57.628117
i=56, x0=127, y0=127, x=156, y=181, r=61.294373
i=57, x0=127, y0=127, x=149, y=189, r=65.787537
Вт апр 12, 2022 19:16:09
Вт апр 12, 2022 20:16:52
Вт апр 12, 2022 20:47:13
i=0, x0=127, y0=127, x=127, y=200, r=73.000000
i=1, x0=127, y0=127, x=120, y=198, r=71.344238
i=2, x0=127, y0=127, x=112, y=195, r=69.634758
...
Вт апр 12, 2022 20:59:28
Вт апр 12, 2022 21:04:10
tx = tx * cos(a) - ty * sin(a);
ty = tx * sin(a) + ty * cos(a);
Вт апр 12, 2022 21:10:10
Вт апр 12, 2022 21:19:03
да чтоб меня!!! вот, блин, ступил, так ступил!!!da-nie писал(а):У вас меняется tx
Вс июл 03, 2022 08:58:40
int TimeToRunStraight(int distance) { // in milliseconds from millimeters.
return sqrt(3000000/11 * distance/data.acceleration);
}
Вс июл 03, 2022 10:24:13
Вс июл 03, 2022 11:25:37
Вс июл 03, 2022 13:24:40
Вт авг 02, 2022 19:58:34
void readTMData(unsigned long * data) {
digitalWrite(PIN_STB, LOW);
shiftOut(PIN_DIO, PIN_CLK, LSBFIRST, 0x42); //Команда на чтение регистров с ТМ1628
pinMode(PIN_DIO, INPUT_PULLUP);
delayMicroseconds(1);
bitWrite(*data,7,1); // ставим 7-й бит в 1. После всех сдвигов он станет MSB. Маска ненажатых кнопок будет выглядеть как 10000000000000000000000000000000
* data =*data+ shiftIn(PIN_DIO, PIN_CLK, LSBFIRST); // Считали и записали первый байт
* data= * data<<8; // Сдвинули
* data = *data+shiftIn(PIN_DIO, PIN_CLK, LSBFIRST); // Считали и записали второй байт
* data= * data<<8; // Сдвинули
shiftIn(PIN_DIO, PIN_CLK, LSBFIRST); // Вот тут просто считали, никуда не записывая, чтобы не рвать последовательность чтения
* data =*data+ shiftIn(PIN_DIO, PIN_CLK, LSBFIRST); // Считали и записали четвертый байт
* data= * data<<8; // Сдвинули
* data = *data+shiftIn(PIN_DIO, PIN_CLK, LSBFIRST); // Считали и записали пятый байт
pinMode(PIN_DIO, OUTPUT);
digitalWrite(PIN_STB, HIGH);
}
Вт авг 02, 2022 20:46:21
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino\wiring_shift.c
uint8_t shiftIn(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder) {
uint8_t value = 0;
uint8_t i;
for (i = 0; i < 8; ++i) {
digitalWrite(clockPin, HIGH);
if (bitOrder == LSBFIRST)
value |= digitalRead(dataPin) << i;
else
value |= digitalRead(dataPin) << (7 - i);
digitalWrite(clockPin, LOW);
}
return value;
}