Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.62/45: Рейтинг темы: голосов - 45, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 30.12.2015
Сообщений: 74

Язык Си, типы переменных, объявление, инициализация

05.04.2016, 15:51. Показов 9653. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Программирую на Си для микроконтроллера в CoIDE (CooCox). Столкнулся с проблемой, когда я вроде инициализировал переменную ещё при объявлении вне каких-либо функций, а во время выполнения программы значение переменной не равно тому, что я инициализировал. До сих пор решал проблему инициализацией в самой main(void), но мне это неудобно, хотел разобраться в ситуации.
Структура кода
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include "cmsis_lib/Include/stm32l1xx_gpio.h"
#include ...
 
#define ...
 
uint8_t i,k,n,m;
uint16_t i_to_n;
uint32_t j;
uint32_t fymish_j0=27;
uint32_t fymish_j1=6;
uint32_t fymish_j2=66;
 
static void ...(void)
{
...
}
 
static void ...(void)
{
...
}
 
static void zero_func(void)
{
...
}
 
static void first_func(void)
{
...
}
 
static void second_func(void)
{
...
}
 
int main(void)
{
n=0; j=0; i=0; k=0; m=0;
...
while(1)
{
if (k==0)
{
zero_func();
}
if (k==1)
{
first_func();
}
}
}
#define и #include выполняются отлично, а вот инициализация всяких uint32_t fymish_j0=27; uint32_t fymish_j1=6; uint32_t fymish_j2=66; - нет.
Читал материал про всё это. Неужели придётся делать инициализацию внутри main(void)? Как надо инициализировать переменную, чтобы при выполнении кода main(void) (а значит и внутри других заданных мною void-функций) значение этой переменной было таким, как я указал в объявлении переменной?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.04.2016, 15:51
Ответы с готовыми решениями:

Основные типы данных, объявление и инициализация переменных
ребятки, попробуйте 1) Объявить в программе переменные и константы (выбор обосновать) для хранения следующих данных: а) число , ...

Объявление и инициализация переменных
помогите исправить, пожалуйста.... Решение: #include <iostream.h> #include <math.h> double GetY (unsigned short int Number); ...

Предопределенные типы переменных. Простые типы данных. Пользовательские типы данных
Лабораторная работа №6. Тема: Предопределенные типы переменных. Простые типы данных. Пользовательские типы данных.(лекция) ...

27
0 / 0 / 0
Регистрация: 22.03.2015
Сообщений: 838
08.04.2016, 13:18
Студворк — интернет-сервис помощи студентам
VysSpistotor, потренируйтесь сначала на кошках компе, например, с моим любимым Tiny C Compyter-ом )
0
0 / 0 / 0
Регистрация: 30.12.2015
Сообщений: 74
08.04.2016, 15:02
Цитата Сообщение от syorzhuk
Оптимизатор их выбросил? Вы в main с ними поиграйтесь - поскладывайте, повычитайте, в строчку sprymtf-аните.
Как оптимизатор может что-то сделать, если я его не включал? :) Восстание машин...
Обязательно попробую просуммировать числа из невидимых проинициализированных переменных.
Цитата Сообщение от syorzhuk
Что внутри? Зачищены под ноль или мусор содержат?
Изначально в неинициализированных были значения, которые присваиваются в main(void), а когда отладчик переходит в саму main(void), значения неинициализированных переменных равны нулю. Ну и дальше в процессе выполнения кода main(void) присваиваются необходимые значения.
vt340, давно хотел найти какой-нибудь простой симулятор выполнения си-кода :) Запомню. Только я думаю, тут специфика самой среды разработки. Если честно, я не считаю себя совсем новичком в программировании. На специализированном языке на базе Си уже писал, таких проблем не было.
0
0 / 0 / 0
Регистрация: 17.01.2016
Сообщений: 44
08.04.2016, 16:15
Цитата Сообщение от VysSpistotor
Как оптимизатор может что-то сделать, если я его не включал? :)
:) Линкер "сиро?ток" тоже не любит - если по результатам сборки где-то есть map-файл - наверняка в нём оные переменные обруганы "non referenced" и по сему печальному факту безжалостно "excludid".
Инициализация .data и .bss - почётная обязанность рантайм-поддержки используемых компилятора/линкера, и программист-прикладник порой и на пенсию уходит так и не обогатив свой мозг подобными нюансами знаний. У ембеддера же дизайн посудной лавки как правило крайне минималистичен отчего слоном там беззвучно ворочать удается редко - и от общей натасканности в программировании как таковом помощи мало. Это специфичные платформенно-/компиляторно- зависимые знания - вне оных полезные разве что в копилке причуд и прецедентов. Так что Kimeric эмулятор тут поможет мало, как мне кажется.
0
0 / 0 / 0
Регистрация: 22.03.2015
Сообщений: 838
08.04.2016, 16:42
Если при формулировке вопроса-проблемы я вижу простыню кода вместо тестика в 10 строк, то сразу делаю вывод, что имею дело с проблемами начинающего, а не компилятора, и почти никогда не ошибаюсь )
И да, никого не хочу обидеть, я и сам постоянно начинающий в чём-то
0
0 / 0 / 0
Регистрация: 30.12.2015
Сообщений: 74
09.04.2016, 00:11
Попробовал совершать операции с переменными. О, Боже! Он сжалился надо мной и отобразил все переменные с присвоенными им значениями, как я и желал! :) Действительно, чрезмерно умная железка проглотила неиспользуемые переменные. Теперь моё представление об объявлении и инициализации переменных соответствует действительности. Остаётся лишь вопрос, на который я уже не получу ответа: Почему у меня не инициализировались (инициализировались некорректно) переменные в другом коде под другой контроллер? Пусть это для меня останется тайной.
Всем спасибо за поддержку. Пойду дальше строчить "говнокод".
0
0 / 0 / 0
Регистрация: 17.01.2016
Сообщений: 44
09.04.2016, 00:38
Цитата Сообщение от VysSpistotor
Пусть это для меня останется тайной.
Для вас - это как будет угодно, а для заинтригованной вами аудитории извольте, милостивый государь, доложить на каком всё-таки этапе стартапа .data в ROM копируется. :-D
0
0 / 0 / 0
Регистрация: 30.12.2015
Сообщений: 74
09.04.2016, 17:40
Цитата Сообщение от syorzhuk
Цитата Сообщение от VysSpistotor
Пусть это для меня останется тайной.
Для вас - это как будет угодно, а для заинтригованной вами аудитории извольте, милостивый государь, доложить на каком всё-таки этапе стартапа .data в ROM копируется. :-D
Разве не в цикле for и последующем коде на ассемблере?
Code
1
2
3
4
for(pulDest = &_sdata; pulDest < &_edata; )
{
*(pulDest++) = *(pulSrc++);
}
Полную функцию для Riset я уже выкладывал, этот кусок оттуда.
Я с трудом понимаю, что от меня требуется :) Нужно сказать, при выполнении какой строки кода переменные принимают значения, указанные в инициализации?
0
0 / 0 / 0
Регистрация: 17.01.2016
Сообщений: 44
09.04.2016, 21:32
Цитата Сообщение от VysSpistotor
Разве не в цикле for и последующем коде на ассемблере?
Каюсь, пропустил. Скобки, кстати, лишние - инкремент указателей в любом случае выполнится после их разыменованния и присваивания.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.04.2016, 21:32
Помогаю со студенческими работами здесь

Найти в файле с текстом программы объявление переменных и подсчитать количество переменных
Есть задача: найти в файле с текстом программы объявление переменных и подсчитать количество переменных. Т.е. ищем строку с int,...

Объявление и инициализация чисел
Здравствуйте, нужна помощь по составлению программы. Сама программа: Объявить и инициализировать 15 чисел. Определить, сколько среди...

Инициализация и объявление переменной
Утро доброе, class Content def zagolovok(str) counter(1) print...

Объявление и инициализация переменной на месте
А можно ли при объявлении переменной инициализировать её результатом выборки? Ну что-то типа DECLARE @city smallint=SELECT CityID FROM...

Объявление и инициализация динамической матрицы
Ребят, только начал разбираться с матрицой. примерно я знаю как написать матрицу, но не знаю как написать динамическую матрицу, и чтоб...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru