@DC7499

Страница 1100 из 1477
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
ой

Чот Херня какая-то, почему return 4 байта?
но это не точно. Ща решил почитать про ABI

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
оут оф мемори вряд ли получу в своих задачах)

Страница 1100 из 1477