реклама на сайте
подробности

 
 
> Stack, 8-byte alligment, откуда ноги?
DASM
сообщение Aug 1 2018, 15:48
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



Вчера ловил интересный глюк, с UcOS, достаточно добавить переменную любую почти в любом месте кода и все рушилось. Но если добавить ещё одну - снова работало. Оказалось в итоге что это меняет положение стека задач в оське, и если он не 8allign то рушится. В доках Арм что то о требовании такого выравнивания для внешней памяти. Но тут то внутренняя. Откуда ноги, ткните плз. Просто ради интереса
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
aaarrr
сообщение Aug 1 2018, 15:54
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(DASM @ Aug 1 2018, 18:48) *
Откуда ноги, ткните плз. Просто ради интереса

LDRD/STRD, работа с 64-битными данными.
Go to the top of the page
 
+Quote Post
DASM
сообщение Aug 1 2018, 16:09
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



Цитата(aaarrr @ Aug 1 2018, 18:54) *
LDRD/STRD, работа с 64-битными данными.

Ну хорошо, я решил свою проблему, создав сегмент с аллигн 8 и поместив в него стеки задач ос. Но до того, обычный проект совершенно, у него стек просто на конец озу чипа, в сегменте с алигн4. Почему работает? Да и все равно не совсем ясно, если в стек пушить 4байтные данные, то ведь станет криво. Чего то не понимаю я. Или арм при заталкивании в стек, допустим одного байта, на самом деле меняет указатель стека на 8? Компа нет под рукой, но стало интересно
Go to the top of the page
 
+Quote Post
Forger
сообщение Aug 3 2018, 09:40
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(DASM @ Aug 1 2018, 19:09) *
Ну хорошо, я решил свою проблему, создав сегмент с аллигн 8 и поместив в него стеки задач ос.


В принципе не обязательно для стеков задач создавать отдельный сегмент со своим выравниваем. Иначе придется размер стека каждой задачи делать кратным 8 байт.
Но можно сделать с нужным выравниваем стек каждой задачи, попутно "вынудив" компилятор выравнивать еще и размер стека автоматом. Например, я делаю так (лишнее "вырезал"):
Код
class AbstractThread
{
public:
....
    using StackItem = uint64_t;
    using StackSize = uint32_t;
...
}

....

template <AbstractThread::StackSize STACK_SIZE = THREAD_DEFAULT_STACK_SIZE>
class Thread : public AbstractThread
{
....
private:
    StackItem stack[STACK_SIZE/(sizeof(StackItem))] __attribute__ ((aligned(sizeof(StackItem))));
};

Используется расширения самого компилятора, в данном случаем речь про __attribute__ ((aligned(....))))


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
jcxz
сообщение Aug 3 2018, 21:30
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Forger @ Aug 3 2018, 12:40) *
В принципе не обязательно для стеков задач создавать отдельный сегмент со своим выравниваем. Иначе придется размер стека каждой задачи делать кратным 8 байт.

И что это реально так сильно нужно - задавать размер стека с точностью до слова? Зачем??
Выравнивание на 8 и размер кратным 8 и нечего впустую мудрить.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- DASM   Stack, 8-byte alligment, откуда ноги?   Aug 1 2018, 15:48
||- - aaarrr   Цитата(DASM @ Aug 1 2018, 19:09) Да и все...   Aug 1 2018, 16:19
||- - Forger   Цитата(jcxz @ Aug 4 2018, 00:30) И что эт...   Aug 3 2018, 22:38
|- - jcxz   Цитата(aaarrr @ Aug 1 2018, 18:54) LDRD/S...   Aug 2 2018, 09:31
|- - aaarrr   Цитата(jcxz @ Aug 2 2018, 12:31) Это не т...   Aug 2 2018, 09:55
- - DASM   То есть компилер при вызове примет меры для выравн...   Aug 1 2018, 16:35
|- - aaarrr   Цитата(DASM @ Aug 1 2018, 19:35) То есть ...   Aug 1 2018, 17:50
- - DASM   Ясно, спасибо.   Aug 2 2018, 03:10
- - MasterElectric   Это связано с выравниванием стекового фрейма к дво...   Aug 2 2018, 07:16
- - scifi   Цитата(DASM @ Aug 1 2018, 18:48) В доках ...   Aug 2 2018, 10:18
- - DASM   Итого в линкер файлах того же gcc мина лежит? Там ...   Aug 2 2018, 15:55
|- - aaarrr   Цитата(DASM @ Aug 2 2018, 18:52) Хотелось...   Aug 2 2018, 16:00
||- - DASM   Цитата(aaarrr @ Aug 2 2018, 19:00) 2000 г...   Aug 2 2018, 16:07
||- - aaarrr   Цитата(DASM @ Aug 2 2018, 19:07) Господи,...   Aug 2 2018, 16:13
|- - aaarrr   Цитата(DASM @ Aug 2 2018, 18:55) Итого в ...   Aug 2 2018, 16:03
|- - scifi   Цитата(DASM @ Aug 2 2018, 18:55) Итого в ...   Aug 3 2018, 07:08
- - DASM   Gcc не в курсе? Или кто делает lds файлы.. честно ...   Aug 2 2018, 16:03
|- - jcxz   Цитата(DASM @ Aug 2 2018, 19:03) Gcc не в...   Aug 2 2018, 17:07
- - DASM   Точно уже не помню, может и 40800, 2002 год был, с...   Aug 2 2018, 16:18
- - DASM   Не сталкивались и хорошо. А мне интересно кто стал...   Aug 2 2018, 18:09
- - Arlleex   Добавлю лишь, что в компиляторах ключ PRESERVE8 ил...   Aug 3 2018, 04:47


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd August 2025 - 04:25
Рейтинг@Mail.ru


Страница сгенерированна за 0.03689 секунд с 7
ELECTRONIX ©2004-2016