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

 
 
5 страниц V  « < 3 4 5  
Reply to this topicStart new topic
> Прошу помощи с STM32F051, Периодическое сваливание в HardFault
Golikov A.
сообщение Aug 20 2014, 07:28
Сообщение #61


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



А вы по специальности работали?sm.gif ...

мне вот очень важно сколько бит int, потому что когда вы его массивами на компьютер шлете и обратно принимаете хорошо бы знать сколько переменных пошло. Так же я напомню что есть big endian и little endian, хорошо про них не знать, но в железе редко имеем дело с одним процессором, а если еще ПЛИС, а в ней удобнее big endian, а между процом и ПЛИС тоже интерфейсы и передача данных.

также мы вспоминаем о структурах и их преобразовании в байтовый массив и обратно, где так же важно знать типы, размеры полей, их последовательность и прочее... И тут в полный рост встает архитектура, по посылайте на компьютер не пакованные структуры с какого-нить СМ0, и попробуйте их с позиции "не програмерово собачье дело" их преобразовать.


Ну и пример про грузовик:
void - это не просто машина, это такая машина, которая может все, и потому если запросили void машину, то она сто пудово подойдет, только надо с пониманием к ней отнестись, и найти где входsm.gif, а все остальное она сделает, и груз перевезет и на работу по пробкам доставит. И продолжая этот пример, трудности на себя берет водитель, чтобы клиенты не парились!


Цитата
Ну включаем логику. Как может стать понятнее, если табличку "Иванов, 28 лет, пневмония, лечащий врач Сидоров" заменить на табличку "очередной больной"?


не такая замена как вы говорите, а такая:
"Иванов, 28 лет, пневмония, лечащий врач Сидоров"
меняем на
(очередной больной) "Иванов, 28 лет, пневмония, лечащий врач Сидоров"
согласитесь что во 2 случае информации чуть больше, как минимум что мы именно хотели включить этого человека как нашего очередного больного.

Иногда в поисках ошибок находятся разные места кода, и смотрите на них и думаете а нет ли тут ошибки, и иногда с таким явным уточнением вы понимаете что тут все верно. Особенно это часто это происходит когда идут двойные указатели и всякие их разименования...



Go to the top of the page
 
+Quote Post
Tahoe
сообщение Aug 20 2014, 08:30
Сообщение #62


Местный
***

Группа: Свой
Сообщений: 459
Регистрация: 30-03-06
Из: Москва
Пользователь №: 15 600



Цитата(Golikov A. @ Aug 20 2014, 11:28) *
мне вот очень важно сколько бит int

Это очень плохо. Потому что все, что должен знать программер о типе int, что это тип, _удобный_ для процессора.

Цитата(Golikov A. @ Aug 20 2014, 11:28) *
потому что когда вы его массивами на компьютер шлете и обратно принимаете хорошо бы знать сколько переменных пошло указатели и всякие их разименования...

Пересылка int между машинами, это тоже очень плохо, говорит о низкой квалификации программера. Обмен между машинами должен идти в каких-либо data_t, а не int. И пусть не вводит в заблуждение тот факт, что по каким-то причинам, в т.ч. из-за совпадения кол-ва разрядов, данные представляют все тем же int. Повторюсь, int, это некоторый тип, удобный для процессора и ничего более. Любые совпадения - случайны, все персонажи - вымышлены. (с) biggrin.gif

Цитата(Golikov A. @ Aug 20 2014, 11:28) *
Так же я напомню что есть big endian и little endian, хорошо про них не знать, но в железе редко имеем дело с одним процессором

А причем здесь железо? Мы говорим о том, насколько программер понимает/чувствует инструмент, которым пользуется. В общем случае, программа должна быть написана так, что бы было плевать, на каком endian работает процессор. Вот мы снова вернулись к переносимости кода.
Если писать так, то будет зависимость от endian:
Код
union
{
    uint16_t    d;
    struct
    {
        uint8_t    l;
        uint8_t    h;
    }
}


А если написать так, то исполняться будет одинаково, при любом endian:
l = d >> 0;
h = d >> 8;

Цитата(Golikov A. @ Aug 20 2014, 11:28) *
а если еще ПЛИС, а в ней удобнее big endian

Какой любопытный постулат. Можно с этого места попобробнее. А то моим ПЛИС всегда было по-барабану, с каким endian работать.

- грузины, лучше чем армяне
- чем лучше?
- чем армяне!
(с) sm.gif

Цитата(Golikov A. @ Aug 20 2014, 11:28) *
также мы вспоминаем о структурах и их преобразовании в байтовый массив и обратно, где так же важно знать типы, размеры полей, их последовательность и прочее... И тут в полный рост встает архитектура

... и тут в полный рост встает умение правильно структурировать программу. Выносится небольшой кусочек, в котором есть подобные зависимости. Не надо сразу лезть копаться в частностях, не разобравшись с главным.

Цитата(Golikov A. @ Aug 20 2014, 11:28) *
Ну и пример про грузовик:
void - это не просто машина, это такая машина, которая может

Ну вот не надо фантазировать, а? Здесь void, это то же, что и просто машина. Без уточнений, что она там может, а что не может.

Цитата(Golikov A. @ Aug 20 2014, 11:28) *
если запросили void машину, то она сто пудово подойдет

Вот опять, выдаем желаемое за действительное. Если запросили void машину, это не значит, что она подойдет. Это значит, что клиент ничего не сообщил о том, какая машина ему нужна. Подойдет или нет - никто не знает. Собсно, в обсуждении выше это и произошло - на каком-то ядре void * работало корректно, но в один прекрасный день, случилось то, что и должно было случиться.

Цитата(Golikov A. @ Aug 20 2014, 11:28) *
И продолжая этот пример, трудности на себя берет водитель, чтобы клиенты не парились!

Да-да. Я прям представил себе, как на погрузку 2т сахара, приехало такси и водитель "взял на себя все трудности". На своем горбу, видимо, перетаскал, от склада до магазина. Главное, что клиенты не парились.

Цитата(Golikov A. @ Aug 20 2014, 11:28) *
не такая замена как вы говорите, а такая:
"Иванов, 28 лет, пневмония, лечащий врач Сидоров"
меняем на
(очередной больной) "Иванов, 28 лет, пневмония, лечащий врач Сидоров"

Сдаюсь. Видимо, умение программировать дано не каждому. wink.gif
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Aug 20 2014, 08:44
Сообщение #63


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата
Сдаюсь. Видимо, умение программировать дано не каждому.

последние вы верно заметили. Точно не каждому%)...

из наводящих вопросов, если с big и little проблем нет, то нафига функция смены порядка байт иногда(напишем осторожно) поддержана на железном уровне?

И еще спрошу известна ли вам разница между SPI и UART? не очевидная в синхронизации, а другая, что в битах лежит?

Кстати, насколько удобен int для 8051?


Мне правда интересно каких приемов я не знаю. Вот мне дают описание что с компьютера придет структура

struct
{
int32_t OverLoadFlags;
int32_t SpeedX;
int32_t SpeedY;
int32_t SpeedZ;
int32_t SpeedRx;
int32_t SpeedRy;
}


вот как вы это оформляете в вашей программе, приемную часть? При условии что вы не заботитесь о битности? Приведите пример?
Go to the top of the page
 
+Quote Post
Tahoe
сообщение Aug 20 2014, 10:46
Сообщение #64


Местный
***

Группа: Свой
Сообщений: 459
Регистрация: 30-03-06
Из: Москва
Пользователь №: 15 600



Цитата(Golikov A. @ Aug 20 2014, 12:44) *
последние вы верно заметили. Точно не каждому%)...

Конечно. В 2/3 случаев, мне попадается не программирование, а г*внокод(с). Главное, не путать эти два понятия. wink.gif

Цитата(Golikov A. @ Aug 20 2014, 12:44) *
с компьютера придет структура

Новое слово в интерфесах. Про ПЛИС ответа не дождался. Но может хоть про это дождусь. Шо, вот прям структура приходит? Там, поди, шина специальная, на каждого члена структуры - своя subbus?
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Aug 20 2014, 11:24
Сообщение #65


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



ну в целом все как бы ясно, и про вас и про ваш подход. Творческих успехов вам.
Go to the top of the page
 
+Quote Post
Tahoe
сообщение Aug 20 2014, 12:17
Сообщение #66


Местный
***

Группа: Свой
Сообщений: 459
Регистрация: 30-03-06
Из: Москва
Пользователь №: 15 600



Согласен. Потихоньку слиться - лучшее, что можно сделать в данной ситуации. Хотя немного жаль. Читать про "удобный для ПЛИС endianness" и "мега-интерфейсы, умеющие передавать данные целыми структурами" было весело.
Go to the top of the page
 
+Quote Post
LightElf
сообщение Aug 21 2014, 11:51
Сообщение #67


Частый гость
**

Группа: Участник
Сообщений: 180
Регистрация: 5-04-09
Пользователь №: 47 205



QUOTE (KnightIgor @ Aug 19 2014, 12:21) *
Тут один советчик опустился до вопроса, не пробовал ли я код с PDP-11 на Cortex перенести. Он, видимо, предполагал, что я не знаю, что такое PDP-11. Но в отличие от него, я еще помню НАИЗУСТЬ многие бинарные коды инструкций PDP-11: в советское время CM-1420 и "Электроника". Кстати, MSP430 - это тот самый PDP-11 по идее.

Раз уж коды инструкций на наизусть помните, может и требования к выравниванию переменных не забыли? На всякий случай: ваш код и на PDP-11 работать не будет.
Go to the top of the page
 
+Quote Post
MiklPolikov
сообщение Aug 26 2014, 11:54
Сообщение #68


Гуру
******

Группа: Свой
Сообщений: 2 015
Регистрация: 23-01-07
Из: Москва
Пользователь №: 24 702



Подскажите пожалуйста, как увидеть карту занятости оперативной памяти например в Keil ?


--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Aug 26 2014, 12:22
Сообщение #69


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



если опустить маалоки и рекурсию, то надо поставить галку сгенерить карту памяти, и там будет написано сколько каких переменных и где лежит, какие функции, сколько они стэка отжирают и так далее...

project options -> listing -> memory map
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 28th July 2025 - 19:52
Рейтинг@Mail.ru


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