Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 07.07.2020
Сообщений: 3
1

Текст программы на языке С, формирующей прямоугольные импульсы на одном из выводов микроконтроллера

23.07.2020, 03:35. Просмотров 1960. Ответов 19
Метки нет (Все метки)

Все компилируется, но преподша говорит что есмь грубая ошибка в программе


C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// подключаем файл описания управляющих регистров ОМК
#include <REG51.H>
// Основная функция программы:
// после сброса ей передаётся управление
void main(void)
{
// описываем целую переменную, с помощью которой далее
// реализуем задержку
int i;
// выводим в порт P2 все нули
P2 = 0x00;
// бесконечный цикл
while(1) {
// задержка времени
for (i=10; i>0; i--);
// изменяем состояние вывода P2.2 на противоположное
P2 ^= 0x08; } }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.07.2020, 03:35
Ответы с готовыми решениями:

прямоугольные импульсы
Построение последовательности прямоугольных импульсов. Прямоугольный сигнал представляет собой...

Прямоугольные импульсы в MathCAD
Привет ребята. Не могли бы вы мне помочь. В маткаде надо построить прямоугольные импульсы с...

Не хватает выводов (у микроконтроллера PIC16F73) при подключения к DSP.
Здравствуйте! Подскажите пожалуйста, что можно сделать если не хватает выводов(ножек) у...

Конвертер для перевода программ на языке PHP в текст программы на языке Assembler
Всем привет. Как можно реализовать такую задачу? Разработать конвертор в языке Assembler для...

19
36 / 36 / 11
Регистрация: 27.09.2014
Сообщений: 456
23.07.2020, 07:22 2
чтение-модификация-запись регистра
0
Модератор
8201 / 6071 / 811
Регистрация: 14.02.2011
Сообщений: 21,062
23.07.2020, 07:55 3
Лучший ответ Сообщение было отмечено kimchi как решение

Решение

kimchi, обрати внимание на 15 строчку
неужели компилятор ничего не сказал?

Добавлено через 2 минуты
Цитата Сообщение от kimchi Посмотреть сообщение
void main(void)
не стандарт
по стандарту int main()
0
901 / 541 / 81
Регистрация: 15.05.2012
Сообщений: 3,168
23.07.2020, 11:36 4
Лучший ответ Сообщение было отмечено kimchi как решение

Решение

C
1
P2 ^= 0x08;
Это Р2.3.
2
36 / 36 / 11
Регистрация: 27.09.2014
Сообщений: 456
23.07.2020, 12:27 5
Цитата Сообщение от ValeryS Посмотреть сообщение
не стандарт
А вот майкрософт другого мнения
Текст программы на языке С, формирующей прямоугольные импульсы на одном из выводов микроконтроллера
0
2514 / 1559 / 335
Регистрация: 09.09.2017
Сообщений: 6,301
23.07.2020, 13:18 6
То, что они старательно плюют на стандарт - их проблемы. Ну и тех, кто на них оглядывается.
0
Миниатюры
Текст программы на языке С, формирующей прямоугольные импульсы на одном из выводов микроконтроллера  
2573 / 1165 / 152
Регистрация: 28.10.2011
Сообщений: 4,144
Записей в блоге: 6
23.07.2020, 13:46 7
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
То, что они старательно плюют на стандарт - их проблемы. Ну и тех, кто на них оглядывается.
GCC тоже плюет на стандарт?
0
Миниатюры
Текст программы на языке С, формирующей прямоугольные импульсы на одном из выводов микроконтроллера  
Эксперт .NET
6867 / 4469 / 1074
Регистрация: 25.05.2015
Сообщений: 13,677
Записей в блоге: 14
23.07.2020, 14:04 8
COKPOWEHEU, в чём сакральный смысл возврата значения из main?
Ведь
  • Обычно возвращаться некуда, код стартапа не правят;
  • Никто не возвращается, ибо бесконечный цикл;
  • Никто при возврате не проверяет это значение в стартапе.

Добавлено через 8 минут
Данный случай, в микроконтроллере, считается freestanding.
0
Миниатюры
Текст программы на языке С, формирующей прямоугольные импульсы на одном из выводов микроконтроллера  
2514 / 1559 / 335
Регистрация: 09.09.2017
Сообщений: 6,301
23.07.2020, 14:43 9
Цитата Сообщение от locm Посмотреть сообщение
GCC тоже плюет на стандарт?
Да вроде нет:
Код
$ cat main.c 
#include <stm32f10x.h>
#include "pinmacro.h"
#define F_APB2 72000000

void __attribute__((weak)) _init(void){}
void __attribute__((weak)) SystemInit(void){}

void sleep(uint32_t x){
  volatile uint32_t i = x;
  while ( i-- );
}

void main(void){
  
  while(1){
  }
}
$ make
arm-none-eabi-gcc -mthumb -mcpu=cortex-m3 -fno-builtin -Wall -c  -I. -ggdb -Os -I../Libraries/STM32F10x_StdPeriph_Driver/inc -I../Libraries/CMSIS/CM3/CoreSupport -I../Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x -DSTM32F10X_MD_VL   -DVECT_TAB_FLASH -DGCC_ARMCM3   -c -o main.o main.c
main.c:13:6: warning: return type of 'main' is not 'int' [-Wmain]
 void main(void){
      ^~~~
..linking
arm-none-eabi-gcc -T../ld/stm32f100c4.ld -nostartfiles -Wl,-Map -Wl,main.map -mthumb -mcpu=cortex-m3 -o main.out crt.o -L../ld main.o 
# --verbose
arm-none-eabi-size main.out
   text    data     bss     dec     hex filename
    580       0     256     836     344 main.out
...copying
arm-none-eabi-objcopy -Obinary main.out main.bin
arm-none-eabi-objcopy -Oihex main.out main.hex
arm-none-eabi-objdump -D -S main.out > main.list
Может у вас в IDE какие-то флаги не выставлены?
Цитата Сообщение от Rius Посмотреть сообщение
COKPOWEHEU, в чём сакральный смысл возврата значения из main?
Практического - никакого. Но зачем переписывать стандарт ради данного конкретного случая?
0
Эксперт .NET
6867 / 4469 / 1074
Регистрация: 25.05.2015
Сообщений: 13,677
Записей в блоге: 14
23.07.2020, 15:04 10
Данный случай прописан в C99, если не ошибаюсь. Скриншот из черновика выше.

Добавлено через 15 минут
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Может у вас в IDE какие-то флаги не выставлены?
-pedantic добавляет в том числе это предупреждение.
0
2514 / 1559 / 335
Регистрация: 09.09.2017
Сообщений: 6,301
23.07.2020, 15:05 11
Цитата Сообщение от Rius Посмотреть сообщение
Данный случай прописан в C99, если не ошибаюсь. Скриншот из черновика выше.
the name and type of the function called at program startup are implementation-defined.
Иными словами, там вообще может не быть main - о чем тогда вообще речь?
0
Эксперт .NET
6867 / 4469 / 1074
Регистрация: 25.05.2015
Сообщений: 13,677
Записей в блоге: 14
23.07.2020, 15:08 12
О том, что какой-то C++ стандарт для C на микроконтроллерах - не указ.
0
Модератор
8201 / 6071 / 811
Регистрация: 14.02.2011
Сообщений: 21,062
23.07.2020, 15:21 13
Цитата Сообщение от Rius Посмотреть сообщение
О том, что какой-то C++ стандарт для C на микроконтроллерах
нет такого языка C на микроконтроллерах
и причем здесь С++ стандарт? есть стандарт языка С https://ru.wikipedia.org/wiki/ANSI_C
0
Эксперт .NET
6867 / 4469 / 1074
Регистрация: 25.05.2015
Сообщений: 13,677
Записей в блоге: 14
23.07.2020, 15:28 14
Цитата Сообщение от ValeryS Посмотреть сообщение
нет такого языка C на микроконтроллерах
Ага. И в C99 п. 5.1.2.1 прописан вариант, под который как раз попадают микроконтроллеры. См. скриншот выше. Или вот pdf с C99.

Цитата Сообщение от ValeryS Посмотреть сообщение
и причем здесь С++ стандарт?
В 6 посте показан C++.
0
2514 / 1559 / 335
Регистрация: 09.09.2017
Сообщений: 6,301
23.07.2020, 16:18 15
Rius, не понимаю что вы доказать-то хотите?
Ваш скриншот говорит только о том, что если программист хочет самостоятельно описать стартап-код, то волен не использовать в нем стандартный main вообще. А вместо стандартного main использовать что-нибудь вроде char* main(struct week_date bIbIbI);.
0
Эксперт .NET
6867 / 4469 / 1074
Регистрация: 25.05.2015
Сообщений: 13,677
Записей в блоге: 14
23.07.2020, 16:20 16
Что это тоже - стандарт. В данном случае.

Цитата Сообщение от ValeryS Посмотреть сообщение
не стандарт
по стандарту int main()
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
То, что они старательно плюют на стандарт - их проблемы. Ну и тех, кто на них оглядывается.
0
2514 / 1559 / 335
Регистрация: 09.09.2017
Сообщений: 6,301
23.07.2020, 17:16 17
Отказ от использования main() - особый случай, который явно не относится к задаче ТСа, как и к майкрософтам. Тем более что даже в этом особом случае использовать то же самое имя main - идиотизм, только добавляющие путаницу. Примерно тоже самое что объявить макрос с именем If, устанавливающий флаг Interrupt Flag.
0
2573 / 1165 / 152
Регистрация: 28.10.2011
Сообщений: 4,144
Записей в блоге: 6
23.07.2020, 17:36 18
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
если программист хочет самостоятельно описать стартап-код, то волен не использовать в нем стандартный main вообще.
Для STM32 можно переписать стартап как хочешь в том числе использовать функцию не с именем main. Что в этом плохого?
0
Эксперт .NET
6867 / 4469 / 1074
Регистрация: 25.05.2015
Сообщений: 13,677
Записей в блоге: 14
23.07.2020, 17:47 19
Судя по найденному
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
~$ cat avr.S
#define __SFR_OFFSET 0
#include <avr/io.h>
 
    .global main
main:
    ldi r24, 0xFF
    out DDRB, r24
loop:
    in r25, PORTB
    eor r25,r24
    out PORTB, r25
    rjmp loop
..........
у avr тоже не гвоздями прибито.
Или таки прибито?
0
2514 / 1559 / 335
Регистрация: 09.09.2017
Сообщений: 6,301
23.07.2020, 19:45 20
Цитата Сообщение от locm Посмотреть сообщение
Для STM32 можно переписать стартап как хочешь в том числе использовать функцию не с именем main. Что в этом плохого?
Если она выглядит как стандартная, работает как стандартная и крякает как стандартная - то ничего. А если нет - зачем ее называть main?
Цитата Сообщение от Rius Посмотреть сообщение
у avr тоже не гвоздями прибито.
Или таки прибито?
Думаю, не прибито. Правда, необходимости ручного переопределения я ни разу не видел.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.07.2020, 19:45

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Как подать напряжение на контакт PCI карты дискретных выводов на языке с++?
Как подать напряжение на контакт PCI карты дискретных выводов на языке с++?

Составить текст программы на языке Паскаль, содержащий:
Составить текст программы на языке Паскаль, содержащий: 1) процедуру, выполняющую действия над...

У бабушки 4 внучки, каждая из которых играет на одном музыкальном инструменте и говорит на одном иностранном языке
У бабушки 4 внучки, каждая из которых играет на одном музыкальном инструменте и говорит на одном...

В файле хранится текст программы на языке С из произвольного количества строк
В файле хранится текст программы на языке С из произвольного количества строк. Прочитать содержимое...

Подготовить текст программы, написанной на языке Паскаль, к выводу на принтер
Подготовить текст программы, написанной на языке Паскаль, к выводу на принтер, для чего выполнить...

На вход программы подается текст на английском языке, заканчивающийся точкой (другие символы “.” )
На вход программы подается содержится текст на английском языке, заканчивающийся точкой (другие...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.