| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| LPC17xx.h http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=9329 |
Страница 1 от 1 |
| Автор: | harleybg [ Пет Сеп 09, 2011 1:01 pm ] |
| Заглавие: | LPC17xx.h |
Здравейте, Ползвам uVision. Търся алтернативен хедър файл за LPC17xx процесорите, защото не ми харесва как са дефинирани регистрите за Cortex процесорите. Т.е. трябва ми файл където са дефинирани с точни адреси, а не като част от структури (както са ги направили за ARM7 процесорите). |
|
| Автор: | head_up [ Пет Сеп 09, 2011 3:25 pm ] |
| Заглавие: | Re: LPC17xx.h |
Трудно, то по принцип за кортексите използват CMSIS като стандарт, та от там тръгва твоя проблем ... и подозирам, че от каквато и среда да ги извадиш тия .h файлове все така ще са описани. Какво ти пречат структурите за достъп? |
|
| Автор: | harleybg [ Пет Сеп 09, 2011 4:49 pm ] |
| Заглавие: | Re: LPC17xx.h |
Много по-дълъг е записът, особено когато искаш да се обърнеш към конкретен бит. А и не разбирам, защо са избрали подобен начин като по-добър. |
|
| Автор: | miro_atc [ Пет Сеп 09, 2011 7:27 pm ] | |||||||||
| Заглавие: | Re: LPC17xx.h | |||||||||
Ами защото това е по-добрият и по-правилен начин Има много причини: 1) По-малко и по-кратки дефиниции. Обикновено имаш повече от 1 контролер от тип. Примерно 4-5 UART, две USB-та или 7-8 GPIO контролера. Перифериите имат грубо 20-100 регистъра. Ако се ползва структура се получава само 1 структура с толкова елемента колкото регистри има. Така един регистър се описва веднъж, а не 4-5 или 8 пъти! 2)По-кратък и по-ефективен код. Ако имаш 4 UART-a не пишеш 4 функции за пращане дето да правят едно и също. Пише се една функция (или драйвер). Но дори и само 1 UART да имаш, пак е по-ефективно чрез структури понеже рядко функцията ще ползва само 1 регистър. Функция, която работи с структура се компилира с 1 указател за всички (или повечето) регистри. Докато ако ползваш адреси за всеки регистър те ще се извличат многократно. Така че както и да гледаш кода чрез структури е по-добър... Отделно и при дебъгване е по-удобно и дори дамо като стил на писане пак е по-правилно чрез структури. |
||||||||||
| Автор: | head_up [ Пет Сеп 09, 2011 7:50 pm ] | ||||||||||||||||||
| Заглавие: | Re: LPC17xx.h | ||||||||||||||||||
+1 Много по-удобно е, дори и ако предефинираш указателя - с един ред можеш да преназначиш функцията, към която си искаш периферия. И е толкова по-нагледно и организирано ... жалко, че тоя стандарт го нявмаше при 7-ците, щеше да е много по приятно и лесно за портване (а това последното си е важно). |
|||||||||||||||||||
| Автор: | miro_atc [ Пет Сеп 09, 2011 8:07 pm ] | |||||||||
| Заглавие: | Re: LPC17xx.h | |||||||||
Как бе, при моите седмици винаги си го е имало Иначе портването е също много сериозна причина. Примерно при Атмел ползват едни и същи периферии както за 7-ци така и за 9-ки и за куртекси. Общо над 200 различни чипа ползват един и същ тип UART с различни бройки на чип, естествено различни адреси... Но ако погледнете последните версии на библиотеките имат само един единствен хедър файл за UART. Не 200+ а само един, който може да се ползва от над 200 чипа. За чиповете има само по един мапинг файл, в който се декларира какви периферии (структури) на какви адреси има. Долу горе хедърите на Атмел са едни от най-читаво направените. Единствения проблем е че имат две версии, но това си е техен проблем...А пък хедърите за CMSIS са пълен ташак. Най-вероятно индийци са ги писали, а те са противоположното на думичката "стандарт".. |
||||||||||
| Автор: | harleybg [ Пет Сеп 09, 2011 8:15 pm ] |
| Заглавие: | Re: LPC17xx.h |
Да, съгласих се за момента за изпозлването на няколко UART-а и т.н. Има едно нещо: LPC_SC->SCS |= (1 << 5); SCSbits.OSCEN = 1; Вторият запис не ви ли се струва по-удобен за писане? |
|
| Автор: | miro_atc [ Пет Сеп 09, 2011 8:50 pm ] | |||||||||
| Заглавие: | Re: LPC17xx.h | |||||||||
Въпросът не е какво ни се струва и какво не ни се струва... Има си правила! Ето някои: 1) Най-важното е именуването. Направо се изприщвам като чета код от Луминари. Гледаш вдигат някакъв бит в някакъв регистър. Пускаш търсене в дейташита нито регистъра го има, нито бита. Естествено ги има, но под друго име и ти отнема сума си време да ги намериш. Както и обратното като четеш дейташита и искаш да провериш еди кой си регистър дали и как се пипа от софтуера трябва да стане с търсене в проекта. Това е просто задължително, но за целта имената от хедърите трябва да отговарят на имената в дейташита. Подчертавам, това не е въпрос на "удобство" или на "струване"... 2) Естествено хедърите се правят със структури и универсални, така като имаш код за дадена периферия да не се налага да го пипаш ако смениш чипа и/или проекта. 3) Хедърите трябва да са универсални както за Ц, така и Ц++, така и асемблер. Аз в началото правех отделно за Ц/Ц++ и отделни за асемблер (заради структурите). Но има начин да е един хедъра и по-добре да е един. 4) Хедърите трябва да са документирани. Стандартът е doxygen и почти всички имат "нещо", което е по-лошо и от нищо, защо ако не бяха ползвали doxygen кодове поне нямаше да бълва толкова грешки. ------- Нямам в момента дейташит на това LPC, но правилният запис е: указател->ПЕРИФЕРИЯ_РЕГИСТЪР |= ПЕРИФЕРИЯ_РЕГИСТЪР_ФЛАГ; където нещата с главни букви трябва да са изписани точно както е в дейташита!!! Действително, тоя запис става малко по-дълъг, но затова трябва да мисли тоя който пише дейташита, а не ти... Ти трябва да мислиш какво ще правиш няколко години след като си написал кода и той е набъбнал над 100хил или 1млн. реда |
||||||||||
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|