Страница 4 из 11
Re: Про Keil uVision 5
Добавлено: Ср июн 11, 2014 23:11:34
Myp3ik
А если добавить
Re: Про Keil uVision 5
Добавлено: Ср июн 11, 2014 23:26:01
TDuke
Когда определял те ключи, так ошибки лавиной сыпались. Разобрался по другому. Подключил еще файл с определением макроса - stm32f10x_conf.h Все заработало. Потом полчаса разбирался с прошивкой и отладкой. При отладке VLDiscovery нужно и STlink менять на другой. Просто много непривычных мелочей. Например не заметил, что стоит выбор на Use Simulator, вместо дебаггера ST-Link.
Спасибо за помощь))
Re: Про Keil uVision 5
Добавлено: Ср июн 11, 2014 23:42:45
Myp3ik
Вот пустой проект под STM32F429
Re: Про Keil uVision 5
Добавлено: Чт июн 12, 2014 11:53:54
TDuke
Благодарю!
Вижу файл с макросом ассерт вынесен в отдельную папку SPL_Config. Так же вижу папку Out, а где в менеджере проекта настраивается вывод в эту папку?
Проблема с отладчиком. Захожу в отладку по брейкпоинту а локальные переменные отладчик не видит. Пишет что переменные не в зоне видимости. Что за фигня? Через вотч тоже не видно. Что у меня не настроено?

Re: Про Keil uVision 5
Добавлено: Чт июн 12, 2014 12:29:58
HHIMERA
А он и не должен их видеть... на то они и локальные... Смотрите в регистрах...
Re: Про Keil uVision 5
Добавлено: Чт июн 12, 2014 13:11:33
TDuke
Плохо. ГНУшный дебаггер под кокосом видел и локальные и глобальные переменные. Смысл тогда от дебаггера, который не может простым образом показывать элементарное юзеру?
Он точно не может видеть локальные переменные, параметры процедур? Как-то это совсем хило.
Только в регистрах? Через стек ничего не передается?
Re: Про Keil uVision 5
Добавлено: Чт июн 12, 2014 13:26:54
HHIMERA
Закладка Registers...
Re: Про Keil uVision 5
Добавлено: Сб июн 14, 2014 19:34:11
Аlex
Все последние посты, неотносящиеся к теме, перенесены в новую тему -
http://radiokot.ru/forum/viewtopic.php?f=59&t=105004
Re: Про Keil uVision 5
Добавлено: Пт июл 11, 2014 17:29:23
baghear
Добрый день подскажите за что отвечают флаги T, IT,ISR в регистре xPSR.
Еще вопрос, есть такой код
GPIO_StructInit(&port);
port.GPIO_Mode = GPIO_Mode_AF_PP;
port.GPIO_Pin = GPIO_Pin_6;
port.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init(GPIOB, &port);
Почему мы передаем значение по ссылке?
Re: Про Keil uVision 5
Добавлено: Пт июл 11, 2014 18:34:18
Myp3ik
http://infocenter.arm.com/help/index.js ... 03s02.html
Не значение по ссылке, а указатель, в данном случае на структуру. А что не так ?
Re: Про Keil uVision 5
Добавлено: Пт июл 11, 2014 18:38:42
baghear
*port- разве указатель не так?
Re: Про Keil uVision 5
Добавлено: Пт июл 11, 2014 18:48:19
menzoda
*port - это звездочка и четыре латинские буквы, а вот
это уже указатель, при этом
это разадресация указателя.
Re: Про Keil uVision 5
Добавлено: Пт июл 11, 2014 19:36:04
baghear
Ваша правда.
SomeType *port - указатель и &port - указатель?
Как из этой функции узнать что надо передавать указатель?
void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct)
{
/* Reset GPIO init structure parameters values */
GPIO_InitStruct->GPIO_Pin = GPIO_Pin_All;
GPIO_InitStruct->GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStruct->GPIO_Mode = GPIO_Mode_IN_FLOATING;
}
Re: Про Keil uVision 5
Добавлено: Сб июл 12, 2014 11:16:21
Myp3ik
menzoda же постом выше написал как объявляется указатель.
void GPIO_StructInit(
GPIO_InitTypeDef* GPIO_InitStruct) - здесь видно, что в качестве параметра функция принимает указатель на тип GPIO_InitTypeDef.
Здесь Вы найдете ответы на все вопросы по Си
Спойлер
http://os24.org/files/books/Brian_Kerni ... age-RU.pdf
Re: Про Keil uVision 5
Добавлено: Сб июл 12, 2014 11:51:05
baghear
Вы несколько постов назад писали что &port-указатель.
Mendoza писал что sometype *port-указатель.
Кто прав?
Думаю все таки & - унарная операция взятия адреса.
Re: Про Keil uVision 5
Добавлено: Сб июл 12, 2014 12:33:50
menzoda
Подведем итог.
Код: Выделить всё
typedef struct
{
Int32 x;
Int32 y;
} Point;
// Переменная с типом "указатель на Point", или, иначе говоря, переменная, содержащая адрес Point.
// Размер foo в общем случае зависит от разрядности ядра: к примеру, на 32-битных ARM он будет
// равен четырм байтам, собственно как и все остальные указатели, на что бы они не указывали.
Point *foo;
// Переменная с типом Point. В данном случае ее размер будет равен 8 байт.
Point bar;
// Функция, принимающая в качестве параметра указатель на Point, или, иначе говоря, адрес Point,
// что то же самое.
void Move(Point *foo)
{
foo->x++;
foo->y++;
}
// Вызываем функцию и передаем ей указатель на Point.
Move(foo);
// А так нельзя, ведь функция ожидает указатель на Point, а мы ей передаем bar, которая имеет тип Point.
Move(bar);
// А так можно. С помощью оператора & мы получили адрес переменной bar, то есть адрес Point, то есть
// указатель на Point. Получается, тип &bar - это указатель на Point.
Move(&bar);
// А так нельзя. потому что тип &foo - указатель на указатель Point, или, иначе говоря, адрес переменной,
// содержащей адрес переменной, содержащей Point.
Move(&foo);
Re: Про Keil uVision 5
Добавлено: Сб июл 12, 2014 12:43:47
Myp3ik
baghear, совершенно верно, взятия адреса, потому что указатель это и есть адрес (вернее область памяти которая хранит этот адрес...).
Например:
И теперь dataPointer и &data это одно и то же.
Например у нас есть функция которая в качестве параметра принимает указатель на тип int. Её прототип выглядит так:
Вызвать эту функцию мы можем так:
или так:
И если бы функция имела такую реализацию:
То при её вызове значение переменной data увеличивалось бы на единицу.
Пока писал, за меня уже всё написали

Re: Про Keil uVision 5
Добавлено: Сб июл 12, 2014 15:19:38
baghear
Спасибо!!!

Re: Про Keil uVision 5
Добавлено: Ср июл 16, 2014 12:20:18
baghear
Добрый день, что означает строчка
*(uint16_t *) (LCD_REG) = reg;
особенно первая звездочка интересует
Re: Про Keil uVision 5
Добавлено: Ср июл 16, 2014 14:48:34
menzoda
LCD_REG - это просто число, адрес какого-то регистра размером 16 бит в памяти. Чтобы записать что-нибудь по этому адресу или прочитать, первым делом необходимо привести его к типу "указатель на целое 16-битное число", это делает конструкция (uint16_t *). Чтобы получить доступ непосредственно к значению (для чтения и записи), на которое указывает указатель, нужно его разадресовать, что делает первая звездочка.