03.11.2010, 17:19
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Сообщение от zheleznjakov
|
Я детально не вникал глунял просто распределение секций у линкера, при 2048 байт озу нулевая страница 255 байт, а bss (data) от 0x0100 до 0x05FE, вот и подумал что 512 под стек.
|
Вообще обычно все не так. Задается область памяти в скрипте линкера и указывается какие секции туда складывать. Соответственно размеров у секций нет, есть только у всей области. Тут либо поместится, либо нет. ![Улыбка](images/smilies/icon_smile.gif)
У космика почему то секции имеют отличный от стандартного смысл. bss - секция для переменных инициализируемых 0 у всех, кроме космика. У космика это почему то no_init. А инициализируемые нулем складываются в ubsct. Причем проблема только с секцией ubsct - если массивы явно проинициализировать, то все собирается без всяких шаманских действий.
Последний раз редактировалось Falconist; 13.04.2011 в 23:36.
|
|
|
|
03.11.2010, 17:21
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Сообщение от zheleznjakov
|
а прога "соберается" да же если ARRAY_SIZE 20000 тыщ поставить...
|
ARRAY_SIZE 1000
Цитата:
|
#error clnk Debug\test_for_kazus.lkf:1 segment .bss size overflow (190)
|
Хотя с 500 - собирается. Похоже в скрипте линкера RAM задана для толстых кристаллов с ОЗУ›2кБ
![Обижен](images/smilies/icon_beee.gif)
А скрипта то и нету. Все через командную строку задается. Причем все равно какой кристалл - она одинаковая. Вот и ответ - переполнение отслеживается только если в самый толстый кристалл не влезает.
ЗЫ. Хочу GCC под STM8... Очень сильно хочу...
Последний раз редактировалось Falconist; 13.04.2011 в 23:38.
|
|
|
|
03.11.2010, 17:43
|
|
Временная регистрация
Регистрация: 15.03.2006
Сообщений: 80
Сказал спасибо: 3
Сказали Спасибо 83 раз(а) в 11 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Тут соль в том, что это атомарная операция, в которую не сможет вклиниться процесс из какого-нибудь обработчика? Это весьма пользительное свойство. Если бы ещё была возможность декрементировать и сбрасывать за 1 такт, тогда можно было бы безопасно останавливать программные таймеры из прерываний хотя бы однобайтовые.
Сообщение от niXto
|
Кстати кто что думает про ST7FOX - самая маленькая имеет 2к флеши, АЦП, ШИМ и стоит чуть дороже таймера 555 ($0.15)?
|
- Дайте мне ST7FOX-ов.
- Вам сколько?
- Грамм 200-300 не больше, плз
Последний раз редактировалось Falconist; 13.04.2011 в 23:36.
|
|
|
|
03.11.2010, 17:57
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Сообщение от EugVor
|
Тут соль в том, что это атомарная операция, в которую не сможет вклиниться процесс из какого-нибудь обработчика?
|
Да, соль в этом.
Сообщение от EugVor
|
Если бы ещё была возможность декрементировать и сбрасывать за 1 такт, тогда можно было бы безопасно останавливать программные таймеры из прерываний хотя бы однобайтовые.
|
Я не понял. Можно на примере?
Последний раз редактировалось Falconist; 13.04.2011 в 23:37.
|
|
|
|
03.11.2010, 18:13
|
|
Временная регистрация
Регистрация: 15.03.2006
Сообщений: 80
Сказал спасибо: 3
Сказали Спасибо 83 раз(а) в 11 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Сообщение от kison
|
Я не понял. Можно на примере?
|
Чтобы отмерить задержку на ожидание байта из UART кратную 10мс, например 500мс, я записываю в tmr=50; и в 10мс-ом обработчике:
Код:
|
if (tmr) tmr --; // Если взведён, декрементировать;
if (!tmr) {UartErr=1;} // Если успел досчитать до нуля...; |
в обработчике по приёму UART:
Код:
|
tmr=0; // Остановить таймер. |
– эта операция может вклиниться в декремент tmr --; особенно если он не однобайтовый. Как правило это заканчивается тем, что таймер продолжает отсчитываться дальше и фиксирует ошибку.
Последний раз редактировалось Falconist; 13.04.2011 в 23:36.
|
|
|
|
03.11.2010, 18:45
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Сообщение от EugVor
|
Как правило это заканчивается тем
|
Как правило такие таймеры обсчитываются уже внутри обработчика. Так что UART просто подождет. Я обычно не по значению счетчика работаю, а имею еще флажки включен/выключен, циклический/однократный. И именно флажок "включен" сбрасываю, если таймер мне больше не нужен. Также по нему ориентируюсь - работает сейчас таймер или нет. Просто таймеры могут и циклическими быть, так что если счетчик == 0, это не значит что таймер выключен. Заодно так еще и быстрее выходит - модифицируется всего один байт. Счетчик при этом может быть хоть 32 битный.
Последний раз редактировалось Falconist; 13.04.2011 в 23:37.
|
|
|
|
03.11.2010, 19:16
|
|
Временная регистрация
Регистрация: 15.03.2006
Сообщений: 80
Сказал спасибо: 3
Сказали Спасибо 83 раз(а) в 11 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Я тоже к такому решению пришёл в обработчике УАРТ просто установить признак, что считать дальше не нужно и проверять его вместо проверки значения таймера, но это на каждый таймер ещё доп. проверки, а таймеров уже самих по себе немеряно и обработчик уже разросся, при прерываниях каждую 1мс начинает утыкаться лицом себе же в зад.
Ну, это уже всё это конечно конкретные вопросы и не совсем по теме
Последний раз редактировалось EugVor; 03.11.2010 в 19:23.
|
|
|
|
03.11.2010, 19:34
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Сообщение от EugVor
|
но это на каждый таймер ещё доп. проверки
|
Ровно то же что и if (tmr) tmr --; Проверка то все равно есть. А если счетчик не 8 бит, то проверка будет даже быстрее.
Что то пробую на асме что изобрести, типа DDS из 200 сообщения. ![Улыбка](images/smilies/icon_smile.gif) Но пока он совсем незнакомый. Выходит у меня 13 тактов. Пока. Думается что можно и побыстрее...
Последний раз редактировалось Falconist; 13.04.2011 в 23:37.
|
|
|
|
03.11.2010, 20:08
|
|
Временная регистрация
Регистрация: 15.03.2006
Сообщений: 80
Сказал спасибо: 3
Сказали Спасибо 83 раз(а) в 11 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Сообщение от kison
|
Ровно то же что и if (tmr) tmr --; Проверка то все равно есть. А если счетчик не 8 бит, то проверка будет даже быстрее.
Что то пробую на асме что изобрести, типа DDS из 200 сообщения. Но пока он совсем незнакомый. Выходит у меня 13 тактов. Пока. Думается что можно и побыстрее...
|
Да, но вот если бы был возможен атомарный декремент, то инициализацию tmp можно было бы делать в обработчиках, например на ожидание ответа при отправке последнего байта сообщения, а не протаскивать её через фон с отключенными прерываниями. Это вроде попроще.
Последний раз редактировалось Falconist; 13.04.2011 в 23:37.
|
|
|
|
04.11.2010, 02:24
|
|
Прописка
Регистрация: 21.09.2009
Сообщений: 218
Сказал спасибо: 1
Сказали Спасибо 29 раз(а) в 27 сообщении(ях)
|
По поводу DDS
Сообщение от kison
|
Что то пробую на асме что изобрести, типа DDS из 200 сообщения. Но пока он совсем незнакомый. Выходит у меня 13 тактов.
|
Взглянуть можно на 13-ти тактовый вариант?
Последний раз редактировалось Falconist; 13.04.2011 в 23:37.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 10:17.
|
|