- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
// https://jaycarlson.net/2019/09/06/whats-up-with-these-3-cent-microcontrollers/
// The C code I used for those original MCU tests looked something like this:
volatile int16_t in[25];
volatile int16_t out[25];
const int16_t a0 = 16384;
const int16_t a1 = -32768;
const int16_t a2 = 16384;
const int16_t b1 = -25576;
const int16_t b2 = 10508;
int16_t z1, z2;
int16_t outTemp;
int16_t inTemp;
void main()
{
while(1) {
_pa = 2;
for(i=0;i<25;i++)
{
inTemp = in[i];
outTemp = inTemp * a0 + z1;
z1 = inTemp * a1 + z2 - b1 * outTemp;
z2 = inTemp * a2 - b2 * outTemp;
out[i] = outTemp;
}
_pa = 0;
}
}
// The Padauk code looks like this:
WORD in[11];
WORD out[11];
WORD z1, z2;
WORD pOut, pIn; // these are pointers, but aren't typed as such
int i;
void FPPA0 (void)
{
.ADJUST_IC SYSCLK=IHRC/2 // SYSCLK=IHRC/2
PAC.6 = 1; // make PA6 an output
while(1) {
PA.6 = 1;
pOut = out;
pIn = in;
i = 0;
do {
*pOut = (*pIn << 14) + z1;
z1 = -(*pIn << 15) + z2
+ (*pOut << 14)
+ (*pOut << 13)
+ (*pOut << 9)
+ (*pOut << 8)
+ (*pOut << 7)
+ (*pOut << 6)
+ (*pOut << 5)
+ (*pOut << 3);
z2 = (*pIn << 14)
- (*pOut << 13)
- (*pOut << 11)
- (*pOut << 8)
- (*pOut << 3)
- (*pOut << 2);
i++;
pOut++;
pIn++;
} while(i < 11);
PA.6 = 0;
}
}
> As for the filter function itself, you’ll see that all the multiplies have been replaced with shift-adds. The Padauk part does not recognize the * operator for multiplication; trying to use it to multiply two variables together results in a syntax error. No, I’m not joking.
j123123 11.10.2019 14:58 # 0
This works, but it’s not nearly as cycle-efficient as using one of Padauk’s handy macros:
When the compiler encounters these macros, it does a source-level replacement of “i” in the content of the block with each value — copying-and-pasting the entire block.
Царский анролл
j123123 11.10.2019 15:00 # 0
Why? Because your MCU does not have the ability to do indirect addressing with offsets (constant or otherwise). The compiler wants you to tell it precisely what you want to do. Maybe you want to do this:
Or maybe this:
Both of these have trade-offs.
Именно поэтому я за ассемблер
guest8 11.10.2019 15:22 # −999
j123123 13.10.2019 04:24 # 0
BATHbIu_nemyx 13.10.2019 05:29 # −102
Если так беспокоит предварительная оптимизация, то можно хинт высрать по этому поводу.
j123123 13.10.2019 11:04 # +1
Та херня, которая описывается в той статье https://jaycarlson.net/2019/09/06/whats-up-with-these-3-cent-microcontrollers/ это вообще не Си, а какая-то ебанутай поебень, похожая чем-то на Си. Там например даже цикла for нет
guest8 13.10.2019 11:07 # −999
j123123 13.10.2019 12:12 # +2
guest8 13.10.2019 12:45 # −999
j123123 13.10.2019 13:08 # +2
guest8 13.10.2019 14:15 # −999
guest8 13.10.2019 14:16 # −999
6arop_pycHu 13.10.2019 23:58 # −102
Ахах!
ПОРА УЕЖАТ
6arop_pycHu 14.10.2019 00:04 # −102
inho-pidar 13.10.2019 13:03 # −4
j123123 13.10.2019 13:09 # +2
guest8 13.10.2019 13:30 # −999
guest8 13.10.2019 14:15 # −999
guest8 13.10.2019 14:24 # −999
guest8 13.10.2019 14:29 # −999
guest8 13.10.2019 14:38 # −999
guest8 13.10.2019 18:18 # −999
guest8 13.10.2019 14:43 # −999
Dpyrou_Pycoqpo6_CEMA 14.10.2019 07:37 # −102
guest8 13.10.2019 14:10 # −999
j123123 13.10.2019 15:39 # 0
gost 13.10.2019 17:32 # +100
j123123 13.10.2019 18:01 # +1
guest8 13.10.2019 18:19 # −999
6arop_pycHu 14.10.2019 00:07 # −102
В СССР власть считала, что антисоветчиком может быть либо шпион либо безумец. Поскольку не может же нормальный советский человек быть против советской власти и не понимать, что учение Маркса всесильно, потому что оно верно.
В путинской России нет никакой идеологии как внятного образа будущего, но есть идея, что "Россия – это Путин, а Путин – это Россия". Поэтому в 20-му году своего существования путинизм пришел к старой советской формуле: кто против Путина, тот либо на госдеп работает, либо с ума сошел.
Кстати, есть слух, что пригожин сдох
https://censoru.net/uploads/posts/2019-10/1570996995_44bed50be1a79a12e5a98570a56ad c14.jpg
cmepmop 13.10.2019 20:33 # −102
MAPTbIwKA 13.10.2019 11:23 # +87
не отвечай ему
6arop_pycHu 13.10.2019 23:54 # −102
> I noticed that Padauk’s “Mini C” compiler didn’t support function arguments, return values, for() loops, and many other common C expressions, I became really nervous
Хах, причем еще и проприетарное.
В общем, finicky to implement
MAPTbIwKA 11.10.2019 22:06 # +89
guest8 11.10.2019 15:22 # −999
j123123 11.10.2019 15:29 # 0
PacTBopeHue 11.10.2019 16:01 # 0
j123123 11.10.2019 16:04 # +1
j123123 26.10.2019 22:14 # 0
guest8 27.10.2019 01:01 # −999
bagrinho 27.10.2019 20:16 # 0
Dpyrou_Pycoqpo6_CEMA 11.10.2019 15:26 # −103
Открытие дороги после ремонта в Уд-Муртии. Хуйло, сало, 2019.
Dpyrou_Pycoqpo6_CEMA 11.10.2019 15:31 # −103
guest8 11.10.2019 15:46 # −999
guest8 11.10.2019 15:46 # −999
cmepmop 11.10.2019 22:21 # 0
Dpyrou_Pycoqpo6_CEMA 11.10.2019 16:30 # −103
cmepmop 11.10.2019 22:11 # −1
Web_Monkey 12.10.2019 01:03 # −1
guest8 13.10.2019 09:42 # −999
guest8 13.10.2019 18:19 # −999
guest8 13.10.2019 21:06 # −999
cmepmop 12.10.2019 23:38 # −103
ropuJIJIa 13.10.2019 13:01 # 0
j123123 13.10.2019 14:11 # 0
guest8 13.10.2019 14:14 # −999
cmepmop 14.10.2019 11:27 # −102
rss 15.10.2019 19:27 # −102