
Andrew
16.09.2017
20:54:38
я не исключаю варианта, что если код очень простой, то все распихали по регистрам и все функции заинлайнены

OMEN
16.09.2017
20:55:14
http://www.nongnu.org/avr-libc/user-manual/malloc-std.png
Вот гляди структуру ОЗУ

Andrew
16.09.2017
20:55:27
вау

Google

OMEN
16.09.2017
20:55:32
там всё просто
с этим стэком

Andrew
16.09.2017
20:55:42
пойду напьюсь
просто там все, да
когда у тебя однопоточное приложение — там все просто
или когда у тебя кооперативная многозадачность

OMEN
16.09.2017
20:57:20
Неа

Andrew
16.09.2017
20:57:28
эх

OMEN
16.09.2017
20:57:32
Во кстати, смотри
http://robocraft.ru/blog/985.html
я в питере каждый месяц бываю =D

Andrew
16.09.2017
20:58:54
я уже думал приехать пояснить тебе за стек
по айпи вычислить там, все это

Google

OMEN
16.09.2017
20:59:14
Ахахаха

Andrew
16.09.2017
20:59:40
читаю твою статью, должно проясниться
действительно, нахуя нужно стеки разделять

OMEN
16.09.2017
21:02:20
бля

Andrew
16.09.2017
21:02:29
просто у чуваков всего два потока и они особо не парятся над размером

OMEN
16.09.2017
21:02:36
точно же.....

Andrew
16.09.2017
21:02:43
ну или парятся

OMEN
16.09.2017
21:02:49
лоханулся, признаю.

Andrew
16.09.2017
21:03:55
да это-то ладно, но еще и врешь нагло тут
ты понимаешь, что такое стек, что там оказывается и почему у каждой задачи свой стек?
да
знаю

OMEN
16.09.2017
21:05:28
да блин, всяко бывает. Если бы ты знал, какова моя участь, то ты бы понял меня, простил, и ещё бы пиваса накатил со мной за нелёгкую.

Andrew
16.09.2017
21:07:22
void task(void* params) {
static uint8_t a = 10;
uint32_t b = a*100;
uint32_t res = foo(a,b);
for(;;) {}
}
uint32_t foo(uint8_t x, uint32_t y) {
return x * y;
}
сможешь оценить сколько стека потребуется на этот кусок, с учетом того что компилятор не соптимизирует эту ебанину?
вот так интереснее

OMEN
16.09.2017
21:08:21
сложна подсчитать то

Andrew
16.09.2017
21:09:27
да не так уж сложно, если алгоритм понятен

OMEN
16.09.2017
21:10:19
а разрядность ?

Google

Andrew
16.09.2017
21:10:30
при чем тут разрядность?

OMEN
16.09.2017
21:10:31
ну, размер указателя какой

Andrew
16.09.2017
21:10:45
ну допустим sizeof(size_t) = 4
stm32, насколько помню, контекст из 18 регистров состоит

OMEN
16.09.2017
21:12:09
ну около 200 байт

Andrew
16.09.2017
21:12:13
ебать
как это вышло?

OMEN
16.09.2017
21:12:47
я подсчитал размер всякихх переменных
и прочего хлама

Andrew
16.09.2017
21:13:08
а какие переменные ты считал?
и что такое прочий хлам
блин, может нам в личку пойти, тут вообще-то люди живут

unum
16.09.2017
21:13:53
Я читаю

Andrew
16.09.2017
21:13:55
я могу иногда пересылать в чатик особо смешные моменты
ок

OMEN
16.09.2017
21:14:34
блина

unum
16.09.2017
21:14:39
Сколько стек будет?

OMEN
16.09.2017
21:15:03
я не могу подсчитать, сколько будет этот кусок кода занимать места в стеке
потому что я уже не могу понять, как это должно считаться

Andrew
16.09.2017
21:17:46
a статическая, значит лежит в bss, 0 байт
b на стеке, 4 байта
при вызове функции 18 байт контекста, + 5 байт аргументы (я не помню армовый ABI, может и через регистры передает, но будем считать оценку сверху)
опять же я не помню abi, может возвращаемое значение тоже на стеке лежит, еще + 4 байта
дальше контекст спопает со стека и будет еще +4 байта на res
итого маскимум 4 + 18 + 5 + 4 = 31

Google

Kir
16.09.2017
21:18:49

OMEN
16.09.2017
21:19:02
бля

Andrew
16.09.2017
21:19:06
пока не свалили

OMEN
16.09.2017
21:19:16
я со статикой считал

Andrew
16.09.2017
21:19:32
ну как у тебя вместо 30 байт получилось 200-то?

OMEN
16.09.2017
21:19:36
ну вот спасибо тебе на том, что не стал глумится, а нормально пояснил)

Andrew
16.09.2017
21:20:00
я не перестаю глумиться, тащемта

unum
16.09.2017
21:21:56
Чот Херня какая-то, почему return 4 байта?

Andrew
16.09.2017
21:22:34
потому что u32

T
16.09.2017
21:22:55
В голос

Admin
ERROR: S client not available

Andrew
16.09.2017
21:23:05
ой

unum
16.09.2017
21:25:33

Andrew
16.09.2017
21:25:35
по cdecl все переменные расширяются до 4 байт, например. А сохраняются только регистры, используемые функцией
но например точно знаю, что в арме при вызове прерывания сохраняется полный контекст
короче да,
» The base standard provides for passing arguments in core registers (r0-r3) and on the stack. For subroutines that take a small number of parameters, only registers are used
» A Fundamental Data Type that is smaller than 4 bytes is zero- or sign-extended to a word and returned in r0
и регистров 16, сохраняются все
так что даже 4 + 16 = 20 байт должно хватить

OMEN
16.09.2017
21:51:36
я пойду разбираться с семафорами, что то я не догоняю что мне больше нужно, статичный или нет и в каких случаях какой юзается

Google

Andrew
16.09.2017
21:54:58
оба одинаковые
но под статичный ты сам память выделяешь, а обычный в куче память берет

OMEN
16.09.2017
21:58:07
пущай будет статичный

Andrew
16.09.2017
21:58:47
тебе кучи чтоли жалко?
сделай heap_1 если боишься недетерминированной аллокации
там освобождения памяти вообще нет, для всяких единожды выделенных псеводстатичных или глобальных объектов очень хорошо
если что, стеки всех таск лежат в куче (если только ты их не создаешь через xTaskCreateStatic)

OMEN
16.09.2017
22:03:24
так то мне один раз надо выделить.

Andrew
16.09.2017
22:03:41
и?
в системе с работающей freertos нативный стек (который в конце памяти линкером выделяется) вообще почти не используется, разве под начальную инициализацию (до старта шедулера)

OMEN
16.09.2017
22:05:14
и всё, просто я пытаюсь разобраться во всём этом. Я впервые сталкиваюсь с ОС на stm32

Andrew
16.09.2017
22:05:30
просто надо немног понимаь, что происходит

OMEN
16.09.2017
22:05:35
значит лучше в куче размещать все эти структуры?

Andrew
16.09.2017
22:05:56
какие?
кто здесь?

OMEN
16.09.2017
22:06:17
типа семафоров
мьютексов

Andrew
16.09.2017
22:07:44
если ты не планируешь освобождать память, удаляя эти объекты, то куча ничем не отличается от статического выделения. Разве что за тебя уже решили вопросы, сколько памяти и где выделить и кому указатель отдать
ну то есть отличается конечно, например тем что ты в runtime можешь словить out of memory

OMEN
16.09.2017
22:08:55
понял в принципе

Andrew
16.09.2017
22:09:10
но если ты эти семафоры выделяешь при старте программы, то это почти наверное не будет проблемой

OMEN
16.09.2017
22:10:49
оут оф мемори вряд ли получу в своих задачах)