Alexeyslav писал(а):Нельзя. По той простой причине, что как правило FAT-таблица отъедает приличный кусок. У вас есть микросхема FRAM на 4Мб чтобы под файлы реально использовать только два?
На 4Мб использовать FAT32 ??? Вы наверное забыли, что такое дискета 5.25" на 1.2Мб. Сколько там занимал FAT ? Никак не половину дискеты! Пусть и FAT12.
Человек спрашивал о возможности как таковой, а не о рациональности этого действа.
На счёт эмуляции FAT - повеселили.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Привет котоводы!
Решил написать в этой теме дабы не плодить топики, я новичёк на этом форуме (хотя странно форум уже давно знаю и даже регался по моему) и у мня вопрос по поводу книг (поиск юзал хотя признаюсь через строку т.к. времени в обрез), есть ли книги по мк51 под си/с++?
В частности меня интересует не столько книга, сколько система комманд С/С++ (общение с МК), если есть у вас выложите сюда плз.
Спс!
#include "stm32f10x.h"
#include "STM32_Init.h"
#include "rtl.h"
#define Set_PortC_Pin_8_output ((GPIOC->CRH |= 0x2)|(GPIOC->CRH &= ~0xC))
#define Set_PortC_Pin_9_output ((GPIOC->CRH |= 0x20)|(GPIOC->CRH &= ~0xC0))
const unsigned long led_mask[] = { 1UL<<8, 1UL<<9 };
OS_TID t_LED1;
OS_TID t_LED2;
void DevsInit(void)
{
RCC->APB2ENR |= RCC_APB2ENR_IOPCEN;
Set_PortC_Pin_8_output;
Set_PortC_Pin_9_output;
}
void LEDOn (uint32_t num)
{
GPIOC->BSRR = led_mask[num];
}
void LEDOff (uint32_t num)
{
GPIOC->BRR = led_mask[num];
}
__task void f_LED1 (void)
{
while (1)
{
LEDOn (0);
os_dly_wait (200);
LEDOff (0);
os_dly_wait (200);
}
}
__task void f_LED2 (void)
{
while (1)
{
LEDOn (1);
os_dly_wait (400);
LEDOff (1);
os_dly_wait (400);
}
}
__task void init (void)
{
os_tsk_prio_self (100);
t_LED1 = os_tsk_create (f_LED1, 20);
t_LED2 = os_tsk_create (f_LED2, 20);
os_tsk_delete_self ();
}
int main (void)
{
SystemInit ();
stm32_Init();
DevsInit();
os_sys_init(init);
return 0;
}
Если нужен UART, можно использовать STM32_Init.c. Использовать его можно и как визард, наставить нужных галочек, а можно прямо из него выдрать готовый код инициализации uart-а. Типа такого:
Код
RCC->APB2ENR |= RCC_APB2ENR_AFIOEN; // enable clock for Alternate Function
AFIO->MAPR &= ~(1 << 2); // clear USART1 remap
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN; // enable clock for GPIOA
GPIOA->CRH &= ~(0xFFUL << 4); // Clear PA9, PA10
GPIOA->CRH |= (0x0BUL << 4); // USART1 Tx (PA9) alternate output push-pull
GPIOA->CRH |= (0x04UL << 8); // USART1 Rx (PA10) input floating
RCC->APB2ENR |= RCC_APB2ENR_USART1EN; // enable clock for USART1
USART1->BRR = (0x9C << 4);
USART1->BRR = 0x4;
USART1->CR1 |= (USART_CR1_RE | USART_CR1_TE); // RX, TX enable
USART1->CR1 |= USART_CR1_UE; // USART enable
А чтобы потом вывести что нить, достаточно дописать две короткие функции:
Код
void UartSendChar (char ch)
{
while (!(USART1->SR & USART_SR_TXE)) {}
USART1->DR=ch;
}
void UartSendStr (char *str)
{
while (*str != 0)
{
UartSendChar (*str++);
}
}
Это вырезка с форума, нашёл первый попавшийся код, это что за дефы? - #define Set_PortC_Pin_8_output ((GPIOC->CRH |= 0x2)|(GPIOC->CRH &= ~0xC))
#define Set_PortC_Pin_9_output ((GPIOC->CRH |= 0x20)|(GPIOC->CRH &= ~0xC0)) - т.е. извиняюсь за выражение что, какие то люди хрен знает что понаписали в хидерах и я должен знать что GPIOC->CRH |=0х20 - установка битов какого то именованного порта (имя которого они придумали и зыбили это в хидеры, а я должен эти имена выучить?)? Какая то бессмыслица получается .... поправьте если не так.
ЗЫ а спойлер реально сделать тут?
void usart_send(char *s, unsigned char Ln)
{
PORTC |= (1<<PC3); // RS485 на передачу
for(uchar r = 0;r<Ln;r++)
{
while(!(UCSRA & (1<<UDRE))){_wdr();} //Тупим, пока не освободится регистр UDR
UDR = s[r];
}
PORTC &= ~(1<<PC3); // RS485 на прием
}
Все вроде нормально, пока шлю подряд массив за массивом. Но как только заканчиваю с передачей, то в конце теряются два байта.
Как я понял, это связано с FIFO буфером передачи USARTа, который как раз имеет размер в два байта.
Мне приходится пихать в конце передачи еще два нуля, чтобы решить эту проблему. Можно-ли как-то без этого?
UPD:
Вот я дурынь!!! Я отрубаю передатчик RS485 раньше времени. Все, проблема понятна.
Правильнее так:
привет. скажите пожалуйста... вот есть контроллер с включенным ср, и он не отдает программу... а что, нельзя прошить отдельно фьюзы, сбросив ср, и считать программу?
(Устало): можно.
(Я уже слышу, как вопрошавший рассказывает чётким пацанам, что читал на форуме, что "можно". Эти пацаны потом докапываются до местного кулибина. Кулибин им отвечает, мол вы чё, рехнулись? Пацаны ему - в интернете все это делают. Кулибин ныряет и пишет (мне) сделай! ps. А я-то думаю, откуда ноги растут у этой бредятины...)
програмно нужно только высчитывать момент и длительность открытия форсунки и момент искроообразования .
больше ничего ведь ненадо?
з.ы. спрашиваю только теоретически
Где то в старых журналах "За рулём" описывалась система зажигания чуть ли не на транзисторах с похожей функциональностью. Возможно имеет смысл переделать под МК. Но делать Вы скорее всего будете на AVR - я тут не помощник, увы!
Вот блин зажатый народ какой, может на паре транзисторов тогда слепить?Зачем себя ограничивать одним килобайтом, когда есть Мк на 20 рублей дороже и 8 килобайт памяти на борту
Вообще-то МК от кварца тактируется. Иногда от внутреннего или внешнего генератора. Но чтобы от карбюратора или инжектора
это больше похоже на стеб какой то, вопрос был не о том откуда тактировать Мк, а о том, как написать прошивку для Мк, чтобы его использовать вместо блока управления двигателем.
Кстати я где то висел в похожей теме, но там хотели всего лишь угол опережения регулировать.
Там как то тема заглохла, наверно терпения не хватило доделать.
И вообще есть ветка специально для авто-вело-мото.
убрать все галочки кроме «шить фьюзы»... что произойдет при попытке?
Ничего не произойдет. Биты защиты можно установить только один раз и сбрасываются только после окончания процесса полной очистки. В первых контроллерах были баги позволяющие разлочить контроллер без стирания программы - играться с напряжением питания и временем прерывания процесса стирания так что биты защиты стирались а программа нет - но этот процесс требует тонкой настройки на сотне подопытных из одной партии. Сейчас эта проблема решена и просто так не разлочишь. Остается только один выход - при помощи напильникаазотной кислоты снимать кристалл послойно и электронным микроскопом считывать состояния ячеек, потом по известной топологии кристалла восстановить содержимое FLASH-памяти побитно. Но сам представь сколько для этого потребуется ресурсов. Стоит ли того содержимое памяти контроллера?