26.02.2014, 20:36
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
sergeyye, еще не стоит забывать о макросе sizeof, возвращающего размер массива. Тогда можно функцию копирования массива переписать так:
Код:
|
u8 ArrayLen = sizeof(ArrayA);
while (ArrayLen--)
{
* ArrayA ++ = * ArrayB ++;
} |
|
|
|
Сказали "Спасибо" Easyrider83
|
|
|
26.02.2014, 20:50
|
|
Временная регистрация
Регистрация: 12.03.2005
Адрес: Москва
Сообщений: 61
Сказал спасибо: 42
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от Easyrider83
|
...не стоит забывать о макросе sizeof,...
|
До него я еще не добрался. Спасибо, сейчас займусь.
Не нашёл пока хорошей литературы на тему "Си для ARM". Лучше для STM32.
|
|
|
|
26.02.2014, 21:09
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,548
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от Easyrider83
|
А еще надо поставить const
|
Так Array[] же в области локальных переменных, в стеке. Или с const компилятор его в указатель на flash преобразует? Надо проверить.
Как-то так
Код:
|
void Load_Buffer_LCD (void)
{
char *Array = "trulala@tralala.trololoFigfam"; //(с) eddy
char Screen [32]; // Массив в ОЗУ для вывода в дисплей
memcpy((void *)Screen, (void *)Array, sizeof(Array));
... |
В этом варианте нужна будет проверка размера Array.
Последний раз редактировалось AJScorp; 26.02.2014 в 21:22.
|
|
|
|
26.02.2014, 21:17
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
У вас каша в голове, AJScorp.
|
|
|
|
26.02.2014, 21:18
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,548
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от Easyrider83
|
У вас каша в голове, AJScorp.
|
Что не так?
|
|
|
|
26.02.2014, 21:24
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Все переменные лежат в ОЗУ. На то они и переменные. А константы лежат во флеши (ПЗУ).
Никакой области локальных переменных не существует. А стек вообще сюда отношения не имеет.
|
|
|
|
26.02.2014, 21:57
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,548
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от Easyrider83
|
Все переменные...
|
Хорошо, проверим
случай А
Код:
|
char *Array = "trulala@tralala.trololoFigfam"; |
Указатель на строку загружается в регистр
Код:
|
volatile char Screen[32];
void testfunc(void)
{
char *Array = "trulala@tralala.trololoFigfam";
[0xe59f1c7c] * ldr r1,0x00005324 ; = #0x00006194
memcpy((void *)Screen, (void *)Array, sizeof(Array)); |
случай B
Код:
|
char Array[] = {"trulala@tralala.trololoFigfam"}; |
создается копия строки в стеке
Код:
|
volatile char Screen[32];
void testfunc(void)
{
[0xe52de004] str r14,[r13,#-4]!
[0xe24dd024] sub r13,r13,#0x24
char Array[] = {"trulala@tralala.trololoFigfam"};
[0xe3a0201e] mov r2,#0x1e
[0xe59f101c] ldr r1,0x00006e8c ; = #0x00006fe0
[0xe28d0004] add r0,r13,#4
[0xebffe4ff] bl __rt_memcpy
memcpy((void *)Screen, (void *)Array, sizeof(Array)) |
Проанализируете, или расписать подробнее?
|
|
|
|
26.02.2014, 22:11
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,548
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от Easyrider83
|
Никакой области локальных переменных не существует.
|
Угу. Ознакомьтесь, чем отличаются переменные, объявленные внутри функции от переменных, объявленных вне функции.
|
|
|
|
26.02.2014, 22:39
|
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,033
Сказал спасибо: 2,561
Сказали Спасибо 11,881 раз(а) в 5,958 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Где создаются локальные переменные?
Можно ли стек назвать областью локальных переменных?
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
|
|
|
|
27.02.2014, 10:51
|
|
Гражданин KAZUS.RU
Регистрация: 25.11.2010
Сообщений: 516
Сказал спасибо: 1
Сказали Спасибо 126 раз(а) в 109 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Мда, вы сюда пришли относительно контроллеров подучиться или померяться своими убогими знаниями по ЯВУ?
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 09:15.
|
|