Про Keil uVision 5
Re: Про Keil uVision 5
А если добавить
- Вложения
-
- Clip.jpg
- (106.09 КБ) 976 скачиваний
Иван Сусанин - первый полупроводник 
Re: Про Keil uVision 5
Когда определял те ключи, так ошибки лавиной сыпались. Разобрался по другому. Подключил еще файл с определением макроса - stm32f10x_conf.h Все заработало. Потом полчаса разбирался с прошивкой и отладкой. При отладке VLDiscovery нужно и STlink менять на другой. Просто много непривычных мелочей. Например не заметил, что стоит выбор на Use Simulator, вместо дебаггера ST-Link.
Спасибо за помощь))
Спасибо за помощь))
Re: Про Keil uVision 5
Вот пустой проект под STM32F429
- Вложения
-
- STM32F4.RAR
- (317.83 КБ) 424 скачивания
Иван Сусанин - первый полупроводник 
Re: Про Keil uVision 5
Благодарю!
Вижу файл с макросом ассерт вынесен в отдельную папку SPL_Config. Так же вижу папку Out, а где в менеджере проекта настраивается вывод в эту папку?
Проблема с отладчиком. Захожу в отладку по брейкпоинту а локальные переменные отладчик не видит. Пишет что переменные не в зоне видимости. Что за фигня? Через вотч тоже не видно. Что у меня не настроено?

Вижу файл с макросом ассерт вынесен в отдельную папку SPL_Config. Так же вижу папку Out, а где в менеджере проекта настраивается вывод в эту папку?
Проблема с отладчиком. Захожу в отладку по брейкпоинту а локальные переменные отладчик не видит. Пишет что переменные не в зоне видимости. Что за фигня? Через вотч тоже не видно. Что у меня не настроено?
Re: Про Keil uVision 5
А он и не должен их видеть... на то они и локальные... Смотрите в регистрах...
"Я не даю готовых решений, я заставляю думать!"(С)
Re: Про Keil uVision 5
Плохо. ГНУшный дебаггер под кокосом видел и локальные и глобальные переменные. Смысл тогда от дебаггера, который не может простым образом показывать элементарное юзеру?
Он точно не может видеть локальные переменные, параметры процедур? Как-то это совсем хило.
Только в регистрах? Через стек ничего не передается?
Он точно не может видеть локальные переменные, параметры процедур? Как-то это совсем хило.
Только в регистрах? Через стек ничего не передается?
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Про Keil uVision 5
Все последние посты, неотносящиеся к теме, перенесены в новую тему - viewtopic.php?f=59&t=105004
Re: Про Keil uVision 5
Добрый день подскажите за что отвечают флаги 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);
Почему мы передаем значение по ссылке?
Еще вопрос, есть такой код
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
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0337e/ch02s03s02.html
Не значение по ссылке, а указатель, в данном случае на структуру. А что не так ?
Не значение по ссылке, а указатель, в данном случае на структуру. А что не так ?
Иван Сусанин - первый полупроводник 
Re: Про Keil uVision 5
*port- разве указатель не так?
Re: Про Keil uVision 5
*port - это звездочка и четыре латинские буквы, а вот это уже указатель, при этом это разадресация указателя.
Код: Выделить всё
SomeType *portКод: Выделить всё
*portRe: Про Keil uVision 5
Ваша правда.
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;
}
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
menzoda же постом выше написал как объявляется указатель.
void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct) - здесь видно, что в качестве параметра функция принимает указатель на тип GPIO_InitTypeDef.
Здесь Вы найдете ответы на все вопросы по Си
void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct) - здесь видно, что в качестве параметра функция принимает указатель на тип GPIO_InitTypeDef.
Здесь Вы найдете ответы на все вопросы по Си
Иван Сусанин - первый полупроводник 
Re: Про Keil uVision 5
Вы несколько постов назад писали что &port-указатель.
Mendoza писал что sometype *port-указатель.
Кто прав?
Думаю все таки & - унарная операция взятия адреса.
Mendoza писал что sometype *port-указатель.
Кто прав?
Думаю все таки & - унарная операция взятия адреса.
Re: Про Keil uVision 5
Подведем итог.
Код: Выделить всё
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
baghear, совершенно верно, взятия адреса, потому что указатель это и есть адрес (вернее область памяти которая хранит этот адрес...).
Например:
И теперь dataPointer и &data это одно и то же.
Например у нас есть функция которая в качестве параметра принимает указатель на тип int. Её прототип выглядит так:
Вызвать эту функцию мы можем так:
или так:
И если бы функция имела такую реализацию:
То при её вызове значение переменной data увеличивалось бы на единицу.
Пока писал, за меня уже всё написали
Например:
Код: Выделить всё
int data = 64;
int *dataPointer = &data;
И теперь dataPointer и &data это одно и то же.
Например у нас есть функция которая в качестве параметра принимает указатель на тип int. Её прототип выглядит так:
Код: Выделить всё
Foo(int *input);
Вызвать эту функцию мы можем так:
Код: Выделить всё
Foo(dataPointer);
или так:
Код: Выделить всё
Foo(&data);
И если бы функция имела такую реализацию:
Код: Выделить всё
Foo(int *input)
{
*input++;
}
То при её вызове значение переменной data увеличивалось бы на единицу.
Пока писал, за меня уже всё написали
Иван Сусанин - первый полупроводник 
Re: Про Keil uVision 5
Спасибо!!! 
Re: Про Keil uVision 5
Добрый день, что означает строчка
*(uint16_t *) (LCD_REG) = reg;
особенно первая звездочка интересует
*(uint16_t *) (LCD_REG) = reg;
особенно первая звездочка интересует
Re: Про Keil uVision 5
LCD_REG - это просто число, адрес какого-то регистра размером 16 бит в памяти. Чтобы записать что-нибудь по этому адресу или прочитать, первым делом необходимо привести его к типу "указатель на целое 16-битное число", это делает конструкция (uint16_t *). Чтобы получить доступ непосредственно к значению (для чтения и записи), на которое указывает указатель, нужно его разадресовать, что делает первая звездочка.