Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "mcu_support_package/inc/stm32f10x.h"
- #include "string.h"
- uint16_t reverseBits( uint16_t n){
- uint16_t reversed = 0;
- for(uint8_t i = 0; i < 16; i++){
- if ((n & (1<<15)) !=0){
- reversed |= (1<<i);
- }
- n = n<<1;
- }
- return reversed;
- };
- int simple_snprintf(char * output, size_t output_size, const char * input, int a, float b, long long c){
- uint8_t n=0;
- for(uint8_t i=0; input[i] !=0; i++,n++){
- if(input[i] == '%'){
- if(input[i+1] == 'i') {
- int temp = a;
- int8_t digits_in_a = 0;
- char reversed_out[10];//т.к. у INT_MAX 10 цифр
- while( a!=0){
- temp = a%10;
- a=a/10;
- reversed_out[digits_in_a++] = (char)(temp+0x30);
- if ((n + digits_in_a - 1) == output_size ){
- output[n] = 0;
- return n;
- }
- }
- for(;digits_in_a != 0;digits_in_a --)
- output[n++] = reversed_out[digits_in_a - 1];
- i+=2;
- n--;
- }
- if(input[i+1] == 'f') {
- char temp = (char) (b * 10);
- output[n++] = temp / 10;
- output[n++] = '.';
- output[n++] = temp % 10;
- i+=2;
- }
- if((input[i+1] == 'l')&&(input[i+2] == 'l')) {
- long long temp = c;
- int8_t digits_in_c = 0;
- char reversed_out[20];//т.к. у LONG_INT_MAX 20 цифр
- while( c!=0){
- temp = c%10;
- c=c/10;
- reversed_out[digits_in_c++] = (char)(temp+0x30);
- if ((n + digits_in_c - 1) == output_size ){
- output[n] = 0;
- return n;
- }
- }
- for(;digits_in_c != 0;digits_in_c --)
- output[n++] = reversed_out[digits_in_c - 1];
- i+=3;
- n--;
- }
- }
- if((n+1) == output_size) {
- n++;
- break;
- }
- output[n] = input[i];
- }
- output[n] = '\0';
- return n;
- }
- int main(void){
- char buf[120];
- uint16_t rev = reverseBits(7);
- uint16_t re2 = reverseBits(0x8901);
- simple_snprintf(buf,120, "Jack has %i eyes, %f legs and %ll heads", 3433442, 5.9, 6909799999);
- return 0;
- }
- // В Project->Options->Linker, Scatter File выбран файл stack_protection.sct
- // он обеспечивает падение в HardFault при переполнении стека
- // Из-за этого может выдаваться ложное предупреждение "AppData\Local\Temp\p2830-2(34): warning: #1-D: last line of file ends without a newline"
- #ifdef USE_FULL_ASSERT
- // эта функция вызывается, если assert_param обнаружил ошибку
- void assert_failed(uint8_t * file, uint32_t line) {
- /* User can add his own implementation to report the file name and line number,
- ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
- (void)file;
- (void)line;
- __disable_irq();
- while(1) {
- // это ассемблерная инструкция "отладчик, стой тут"
- // если вы попали сюда, значит вы ошиблись в параметрах вызова функции из SPL.
- // Смотрите в call stack, чтобы найти ее
- __BKPT(0xAB);
- }
- }
- #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement