Popular New Releases in Build Tool
webpack
parcel
v2.5.0
esbuild
v0.14.38
composer
2.3.4
pipenv
Release v2022.4.21
Popular Libraries in Build Tool
by jackfrued python
114192
Python - 100天从新手到大师
by webpack javascript
60899 MIT
A bundler for javascript and friends. Packs many modules into a few bundled assets. Code Splitting allows for loading parts of the application on demand. Through "loaders", modules can be CommonJs, AMD, ES6 modules, CSS, Images, JSON, Coffeescript, LESS, ... and your custom stuff.
by parcel-bundler javascript
40599 MIT
The zero configuration build tool for the web. 📦🚀
by evanw go
31445 MIT
An extremely fast JavaScript and CSS bundler and minifier
by composer php
26405 MIT
Dependency Manager for PHP
by pypa python
22897 MIT
Python Development Workflow for Humans.
by bazelbuild java
18479 Apache-2.0
a fast, scalable, multi-language and extensible build system
by tj shell
16154 MIT
Node version management
by bower javascript
15076 MIT
A package manager for the web
Trending New libraries in Build Tool
by earthly go
6523 MPL-2.0
Repeatable builds
by FrictionalGames c++
3256 GPL-3.0
by ml-tooling python
2098 CC-BY-SA-4.0
🏆 A ranked list of awesome Python open-source libraries and tools. Updated weekly.
by egoist typescript
1978 MIT
The simplest and fastest way to bundle your TypeScript libraries.
by efoxTeam typescript
1716 NOASSERTION
EMP Micro FE Base on webpack 5 & module federation
by paulrberg javascript
1225 MIT
Create Ethereum-powered apps with one command
by Haixiang6123 html
1153 CC0-1.0
这本小书会带你造 10 个非常实用的 npm 库 📦
by antfu typescript
1035 MIT
💡 Use the right package manager
by SFUMECJF c++
885
快速入门CMake,通过例程学习语法。在线阅读地址:https://sfumecjf.github.io/cmake-examples-Chinese/
Top Authors in Build Tool
1
113 Libraries
425
2
62 Libraries
808
3
50 Libraries
9126
4
41 Libraries
19236
5
27 Libraries
67
6
27 Libraries
3498
7
23 Libraries
1478
8
21 Libraries
133
9
20 Libraries
233
10
20 Libraries
2361
1
113 Libraries
425
2
62 Libraries
808
3
50 Libraries
9126
4
41 Libraries
19236
5
27 Libraries
67
6
27 Libraries
3498
7
23 Libraries
1478
8
21 Libraries
133
9
20 Libraries
233
10
20 Libraries
2361
Trending Kits in Build Tool
Kerala, with its lush landscapes, serene backwaters, and vibrant culture, offers a plethora of enchanting experiences for honeymooners. Among the myriad of options, camping in Munnar stands out as a unique and romantic way to connect with nature and each other. For couples embarking on Kerala honeymoon packages from Delhi, Munnar's camping sites provide an unforgettable opportunity to create cherished memories in the lap of pristine wilderness.
Munnar: Nature's Haven in Kerala:
Nestled in the Western Ghats, Munnar is a picturesque hill station renowned for its rolling hills, mist-covered valleys, and tea plantations that stretch as far as the eye can see. The tranquility of Munnar's natural beauty provides an ideal setting for a romantic getaway, making it a popular destination for honeymooners.
Camping in Munnar: A Romantic Adventure:
Camping in Munnar is a remarkable way to embrace the beauty of nature while enjoying the thrill of outdoor living. Here's why it's an ideal addition to your Kerala honeymoon package from Delhi:
1. Private Moments in Nature:
Imagine waking up to the gentle rustling of leaves, the melodious chirping of birds, and the aroma of fresh mountain air. Camping in Munnar allows you and your beloved to escape the noise and distractions of city life and immerse yourselves in the serenity of nature. Share intimate moments under the starlit sky, cuddle up by the campfire, and create memories that will last a lifetime.
2. Scenic Campsites:
Munnar offers a range of picturesque campsites, each with its own unique charm. Whether you prefer a campsite nestled amid the tea plantations, beside a gurgling stream, or atop a hill with panoramic views, you'll find the perfect spot to set up your romantic retreat.
3. Adventurous Treks:
For adventure-loving couples, Munnar's camping sites often serve as a starting point for exhilarating treks. Hand in hand, you can embark on a journey through lush forests, meandering trails, and rolling hills, discovering hidden waterfalls and stunning viewpoints along the way.
4. Stargazing and Bonfires:
Munnar's pristine air and low light pollution make it an excellent destination for stargazing. With a clear night sky overhead, you can enjoy cozy evenings by the campfire, sharing stories, and gazing at the constellations above. It's a magical experience that brings you closer to the wonders of the universe.
5. Expert Assistance:
Many tour operators in Munnar offer camping packages that provide all the necessary equipment and support. You don't need to be a seasoned camper to enjoy this adventure; experienced guides ensure your safety and comfort throughout your stay.
Inclusion in Kerala Honeymoon Packages from Delhi:
Kerala honeymoon packages from Delhi often offer camping in Munnar as an optional activity. This means you can seamlessly integrate the camping experience into your overall itinerary, combining it with visits to Munnar's other attractions.
Tips for a Memorable Camping Experience:
- Pack Light: While camping equipment is provided, packing essentials like warm clothing, comfortable shoes, and personal items is essential.
- Capture the Moments: Don't forget to bring a camera or smartphone to capture the breathtaking beauty of Munnar and the romantic moments you share.
- Dine under the Stars: Opt for a camping package that includes a candlelit dinner under the stars for a truly romantic experience.
Conclusion: A Romantic Rendezvous in the Wilderness:
Camping in Munnar is not just an adventure; it's a romantic rendezvous with nature that allows you to disconnect from the world and reconnect with each other. For couples on Kerala honeymoon packages from Delhi, Munnar's camping sites provide a unique opportunity to celebrate love amidst the serene wilderness of the Western Ghats. So, if you're looking to infuse your honeymoon with romance, adventure, and the beauty of nature, consider camping in Munnar as a highlight of your Kerala getaway.
Kerala, often referred to as "God's Own Country," is a land of diverse landscapes, rich cultural heritage, and a unique approach to wellness. Among the many facets of Kerala's charm, Ayurvedic tourism has gained prominence as a holistic and rejuvenating experience. For travelers embarking on Kerala tour packages from Mumbai, this ancient system of medicine offers a pathway to healing, relaxation, and inner well-being.
The Essence of Ayurveda in Kerala:
Ayurveda, which translates to "science of life," is a traditional system of medicine that originated in India over 5,000 years ago. Kerala, with its abundant natural resources and an ingrained tradition of Ayurvedic practices, has become a hub for Ayurvedic tourism. The state's serene backwaters, lush forests, and pristine beaches create the ideal setting for Ayurvedic rejuvenation.
Ayurvedic Treatments:
At the heart of Ayurvedic tourism in Kerala are the holistic treatments and therapies offered by expert practitioners. These therapies are personalized to meet individual needs and are based on the principles of Ayurveda, which seek to balance the body, mind, and spirit.
- Panchakarma: This is one of the most well-known Ayurvedic treatments and involves a detoxification and purification process. Panchakarma therapies aim to eliminate toxins from the body, promoting overall health and well-being.
- Abhyanga: Abhyanga is a traditional Ayurvedic oil massage that helps relax the muscles, improve circulation, and alleviate stress. The use of herbal oils enhances its therapeutic benefits.
- Shirodhara: In this treatment, a continuous stream of warm, herbal oil is poured onto the forehead, inducing deep relaxation and calming the nervous system.
- Ayurvedic Diet: Ayurvedic practitioners also emphasize the importance of diet in maintaining health and balance. Ayurvedic cuisine is tailored to individual constitutions, promoting not only physical health but also harmony with nature.
Healing Amidst Nature:
One of the unique aspects of Ayurvedic tourism in Kerala is the natural surroundings in which treatments take place. Many Ayurvedic resorts and wellness centers are nestled in lush gardens, by tranquil lakes, or amidst pristine forests. The soothing sounds of nature and the fresh air enhance the healing process, creating an immersive experience.
Qualified Practitioners:
Kerala takes pride in its well-trained Ayurvedic practitioners who have mastered the art and science of traditional healing. Travelers can rest assured that they are in capable hands, receiving personalized treatments that align with their individual needs and wellness goals.
Incorporating Ayurveda into Kerala Tour Packages from Mumbai:
For travelers from Mumbai, adding an Ayurvedic experience to their Kerala tour packages is a rewarding choice. Many tour operators offer packages that combine cultural exploration, nature excursions, and Ayurvedic treatments. These packages provide a balanced itinerary that allows travelers to immerse themselves in Kerala's culture and natural beauty while reaping the benefits of Ayurveda.
Balancing the Body, Mind, and Spirit:
Ayurvedic tourism in Kerala is more than just a wellness retreat; it's a journey toward inner harmony and balance. It's an opportunity to escape the fast-paced urban life of Mumbai and find solace in the tranquil surroundings of Kerala. Ayurveda not only rejuvenates the body but also rejuvenates the spirit, allowing travelers to return home refreshed and reinvigorated.
Conclusion: A Holistic Escape
Kerala tour packages from Mumbai that include Ayurvedic tourism offer travelers a chance to escape the stresses of daily life and embark on a holistic journey of healing and self-discovery. In Kerala's serene environment, under the care of skilled Ayurvedic practitioners, travelers can experience the profound benefits of this ancient system of medicine. It's not just a vacation; it's a transformational experience that rejuvenates the body, mind, and spirit, leaving travelers with a sense of inner peace and well-being that lingers long after they return home.
Kerala, often referred to as "God's Own Country," is celebrated for its natural beauty, backwaters, and lush landscapes. However, beneath the serene surface of this stunning state lies a rich and diverse cultural tapestry. Among the many facets of Kerala's culture, the tribes of Wayanad stand out as a unique and integral part of the region's heritage. As you embark on your Kerala trip packages, exploring the lives, traditions, and cultures of these tribes adds a fascinating layer to your journey.
Wayanad: Nature's Bounty and Cultural Diversity
Wayanad, located in the northeastern part of Kerala, is a land of undulating hills, dense forests, and fertile valleys. This region is not only a paradise for nature enthusiasts but also home to several indigenous tribal communities, each with its own distinct way of life.
Prominent Tribes of Wayanad:
- Paniyas: The Paniya tribe is one of the most prominent indigenous communities in Wayanad. They are known for their unique customs, dialect, and strong connection to the forests. Paniyas traditionally practiced shifting agriculture and were skilled hunters and gatherers. Today, many have transitioned to settled farming, but their rich cultural heritage remains intact.
- Kurichiyas: The Kurichiyas are another significant tribal group in Wayanad. They are known for their expertise in cultivating cardamom, one of the region's main cash crops. The Kurichiyas have a rich oral tradition and have preserved their culture through storytelling and folklore.
- Adiyars: The Adiyars, also known as the Adiyas, are one of the oldest tribal communities in Wayanad. They primarily follow an agrarian way of life and have a unique system of shifting cultivation known as "Kumki." The Adiyars have their own distinct dialect and cultural practices.
- Kattunayakans: The Kattunayakan tribe is known for its close association with the forests of Wayanad. They have an in-depth knowledge of the region's flora and fauna, and traditionally, they were skilled honey collectors. Their harmonious relationship with nature is a fascinating aspect of their culture.
Experiencing Tribal Culture in Wayanad:
Exploring the tribal culture of Wayanad can be a deeply enriching experience for travelers on Kerala trip packages. Here's how you can immerse yourself in this cultural journey:
- Village Visits: Many tribal villages in Wayanad open their doors to visitors interested in learning about their way of life. You can interact with the locals, observe their traditional practices, and gain insights into their customs and rituals.
- Traditional Art Forms: The tribes of Wayanad have their own unique art forms, including dance and music. Witnessing a tribal dance performance is a vibrant and engaging way to experience their culture.
- Culinary Exploration: The tribes have their own culinary traditions, and sampling their traditional dishes is a delightful way to connect with their culture. You can try locally prepared tribal cuisine, which often includes dishes made from forest produce and locally grown ingredients.
- Tribal Markets: Some tribal communities in Wayanad have small markets where they sell handmade crafts, organic produce, and traditional artifacts. Visiting these markets allows you to support the tribes' livelihoods and take home souvenirs that carry cultural significance.
Responsible Tourism and Cultural Sensitivity:
While exploring the tribes of Wayanad can be an enriching experience, it's important to approach it with respect and cultural sensitivity. Always seek permission before taking photographs, and be mindful of the tribes' privacy and traditions. Additionally, consider supporting local initiatives that promote sustainable tourism and the welfare of tribal communities.
Inclusion in Kerala Trip Packages:
Many Kerala trip packages offer the opportunity to explore the tribal culture of Wayanad as part of their itineraries. It's an excellent way to add depth to your journey and gain a deeper understanding of Kerala's diverse cultural heritage.
Conclusion: A Journey into Wayanad's Soul
Exploring the tribes of Wayanad is not just a cultural excursion; it's a journey into the heart and soul of this enchanting region. It's a chance to connect with the indigenous communities, learn about their traditions, and gain a profound appreciation for the rich cultural diversity that makes Kerala truly unique. So, as you plan your Kerala trip packages, consider venturing into Wayanad and discovering the captivating world of its tribal communities.
When it comes to honeymoon packages, Kerala has earned its reputation as one of the most romantic destinations in the world. Amidst the various jewels that adorn this beautiful state, the Athirapilly Waterfalls stand out as an enchanting and crucial component of Kerala's tourism, especially for honeymooners. Let's delve into the importance of Athirapilly Waterfalls in the tourism map of Kerala honeymoon packages.
Setting the Romantic Tone
Athirapilly Waterfalls, often referred to as the "Niagara Falls of India," are renowned for their breathtaking beauty and serene ambiance. The cascading waters, lush green surroundings, and the soothing sound of the falls create a romantic atmosphere that is unparalleled. For honeymooners, this natural wonder sets the perfect tone for a romantic getaway.
Captivating Backdrop for Memories
The falls provide an awe-inspiring backdrop for capturing those precious honeymoon moments. Newlyweds can have their photographs taken against the backdrop of the falls, creating memories that will last a lifetime. The beauty of Athirapilly Waterfalls enhances the charm of honeymoon photographs, making them even more special.
Secluded Retreats
Several resorts and accommodations are situated in the vicinity of Athirapilly, offering honeymooners secluded and romantic retreats. These resorts often have rooms or cottages with stunning views of the waterfalls, allowing couples to enjoy the beauty and serenity of Athirapilly right from their doorstep.
Adventure and Bonding
Honeymoons are not just about relaxation; they are also about bonding and creating shared experiences. Athirapilly offers adventurous opportunities like trekking and nature walks through the surrounding rainforests. Couples can explore the lush greenery hand in hand, strengthening their bond amidst the wonders of nature.
Monsoon Magic
The monsoon season transforms Athirapilly Waterfalls into a mesmerizing spectacle. The falls are at their fullest during this time, and the entire region comes alive with vibrant greenery. Honeymooners who visit Athirapilly during the monsoons are treated to a romantic experience like no other, with the falls in their full glory and the aroma of wet earth in the air.
Nearby Attractions
Athirapilly's strategic location makes it a gateway to other romantic destinations in Kerala. The nearby Vazhachal Waterfalls, scenic viewpoints, and the Athirapilly-Vazhachal region's natural beauty provide couples with a variety of options for exploration and romantic escapades.
Serenity and Privacy
Unlike some bustling tourist destinations, Athirapilly offers honeymooners a sense of seclusion and privacy. The falls are surrounded by lush forests, and the relatively lower tourist footfall ensures that couples can enjoy peaceful moments together, undisturbed by crowds.
Local Culture and Cuisine
Honeymoon packages in Kerala often include experiences that introduce couples to the local culture and cuisine. Athirapilly allows honeymooners to savor traditional Kerala dishes while enjoying the serene backdrop of the falls. Engaging with the warm and hospitable locals adds a touch of authenticity to the overall experience.
Sustainable Tourism
Athirapilly is also a hub for eco-tourism, emphasizing the importance of responsible and sustainable tourism. Honeymooners who are environmentally conscious can appreciate the efforts to preserve this natural wonder, making their trip not only romantic but also responsible.
In conclusion, Athirapilly Waterfalls plays a pivotal role in the tourism map of Kerala's honeymoon packages. Its romantic allure, captivating natural beauty, and serene ambiance make it a must-visit destination for couples seeking a romantic and memorable getaway. Athirapilly not only provides a scenic backdrop for love but also offers a range of experiences that allow newlyweds to connect, create memories, and embark on a journey of love that begins with the enchantment of these magnificent falls. It's no wonder that Athirapilly Waterfalls has become an essential stop for honeymooners on their journey through Kerala's romantic landscape.
Best Time To Visit Athirapilly waterfalls
The best time to visit Athirapilly Waterfalls is during the post-monsoon and winter months, which generally span from September to February. This period offers the most favorable weather and the most captivating views of the falls. Here's a breakdown of the seasons and their suitability for visiting Athirapilly:
Post-Monsoon (September to November): This is an excellent time to visit Athirapilly as the monsoon rains have receded, leaving the surroundings lush and green. The waterfalls are at their fullest during this time, creating a mesmerizing spectacle. The weather is relatively cool, making it ideal for outdoor activities like trekking and exploring the nearby forests.
Winter (December to February): The winter months are also an excellent time to visit Athirapilly. The weather is pleasantly cool and dry, and the waterfalls maintain a good flow. This is a popular time for tourists, especially honeymooners, as the romantic ambiance is at its peak. Clear skies and comfortable temperatures make it an ideal time for sightseeing and outdoor adventures.
Pre-Monsoon (March to May): While the weather is generally warm during this period, visiting Athirapilly in the pre-monsoon season is still possible. The falls may have slightly lower water levels compared to post-monsoon, but the lush greenery and the surrounding flora are still beautiful. If you can handle the warmth, you can enjoy the serene ambiance with fewer crowds.
Monsoon (June to August): The monsoon season in Kerala, including Athirapilly, is characterized by heavy rainfall. While the falls are at their most spectacular during this time, with a torrential flow of water, it's not the safest or most comfortable time to visit. Landslides and flooding can occur, making it a less suitable period for travel and outdoor activities.
Keep in mind that weather patterns can vary from year to year, so it's a good idea to check the current weather conditions and forecasts before planning your trip. Ultimately, the best time to visit Athirapilly Waterfalls depends on your preferences, whether you prefer the lush greenery and full waterfalls of the post-monsoon and winter months or are willing to experience the dramatic monsoon season, albeit with certain risks and challenges.
Kerala, often referred to as "God's Own Country," is renowned for its enchanting backwaters, and one of the most iconic ways to experience them is through Kerala houseboat packages. These floating marvels offer an immersive experience of Kerala's natural beauty, culture, and tranquility. Let's set sail and explore some of the best destinations for Kerala houseboat packages.
Alleppey (Alappuzha): The Venice of the East
Alleppey, often called the "Venice of the East," is the crown jewel of Kerala's backwaters and the epicenter of houseboat tourism. Its intricate network of canals, serene lagoons, and lush paddy fields create a mesmerizing backdrop for houseboat cruises. The Alleppey houseboat experience offers a unique opportunity to witness daily life along the waterways, savor traditional Kerala cuisine, and soak in the tranquil beauty of the backwaters.
Kumarakom: The Idyllic Retreat
Kumarakom, nestled on the banks of Vembanad Lake, is another popular destination for houseboat packages. This idyllic locale is home to thriving bird sanctuaries, lush greenery, and serene waters. A houseboat cruise in Kumarakom allows you to explore the intricate labyrinth of canals, visit the Kumarakom Bird Sanctuary, and unwind in luxurious resorts offering stunning lakeside views.
Kollam: The Quieter Escape
Kollam, also known as Quilon, offers a quieter and less touristy houseboat experience. The Ashtamudi Lake, with its eight arms, provides a unique backdrop for houseboat cruises. Travelers can meander through the calm waters, visit Munroe Island, and immerse themselves in the traditional village life of Kerala.
Thiruvallam: Backwaters and Beaches
Thiruvallam, near the state capital Thiruvananthapuram, combines the allure of backwaters with the charm of the Arabian Sea. The Karamana River meets the sea here, creating a unique houseboat experience. Travelers can enjoy canoe rides through the mangrove forests, visit the famous Parasurama Temple, and relax on nearby beaches, offering a diverse range of experiences in one destination.
Kasaragod: Offbeat Beauty
Located in the northernmost part of Kerala, Kasaragod is an offbeat destination for houseboat packages. The Valiyaparamba Backwaters, fed by four rivers, offer a hidden gem for those seeking a less-traveled path. Explore charming islands, historic forts, and fishing villages, all while enjoying the serene beauty of this less-visited backwater paradise.
Kochi (Cochin): Urban Elegance and Backwater Charm
Kochi, a major port city, seamlessly blends urban life with backwater charm. The Vembanad backwaters, known as Kochi's "Queen of the Arabian Sea," provide a unique backdrop to this cosmopolitan city. A houseboat cruise in Kochi allows travelers to experience the fusion of history, culture, and natural beauty.
Kuttanad: The Rice Bowl of Kerala
Kuttanad, often referred to as the "Rice Bowl of Kerala," offers a unique houseboat experience. This region is known for its paddy fields that lie below sea level. Houseboat cruises here take you through the canals amidst emerald green rice paddies, allowing you to witness the rustic charm of rural Kerala.
Thanneermukkom: Freshwater Oasis
Thanneermukkom is known for its freshwater lake created by the Thanneermukkom Bund, separating the saltwater of Vembanad Lake from the freshwater of the interior. The serene waters and lush landscapes make it an excellent destination for birdwatching, nature lovers, and houseboat enthusiasts.
Kuttanadu: Backwaters Amidst Paddy Fields
Kuttanadu, often referred to as the "Rice Bowl of Kerala," offers a unique houseboat experience. It is renowned for its paddy fields situated below sea level. Houseboat cruises take you through the canals amidst emerald green rice paddies, allowing you to witness the rustic charm of rural Kerala.
Munnar: Hills and Backwaters
While Munnar is primarily known for its tea plantations and hill stations, it also offers a unique houseboat experience on the Kundala Dam. This combination of hill station and backwaters provides a diverse experience for travelers seeking both adventure and tranquility.
Each of these destinations offers a distinct houseboat experience, showcasing Kerala's natural beauty, culture, and diverse landscapes. Whether you prefer the bustling backwaters of Alleppey, the serene charm of Kumarakom, or the offbeat allure of Kasaragod, Kerala's houseboat packages promise an unforgettable journey through the heart of God's Own Country. Set sail and let the backwaters of Kerala weave their magic, creating cherished memories that will last a lifetime.
Kerala, often celebrated as "God's Own Country," is a captivating destination with diverse landscapes, rich cultural heritage, and serene backdrops. Two of its most enchanting regions, Wayanad and Munnar, beckon travelers with their unique charms and breathtaking vistas. In this comprehensive guide, we will embark on a virtual journey through these picturesque destinations and explore how Kerala tour packages from Delhi can help make your exploration seamless and memorable.
Wayanad: Where Nature Embraces You
Enveloped by the Western Ghats, Wayanad is a land of lush greenery, pristine forests, and rolling hills. The name "Wayanad" translates to "Land of Paddy Fields," and it's easy to see why. This region boasts verdant landscapes, making it a haven for nature enthusiasts and adventure seekers.
- Exploring Wayanad's Natural Wonders
- Wayanad is a treasure trove of natural wonders waiting to be explored. Kerala tour packages from Delhi often include visits to:
- Edakkal Caves: These ancient caves feature prehistoric petroglyphs, and the hike to reach them is an adventure in itself.
- Chembra Peak: Embark on a trek to the heart-shaped lake atop this peak, offering panoramic views of Wayanad.
- Soochipara Waterfalls: An ideal spot for a refreshing dip, these falls cascade through lush forests.
- Wildlife Encounters in Wayanad
- Wayanad Wildlife Sanctuary: Home to diverse wildlife including elephants, tigers, and leopards, the sanctuary offers thrilling jeep safaris.
- Tholpetty Wildlife Sanctuary: Known for its rich biodiversity, this sanctuary is a birdwatcher's paradise.
- Cultural and Culinary Delights
- Thirunelli Temple: A historic temple surrounded by dense forests, offering a spiritual and serene experience.
- Bamboo Rice: Don't miss the opportunity to taste bamboo rice, a unique culinary delight of Wayanad.
Munnar: The Tea Lover's Paradise
Munnar, nestled in the Western Ghats, is synonymous with verdant tea plantations, mist-covered hills, and a tranquil ambiance. It's a destination that allows you to unwind amidst nature's splendor.
- Tea Plantations and Experiences
- Tea Plantation Tours: Explore the sprawling tea gardens, learn about the tea-making process, and enjoy panoramic views.
- Kolukkumalai Tea Estate: Visit one of the highest tea estates in the world, where you can witness the sunrise amidst the clouds.
- Adventures in Munnar
- Eravikulam National Park: Home to the endangered Nilgiri Tahr, this park offers trekking opportunities and captivating landscapes.
- Anamudi Peak: The highest peak in South India, it's a challenging trek for adventure enthusiasts.
- Munnar's Serene Beauty
- Mattupetty Dam: A serene spot for boating, picnics, and enjoying the calm waters surrounded by lush green hills.
- Attukal Waterfalls: A hidden gem, this waterfall is surrounded by dense forests and offers breathtaking views.
Kerala Tour Packages from Delhi: Crafting Your Dream Getaway
Kerala tour packages from Delhi offer the perfect blend of convenience and exploration. These packages cater to diverse interests and preferences, ensuring that your journey is seamless and memorable. Here's how they enhance your Kerala tour experience:
- Customization: Tour packages can be tailored to your interests, whether you're a nature enthusiast, adventure seeker, or culture buff.
- Local Insights: Local guides enhance your experience with their knowledge of hidden gems, cultural nuances, and insider tips.
- All-Inclusive: Packages often include accommodation, transportation, meals, and activities, eliminating the hassle of planning and booking separately.
- Value for Money: By bundling components of your trip, tour packages often offer cost savings compared to individual bookings.
In conclusion, a Kerala tour encompassing Wayanad and Munnar promises an unforgettable journey through lush landscapes, cultural treasures, and memorable adventures. Whether you're sipping freshly brewed tea amidst Munnar's tea gardens or trekking through Wayanad's pristine forests, Kerala's charm will captivate your heart. Consider Kerala tour packages from Delhi to make the most of your exploration, allowing you to focus on creating cherished memories in this slice of paradise. Regardless of when you visit, Wayanad and Munnar await with open arms, ready to embrace you in their natural beauty and warmth.
Embark on a Romantic Journey with Kerala Honeymoon Packages: The Best Honeymoon Destinations in Kerala
A honeymoon is a special time for newlyweds, a time to create lasting memories in the early days of their marriage. For couples seeking a magical and memorable honeymoon experience, Kerala, often referred to as "God's Own Country," offers a myriad of romantic experiences and breathtaking landscapes. Kerala honeymoon packages cater to all your desires, ensuring your honeymoon is nothing short of extraordinary.
Why Choose Kerala for Your Honeymoon?
Kerala is a tropical paradise, known for its lush greenery, tranquil backwaters, and pristine beaches. It's a destination that seamlessly blends nature's beauty with cultural richness, making it an ideal spot for honeymooners. Here are some compelling reasons why Kerala should be at the top of your honeymoon destination list:
- Scenic Beauty: Kerala boasts a diverse landscape, from mist-covered hill stations like Munnar to serene backwaters like Alleppey and picturesque beaches like Kovalam. Each location offers a unique and breathtaking backdrop for your romantic getaway.
- Luxurious Accommodations: Kerala offers a range of accommodation options, from cozy boutique resorts to luxurious houseboats, ensuring that you can find the perfect setting for your romantic escape.
- Cultural Experiences: Explore Kerala's rich culture and heritage with visits to ancient temples, palaces, and traditional dance performances. The state's cultural richness adds depth to your honeymoon experience.
- Culinary Delights: Savor the delectable flavors of Kerala cuisine, which includes dishes like Malabar biryani, seafood delights, and delectable desserts. Kerala honeymoon packages often include special candlelit dinners for couples.
- Relaxation and Wellness: Kerala is known for its Ayurvedic traditions. Pamper yourselves with rejuvenating Ayurvedic spa treatments and wellness therapies, providing relaxation and rejuvenation during your honeymoon.
Best Honeymoon Destinations in Kerala
- Munnar: Known for its tea gardens, misty hills, and cool climate, Munnar is a haven for couples seeking a romantic escape amidst nature's beauty. A visit to the tea plantations and a trek to Anamudi Peak are must-do activities.
- Alleppey: Explore the backwaters of Alleppey in a traditional houseboat. A serene cruise through the tranquil waters, surrounded by lush greenery, is the epitome of romance.
- Kovalam: For couples who love the beach, Kovalam offers golden sands and clear waters. Spend your days sunbathing, swimming, or indulging in watersports.
- Wayanad: A lush green paradise, Wayanad is perfect for couples seeking solitude in the lap of nature. Visit beautiful waterfalls, explore wildlife sanctuaries, and enjoy a stay in eco-friendly resorts.
- Thekkady: If you both are nature enthusiasts, Thekkady is the place to be. Explore Periyar Wildlife Sanctuary, go for a jungle safari, and enjoy a spice plantation tour.
Kerala Honeymoon Packages
Kerala honeymoon packages are tailored to meet the unique needs and preferences of honeymooning couples. These packages often include romantic stays at carefully chosen resorts, candlelit dinners, sightseeing tours to iconic destinations, and even cultural experiences. By opting for a package, you can focus on creating memories rather than planning logistics.
In conclusion, Kerala offers an enchanting blend of nature, culture, and romance, making it one of the most sought-after honeymoon destinations in India. With the convenience and customization offered by Kerala honeymoon packages, your honeymoon can be everything you've dreamed of and more. So, embrace the charm of Kerala, and let your love story begin in this exquisite destination.
A honeymoon is a special chapter in the book of love, a time when newlyweds celebrate their union in a destination that exudes romance and serenity. When it comes to selecting a honeymoon destination in India, Wayanad, situated in the picturesque state of Kerala, stands out as an ideal choice. In this comprehensive guide, we will delve into the captivating allure of Wayanad for honeymooners and explore how Kerala honeymoon packages from Hyderabad can make your romantic journey truly magical.
Wayanad's Enchanting Landscape
Wayanad, nestled in the Western Ghats of Kerala, is a lush green paradise that offers a perfect blend of natural beauty and tranquility. Here's why it's an irresistible destination for honeymooners:
- Lush Greenery: Wayanad is blanketed with verdant forests, rolling hills, and spice plantations. The soothing green landscapes create an idyllic backdrop for a romantic escape.
- Serenity: Away from the hustle and bustle of city life, Wayanad provides an atmosphere of peace and serenity, making it an ideal setting for couples to unwind and connect.
- Adventure: For adventure-loving couples, Wayanad offers trekking, wildlife safaris, and nature walks, providing opportunities for thrilling experiences together.
Honeymoon Experiences in Wayanad
A honeymoon in Wayanad is an opportunity to create cherished memories together. Here are some must-experience activities:
- Stay Amidst Nature: Opt for a romantic stay in a treehouse or a cozy cottage tucked away in the forests. These accommodations allow you to wake up to the sounds of chirping birds and rustling leaves.
- Chembra Peak Trek: Embark on a trek to Chembra Peak, which is famous for its heart-shaped lake. The journey to this natural wonder is both challenging and rewarding, offering breathtaking views.
- Banasura Sagar Dam: Visit India's largest earth dam, Banasura Sagar Dam, for a serene boat ride on the reservoir. The surrounding hills add to the charm of this location.
- Pookode Lake: Enjoy a peaceful boat ride on Pookode Lake, surrounded by lush greenery and cool, clean water. It's an ideal spot for a romantic picnic.
- Edakkal Caves: Explore the ancient Edakkal Caves, which are adorned with prehistoric petroglyphs. The trek to reach the caves is an adventure in itself.
- Wayanad Wildlife Sanctuary: Take a wildlife safari in the Wayanad Wildlife Sanctuary and spot exotic species like elephants, leopards, and deer.
Kerala Honeymoon Packages from Hyderabad
Kerala honeymoon packages from Hyderabad are tailored to ensure that your honeymoon is nothing short of perfection. Here's how they enhance your romantic getaway:
- Customization: Honeymoon packages can be customized to align with your preferences, whether you prefer adventure, relaxation, or cultural experiences.
- Seamless Planning: All aspects of your trip, including accommodation, transportation, meals, and activities, are meticulously planned, allowing you to focus solely on each other.
- Local Expertise: The packages often include the services of local guides who can enhance your experience with insights and recommendations.
- Value for Money: Bundled packages can offer cost savings compared to booking individual elements of your trip separately.
Cultural Delights and Culinary Experiences
Wayanad isn't just about natural beauty; it's also a place rich in culture and tradition. Kerala honeymoon packages from Hyderabad may include opportunities to:
- Explore Local Villages: Interact with the warm and friendly locals, learn about their customs, and witness their traditional way of life.
- Attend Cultural Performances: Enjoy traditional dance performances like Kathakali and Theyyam, which provide a glimpse into Kerala's vibrant culture.
- Culinary Adventures: Savor Kerala's delectable cuisine, including dishes like Malabar biryani, seafood specialties, and mouthwatering desserts. Don't forget to try the famous Kerala sadya, a sumptuous feast served on a banana leaf.
In Conclusion
Wayanad, with its lush landscapes, serene ambiance, and a plethora of romantic experiences, is the perfect canvas for your honeymoon masterpiece. Whether you're strolling hand in hand through spice plantations, trekking to heart-shaped lakes, or savoring delicious Kerala cuisine, Wayanad offers a memorable journey of love and togetherness.
By choosing Kerala honeymoon packages from Hyderabad, you can ensure that your honeymoon is a seamless and enchanting experience. These packages provide convenience, customization, and the assurance that every detail of your romantic journey is meticulously planned, leaving you with nothing to worry about except basking in each other's company. So, embark on this romantic odyssey, and let Wayanad weave its magic as you create beautiful memories that will last a lifetime.
Kerala, often referred to as "God's Own Country," is renowned for its breathtaking landscapes, lush greenery, and serene backwaters. Among the many unique experiences this Indian state has to offer, one stands out as an iconic symbol of Kerala's charm – the houseboat. Kerala houseboats, often bundled into enticing Kerala houseboat packages, offer travelers an unforgettable way to immerse themselves in the state's natural beauty and cultural richness.
The Kerala Houseboat Experience
Houseboats in Kerala are essentially floating homes, traditionally made from wooden planks and coconut fibers, transformed into cozy and comfortable abodes for tourists. These houseboats come in various sizes, from compact single-bedroom vessels to luxurious multi-bedroom options, accommodating different budgets and group sizes. The interiors are thoughtfully designed to provide all the necessary amenities and modern comforts, ensuring a comfortable stay.
A houseboat journey in Kerala typically begins from prominent backwater hubs like Alleppey (Alappuzha) or Kumarakom. As you board your floating sanctuary, you set out on a voyage through a network of interconnected canals, lagoons, and serene lakes. The calm and tranquil backwaters are adorned with lush green paddy fields, swaying coconut palms, and quaint villages, providing a picturesque setting for your journey.
Activities on Kerala Houseboats
- Cruising the Backwaters: The primary activity on a Kerala houseboat is, of course, the leisurely cruise itself. As you drift along, you can watch the world go by, observing the daily life of local communities and the vibrant birdlife that calls the backwaters home.
- Culinary Delights: Houseboat crews are known for their culinary expertise. Guests are treated to delicious Kerala cuisine, including traditional dishes like Karimeen (pearl spot fish) and Kerala Sadya (a sumptuous feast served on a banana leaf). The meals are often included in Kerala houseboat packages.
- Bird Watching: Kerala's backwaters are a haven for birdwatchers. Bring your binoculars and be prepared to spot a variety of birds, including kingfishers, herons, and even majestic eagles.
- Fishing: Many houseboats offer fishing experiences, allowing guests to try their hand at catching fish in the backwaters. It's a unique and immersive way to connect with the local way of life.
- Village Visits: Depending on your route, you may have the opportunity to stop at local villages along the way. This provides a chance to interact with the friendly locals, learn about their traditions, and perhaps even shop for souvenirs.
- Sunset Views: Kerala's sunsets are legendary. From the deck of your houseboat, you can witness the sky transform into a stunning canvas of colors as the sun dips below the horizon.
Kerala Houseboat Packages
For travelers, Kerala houseboat packages are a convenient way to plan their backwater adventures. These packages often include a combination of houseboat stays, meals, and activities, making it easier to explore the backwaters without the hassle of individual bookings. There are options to suit various budgets, from budget-friendly to ultra-luxurious, ensuring that every traveler can find the perfect package to suit their needs.
In conclusion, a Kerala houseboat experience is a journey that combines nature, culture, and tranquility. It's a chance to disconnect from the hustle and bustle of modern life and immerse yourself in the serenity of Kerala's backwaters. Whether you're a solo traveler seeking solitude or a family looking for a unique bonding experience, Kerala houseboat packages offer something for everyone, making it a must-do activity when visiting this enchanting state. So, embark on this unforgettable adventure, and let Kerala's backwaters weave their magic around you.
Are you dreaming of exploring the stunning landscapes and vibrant culture of Kerala without burning a hole in your pocket? Look no further! Seasonz India Holidays brings you an array of Kerala tour packages under 10000 rupees, promising unforgettable experiences without breaking the bank.
Kerala Calling: Budget-Friendly Packages
Embark on a budget-friendly journey through the picturesque landscapes of Kerala with our specially crafted tour packages. Whether you're a nature enthusiast, beach lover, or cultural explorer, we have something for everyone at prices that won't leave you counting pennies.
Unraveling Kerala's Charm: What to Expect
From the tranquil backwaters of Alleppey to the misty hills of Munnar, Kerala offers a diverse range of experiences waiting to be explored. Our budget packages include visits to iconic attractions like the serene Kovalam Beach, the enchanting Athirappilly Waterfalls, and the historic Fort Kochi.
Affordable Luxury: Experience Kerala's Hospitality
Indulge in the warm hospitality and authentic flavors of Kerala without worrying about your budget. Our packages include comfortable accommodation in budget-friendly hotels and resorts, ensuring a cozy stay throughout your journey.
Tailored Experiences: Customize Your Adventure
At Seasonz India Holidays, we understand that every traveler is unique. That's why we offer customizable tour packages that allow you to tailor your Kerala adventure according to your preferences and budget. Whether you're traveling solo, with family, or in a group, we've got you covered.
Seamless Travel Experience: Hassle-Free Planning
Leave the stress of planning behind and let us take care of all the details. From arranging transportation to booking accommodations and organizing sightseeing tours, our team ensures a seamless travel experience from start to finish.
Expert Guidance: Local Insights and Tips
Our experienced guides provide valuable insights into Kerala's rich culture, history, and traditions, enriching your travel experience. From recommending the best local eateries to sharing insider tips on hidden gems, they're here to make your journey unforgettable.
Book Your Kerala Adventure Today
Don't let budget constraints hold you back from experiencing the magic of Kerala. With Seasonz India Holidays' affordable tour packages, you can embark on the adventure of a lifetime without breaking the bank. Book your Kerala tour package under 10000 rupees today and get ready to create memories that will last a lifetime.
Kerala Tourism's New Horizons: Attracting Pune's Adventurers
Introduction
Kerala, often referred to as "God's Own Country," has long been a cherished destination for travelers seeking natural beauty, serene backwaters, lush green landscapes, and a rich cultural heritage. In recent years, the state has witnessed a wave of innovative initiatives and infrastructure developments in its tourism sector, attracting a growing influx of visitors from various parts of India, including Pune. This blog will delve into some of the exciting new innovations in Kerala tourism and explore why Puneites are increasingly drawn to this southern paradise.
Sustainable Tourism Initiatives
Kerala has been at the forefront of sustainable tourism practices. The state government and local communities have taken several steps to minimize the environmental impact of tourism. Initiatives like responsible wildlife tourism, eco-friendly homestays, and treehouse accommodations in the midst of lush forests have become popular options for travelers. Pune residents, who often have a strong inclination toward environmental conservation, find these initiatives particularly appealing.
Adventure Tourism
Kerala is no longer just about tranquil houseboat rides; it has embraced adventure tourism with open arms. The Western Ghats that stretch across the state offer ample opportunities for trekking, mountain biking, and rock climbing. Pune, known for its adventurous spirit, is drawn to these activities in Kerala. The state's terrain provides a fresh and challenging backdrop for adventure enthusiasts from Pune to explore.
Wellness Tourism
Kerala has long been synonymous with Ayurveda and holistic wellness. The state's spas, wellness centers, and yoga retreats offer a perfect escape from the hustle and bustle of city life. For Pune residents seeking relaxation and rejuvenation, Kerala's wellness tourism has emerged as a top choice. The ancient healing techniques and serene settings make it a sought-after destination.
Culinary Tourism
The delectable flavors of Kerala's cuisine have captivated the taste buds of Pune's food enthusiasts. Kerala's rich seafood dishes, spicy curries, and traditional delicacies like appam and stew are gaining popularity among Puneites. Food festivals and culinary tours have become a highlight of Kerala tourism, enticing travelers from Pune to savor the state's diverse culinary offerings.
Improved Infrastructure
Kerala has invested significantly in enhancing its tourism infrastructure. Modern airports, well-maintained roads, and improved connectivity make it easier for Pune residents to access the state. The introduction of direct flights from Pune to major Kerala cities has significantly reduced travel time and increased convenience.
Unique Accommodations
Kerala offers an array of unique accommodations, ranging from floating cottages in backwaters to luxury resorts in the hills. The trend of staying in treehouses and houseboats has captured the imagination of travelers, including those from Pune, seeking extraordinary experiences. These unconventional stays provide a chance to connect with nature and escape the ordinary.
Cultural Experiences
Kerala's rich cultural heritage is showcased through traditional dance forms like Kathakali and Mohiniyattam, as well as vibrant festivals like Onam and Thrissur Pooram. Pune residents, eager to explore different cultures, are attracted to Kerala's cultural experiences. The opportunity to witness and participate in these cultural celebrations offers a unique and immersive travel experience.
Accessibility and Connectivity
The increased connectivity between Pune and Kerala has played a pivotal role in the growing flow of travelers. With more airlines offering direct flights and the expansion of railway networks, Puneites can now easily plan their trips to Kerala. This enhanced accessibility has encouraged many to explore the state's diverse attractions.
Conclusion
Kerala's tourism industry is evolving, and its innovative approaches are attracting a diverse range of travelers, including adventure seekers from Pune. The state's commitment to sustainable tourism, coupled with its unique offerings in adventure, wellness, and culinary experiences, has made it a preferred destination for those looking for a blend of nature, culture, and adventure.
As Kerala continues to reinvent itself as a multifaceted travel destination, Pune's residents will likely keep flowing in, eager to explore the uncharted territories of "God's Own Country." With its pristine beauty and innovative tourism initiatives, Kerala is well-poised to welcome visitors from Pune and beyond for years to come, creating lasting memories and fostering a stronger connection between these two vibrant regions. Kerala Honeymoon Packages From Pune.
Kerala, known as "God's Own Country," is a land of diverse landscapes, vibrant culture, and hidden gems waiting to be discovered. Among the many captivating destinations in Kerala, Kumblangi stands out as a tranquil retreat that offers a unique and authentic experience for travelers on Kerala tour packages from Hyderabad. Located on the outskirts of Kochi, Kumblangi is a picturesque village that immerses you in the serenity of rural life while providing a glimpse into the rich cultural heritage of Kerala.
The Charm of Kumblangi:
Kumblangi, often referred to as the "Model Tourism Village of India," is not your typical tourist destination. Instead, it's a place where travelers can escape the hustle and bustle of city life and unwind in a peaceful and idyllic setting. This quaint village is known for its sustainable tourism initiatives and its commitment to preserving the traditional way of life.
Experiencing Village Life:
For travelers seeking a break from the hectic pace of Hyderabad, Kumblangi offers a chance to slow down and embrace the simplicity of rural living. As you explore the village, you'll witness everyday scenes of villagers going about their lives, tending to their farms, and engaging in traditional crafts.
Backwater Serenity:
Kumblangi is situated along the serene backwaters of Kerala, providing an opportunity to experience the beauty of these waterways without the crowds. You can take a leisurely boat ride along the narrow canals, surrounded by lush greenery, coconut palms, and abundant birdlife. It's a peaceful and rejuvenating experience that allows you to connect with nature.
Homestays and Local Cuisine:
One of the highlights of visiting Kumblangi is the chance to stay in traditional homestays. These accommodations offer a glimpse into the warm hospitality of Kerala. Your hosts will treat you to authentic Kerala cuisine, prepared with fresh, locally sourced ingredients. Savoring homemade delicacies is a delightful way to immerse yourself in the local culture.
Coir Making and Other Crafts:
Kumblangi is known for its coir making, and you can visit local coir-making units to witness this traditional craft in action. Additionally, the village is home to artisans who specialize in crafting intricate mats, baskets, and other handwoven products. You can interact with these skilled craftsmen and even try your hand at creating your own souvenirs.
Responsible Tourism:
Kumblangi's commitment to responsible tourism is evident in its efforts to preserve its natural surroundings and cultural heritage. The village follows sustainable practices, and initiatives like waste management and eco-friendly agriculture are integral to its way of life. By visiting Kumblangi, travelers can support these eco-friendly endeavors and contribute to the preservation of this charming village.
Incorporating Kumblangi into Kerala Tour Packages from Hyderabad:
When planning Kerala tour packages from Hyderabad, consider including Kumblangi in your itinerary. Many tour operators offer packages that combine visits to popular destinations like Kochi with the unique experience of Kumblangi. This allows you to enjoy the best of both worlds – the vibrant city life of Kochi and the tranquil village retreat of Kumblangi.
Conclusion: A Village of Tranquility
Kumblangi in Kochi is a hidden gem that invites travelers to step off the beaten path and immerse themselves in the authentic beauty of rural Kerala. It's a place where the rhythms of village life, the serenity of backwaters, and the warmth of local hospitality come together to create a memorable and peaceful retreat. For travelers from Hyderabad seeking a break from the urban grind, Kumblangi offers a tranquil haven where you can unwind, rejuvenate, and experience the true essence of Kerala's culture and natural beauty.
Kerala, often referred to as "God's Own Country," has long been a magnet for travelers from around the world. This southern Indian state boasts a diverse landscape that includes lush greenery, serene backwaters, pristine beaches, and a rich cultural heritage. In recent years, Kerala's tourism sector has witnessed a significant transformation with new innovations and an increasing flow of people from various places, particularly from Ahmedabad. In this blog post, we'll explore the exciting developments in Kerala's tourism industry and how it has been drawing visitors,
such as those seeking "Kerala Honeymoon Packages from Ahmedabad."
Sustainable Tourism Initiatives
One of the most noteworthy innovations in Kerala's tourism industry is its commitment to sustainable tourism. The state government has initiated several eco-friendly measures, such as promoting responsible tourism practices, banning single-use plastics, and supporting organic farming. These initiatives have not only preserved the natural beauty of the state but have also attracted eco-conscious travelers, including those from Ahmedabad.
Wellness Tourism and Ayurveda
Kerala has been a hub for wellness tourism for many years, thanks to its world-renowned Ayurvedic treatments. However, recent years have seen an upsurge in wellness centers, spas, and resorts offering holistic healing experiences. Ayurveda, yoga, and meditation retreats have gained immense popularity, making Kerala an appealing destination for travelers seeking rejuvenation and relaxation, including those interested in "Kerala Honeymoon Packages from Ahmedabad."
Adventure Tourism
Kerala's adventurous side is increasingly captivating thrill-seekers. Activities like trekking, bamboo rafting, rock climbing, and zip-lining have become popular among tourists. The state's lush Western Ghats offer numerous opportunities for adrenaline-pumping adventures, drawing adventure enthusiasts from places like Ahmedabad who crave more than just a typical vacation.
Enhanced Connectivity
Kerala has made significant improvements in its transportation infrastructure, making it easier for tourists to access the state. The expansion of airports, improved road networks, and the introduction of high-speed trains have made traveling to Kerala more convenient, particularly for those arriving from cities like Ahmedabad.
Culinary Experiences
Kerala's cuisine is a delectable fusion of flavors, with dishes like Kerala Sadya, Malabar Biryani, and seafood delicacies leaving an indelible mark on the palate. The state has also embraced culinary tourism, with cooking classes, food festivals, and farm-to-table experiences becoming popular attractions. Travelers, including those from Ahmedabad, are eager to savor the rich and diverse tastes of Kerala.
Unique Accommodation Options
Kerala's tourism industry has responded to the evolving preferences of travelers by offering unique accommodation choices. Treehouses amidst the rainforests, floating cottages on backwaters, and luxury houseboats provide memorable stays for visitors. These innovative lodging options cater to those seeking an immersive experience in Kerala's natural beauty, making it even more appealing for honeymooners from Ahmedabad.
Digital Marketing and Online Booking
The rise of digital marketing and online booking platforms has played a pivotal role in attracting tourists to Kerala. Tourism agencies and hospitality providers have leveraged technology to reach a global audience, making it effortless for travelers, including those searching for "Kerala Honeymoon Packages from Ahmedabad," to plan their trips and explore the region's offerings.
Conclusion
Kerala's tourism industry has witnessed a remarkable evolution, with innovations that cater to a diverse range of travelers. The state's commitment to sustainability, emphasis on wellness and adventure, improved connectivity, culinary experiences, unique accommodations, and digital marketing efforts have all contributed to the influx of visitors, including those from Ahmedabad. As Kerala continues to embrace new trends and experiences, it solidifies its position as a must-visit destination, appealing to honeymooners, nature lovers, adventurers, and wellness seekers alike. So, if you're considering a memorable vacation, don't miss the chance to explore "God's Own Country" and discover the magic of Kerala.
Kerala, often referred to as "God's Own Country," is a land of enchanting natural beauty, rich cultural heritage, and diverse landscapes. From tranquil backwaters and pristine beaches to lush hill stations and vibrant cities, Kerala offers a treasure trove of experiences for travelers. Let's embark on a virtual journey through some of the best destinations that make Kerala trip packages truly extraordinary.
Munnar: The Verdan
Munnar, a picturesque hill station, is one of Kerala's most sought-after destinations. Known for its lush tea plantations, rolling hills, and cool climate, Munnar offers a serene escape from the bustling world. Visitors can explore tea gardens, trek through the Western Ghats, and witness breathtaking sunsets from the top of Anamudi, the highest peak in South India. Munnar is a must-visit destination for nature enthusiasts and those seeking a peaceful retreat.
Alleppey (Alappuzha): The Venice of the East
Alleppey, often called the "Venice of the East," is famous for its intricate network of backwaters, serene lagoons, and houseboat cruises. It's a paradise for those seeking a tranquil escape amidst the serene waters and lush landscapes. A Kerala trip package that includes Alleppey offers the opportunity to savor traditional Kerala cuisine, witness daily life along the waterways, and experience the unique charm of houseboat living.
Kochi (Cochin): A Blend of History and Modernity
Kochi, a bustling port city, seamlessly blends history and modernity. It boasts colonial-era architecture, vibrant markets, and a rich cultural heritage. The iconic Chinese fishing nets, the historic Mattancherry Palace, and the enchanting Jew Town are just a few of the city's attractions. Kochi is a gateway to the backwaters and a melting pot of cultures, making it an essential stop on any Kerala trip.
Wayanad: The Wilderness Escape
Wayanad, located in the Western Ghats, is a haven for nature lovers and adventure enthusiasts. It offers lush forests, wildlife sanctuaries, and a range of outdoor activities like trekking, wildlife safaris, and camping. Visitors can explore attractions like Edakkal Caves, Chembra Peak, and Banasura Sagar Dam. Wayanad's untouched natural beauty and serene ambiance make it an ideal destination for an offbeat Kerala trip package
.
Thekkady: Wildlife and Spice Plantations
Thekkady is home to the famous Periyar National Park, known for its diverse wildlife and scenic beauty. A Kerala trip to Thekkady offers the chance to go on jungle safaris, boat rides on Periyar Lake, and spice plantation tours. It's a destination where travelers can immerse themselves in nature and wildlife while enjoying the aroma of spices in the air.
Kumarakom: The Backwater Bliss
Kumarakom, situated on the banks of Vembanad Lake, is an idyllic backwater destination known for its lush greenery and tranquil waters. Visitors can explore the intricate labyrinth of canals, relax at luxurious lakeside resorts, and witness exotic bird species at the Kumarakom Bird Sanctuary. Kumarakom is an oasis of serenity and a perfect addition to any Kerala trip package.
Kovalam: Beach Bliss and Ayurveda
Kovalam, with its crescent-shaped beaches and picturesque cliffs, is a popular beach destination in Kerala. It offers opportunities for sunbathing, water sports, and rejuvenating Ayurvedic treatments. The lighthouse at Kovalam Beach provides panoramic views of the Arabian Sea. It's an ideal destination for travelers seeking sun, sea, and relaxation on their Kerala trip.
Varkala: Cliffside Charm
Varkala, located along the stunning cliffs of the Arabian Sea, offers a unique beach experience. The mineral-rich waters of Varkala are believed to have therapeutic properties. Visitors can relax on the cliffside promenade, take in panoramic ocean views, and visit the ancient Janardanaswamy Temple. Varkala provides a laid-back and rejuvenating coastal experience.
Palakkad: The Gateway to Kerala's Culture
Palakkad, often referred to as the "Gateway of Kerala," offers a blend of culture, history, and natural beauty. It's known for its ancient temples, serene dams, and lush green landscapes. The Palakkad Fort, Malampuzha Gardens, and Silent Valley National Park are notable attractions. Palakkad provides a glimpse into Kerala's rich cultural heritage and biodiversity.
Kannur: Pristine Beaches and Heritage
Kannur, on the northern coast of Kerala, is a destination for travelers seeking pristine beaches, historical sites, and rich traditions. The St. Angelo Fort, Muzhappilangad Beach (the longest drive-in beach in India), and Theyyam performances are highlights of a Kerala trip to Kannur. It's an offbeat destination that showcases Kerala's diverse cultural and natural beauty.
Conclusion
Kerala, with its diverse landscapes and cultural richness, offers an array of experiences for travelers. Whether you're drawn to the misty hills of Munnar, the serene backwaters of Alleppey, or the vibrant streets of Kochi, Kerala has something to offer everyone. These destinations, each unique in its own way, are the pillars of Kerala's tourism map, enticing visitors from around the world to explore the magic of "God's Own Country." So, set your compass, plan your Kerala trip package, and get ready for a journey through a land where nature, culture, and serenity coexist in perfect harmony.
When it comes to enchanting honeymoon destinations, Kerala is second to none. Known for its picturesque landscapes, serene backwaters, and lush greenery, this south Indian state offers couples an idyllic setting for a memorable honeymoon. Among the many jewels in Kerala's crown, Vembanad Kayal (Vembanad Lake) stands out as a romantic paradise that beckons newlyweds seeking a unique and unforgettable experience.
The Beauty of Vembanad Kayal:
Vembanad Kayal, often referred to as Vembanad Lake, is the largest lake in Kerala and one of the longest in India. Stretching over 96 kilometers, this vast expanse of pristine backwaters is fringed with coconut palms, lush paddy fields, and quaint villages. The lake is renowned for its tranquil waters, making it an ideal destination for couples looking for a peaceful and romantic escape.
Houseboats: Floating Romance on Vembanad Kayal:
One of the most iconic features of Vembanad Kayal is the traditional Kerala houseboat. These beautifully crafted vessels offer a unique and intimate way to explore the lake's scenic beauty. Honeymooners can embark on a private houseboat cruise, complete with a personal chef and crew, ensuring that your journey is both luxurious and exclusive.
Imagine drifting along the calm waters of Vembanad Kayal with your loved one, surrounded by the breathtaking views of the backwaters. As the sun sets, painting the sky with hues of orange and pink, you can savor a delicious Kerala meal prepared just for you. It's a romantic experience that will stay etched in your memory forever.
Vembanad Kayal Activities for Honeymooners:
Apart from houseboat cruises, Vembanad Kayal offers a range of activities that honeymooners can enjoy together:
- Birdwatching: The lake is a haven for birdwatchers, with numerous resident and migratory bird species. Share moments of awe as you spot colorful kingfishers, graceful herons, and perhaps even a majestic eagle.
- Nature Walks: Take leisurely strolls along the lakeshore or explore the surrounding villages hand in hand. The lush greenery and the soothing sounds of nature provide the perfect backdrop for romantic conversations.
- Fishing: Try your hand at traditional Kerala fishing techniques with your partner. It's not just about the catch but also about the shared experience and a chance to bond.
- Village Visits: Immerse yourselves in the local culture by visiting nearby villages. Interact with the friendly villagers, learn about their traditions, and savor authentic Kerala cuisine.
- Sunset Romance: Witnessing the sunset over Vembanad Kayal is a magical experience. The changing colors of the sky and the serene waters create a romantic ambiance that is simply unforgettable.
Kerala Honeymoon Packages and Vembanad Kayal:
Many Kerala honeymoon packages include a visit to Vembanad Kayal, ensuring that you get to experience this romantic paradise. Whether you're looking for adventure, relaxation, or simply a private moment with your partner, Vembanad Kayal has it all.
Vembanad Kayal, with its serene waters and lush surroundings, offers honeymooners the perfect backdrop for creating cherished memories. So, if you're planning your honeymoon in Kerala, consider including Vembanad Kayal in your itinerary, and let this romantic destination be the canvas for your love story.
Kerala, often referred to as "God's Own Country," is a place of stunning natural beauty, lush landscapes, and a unique cultural heritage. Among its many attractions, the tranquil backwaters that weave through the state stand out as a must-visit destination. These serene waterways provide more than just a scenic experience; they offer a chance to engage in the time-honored tradition of fishing. Kerala houseboat packages provide the perfect opportunity to combine this cultural experience with the comforts of modern living.
The Backwaters of Kerala: A Natural Wonder
The backwaters of Kerala are a vast network of interconnected rivers, lakes, and canals that traverse the state, forming a unique and enchanting ecosystem. Surrounded by swaying palms, vibrant paddy fields, and quaint villages, the backwaters are a sight to behold. They not only serve as a lifeline for the local communities but also offer a tranquil escape for travelers seeking solace in nature's embrace.
Kerala Houseboats: Your Floating Home
Houseboats, locally known as "Kettuvallam," are an integral part of the backwater experience. These traditional wooden vessels, once used for transporting rice and spices, have been transformed into luxurious floating abodes. Kerala houseboat packages allow you to step aboard these beautifully crafted houseboats, complete with modern amenities, spacious bedrooms, and a dedicated crew.
As you embark on your houseboat adventure, you'll find yourself surrounded by the soothing sounds of water lapping against the boat, the scent of fresh air, and the gentle swaying of the vessel. It's an immersive experience that allows you to disconnect from the hustle and bustle of everyday life and reconnect with the rhythms of nature.
Fishing in Kerala Houseboats: A Cultural Experience
One of the most enchanting aspects of a Kerala houseboat journey is the opportunity to engage in traditional fishing activities. Fishing has been a way of life for the communities living along the backwaters for generations, and it's a cultural practice deeply embedded in Kerala's heritage.
Types of Fishing in Kerala Houseboats:
- Rod and Line Fishing: This is the most common form of fishing you'll experience on a houseboat. Armed with a simple fishing rod and bait, you can try your hand at catching a variety of local fish species. The crew on the houseboat will guide you through the process, making it suitable for both beginners and experienced anglers.
- Chinese Fishing Nets: In some areas, you might encounter the iconic Chinese fishing nets, a traditional method of catching fish that has been practiced in Kerala for centuries. While you may not directly participate in using these massive nets, you can observe the skilled local fishermen in action and learn about their techniques.
The Joy of Catching Your Own Meal:
One of the most rewarding aspects of fishing in Kerala houseboats is the opportunity to catch your own meal. There's a unique sense of satisfaction in reeling in a fish and knowing that it will be prepared and served to you fresh by the onboard chef. It's a culinary adventure that connects you to the local flavors and traditions of Kerala.
The Bounty of Kerala's Waters:
Kerala's backwaters are home to a diverse range of fish, including the popular Karimeen (pearl spot fish), Tilapia, and Catfish, among others. These freshwater delicacies are known for their tender flesh and delicious taste, making them a prized catch for anglers and a delightful treat for your taste buds.
The Art of Patience:
Fishing in Kerala houseboats is not just about the catch; it's also about the journey. It's an opportunity to slow down, appreciate the beauty of the surroundings, and engage in meaningful conversations with your travel companions. As you wait for that telltale tug on your line, you'll find that patience is indeed a virtue, and the rewards are well worth the wait.
Sustainability and Conservation:
Kerala has made significant efforts to promote sustainable and responsible fishing practices in the backwaters. This ensures that the delicate ecosystem of the backwaters remains balanced and that future generations can continue to enjoy its beauty.
Kerala Houseboat Packages: A Unique Experience
Kerala houseboat packages are designed to offer travelers a harmonious blend of traditional culture and modern comfort. While you can indulge in the timeless practice of fishing, you can also relax in the well-appointed interiors of your houseboat. Enjoy sumptuous Kerala cuisine prepared by skilled chefs using the freshest local ingredients. The dining experience on a houseboat is a culinary journey in itself, with flavors that will leave you craving for more.
Conclusion: A Memorable Journey
Fishing in Kerala houseboats is not just an activity; it's an immersive cultural experience that allows you to connect with the traditions and natural beauty of Kerala. It's a journey that combines the thrill of fishing with the tranquility of the backwaters, creating lasting memories of your visit to "God's Own Country." So, if you're seeking a unique and enriching travel experience, consider including a Kerala houseboat package in your itinerary and cast your line into the serene waters of this magical destination.
Kerala, known as "God's Own Country," is a land of enchanting beauty, diverse landscapes, and a rich cultural heritage. It's no wonder that Kerala tour packages have gained immense popularity among travelers seeking a blend of natural wonders, cultural experiences, and relaxation. Let's embark on a virtual journey to explore the amazing Kerala tour packages that offer an unforgettable adventure in this stunning South Indian state.
Backwater Bliss: Alleppey Houseboat Packages
One of the most iconic experiences in Kerala is cruising through its tranquil backwaters in a traditional houseboat. Alleppey, often called the "Venice of the East," is the epicenter of houseboat tourism. Alleppey houseboat packages offer travelers the chance to drift along serene lagoons, meandering canals, and lush paddy fields. These floating marvels provide a unique opportunity to savor traditional Kerala cuisine, witness daily life along the waterways, and enjoy the tranquility of the backwaters.
Hill Station Hideaway: Munnar Tour Packages
Munnar, a picturesque hill station nestled in the Western Ghats, is a haven for nature enthusiasts. Munnar tour packages take you through rolling hills covered in tea plantations, lush green valleys, and pristine waterfalls. Visitors can explore tea gardens, trek through the hills, and witness breathtaking sunsets from the highest peak in South India, Anamudi. Munnar offers the perfect escape from the hustle and bustle of city life.
Cultural Odyssey: Kochi (Cochin) Exploration
Kochi, a bustling port city, is a cultural melting pot where history and modernity coexist harmoniously. Kochi tour packages allow travelers to explore colonial-era architecture, vibrant markets, and rich cultural heritage. Iconic attractions like the Chinese fishing nets, the historic Mattancherry Palace, and the enchanting Jew Town offer a glimpse into the city's diverse influences and historical significance.
Wildlife and Adventure: Thekkady Packages
Thekkady, home to the famous Periyar National Park, is a destination for wildlife enthusiasts and adventure seekers. Thekkady packages offer jungle safaris, boat rides on Periyar Lake, and opportunities to explore spice plantations. Visitors can immerse themselves in nature, spot diverse wildlife, and enjoy the aroma of spices in the air. Thekkady is where the wild meets the serene.
Serenity by the Sea: Kovalam Beach Packages
Kovalam, with its crescent-shaped beaches and picturesque cliffs, is a popular beach destination in Kerala. Kovalam beach packages provide opportunities for sunbathing, water sports, and rejuvenating Ayurvedic treatments. The iconic lighthouse at Kovalam Beach offers panoramic views of the Arabian Sea. Kovalam is an ideal destination for travelers seeking sun, sea, and relaxation.
Pristine Beach Escapes: Varkala Getaways
Varkala, located along stunning cliffs overlooking the Arabian Sea, offers a unique beach experience. Varkala tour packages allow visitors to relax on the cliffside promenade, take in panoramic ocean views, and experience the therapeutic properties of the mineral-rich waters. The ancient Janardanaswamy Temple adds a touch of spirituality to this coastal paradise.
Offbeat Beauty: Wayanad Expeditions
Wayanad, located in the Western Ghats, is an offbeat destination known for its untouched natural beauty and wilderness. Wayanad tour packages offer lush forests, wildlife sanctuaries, and outdoor activities like trekking, wildlife safaris, and camping. Travelers can explore attractions like Edakkal Caves, Chembra Peak, and Banasura Sagar Dam. Wayanad is a hidden gem for those seeking an adventurous escape.
Backwaters and Birdlife: Kumarakom Retreats
Kumarakom, situated on the banks of Vembanad Lake, is an idyllic backwater destination known for its lush greenery and tranquil waters. Kumarakom tour packages provide the opportunity to explore the intricate labyrinth of canals, relax at luxurious lakeside resorts, and witness exotic bird species at the Kumarakom Bird Sanctuary. Kumarakom is an oasis of serenity.
Cultural Immersion: Kannur Cultural Experiences
Kannur, on the northern coast of Kerala, offers a rich cultural experience for travelers seeking historical sites and traditions. Kannur tour packages allow visitors to explore the St. Angelo Fort, enjoy the longest drive-in beach in India at Muzhappilangad Beach, and witness the vibrant Theyyam performances. Kannur showcases Kerala's diverse cultural and natural beauty.
Gateway to Kerala: Palakkad Excursions
Palakkad, often referred to as the "Gateway of Kerala," offers a blend of culture, history, and natural beauty.
Kerala, with its lush green landscapes, serene backwaters, and vibrant culture, is a treasure trove of natural wonders and unique experiences. Among its many captivating destinations, Munnar stands out as a picturesque hill station that has enchanted travelers for generations. While Munnar is famous for its tea plantations and scenic vistas, there's another adventure that adds a touch of wild charm to your Kerala tour packages – elephant safaris.
Munnar: The Jewel of Kerala
Nestled in the Western Ghats, Munnar is a hill station renowned for its rolling hills, mist-covered valleys, and emerald-green tea gardens. It's a place where nature reveals its most enchanting facets, making it a must-visit destination for travelers seeking a tranquil escape from the bustling world.
Elephant Safaris: A Unique Experience
One of the most distinctive features of Munnar's tourism scene is the opportunity to embark on elephant safaris. These gentle giants have been an integral part of Kerala's cultural heritage and have played various roles in the state's history, from labor to transportation. Today, they offer travelers an unforgettable way to explore the scenic beauty of Munnar.
A Majestic Ride:
Picture yourself seated atop an awe-inspiring elephant, gently swaying as it strides through the lush forests and tea plantations of Munnar. The elevated vantage point provides you with uninterrupted panoramic views of the surrounding landscape, and the experience is both thrilling and serene.
Exploring Tea Plantations:
Munnar is renowned for its tea estates that stretch across acres of pristine land. On an elephant safari, you can venture into these plantations, witnessing the meticulous process of tea cultivation up close. The fragrant aroma of tea leaves fills the air as you traverse the rolling hills, creating a sensory delight that's unique to Munnar.
Tranquil Nature Trails:
Elephant safaris take you on tranquil nature trails that are inaccessible by conventional means. The soothing sounds of nature, the melodious calls of birds, and the rustling of leaves create a symphony that accompanies you on your journey. It's a chance to immerse yourself fully in the serene beauty of Munnar.
Wildlife Encounters:
Munnar is home to a variety of wildlife, and while on an elephant safari, you may have the opportunity to spot some of these creatures in their natural habitat. From sambar deer to langur monkeys, the forests of Munnar are teeming with fascinating species.
Interaction with Elephants:
The elephant mahouts, or caretakers, are often happy to share their knowledge and stories about these magnificent animals. You can learn about the elephants' personalities, habits, and their role in Kerala's culture and daily life.
Responsible Tourism:
As you enjoy your elephant safari in Munnar, it's essential to choose tour operators that prioritize the welfare of their elephants. Responsible tourism ensures that the animals are treated with care, provided with proper nutrition and shelter, and not overworked.
Inclusion in Kerala Tour Packages:
Many Kerala tour packages include elephant safaris as part of their itineraries. Whether you're a nature enthusiast, a wildlife lover, or simply seeking a unique and memorable experience, adding an elephant safari in Munnar to your Kerala tour is an excellent choice.
Conclusion: A Memorable Journey with Elephants
Munnar's elephant safaris offer travelers a rare opportunity to connect with nature and these gentle giants in an authentic and unforgettable way. It's an adventure that combines the thrill of wildlife encounters with the serenity of nature trails, all while perched atop a majestic elephant.
So, when you plan your Kerala tour packages, consider including Munnar in your itinerary and take a ride on the wild side with an elephant safari. Let the beauty of Munnar and the gentle spirit of these remarkable creatures create lasting memories of your visit to this enchanting hill station in Kerala.
Trending Discussions on Build Tool
Could NOT find Boost (missing: python3) (found version "1.76.0") - CMake Windows
RCT-Folly error when using hermes with iOS
Getting wix toolset not installed error in azure devops upon building wixproj
Android Studio Disconnects From Physical Device
How to hack conda for Anaconda3 Python to ignore package dependencies? Modified conda-meta package JSON depends flag, but it's not enough
unable to install pyodbc using python 3.10 in windows 10
How to register QObject class in CMake with qt_add_qml_module?
Flutter does not include Native Debug Symbols
The function pointer is changing its own address
Running into an error when trying to pip install python-docx
QUESTION
Could NOT find Boost (missing: python3) (found version "1.76.0") - CMake Windows
Asked 2022-Mar-30 at 15:49I need help solving this cmake boost python3 find problem when trying to compile cv_bridge from ros2, which uses a build tool called colcon and in turn CMake. The colcon build error message:
1> colcon build --symlink-install --merge-install
2...
3--- stderr: cv_bridge
4 CMake Error at C:/Program Files/CMake/share/cmake-3.22/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
5 Could NOT find Boost (missing: python3) (found version "1.76.0")
6 Call Stack (most recent call first):
7 C:/Program Files/CMake/share/cmake-3.22/Modules/FindPackageHandleStandardArgs.cmake:594 (_FPHSA_FAILURE_MESSAGE)
8 C:/Program Files/CMake/share/cmake-3.22/Modules/FindBoost.cmake:2360 (find_package_handle_standard_args)
9 CMakeLists.txt:32 (find_package)
10
What I have tried:
- Installing different versions of boost: 1.58, 1.67, 1.76
- Adding to Boost_INCLUDE_DIRS the path to the boost libraries in the CMakeLists.txt of cv_bridge:
1> colcon build --symlink-install --merge-install
2...
3--- stderr: cv_bridge
4 CMake Error at C:/Program Files/CMake/share/cmake-3.22/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
5 Could NOT find Boost (missing: python3) (found version "1.76.0")
6 Call Stack (most recent call first):
7 C:/Program Files/CMake/share/cmake-3.22/Modules/FindPackageHandleStandardArgs.cmake:594 (_FPHSA_FAILURE_MESSAGE)
8 C:/Program Files/CMake/share/cmake-3.22/Modules/FindBoost.cmake:2360 (find_package_handle_standard_args)
9 CMakeLists.txt:32 (find_package)
10 if(NOT ANDROID)
11 find_package(PythonLibs)
12 list(APPEND Boost_INCLUDE_DIRS "C:/Program Files/boost/boost_1_76_0")
13 list(APPEND Boost_INCLUDE_DIRS "C:/Program Files/boost/boost_1_76_0/stage/lib")
14
- Renaming the
libboost_python38-vc142-mt-gd-x64-1_76.lib
tolibboost_python38.lib
andlibboost_python3.lib
- Compiling Boost from source with bootstrap.bat and b2 or installing with the zip file.
- Looked for answers here and elsewhere, which led me to tried things above
I have run out of ideas, please any help will be greatly appreciated!
ANSWER
Answered 2021-Dec-08 at 13:20I was able to solve it (after a few days of suffering) using precompiled Boost 1.74 and by changing the boost/python related parts of cv_bridge/CMakeLists.txt to:
1> colcon build --symlink-install --merge-install
2...
3--- stderr: cv_bridge
4 CMake Error at C:/Program Files/CMake/share/cmake-3.22/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
5 Could NOT find Boost (missing: python3) (found version "1.76.0")
6 Call Stack (most recent call first):
7 C:/Program Files/CMake/share/cmake-3.22/Modules/FindPackageHandleStandardArgs.cmake:594 (_FPHSA_FAILURE_MESSAGE)
8 C:/Program Files/CMake/share/cmake-3.22/Modules/FindBoost.cmake:2360 (find_package_handle_standard_args)
9 CMakeLists.txt:32 (find_package)
10 if(NOT ANDROID)
11 find_package(PythonLibs)
12 list(APPEND Boost_INCLUDE_DIRS "C:/Program Files/boost/boost_1_76_0")
13 list(APPEND Boost_INCLUDE_DIRS "C:/Program Files/boost/boost_1_76_0/stage/lib")
14...
15set(BOOST_ROOT <your/path/to/boost_1_74_0>)
16
17find_package (Python3 REQUIRED COMPONENTS Interpreter Development)
18if(NOT ANDROID)
19 find_package(Boost QUIET)
20 if(Boost_VERSION LESS 106500)
21 find_package(Boost REQUIRED python)
22 else()
23 # This is a bit of a hack to suppress a warning
24 # No header defined for python3; skipping header check
25 # Which should only affect Boost versions < 1.67
26 # Resolution for newer versions:
27 # https://gitlab.kitware.com/cmake/cmake/issues/16391
28 if (Boost_VERSION LESS 106700)
29 set(_Boost_PYTHON3_HEADERS "boost/python.hpp")
30 endif()
31 find_package(Boost COMPONENTS python${Python3_VERSION_MAJOR}.${Python3_VERSION_MINOR} REQUIRED)
32 endif()
33else()
34 find_package(Boost REQUIRED)
35endif()
36find_package(sensor_msgs REQUIRED)
37...
38
Do not forget to remove build and install folders before triggering colcon build again.
QUESTION
RCT-Folly error when using hermes with iOS
Asked 2022-Mar-20 at 03:32When enabling hermes in the Podfile and rebuilding the build it fails due to RCT-Folly. No idea what it does.
To re-initialise everything I use the following:
rm -rf node_modules && rm package-lock.json && npm install && cd ios && rm -rf Pods && rm Podfile.lock && pod deintegrate && pod setup && pod install && cd ..
I also start the metro bundler with:
npx react-native --reset-cache
Anyone has a solution?
The app uses react-native v0.64 and we want to have a better performance using hermes.
All information:
ios/Podfile
1require_relative '../node_modules/react-native/scripts/react_native_pods'
2require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'
3platform :ios, '10.0'
4
5target 'unblnd' do
6 config = use_native_modules!
7 use_react_native!(
8 :path => config[:reactNativePath],
9 :hermes_enabled => true
10 )
11
12 permissions_path = '../node_modules/react-native-permissions/ios'
13 pod 'Permission-BluetoothPeripheral', :path => "#{permissions_path}/BluetoothPeripheral"
14 pod 'Permission-Calendars', :path => "#{permissions_path}/Calendars"
15 pod 'Permission-Camera', :path => "#{permissions_path}/Camera"
16 pod 'Permission-Contacts', :path => "#{permissions_path}/Contacts"
17 pod 'Permission-FaceID', :path => "#{permissions_path}/FaceID"
18 pod 'Permission-LocationAlways', :path => "#{permissions_path}/LocationAlways"
19 pod 'Permission-LocationWhenInUse', :path => "#{permissions_path}/LocationWhenInUse"
20 pod 'Permission-MediaLibrary', :path => "#{permissions_path}/MediaLibrary"
21 pod 'Permission-Microphone', :path => "#{permissions_path}/Microphone"
22 pod 'Permission-Motion', :path => "#{permissions_path}/Motion"
23 pod 'Permission-Notifications', :path => "#{permissions_path}/Notifications"
24 pod 'Permission-PhotoLibrary', :path => "#{permissions_path}/PhotoLibrary"
25 pod 'Permission-Reminders', :path => "#{permissions_path}/Reminders"
26 pod 'Permission-Siri', :path => "#{permissions_path}/Siri"
27 pod 'Permission-SpeechRecognition', :path => "#{permissions_path}/SpeechRecognition"
28 pod 'Permission-StoreKit', :path => "#{permissions_path}/StoreKit"
29
30 pod 'Yoga', :path => '../node_modules/react-native/ReactCommon/yoga', :modular_headers => true
31
32 # add the Firebase pod for Google Analytics
33 pod 'Firebase/Analytics'
34 # add pods for any other desired Firebase products
35 # https://firebase.google.com/docs/ios/setup#available-pods
36
37
38 target 'unblndTests' do
39 inherit! :complete
40 # Pods for testing
41 end
42 # Enables Flipper.
43 #
44 # Note that if you have use_frameworks! enabled, Flipper will not work and
45 # you should disable these next few lines.
46 # flipper_pods()
47 # post_install do |installer|
48 # flipper_post_install(installer)
49 # end
50end
51
Terminal Output
1require_relative '../node_modules/react-native/scripts/react_native_pods'
2require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'
3platform :ios, '10.0'
4
5target 'unblnd' do
6 config = use_native_modules!
7 use_react_native!(
8 :path => config[:reactNativePath],
9 :hermes_enabled => true
10 )
11
12 permissions_path = '../node_modules/react-native-permissions/ios'
13 pod 'Permission-BluetoothPeripheral', :path => "#{permissions_path}/BluetoothPeripheral"
14 pod 'Permission-Calendars', :path => "#{permissions_path}/Calendars"
15 pod 'Permission-Camera', :path => "#{permissions_path}/Camera"
16 pod 'Permission-Contacts', :path => "#{permissions_path}/Contacts"
17 pod 'Permission-FaceID', :path => "#{permissions_path}/FaceID"
18 pod 'Permission-LocationAlways', :path => "#{permissions_path}/LocationAlways"
19 pod 'Permission-LocationWhenInUse', :path => "#{permissions_path}/LocationWhenInUse"
20 pod 'Permission-MediaLibrary', :path => "#{permissions_path}/MediaLibrary"
21 pod 'Permission-Microphone', :path => "#{permissions_path}/Microphone"
22 pod 'Permission-Motion', :path => "#{permissions_path}/Motion"
23 pod 'Permission-Notifications', :path => "#{permissions_path}/Notifications"
24 pod 'Permission-PhotoLibrary', :path => "#{permissions_path}/PhotoLibrary"
25 pod 'Permission-Reminders', :path => "#{permissions_path}/Reminders"
26 pod 'Permission-Siri', :path => "#{permissions_path}/Siri"
27 pod 'Permission-SpeechRecognition', :path => "#{permissions_path}/SpeechRecognition"
28 pod 'Permission-StoreKit', :path => "#{permissions_path}/StoreKit"
29
30 pod 'Yoga', :path => '../node_modules/react-native/ReactCommon/yoga', :modular_headers => true
31
32 # add the Firebase pod for Google Analytics
33 pod 'Firebase/Analytics'
34 # add pods for any other desired Firebase products
35 # https://firebase.google.com/docs/ios/setup#available-pods
36
37
38 target 'unblndTests' do
39 inherit! :complete
40 # Pods for testing
41 end
42 # Enables Flipper.
43 #
44 # Note that if you have use_frameworks! enabled, Flipper will not work and
45 # you should disable these next few lines.
46 # flipper_pods()
47 # post_install do |installer|
48 # flipper_post_install(installer)
49 # end
50end
51In file included from /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/RCT-Folly/folly/synchronization/DistributedMutex.cpp:17: In file included from /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/Headers/Private/RCT-Folly/folly/synchronization/DistributedMutex.h:352: /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/Headers/Private/RCT-Folly/folly/synchronization/DistributedMutex-inl.h:1051:5: error: 'atomic_notify_one<unsigned long>' is unavailable
52 atomic_notify_one(state);
53 ^ /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/Headers/Private/RCT-Folly/folly/synchronization/DistributedMutex-inl.h:1573:5: note: in instantiation of function template specialization 'folly::detail::distributed_mutex::wakeTimedWaiters<std::__1::atomic<unsigned long>>' requested here
54 wakeTimedWaiters(&state_, proxy.timedWaiters_);
55 ^ In file included from /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/RCT-Folly/folly/synchronization/DistributedMutex.cpp:17: In file included from /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/Headers/Private/RCT-Folly/folly/synchronization/DistributedMutex.h:19: In file included from /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/Headers/Private/RCT-Folly/folly/Optional.h:58: In file included from /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator14.5.sdk/usr/include/c++/v1/functional:504: In file included from /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator14.5.sdk/usr/include/c++/v1/memory:681: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator14.5.sdk/usr/include/c++/v1/atomic:2140:6: note: 'atomic_notify_one<unsigned long>' has been explicitly marked unavailable here void atomic_notify_one(atomic<_Tp>* __o) _NOEXCEPT
56 ^ 1 error generated.
57
58CompileC /Users/adriaandebolle/Library/Developer/Xcode/DerivedData/unblnd-cvaavakypguqqzftojmgjqbtdeij/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/RCT-Folly.build/Objects-normal/x86_64/Demangle-3c4c6b43c285d16c32230d6f0a7a76ce5af39228ed5c3beeaf7ed7d1344f76b0.o /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/RCT-Folly/folly/detail/Demangle.cpp normal x86_64 c++ com.apple.compilers.llvm.clang.1_0.compiler (in target 'RCT-Folly' from project 'Pods')
59
60...
61
62CompileC /Users/adriaandebolle/Library/Developer/Xcode/DerivedData/unblnd-cvaavakypguqqzftojmgjqbtdeij/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/RCT-Folly.build/Objects-normal/x86_64/Cursor.o /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/RCT-Folly/folly/io/Cursor.cpp normal x86_64 c++ com.apple.compilers.llvm.clang.1_0.compiler (in target 'RCT-Folly' from project 'Pods')
63 cd /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods
64 export LANG\=en_US.US-ASCII
65 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/
66
67...
68
69** BUILD FAILED **
70
71
72The following build commands failed: CompileC /Users/adriaandebolle/Library/Developer/Xcode/DerivedData/unblnd-cvaavakypguqqzftojmgjqbtdeij/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/RCT-Folly.build/Objects-normal/x86_64/DistributedMutex.o /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/RCT-Folly/folly/synchronization/DistributedMutex.cpp normal x86_64 c++ com.apple.compilers.llvm.clang.1_0.compiler (1 failure)
73
npx react-native info
1require_relative '../node_modules/react-native/scripts/react_native_pods'
2require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'
3platform :ios, '10.0'
4
5target 'unblnd' do
6 config = use_native_modules!
7 use_react_native!(
8 :path => config[:reactNativePath],
9 :hermes_enabled => true
10 )
11
12 permissions_path = '../node_modules/react-native-permissions/ios'
13 pod 'Permission-BluetoothPeripheral', :path => "#{permissions_path}/BluetoothPeripheral"
14 pod 'Permission-Calendars', :path => "#{permissions_path}/Calendars"
15 pod 'Permission-Camera', :path => "#{permissions_path}/Camera"
16 pod 'Permission-Contacts', :path => "#{permissions_path}/Contacts"
17 pod 'Permission-FaceID', :path => "#{permissions_path}/FaceID"
18 pod 'Permission-LocationAlways', :path => "#{permissions_path}/LocationAlways"
19 pod 'Permission-LocationWhenInUse', :path => "#{permissions_path}/LocationWhenInUse"
20 pod 'Permission-MediaLibrary', :path => "#{permissions_path}/MediaLibrary"
21 pod 'Permission-Microphone', :path => "#{permissions_path}/Microphone"
22 pod 'Permission-Motion', :path => "#{permissions_path}/Motion"
23 pod 'Permission-Notifications', :path => "#{permissions_path}/Notifications"
24 pod 'Permission-PhotoLibrary', :path => "#{permissions_path}/PhotoLibrary"
25 pod 'Permission-Reminders', :path => "#{permissions_path}/Reminders"
26 pod 'Permission-Siri', :path => "#{permissions_path}/Siri"
27 pod 'Permission-SpeechRecognition', :path => "#{permissions_path}/SpeechRecognition"
28 pod 'Permission-StoreKit', :path => "#{permissions_path}/StoreKit"
29
30 pod 'Yoga', :path => '../node_modules/react-native/ReactCommon/yoga', :modular_headers => true
31
32 # add the Firebase pod for Google Analytics
33 pod 'Firebase/Analytics'
34 # add pods for any other desired Firebase products
35 # https://firebase.google.com/docs/ios/setup#available-pods
36
37
38 target 'unblndTests' do
39 inherit! :complete
40 # Pods for testing
41 end
42 # Enables Flipper.
43 #
44 # Note that if you have use_frameworks! enabled, Flipper will not work and
45 # you should disable these next few lines.
46 # flipper_pods()
47 # post_install do |installer|
48 # flipper_post_install(installer)
49 # end
50end
51In file included from /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/RCT-Folly/folly/synchronization/DistributedMutex.cpp:17: In file included from /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/Headers/Private/RCT-Folly/folly/synchronization/DistributedMutex.h:352: /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/Headers/Private/RCT-Folly/folly/synchronization/DistributedMutex-inl.h:1051:5: error: 'atomic_notify_one<unsigned long>' is unavailable
52 atomic_notify_one(state);
53 ^ /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/Headers/Private/RCT-Folly/folly/synchronization/DistributedMutex-inl.h:1573:5: note: in instantiation of function template specialization 'folly::detail::distributed_mutex::wakeTimedWaiters<std::__1::atomic<unsigned long>>' requested here
54 wakeTimedWaiters(&state_, proxy.timedWaiters_);
55 ^ In file included from /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/RCT-Folly/folly/synchronization/DistributedMutex.cpp:17: In file included from /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/Headers/Private/RCT-Folly/folly/synchronization/DistributedMutex.h:19: In file included from /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/Headers/Private/RCT-Folly/folly/Optional.h:58: In file included from /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator14.5.sdk/usr/include/c++/v1/functional:504: In file included from /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator14.5.sdk/usr/include/c++/v1/memory:681: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator14.5.sdk/usr/include/c++/v1/atomic:2140:6: note: 'atomic_notify_one<unsigned long>' has been explicitly marked unavailable here void atomic_notify_one(atomic<_Tp>* __o) _NOEXCEPT
56 ^ 1 error generated.
57
58CompileC /Users/adriaandebolle/Library/Developer/Xcode/DerivedData/unblnd-cvaavakypguqqzftojmgjqbtdeij/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/RCT-Folly.build/Objects-normal/x86_64/Demangle-3c4c6b43c285d16c32230d6f0a7a76ce5af39228ed5c3beeaf7ed7d1344f76b0.o /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/RCT-Folly/folly/detail/Demangle.cpp normal x86_64 c++ com.apple.compilers.llvm.clang.1_0.compiler (in target 'RCT-Folly' from project 'Pods')
59
60...
61
62CompileC /Users/adriaandebolle/Library/Developer/Xcode/DerivedData/unblnd-cvaavakypguqqzftojmgjqbtdeij/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/RCT-Folly.build/Objects-normal/x86_64/Cursor.o /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/RCT-Folly/folly/io/Cursor.cpp normal x86_64 c++ com.apple.compilers.llvm.clang.1_0.compiler (in target 'RCT-Folly' from project 'Pods')
63 cd /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods
64 export LANG\=en_US.US-ASCII
65 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/
66
67...
68
69** BUILD FAILED **
70
71
72The following build commands failed: CompileC /Users/adriaandebolle/Library/Developer/Xcode/DerivedData/unblnd-cvaavakypguqqzftojmgjqbtdeij/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/RCT-Folly.build/Objects-normal/x86_64/DistributedMutex.o /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/RCT-Folly/folly/synchronization/DistributedMutex.cpp normal x86_64 c++ com.apple.compilers.llvm.clang.1_0.compiler (1 failure)
73System:
74 OS: macOS 11.4
75 CPU: (8) x64 Intel(R) Core(TM) i7-1068NG7 CPU @ 2.30GHz
76 Memory: 1.05 GB / 16.00 GB
77 Shell: 5.8 - /bin/zsh
78 Binaries:
79 Node: 14.17.0 - /usr/local/bin/node
80 Yarn: Not Found
81 npm: 6.14.13 - ~/htdocs/unblnd_app/node_modules/.bin/npm
82 Watchman: 4.9.0 - /usr/local/bin/watchman
83 Managers:
84 CocoaPods: 1.10.1 - /usr/local/bin/pod
85 SDKs:
86 iOS SDK:
87 Platforms: iOS 14.5, DriverKit 20.4, macOS 11.3, tvOS 14.5, watchOS 7.4
88 Android SDK:
89 API Levels: 28, 29
90 Build Tools: 28.0.3, 29.0.2, 29.0.3, 30.0.2
91 System Images: android-29 | Intel x86 Atom_64, android-29 | Google APIs Intel x86 Atom
92 Android NDK: Not Found
93 IDEs:
94 Android Studio: 4.2 AI-202.7660.26.42.7351085
95 Xcode: 12.5.1/12E507 - /usr/bin/xcodebuild
96 Languages:
97 Java: 1.8.0_265 - /usr/bin/javac
98 npmPackages:
99 @react-native-community/cli: Not Found
100 react: 17.0.1 => 17.0.1
101 react-native: 0.64.2 => 0.64.2
102 react-native-macos: Not Found
103 npmGlobalPackages:
104 *react-native*: Not Found
105
ANSWER
Answered 2021-Jul-23 at 16:11After lots of trial and error I found a working solution. It's a bit strange, but I had to enable Flipper. I did not find a way without it.
Thanks to this answer: https://github.com/facebook/react-native/issues/31179#issuecomment-831932941 I found out about fixing Pods.
This is my Podfile now:
1require_relative '../node_modules/react-native/scripts/react_native_pods'
2require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'
3platform :ios, '10.0'
4
5target 'unblnd' do
6 config = use_native_modules!
7 use_react_native!(
8 :path => config[:reactNativePath],
9 :hermes_enabled => true
10 )
11
12 permissions_path = '../node_modules/react-native-permissions/ios'
13 pod 'Permission-BluetoothPeripheral', :path => "#{permissions_path}/BluetoothPeripheral"
14 pod 'Permission-Calendars', :path => "#{permissions_path}/Calendars"
15 pod 'Permission-Camera', :path => "#{permissions_path}/Camera"
16 pod 'Permission-Contacts', :path => "#{permissions_path}/Contacts"
17 pod 'Permission-FaceID', :path => "#{permissions_path}/FaceID"
18 pod 'Permission-LocationAlways', :path => "#{permissions_path}/LocationAlways"
19 pod 'Permission-LocationWhenInUse', :path => "#{permissions_path}/LocationWhenInUse"
20 pod 'Permission-MediaLibrary', :path => "#{permissions_path}/MediaLibrary"
21 pod 'Permission-Microphone', :path => "#{permissions_path}/Microphone"
22 pod 'Permission-Motion', :path => "#{permissions_path}/Motion"
23 pod 'Permission-Notifications', :path => "#{permissions_path}/Notifications"
24 pod 'Permission-PhotoLibrary', :path => "#{permissions_path}/PhotoLibrary"
25 pod 'Permission-Reminders', :path => "#{permissions_path}/Reminders"
26 pod 'Permission-Siri', :path => "#{permissions_path}/Siri"
27 pod 'Permission-SpeechRecognition', :path => "#{permissions_path}/SpeechRecognition"
28 pod 'Permission-StoreKit', :path => "#{permissions_path}/StoreKit"
29
30 pod 'Yoga', :path => '../node_modules/react-native/ReactCommon/yoga', :modular_headers => true
31
32 # add the Firebase pod for Google Analytics
33 pod 'Firebase/Analytics'
34 # add pods for any other desired Firebase products
35 # https://firebase.google.com/docs/ios/setup#available-pods
36
37
38 target 'unblndTests' do
39 inherit! :complete
40 # Pods for testing
41 end
42 # Enables Flipper.
43 #
44 # Note that if you have use_frameworks! enabled, Flipper will not work and
45 # you should disable these next few lines.
46 # flipper_pods()
47 # post_install do |installer|
48 # flipper_post_install(installer)
49 # end
50end
51In file included from /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/RCT-Folly/folly/synchronization/DistributedMutex.cpp:17: In file included from /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/Headers/Private/RCT-Folly/folly/synchronization/DistributedMutex.h:352: /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/Headers/Private/RCT-Folly/folly/synchronization/DistributedMutex-inl.h:1051:5: error: 'atomic_notify_one<unsigned long>' is unavailable
52 atomic_notify_one(state);
53 ^ /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/Headers/Private/RCT-Folly/folly/synchronization/DistributedMutex-inl.h:1573:5: note: in instantiation of function template specialization 'folly::detail::distributed_mutex::wakeTimedWaiters<std::__1::atomic<unsigned long>>' requested here
54 wakeTimedWaiters(&state_, proxy.timedWaiters_);
55 ^ In file included from /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/RCT-Folly/folly/synchronization/DistributedMutex.cpp:17: In file included from /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/Headers/Private/RCT-Folly/folly/synchronization/DistributedMutex.h:19: In file included from /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/Headers/Private/RCT-Folly/folly/Optional.h:58: In file included from /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator14.5.sdk/usr/include/c++/v1/functional:504: In file included from /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator14.5.sdk/usr/include/c++/v1/memory:681: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator14.5.sdk/usr/include/c++/v1/atomic:2140:6: note: 'atomic_notify_one<unsigned long>' has been explicitly marked unavailable here void atomic_notify_one(atomic<_Tp>* __o) _NOEXCEPT
56 ^ 1 error generated.
57
58CompileC /Users/adriaandebolle/Library/Developer/Xcode/DerivedData/unblnd-cvaavakypguqqzftojmgjqbtdeij/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/RCT-Folly.build/Objects-normal/x86_64/Demangle-3c4c6b43c285d16c32230d6f0a7a76ce5af39228ed5c3beeaf7ed7d1344f76b0.o /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/RCT-Folly/folly/detail/Demangle.cpp normal x86_64 c++ com.apple.compilers.llvm.clang.1_0.compiler (in target 'RCT-Folly' from project 'Pods')
59
60...
61
62CompileC /Users/adriaandebolle/Library/Developer/Xcode/DerivedData/unblnd-cvaavakypguqqzftojmgjqbtdeij/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/RCT-Folly.build/Objects-normal/x86_64/Cursor.o /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/RCT-Folly/folly/io/Cursor.cpp normal x86_64 c++ com.apple.compilers.llvm.clang.1_0.compiler (in target 'RCT-Folly' from project 'Pods')
63 cd /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods
64 export LANG\=en_US.US-ASCII
65 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/
66
67...
68
69** BUILD FAILED **
70
71
72The following build commands failed: CompileC /Users/adriaandebolle/Library/Developer/Xcode/DerivedData/unblnd-cvaavakypguqqzftojmgjqbtdeij/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/RCT-Folly.build/Objects-normal/x86_64/DistributedMutex.o /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/RCT-Folly/folly/synchronization/DistributedMutex.cpp normal x86_64 c++ com.apple.compilers.llvm.clang.1_0.compiler (1 failure)
73System:
74 OS: macOS 11.4
75 CPU: (8) x64 Intel(R) Core(TM) i7-1068NG7 CPU @ 2.30GHz
76 Memory: 1.05 GB / 16.00 GB
77 Shell: 5.8 - /bin/zsh
78 Binaries:
79 Node: 14.17.0 - /usr/local/bin/node
80 Yarn: Not Found
81 npm: 6.14.13 - ~/htdocs/unblnd_app/node_modules/.bin/npm
82 Watchman: 4.9.0 - /usr/local/bin/watchman
83 Managers:
84 CocoaPods: 1.10.1 - /usr/local/bin/pod
85 SDKs:
86 iOS SDK:
87 Platforms: iOS 14.5, DriverKit 20.4, macOS 11.3, tvOS 14.5, watchOS 7.4
88 Android SDK:
89 API Levels: 28, 29
90 Build Tools: 28.0.3, 29.0.2, 29.0.3, 30.0.2
91 System Images: android-29 | Intel x86 Atom_64, android-29 | Google APIs Intel x86 Atom
92 Android NDK: Not Found
93 IDEs:
94 Android Studio: 4.2 AI-202.7660.26.42.7351085
95 Xcode: 12.5.1/12E507 - /usr/bin/xcodebuild
96 Languages:
97 Java: 1.8.0_265 - /usr/bin/javac
98 npmPackages:
99 @react-native-community/cli: Not Found
100 react: 17.0.1 => 17.0.1
101 react-native: 0.64.2 => 0.64.2
102 react-native-macos: Not Found
103 npmGlobalPackages:
104 *react-native*: Not Found
105 ...
106
107 # Enables Flipper.
108 #
109 # Note that if you have use_frameworks! enabled, Flipper will not work and
110 # you should disable these next few lines.
111 use_flipper!({ 'Flipper' => '0.87' })
112 post_install do |installer|
113 flipper_post_install(installer)
114
115 find_and_replace("Pods/Headers/Private/RCT-Folly/folly/synchronization/DistributedMutex-inl.h",
116 "atomic_notify_one(state)", "folly::atomic_notify_one(state)")
117
118 find_and_replace("Pods/Flipper-Folly/folly/synchronization/DistributedMutex-inl.h",
119 "atomic_wait_until(&state, previous | data, deadline)", "folly::atomic_wait_until(&state, previous | data, deadline)")
120 end
121
122 ...
123
QUESTION
Getting wix toolset not installed error in azure devops upon building wixproj
Asked 2022-Mar-09 at 18:58I am creating an MSI installer with Wix and wrote a task in the azure DevOps pipeline which builds the MSI solution file using MSBuild. When the code is pushed to remote the pipeline runs the task but my task returns the error saying WiX toolset is not installed hence the build fails. Though it is assured that the MSBuild task works as it is building other projects in the solution.
1##[error]Process 'MSBuild.exe' exited with code '1'.
2##[error][Path to wixproj](44,5): Error : The WiX Toolset v3.11 (or newer) build tools must be installed to build this project. To download the WiX Toolset, see http://wixtoolset.org/releases/
3
Is there any way to install Wix toolset using pipeline? Or any workaround which might help?
Please note that I am using a custom job pool if that might be a cause for this issue.
ANSWER
Answered 2022-Mar-09 at 18:02Check this article from the official wix documentation.
QUESTION
Android Studio Disconnects From Physical Device
Asked 2022-Mar-06 at 15:11Android Studio Bumblebee (2021.1.1) was released stably on 25 January 2022 bundled with a new Device Manager (accompanying new support for Android 11+ device debugging over WIFI). I jumped on this stable release, updating from Android Studio Arctic Fox (2020.3.1 Patch 4).
Unfortunately however, since updating, physical devices/handsets don't remain connected to Android Studio for the purpose of debugging. I can confirm that the issue was introduced from Android Studio Bumblebee onwards (occurring in Beta and Canary builds also). I've reproduced the issue on Android Studio Bumblebee (Stable), Chipmunk (Beta), and Dolphin (Canary), but Android Studio Arctic Fox (superseded Stable) continues to work just fine.
The issue occurs soon after opening Android Studio (Bumblebee+) with one of my physical devices connected. Everything appears fine initially and I may even have enough time to deploy my project to the handset, before the device disappears from Android Studio (as if I'd physically disconnected the USB cable from my computer or from the handset itself).
I've tried a fair few things in an attempt to determine a root cause. These include testing:
- With different USB cables.
- With different handsets (both varying makes and models).
- With various versions of the Android Studio IDE (as mentioned above).
- Plugging the USB cables into different USB ports on my computer.
- Rebooting handsets and my computer.
- Restarting Android Studio.
- Invalidating caches and restarting Android Studio.
adb kill-server
thenadb start-server
.- Revoking/reaccepting USB debugging authorization.
- Reinstalled build tools/platform tools, and ADB.
- A great number of further possibilities, to no avail.
I searched and read through remotely similar issues, including (but not limited to) these:
- Android Studio Arctic Fox (Adb) - Connected Devices are being disconnected after some time
- Android debugger continually disconnects
This particular comment in one of the above issues clued me onto a possible root cause:
I have been fighting for a few days with adb not seeing my device. After trying many other posted solutions, I discovered that the issue was with Chrome also trying to connect its debugger to a web view. If Chrome is connected using chrome://inspect, then adb seems to disconnect. Quitting Chrome resolves the issue. Then I can connect with Android Studio and then restart Chrome and reconnect. Hope this helps someone else.
However I've been unable to do anything with the above discovery, other than close Google Chrome, and hope for the best. Obviously this isn't an ideal solution. It appears as though the moment Google Chrome shows the connected physical device in the chrome://inspect/#devices page, the physical device promptly becomes unavailable through Android Studio.
I've jumped back to Android Studio Arctic Fox (2020.3.1 Patch 4) for the moment, however this brings with it other issues (my current core project targets the latest SDK version, which requires the updated IDE).
Absolutely any help with this would be insanely appreciated. I've exhausted just about every avenue that I can think of!
ANSWER
Answered 2022-Feb-01 at 17:29I solved the problem by disabling
Settings -> Build, Execution, Deployment -> Debugger -> "Enable adb mDNS for wireless debugging"
QUESTION
How to hack conda for Anaconda3 Python to ignore package dependencies? Modified conda-meta package JSON depends flag, but it's not enough
Asked 2022-Mar-03 at 23:39Alright I have a package Pythran
which is a Python to C++ (PYD module) complier. The package itself on conda-forge says it requires clang
and clangxx
. BUT I have MS Build Tools clang-12
already installed, so these packages are not used at all.
Now every time I go to conda install [package_name]
it tells me my environment is inconsistent, because I force removed the clang libraries I don't need (or want) via a:
1conda remove clang clangxx clang-13 --force
2
So I looked around a bit at the installation of things. And I found that there is a \Anaconda3\conda-meta\pythran-0.11.0-py39h832f523_0.json (note the name after the version changes)...
So I opened that file up, scrolled down to:
1conda remove clang clangxx clang-13 --force
2 "depends": [
3 "beniget 0.4.*",
4 "decorator",
5 "gast 0.5.*",
6 "numpy >=1.19.5,<2.0a0",
7 "ply >=3.4",
8 "python >=3.9,<3.10.0a0",
9 "python_abi 3.9.* *_cp39",
10 "xsimd >=8.0.5,<8.1"
11 ],
12
Which had these entries, which I manually removed:
1conda remove clang clangxx clang-13 --force
2 "depends": [
3 "beniget 0.4.*",
4 "decorator",
5 "gast 0.5.*",
6 "numpy >=1.19.5,<2.0a0",
7 "ply >=3.4",
8 "python >=3.9,<3.10.0a0",
9 "python_abi 3.9.* *_cp39",
10 "xsimd >=8.0.5,<8.1"
11 ],
12"clang",
13"clangxx",
14
So now when I go to run conda
it doesn't say my environment is inconsistent anymore. However, when I try to add a package, it insists on installing clang
, clang-13
, clangxx
.
Anyone have a way to completely remove these dependencies? I think maybe it's referring to files online rather than local, since I deleted those required libraries. I ran a command prompt: findstr /S /C:'clang' *
which is like calling grep from Linux. It shows all the files that reference clang
somewhere. It isn't referenced anywhere other than what I deleted already, hence my confusion.
Yes I understand these package managers like conda
are supposed to ensure your environment works. But I can compile Python to C++ to PYD (modules) no problem at all with these clang
libraries missing. Since I already have clang-12
in the path. This is more of an annoyance than anything else, as every package install / upgrade keeps wanting to install clang-13
libraries that aren't needed...
ANSWER
Answered 2022-Mar-01 at 00:36The cleaner solution is to create a dummy package that one can install as an indicator that the corresponding software is already available on the system. This is what Conda Forge provides for the mpich
package. Specifically, they provide an external build (see recipe), that one installs with
1conda remove clang clangxx clang-13 --force
2 "depends": [
3 "beniget 0.4.*",
4 "decorator",
5 "gast 0.5.*",
6 "numpy >=1.19.5,<2.0a0",
7 "ply >=3.4",
8 "python >=3.9,<3.10.0a0",
9 "python_abi 3.9.* *_cp39",
10 "xsimd >=8.0.5,<8.1"
11 ],
12"clang",
13"clangxx",
14conda install mpich=*=external_*
15
For custom configurations like what you want, create your own dummy version of the clang
and clangxx
packages that would satisfy the requirements and install them to the environment. Something like
meta.yaml
1conda remove clang clangxx clang-13 --force
2 "depends": [
3 "beniget 0.4.*",
4 "decorator",
5 "gast 0.5.*",
6 "numpy >=1.19.5,<2.0a0",
7 "ply >=3.4",
8 "python >=3.9,<3.10.0a0",
9 "python_abi 3.9.* *_cp39",
10 "xsimd >=8.0.5,<8.1"
11 ],
12"clang",
13"clangxx",
14conda install mpich=*=external_*
15{% set version = "12.0.1" %}
16{% set build = 0 %}
17
18package:
19 name: clang-dummies
20 version: {{ version }}
21
22build:
23 number: {{ build }}
24
25outputs:
26 - name: clang
27 string: external_{{ build }}
28 - name: clangxx
29 string: external_{{ build }}
30
31about:
32 license: GPL-3.0-only
33 summary: Dummy package for external clang(xx) compiler.
34
After building this (conda build .
), you can install these local versions with
1conda remove clang clangxx clang-13 --force
2 "depends": [
3 "beniget 0.4.*",
4 "decorator",
5 "gast 0.5.*",
6 "numpy >=1.19.5,<2.0a0",
7 "ply >=3.4",
8 "python >=3.9,<3.10.0a0",
9 "python_abi 3.9.* *_cp39",
10 "xsimd >=8.0.5,<8.1"
11 ],
12"clang",
13"clangxx",
14conda install mpich=*=external_*
15{% set version = "12.0.1" %}
16{% set build = 0 %}
17
18package:
19 name: clang-dummies
20 version: {{ version }}
21
22build:
23 number: {{ build }}
24
25outputs:
26 - name: clang
27 string: external_{{ build }}
28 - name: clangxx
29 string: external_{{ build }}
30
31about:
32 license: GPL-3.0-only
33 summary: Dummy package for external clang(xx) compiler.
34conda install --use-local clang=12=external* clangxx=12=external*
35
or upload them to a user Anaconda Cloud channel.
QUESTION
unable to install pyodbc using python 3.10 in windows 10
Asked 2022-Feb-24 at 20:07I get this Error when I try to install Pyodbc , I have already install visual studio and I have Microsoft Visual C++ 12 , 15-19 in my machine but still its giving this error.
1Running setup.py clean for pyodbc
2Failed to build pyodbc
3Installing collected packages: sqlparse, pytz, asgiref, pyodbc, Django, Pillow, mssql-django, django-crispy-forms
4 Running setup.py install for pyodbc ... error
5 ERROR: Command errored out with exit status 1:
6 command: 'C:\Users\Athar\Desktop\New folder\Project\HeatlhCare\venv\Scripts\python.exe' -u -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\\Users\\Athar\\AppData\\Local\\Temp\\pip-install-w0wwm18g\\pyodbc_61963e883a8543fea24a63b1c522bbea\\setup.py'"'"'; __file__='"'"'C:\\Users\\Athar\\AppData\\Local\\Temp\\pip-install-w0wwm18g\\pyodbc_61963e883a8543fea24a63b1c522bbea\\setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record 'C:\Users\Athar\AppData\Local\Temp\pip-record-t1td50y6\install-record.txt' --single-version-externally-managed --compile --install-headers 'C:\Users\Athar\Desktop\New folder\Project\HeatlhCare\venv\include\site\python3.10\pyodbc'
7 cwd: C:\Users\Athar\AppData\Local\Temp\pip-install-w0wwm18g\pyodbc_61963e883a8543fea24a63b1c522bbea\
8 Complete output (7 lines):
9 running install
10 C:\Users\Athar\Desktop\New folder\Project\HeatlhCare\venv\lib\site-packages\setuptools\command\install.py:34: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools.
11 warnings.warn(
12 running build
13 running build_ext
14 building 'pyodbc' extension
15 error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/
16 ----------------------------------------
17ERROR: Command errored out with exit status 1: 'C:\Users\Athar\Desktop\New folder\Project\HeatlhCare\venv\Scripts\python.exe' -u -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\\Users\\Athar\\AppData\\Local\\Temp\\pip-install-w0wwm18g\\pyodbc_61963e883a8543fea24a63b1c522bbea\\setup.py'"'"'; __file__='"'"'C:\\Users\\Athar\\AppData\\Local\\Temp\\pip-install-w0wwm18g\\pyodbc_61963e883a8543fea24a63b1c522bbea\\setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record 'C:\Users\Athar\AppData\Local\Temp\pip-record-t1td50y6\install-record.txt' --single-version-externally-managed --compile --install-headers 'C:\Users\Athar\Desktop\New folder\Project\HeatlhCare\venv\include\site\python3.10\pyodbc' Check the logs for full command output.
18
ANSWER
Answered 2021-Nov-12 at 13:38The current release of pyodbc (4.0.32) does not have pre-built wheel files for Python 3.10. The easiest way to get it installed at the moment is to download the appropriate wheel from
https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyodbc
and then install it. For example, if you are running 64-bit Python then you would download the 64-bit wheel and use
1Running setup.py clean for pyodbc
2Failed to build pyodbc
3Installing collected packages: sqlparse, pytz, asgiref, pyodbc, Django, Pillow, mssql-django, django-crispy-forms
4 Running setup.py install for pyodbc ... error
5 ERROR: Command errored out with exit status 1:
6 command: 'C:\Users\Athar\Desktop\New folder\Project\HeatlhCare\venv\Scripts\python.exe' -u -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\\Users\\Athar\\AppData\\Local\\Temp\\pip-install-w0wwm18g\\pyodbc_61963e883a8543fea24a63b1c522bbea\\setup.py'"'"'; __file__='"'"'C:\\Users\\Athar\\AppData\\Local\\Temp\\pip-install-w0wwm18g\\pyodbc_61963e883a8543fea24a63b1c522bbea\\setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record 'C:\Users\Athar\AppData\Local\Temp\pip-record-t1td50y6\install-record.txt' --single-version-externally-managed --compile --install-headers 'C:\Users\Athar\Desktop\New folder\Project\HeatlhCare\venv\include\site\python3.10\pyodbc'
7 cwd: C:\Users\Athar\AppData\Local\Temp\pip-install-w0wwm18g\pyodbc_61963e883a8543fea24a63b1c522bbea\
8 Complete output (7 lines):
9 running install
10 C:\Users\Athar\Desktop\New folder\Project\HeatlhCare\venv\lib\site-packages\setuptools\command\install.py:34: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools.
11 warnings.warn(
12 running build
13 running build_ext
14 building 'pyodbc' extension
15 error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/
16 ----------------------------------------
17ERROR: Command errored out with exit status 1: 'C:\Users\Athar\Desktop\New folder\Project\HeatlhCare\venv\Scripts\python.exe' -u -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\\Users\\Athar\\AppData\\Local\\Temp\\pip-install-w0wwm18g\\pyodbc_61963e883a8543fea24a63b1c522bbea\\setup.py'"'"'; __file__='"'"'C:\\Users\\Athar\\AppData\\Local\\Temp\\pip-install-w0wwm18g\\pyodbc_61963e883a8543fea24a63b1c522bbea\\setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record 'C:\Users\Athar\AppData\Local\Temp\pip-record-t1td50y6\install-record.txt' --single-version-externally-managed --compile --install-headers 'C:\Users\Athar\Desktop\New folder\Project\HeatlhCare\venv\include\site\python3.10\pyodbc' Check the logs for full command output.
18pip install pyodbc‑4.0.32‑cp310‑cp310‑win_amd64.whl
19
QUESTION
How to register QObject class in CMake with qt_add_qml_module?
Asked 2022-Feb-21 at 07:35I have a QObject
derived class Expense
that I use in QML like this.
1// main.qml
2Expense {
3 id: expenseManager
4 onExpenseCreated: {
5 // Do something
6 }
7}
8
The expense class has no UI components, it has some basic Signal and Slots for API communications.
1// main.qml
2Expense {
3 id: expenseManager
4 onExpenseCreated: {
5 // Do something
6 }
7}
8// expense.h
9
10#ifndef EXPENSE_H
11#define EXPENSE_H
12#include <QObject>
13#include <QString>
14
15#include "service.h"
16
17class Expense : public QObject
18{
19 Q_OBJECT
20
21private:
22 Service service;
23 void networkError();
24 bool buttonLock = false;
25
26public:
27 explicit Expense(QObject *parent = nullptr);
28
29
30public slots:
31 void createInvoice(QString item, float amount);
32
33signals:
34 void expenseCreated();
35
36};
37
38#endif // EXPENSE_H
39
I have used qmlRegisterType()
for registering Expense
type in QML. Below is how my main()
looks like.
1// main.qml
2Expense {
3 id: expenseManager
4 onExpenseCreated: {
5 // Do something
6 }
7}
8// expense.h
9
10#ifndef EXPENSE_H
11#define EXPENSE_H
12#include <QObject>
13#include <QString>
14
15#include "service.h"
16
17class Expense : public QObject
18{
19 Q_OBJECT
20
21private:
22 Service service;
23 void networkError();
24 bool buttonLock = false;
25
26public:
27 explicit Expense(QObject *parent = nullptr);
28
29
30public slots:
31 void createInvoice(QString item, float amount);
32
33signals:
34 void expenseCreated();
35
36};
37
38#endif // EXPENSE_H
39int main(int argc, char *argv[])
40{
41 QGuiApplication app(argc, argv);
42 ......
43
44
45 qmlRegisterType<Expense>("com.kadbyte.expense", 1, 0, "Expense");
46
47 ........
48 return app.exec();
49}
50
Everything working perfectly as it used to. But recently I have upgraded my project to QT6 with CMake as the build tool instead of QMake. In the docs I saw that we can use qt_add_qml_module
command in CMakeList.txt to register C++ Classes instead of qmlRegisterType()
, by adding QML_ELEMENT
macro to the QObject class.
But I can't understand how to do this, the documentation doesn't make sense as it uses qmake example (Link to docs) instead of CMake. Below is my CMakeLists.txt file
1// main.qml
2Expense {
3 id: expenseManager
4 onExpenseCreated: {
5 // Do something
6 }
7}
8// expense.h
9
10#ifndef EXPENSE_H
11#define EXPENSE_H
12#include <QObject>
13#include <QString>
14
15#include "service.h"
16
17class Expense : public QObject
18{
19 Q_OBJECT
20
21private:
22 Service service;
23 void networkError();
24 bool buttonLock = false;
25
26public:
27 explicit Expense(QObject *parent = nullptr);
28
29
30public slots:
31 void createInvoice(QString item, float amount);
32
33signals:
34 void expenseCreated();
35
36};
37
38#endif // EXPENSE_H
39int main(int argc, char *argv[])
40{
41 QGuiApplication app(argc, argv);
42 ......
43
44
45 qmlRegisterType<Expense>("com.kadbyte.expense", 1, 0, "Expense");
46
47 ........
48 return app.exec();
49}
50cmake_minimum_required(VERSION 3.16)
51
52project(Udyan VERSION 0.1 LANGUAGES CXX)
53
54set(CMAKE_AUTOMOC ON)
55set(CMAKE_CXX_STANDARD_REQUIRED ON)
56
57find_package(Qt6 6.2 COMPONENTS Quick REQUIRED)
58
59qt_add_executable(appUdyan
60 main.cpp
61 expense.h expense.cpp
62)
63
64qt_add_qml_module(appUdyan
65 URI Udyan
66 VERSION 1.0
67 QML_FILES qml/main.qml
68)
69
70set_target_properties(appUdyan PROPERTIES
71 MACOSX_BUNDLE_GUI_IDENTIFIER my.example.com
72 MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
73 MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
74 MACOSX_BUNDLE TRUE
75 WIN32_EXECUTABLE TRUE
76)
77
78target_compile_definitions(appUdyan
79 PRIVATE $<$<OR:$<CONFIG:Debug>,$<CONFIG:RelWithDebInfo>>:QT_QML_DEBUG>)
80
81target_link_libraries(appUdyan
82 PRIVATE Qt6::Quick)
83
So how to use qt_add_qml_module
to registering QObject class to use in QML?
Note: All the example I have given above is just an MRE and not my complete code.
ANSWER
Answered 2022-Feb-21 at 07:35You just need to add QML_ELEMENT
to your QObject-derived Expense
class's header and make sure you have moc enabled in your CMakeLists.txt. In application case it doesn't matter if the expense.h/cpp sources are included via qt_add_executable
or qt_add_qml_module
. I think it's clearer to add them to qt_add_qml_module
SOURCES. Then you just import module URI in you QML file. In the example below I'm printing out property value from Expense object in QML.
CMakeLists.txt
1// main.qml
2Expense {
3 id: expenseManager
4 onExpenseCreated: {
5 // Do something
6 }
7}
8// expense.h
9
10#ifndef EXPENSE_H
11#define EXPENSE_H
12#include <QObject>
13#include <QString>
14
15#include "service.h"
16
17class Expense : public QObject
18{
19 Q_OBJECT
20
21private:
22 Service service;
23 void networkError();
24 bool buttonLock = false;
25
26public:
27 explicit Expense(QObject *parent = nullptr);
28
29
30public slots:
31 void createInvoice(QString item, float amount);
32
33signals:
34 void expenseCreated();
35
36};
37
38#endif // EXPENSE_H
39int main(int argc, char *argv[])
40{
41 QGuiApplication app(argc, argv);
42 ......
43
44
45 qmlRegisterType<Expense>("com.kadbyte.expense", 1, 0, "Expense");
46
47 ........
48 return app.exec();
49}
50cmake_minimum_required(VERSION 3.16)
51
52project(Udyan VERSION 0.1 LANGUAGES CXX)
53
54set(CMAKE_AUTOMOC ON)
55set(CMAKE_CXX_STANDARD_REQUIRED ON)
56
57find_package(Qt6 6.2 COMPONENTS Quick REQUIRED)
58
59qt_add_executable(appUdyan
60 main.cpp
61 expense.h expense.cpp
62)
63
64qt_add_qml_module(appUdyan
65 URI Udyan
66 VERSION 1.0
67 QML_FILES qml/main.qml
68)
69
70set_target_properties(appUdyan PROPERTIES
71 MACOSX_BUNDLE_GUI_IDENTIFIER my.example.com
72 MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
73 MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
74 MACOSX_BUNDLE TRUE
75 WIN32_EXECUTABLE TRUE
76)
77
78target_compile_definitions(appUdyan
79 PRIVATE $<$<OR:$<CONFIG:Debug>,$<CONFIG:RelWithDebInfo>>:QT_QML_DEBUG>)
80
81target_link_libraries(appUdyan
82 PRIVATE Qt6::Quick)
83set(CMAKE_AUTOMOC ON)
84
85qt_add_qml_module(appUdyan
86 URI udyan
87 VERSION 1.0
88 QML_FILES
89 main.qml
90 SOURCES
91 expense.h
92 expense.cpp
93)
94
C++
1// main.qml
2Expense {
3 id: expenseManager
4 onExpenseCreated: {
5 // Do something
6 }
7}
8// expense.h
9
10#ifndef EXPENSE_H
11#define EXPENSE_H
12#include <QObject>
13#include <QString>
14
15#include "service.h"
16
17class Expense : public QObject
18{
19 Q_OBJECT
20
21private:
22 Service service;
23 void networkError();
24 bool buttonLock = false;
25
26public:
27 explicit Expense(QObject *parent = nullptr);
28
29
30public slots:
31 void createInvoice(QString item, float amount);
32
33signals:
34 void expenseCreated();
35
36};
37
38#endif // EXPENSE_H
39int main(int argc, char *argv[])
40{
41 QGuiApplication app(argc, argv);
42 ......
43
44
45 qmlRegisterType<Expense>("com.kadbyte.expense", 1, 0, "Expense");
46
47 ........
48 return app.exec();
49}
50cmake_minimum_required(VERSION 3.16)
51
52project(Udyan VERSION 0.1 LANGUAGES CXX)
53
54set(CMAKE_AUTOMOC ON)
55set(CMAKE_CXX_STANDARD_REQUIRED ON)
56
57find_package(Qt6 6.2 COMPONENTS Quick REQUIRED)
58
59qt_add_executable(appUdyan
60 main.cpp
61 expense.h expense.cpp
62)
63
64qt_add_qml_module(appUdyan
65 URI Udyan
66 VERSION 1.0
67 QML_FILES qml/main.qml
68)
69
70set_target_properties(appUdyan PROPERTIES
71 MACOSX_BUNDLE_GUI_IDENTIFIER my.example.com
72 MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
73 MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
74 MACOSX_BUNDLE TRUE
75 WIN32_EXECUTABLE TRUE
76)
77
78target_compile_definitions(appUdyan
79 PRIVATE $<$<OR:$<CONFIG:Debug>,$<CONFIG:RelWithDebInfo>>:QT_QML_DEBUG>)
80
81target_link_libraries(appUdyan
82 PRIVATE Qt6::Quick)
83set(CMAKE_AUTOMOC ON)
84
85qt_add_qml_module(appUdyan
86 URI udyan
87 VERSION 1.0
88 QML_FILES
89 main.qml
90 SOURCES
91 expense.h
92 expense.cpp
93)
94#include <QObject>
95#include <QtQml/qqmlregistration.h>
96
97class Expense : public QObject
98{
99 Q_OBJECT
100 QML_ELEMENT
101 Q_PROPERTY(int value READ value NOTIFY valueChanged)
102public:
103 explicit Expense(QObject *parent = nullptr);
104 int value() const;
105
106signals:
107 void valueChanged();
108
109private:
110 int m_value {5};
111};
112
QML:
1// main.qml
2Expense {
3 id: expenseManager
4 onExpenseCreated: {
5 // Do something
6 }
7}
8// expense.h
9
10#ifndef EXPENSE_H
11#define EXPENSE_H
12#include <QObject>
13#include <QString>
14
15#include "service.h"
16
17class Expense : public QObject
18{
19 Q_OBJECT
20
21private:
22 Service service;
23 void networkError();
24 bool buttonLock = false;
25
26public:
27 explicit Expense(QObject *parent = nullptr);
28
29
30public slots:
31 void createInvoice(QString item, float amount);
32
33signals:
34 void expenseCreated();
35
36};
37
38#endif // EXPENSE_H
39int main(int argc, char *argv[])
40{
41 QGuiApplication app(argc, argv);
42 ......
43
44
45 qmlRegisterType<Expense>("com.kadbyte.expense", 1, 0, "Expense");
46
47 ........
48 return app.exec();
49}
50cmake_minimum_required(VERSION 3.16)
51
52project(Udyan VERSION 0.1 LANGUAGES CXX)
53
54set(CMAKE_AUTOMOC ON)
55set(CMAKE_CXX_STANDARD_REQUIRED ON)
56
57find_package(Qt6 6.2 COMPONENTS Quick REQUIRED)
58
59qt_add_executable(appUdyan
60 main.cpp
61 expense.h expense.cpp
62)
63
64qt_add_qml_module(appUdyan
65 URI Udyan
66 VERSION 1.0
67 QML_FILES qml/main.qml
68)
69
70set_target_properties(appUdyan PROPERTIES
71 MACOSX_BUNDLE_GUI_IDENTIFIER my.example.com
72 MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
73 MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
74 MACOSX_BUNDLE TRUE
75 WIN32_EXECUTABLE TRUE
76)
77
78target_compile_definitions(appUdyan
79 PRIVATE $<$<OR:$<CONFIG:Debug>,$<CONFIG:RelWithDebInfo>>:QT_QML_DEBUG>)
80
81target_link_libraries(appUdyan
82 PRIVATE Qt6::Quick)
83set(CMAKE_AUTOMOC ON)
84
85qt_add_qml_module(appUdyan
86 URI udyan
87 VERSION 1.0
88 QML_FILES
89 main.qml
90 SOURCES
91 expense.h
92 expense.cpp
93)
94#include <QObject>
95#include <QtQml/qqmlregistration.h>
96
97class Expense : public QObject
98{
99 Q_OBJECT
100 QML_ELEMENT
101 Q_PROPERTY(int value READ value NOTIFY valueChanged)
102public:
103 explicit Expense(QObject *parent = nullptr);
104 int value() const;
105
106signals:
107 void valueChanged();
108
109private:
110 int m_value {5};
111};
112import QtQuick
113import udyan
114
115Window {
116 width: 640
117 height: 480
118 visible: true
119 title: qsTr("Hello World")
120
121 Expense {
122 id: expense
123 Component.onCompleted: console.log(expense.value)
124 }
125}
126
QUESTION
Flutter does not include Native Debug Symbols
Asked 2022-Feb-19 at 21:44Building my app using flutter on android studio, and when I upload my app bundle (made via flutter build appbundle
, the message pops up:
1Warning
2
3This App Bundle contains native code, and youve not uploaded debug symbols. We recommend you upload a symbol file to make your crashes and ANRs easier to analyze and debug. Learn More
4
I've tried every solution currently online to fix this. Every combination of the following:
these solutions:
- https://github.com/flutter/flutter/issues/60240#issuecomment-894683946
- https://github.com/flutter/flutter/issues/60240#issuecomment-917321657
- https://stackoverflow.com/a/63436935/5229301
- https://stackoverflow.com/a/64729294/5229301
- https://stackoverflow.com/a/70337587/5229301
Upgrading to Flutter 2.10.0
Upgrading to Android Studio Bumblebee | 2021.1.1 Patch 1 and clicking check for updates, to which it responds You already have the latest version of Android Studio and plugins installed.
Trying to check the gradle plugin version, but it's packaged into android studio, and I can't see the version nor an option to upgrade.
Upgrading Android SDK build tools to 33-rc1. via SDK manager
Installing NDK (Side-by-side) via SDK manager
Installing CMake via SDK manager
Adding ndk.dir=/home/jaden/Android/Sdk/ndk/23.1.7779620
to the local.properties file, even though that's apparently deprecated.
adding android.buildTypes.release.ndk.debugSymbolLevel = 'SYMBOL_TABLE'
to the bottom of my app/build.gradle.
from app/build.gradle:
1Warning
2
3This App Bundle contains native code, and youve not uploaded debug symbols. We recommend you upload a symbol file to make your crashes and ANRs easier to analyze and debug. Learn More
4android {
5 compileSdkVersion 31
6
7 ...
8
9 defaultConfig {
10 applicationId "app.(myapp)"
11 minSdkVersion 23
12 targetSdkVersion 31
13 versionCode flutterVersionCode.toInteger()
14 versionName flutterVersionName
15 }
16 ndkVersion "23.1.7779620"
17 buildTypes {
18 ...
19 release {
20 signingConfig signingConfigs.release
21 ndk {
22 debugSymbolLevel 'SYMBOL_TABLE'
23 }
24 }
25 }
26}
27
28
flutter doctor:
1Warning
2
3This App Bundle contains native code, and youve not uploaded debug symbols. We recommend you upload a symbol file to make your crashes and ANRs easier to analyze and debug. Learn More
4android {
5 compileSdkVersion 31
6
7 ...
8
9 defaultConfig {
10 applicationId "app.(myapp)"
11 minSdkVersion 23
12 targetSdkVersion 31
13 versionCode flutterVersionCode.toInteger()
14 versionName flutterVersionName
15 }
16 ndkVersion "23.1.7779620"
17 buildTypes {
18 ...
19 release {
20 signingConfig signingConfigs.release
21 ndk {
22 debugSymbolLevel 'SYMBOL_TABLE'
23 }
24 }
25 }
26}
27
28flutter doctor
29Doctor summary (to see all details, run flutter doctor -v):
30[✓] Flutter (Channel stable, 2.10.0, on Manjaro Linux 5.13.19-2-MANJARO, locale en_US.UTF-8)
31[✓] Android toolchain - develop for Android devices (Android SDK version 31.0.0)
32[✗] Chrome - develop for the web (Cannot find Chrome executable at google-chrome)
33 ! Cannot find Chrome. Try setting CHROME_EXECUTABLE to a Chrome executable.
34[✓] Android Studio (version 2021.1)
35[!] Connected device
36 ! No devices available
37[✓] HTTP Host Availability
38
39! Doctor found issues in 2 categories.
40
last lines of flutter build appbundle -v
:
1Warning
2
3This App Bundle contains native code, and youve not uploaded debug symbols. We recommend you upload a symbol file to make your crashes and ANRs easier to analyze and debug. Learn More
4android {
5 compileSdkVersion 31
6
7 ...
8
9 defaultConfig {
10 applicationId "app.(myapp)"
11 minSdkVersion 23
12 targetSdkVersion 31
13 versionCode flutterVersionCode.toInteger()
14 versionName flutterVersionName
15 }
16 ndkVersion "23.1.7779620"
17 buildTypes {
18 ...
19 release {
20 signingConfig signingConfigs.release
21 ndk {
22 debugSymbolLevel 'SYMBOL_TABLE'
23 }
24 }
25 }
26}
27
28flutter doctor
29Doctor summary (to see all details, run flutter doctor -v):
30[✓] Flutter (Channel stable, 2.10.0, on Manjaro Linux 5.13.19-2-MANJARO, locale en_US.UTF-8)
31[✓] Android toolchain - develop for Android devices (Android SDK version 31.0.0)
32[✗] Chrome - develop for the web (Cannot find Chrome executable at google-chrome)
33 ! Cannot find Chrome. Try setting CHROME_EXECUTABLE to a Chrome executable.
34[✓] Android Studio (version 2021.1)
35[!] Connected device
36 ! No devices available
37[✓] HTTP Host Availability
38
39! Doctor found issues in 2 categories.
40[ ] > Task :package_info_plus:generateReleaseBuildConfig UP-TO-DATE
41[ ] > Task :package_info_plus:parseReleaseLocalResources UP-TO-DATE
42[ ] > Task :package_info_plus:generateReleaseRFile UP-TO-DATE
43[ ] > Task :package_info_plus:javaPreCompileRelease UP-TO-DATE
44[ ] > Task :package_info_plus:compileReleaseJavaWithJavac UP-TO-DATE
45[ ] > Task :package_info_plus:mergeReleaseGeneratedProguardFiles UP-TO-DATE
46[ ] > Task :package_info_plus:exportReleaseConsumerProguardFiles UP-TO-DATE
47[ ] > Task :fluttertoast:compileReleaseAidl NO-SOURCE
48[ ] > Task :fluttertoast:generateReleaseBuildConfig UP-TO-DATE
49[ ] > Task :fluttertoast:parseReleaseLocalResources UP-TO-DATE
50[ ] > Task :fluttertoast:generateReleaseRFile UP-TO-DATE
51[ ] > Task :fluttertoast:compileReleaseKotlin UP-TO-DATE
52[ ] > Task :fluttertoast:javaPreCompileRelease UP-TO-DATE
53[ ] > Task :fluttertoast:compileReleaseJavaWithJavac UP-TO-DATE
54[ +97 ms] > Task :fluttertoast:mergeReleaseGeneratedProguardFiles UP-TO-DATE
55[ ] > Task :fluttertoast:exportReleaseConsumerProguardFiles UP-TO-DATE
56[ ] > Task :permission_handler:compileReleaseAidl NO-SOURCE
57[ ] > Task :permission_handler:generateReleaseBuildConfig UP-TO-DATE
58[ ] > Task :permission_handler:parseReleaseLocalResources UP-TO-DATE
59[ ] > Task :permission_handler:generateReleaseRFile UP-TO-DATE
60[ ] > Task :permission_handler:javaPreCompileRelease UP-TO-DATE
61[ ] > Task :permission_handler:compileReleaseJavaWithJavac UP-TO-DATE
62[ ] > Task :permission_handler:mergeReleaseGeneratedProguardFiles UP-TO-DATE
63[ ] > Task :permission_handler:exportReleaseConsumerProguardFiles UP-TO-DATE
64[ ] > Task :app:buildKotlinToolingMetadata UP-TO-DATE
65[ ] > Task :app:checkReleaseDuplicateClasses UP-TO-DATE
66[ ] > Task :app:compileReleaseAidl NO-SOURCE
67[ ] > Task :app:generateReleaseBuildConfig UP-TO-DATE
68[ ] > Task :cloud_firestore:writeReleaseAarMetadata UP-TO-DATE
69[ ] > Task :file_picker:writeReleaseAarMetadata UP-TO-DATE
70[ ] > Task :firebase_auth:writeReleaseAarMetadata UP-TO-DATE
71[ ] > Task :firebase_core:writeReleaseAarMetadata UP-TO-DATE
72[ ] > Task :flutter_fimber:writeReleaseAarMetadata UP-TO-DATE
73[ ] > Task :flutter_inappwebview:writeReleaseAarMetadata UP-TO-DATE
74[ ] > Task :flutter_keyboard_visibility:writeReleaseAarMetadata UP-TO-DATE
75[ ] > Task :flutter_plugin_android_lifecycle:writeReleaseAarMetadata UP-TO-DATE
76[ ] > Task :fluttertoast:writeReleaseAarMetadata UP-TO-DATE
77[ ] > Task :image_picker:writeReleaseAarMetadata UP-TO-DATE
78[ ] > Task :package_info_plus:writeReleaseAarMetadata UP-TO-DATE
79[ ] > Task :path_provider_android:writeReleaseAarMetadata UP-TO-DATE
80[ ] > Task :permission_handler:writeReleaseAarMetadata UP-TO-DATE
81[ ] > Task :share_plus:writeReleaseAarMetadata UP-TO-DATE
82[ ] > Task :shared_preferences_android:writeReleaseAarMetadata UP-TO-DATE
83[ ] > Task :url_launcher_android:writeReleaseAarMetadata UP-TO-DATE
84[ ] > Task :webview_flutter_android:writeReleaseAarMetadata UP-TO-DATE
85[ ] > Task :app:checkReleaseAarMetadata UP-TO-DATE
86[ +495 ms] > Task :app:copyFlutterAssetsRelease
87[ ] > Task :app:processReleaseManifestForPackage UP-TO-DATE
88[ ] > Task :app:processReleaseResources UP-TO-DATE
89[ ] > Task :cloud_firestore:bundleLibCompileToJarRelease UP-TO-DATE
90[ ] > Task :file_picker:bundleLibCompileToJarRelease UP-TO-DATE
91[ ] > Task :firebase_auth:bundleLibCompileToJarRelease UP-TO-DATE
92[ ] > Task :flutter_fimber:bundleLibCompileToJarRelease UP-TO-DATE
93[ ] > Task :flutter_inappwebview:bundleLibCompileToJarRelease UP-TO-DATE
94[ ] > Task :flutter_keyboard_visibility:bundleLibCompileToJarRelease UP-TO-DATE
95[ ] > Task :fluttertoast:bundleLibCompileToJarRelease UP-TO-DATE
96[ ] > Task :image_picker:bundleLibCompileToJarRelease UP-TO-DATE
97[ ] > Task :package_info_plus:bundleLibCompileToJarRelease UP-TO-DATE
98[ ] > Task :path_provider_android:bundleLibCompileToJarRelease UP-TO-DATE
99[ ] > Task :permission_handler:bundleLibCompileToJarRelease UP-TO-DATE
100[ ] > Task :share_plus:bundleLibCompileToJarRelease UP-TO-DATE
101[ ] > Task :shared_preferences_android:bundleLibCompileToJarRelease UP-TO-DATE
102[ ] > Task :url_launcher_android:bundleLibCompileToJarRelease UP-TO-DATE
103[ ] > Task :webview_flutter_android:bundleLibCompileToJarRelease UP-TO-DATE
104[ +96 ms] > Task :app:compileReleaseKotlin UP-TO-DATE
105[ ] > Task :app:javaPreCompileRelease UP-TO-DATE
106[ ] > Task :app:compileReleaseJavaWithJavac UP-TO-DATE
107[ ] > Task :app:extractProguardFiles UP-TO-DATE
108[ ] > Task :app:mergeReleaseGeneratedProguardFiles UP-TO-DATE
109[ ] > Task :app:processReleaseJavaRes NO-SOURCE
110[ ] > Task :cloud_firestore:processReleaseJavaRes NO-SOURCE
111[ ] > Task :cloud_firestore:bundleLibResRelease NO-SOURCE
112[ ] > Task :file_picker:processReleaseJavaRes NO-SOURCE
113[ ] > Task :file_picker:bundleLibResRelease NO-SOURCE
114[ ] > Task :firebase_auth:processReleaseJavaRes NO-SOURCE
115[ ] > Task :firebase_auth:bundleLibResRelease NO-SOURCE
116[ ] > Task :firebase_core:processReleaseJavaRes NO-SOURCE
117[ ] > Task :firebase_core:bundleLibResRelease NO-SOURCE
118[ ] > Task :flutter_fimber:processReleaseJavaRes NO-SOURCE
119[ ] > Task :flutter_fimber:bundleLibResRelease UP-TO-DATE
120[ ] > Task :flutter_inappwebview:processReleaseJavaRes NO-SOURCE
121[ ] > Task :flutter_inappwebview:bundleLibResRelease NO-SOURCE
122[ ] > Task :flutter_keyboard_visibility:processReleaseJavaRes NO-SOURCE
123[ ] > Task :flutter_keyboard_visibility:bundleLibResRelease NO-SOURCE
124[ ] > Task :flutter_plugin_android_lifecycle:processReleaseJavaRes NO-SOURCE
125[ ] > Task :flutter_plugin_android_lifecycle:bundleLibResRelease NO-SOURCE
126[ ] > Task :fluttertoast:processReleaseJavaRes NO-SOURCE
127[ ] > Task :fluttertoast:bundleLibResRelease UP-TO-DATE
128[ ] > Task :image_picker:processReleaseJavaRes NO-SOURCE
129[ ] > Task :image_picker:bundleLibResRelease NO-SOURCE
130[ ] > Task :package_info_plus:processReleaseJavaRes NO-SOURCE
131[ ] > Task :package_info_plus:bundleLibResRelease NO-SOURCE
132[ ] > Task :path_provider_android:processReleaseJavaRes NO-SOURCE
133[ ] > Task :path_provider_android:bundleLibResRelease NO-SOURCE
134[ ] > Task :permission_handler:processReleaseJavaRes NO-SOURCE
135[ ] > Task :permission_handler:bundleLibResRelease NO-SOURCE
136[ ] > Task :share_plus:processReleaseJavaRes NO-SOURCE
137[ ] > Task :share_plus:bundleLibResRelease NO-SOURCE
138[ ] > Task :shared_preferences_android:processReleaseJavaRes NO-SOURCE
139[ ] > Task :shared_preferences_android:bundleLibResRelease NO-SOURCE
140[ ] > Task :url_launcher_android:processReleaseJavaRes NO-SOURCE
141[ ] > Task :url_launcher_android:bundleLibResRelease NO-SOURCE
142[ ] > Task :webview_flutter_android:processReleaseJavaRes NO-SOURCE
143[ ] > Task :webview_flutter_android:bundleLibResRelease NO-SOURCE
144[ ] > Task :app:mergeReleaseJavaResource UP-TO-DATE
145[ ] > Task :cloud_firestore:bundleLibRuntimeToJarRelease UP-TO-DATE
146[ ] > Task :file_picker:bundleLibRuntimeToJarRelease UP-TO-DATE
147[ ] > Task :firebase_auth:bundleLibRuntimeToJarRelease UP-TO-DATE
148[ ] > Task :firebase_core:bundleLibRuntimeToJarRelease UP-TO-DATE
149[ ] > Task :flutter_fimber:bundleLibRuntimeToJarRelease UP-TO-DATE
150[ ] > Task :flutter_inappwebview:bundleLibRuntimeToJarRelease UP-TO-DATE
151[ ] > Task :flutter_keyboard_visibility:bundleLibRuntimeToJarRelease UP-TO-DATE
152[ ] > Task :flutter_plugin_android_lifecycle:bundleLibRuntimeToJarRelease UP-TO-DATE
153[ ] > Task :fluttertoast:bundleLibRuntimeToJarRelease UP-TO-DATE
154[ ] > Task :image_picker:bundleLibRuntimeToJarRelease UP-TO-DATE
155[ ] > Task :package_info_plus:bundleLibRuntimeToJarRelease UP-TO-DATE
156[ ] > Task :path_provider_android:bundleLibRuntimeToJarRelease UP-TO-DATE
157[ ] > Task :permission_handler:bundleLibRuntimeToJarRelease UP-TO-DATE
158[ ] > Task :share_plus:bundleLibRuntimeToJarRelease UP-TO-DATE
159[ ] > Task :shared_preferences_android:bundleLibRuntimeToJarRelease UP-TO-DATE
160[ ] > Task :url_launcher_android:bundleLibRuntimeToJarRelease UP-TO-DATE
161[ ] > Task :webview_flutter_android:bundleLibRuntimeToJarRelease UP-TO-DATE
162[ +172 ms] > Task :app:minifyReleaseWithR8 UP-TO-DATE
163[ ] > Task :app:mergeReleaseJniLibFolders UP-TO-DATE
164[ ] > Task :cloud_firestore:mergeReleaseJniLibFolders UP-TO-DATE
165[ ] > Task :cloud_firestore:mergeReleaseNativeLibs NO-SOURCE
166[ ] > Task :cloud_firestore:copyReleaseJniLibsProjectOnly UP-TO-DATE
167[ ] > Task :file_picker:mergeReleaseJniLibFolders UP-TO-DATE
168[ ] > Task :file_picker:mergeReleaseNativeLibs NO-SOURCE
169[ ] > Task :file_picker:copyReleaseJniLibsProjectOnly UP-TO-DATE
170[ ] > Task :firebase_auth:mergeReleaseJniLibFolders UP-TO-DATE
171[ ] > Task :firebase_auth:mergeReleaseNativeLibs NO-SOURCE
172[ ] > Task :firebase_auth:copyReleaseJniLibsProjectOnly UP-TO-DATE
173[ ] > Task :firebase_core:mergeReleaseJniLibFolders UP-TO-DATE
174[ ] > Task :firebase_core:mergeReleaseNativeLibs NO-SOURCE
175[ ] > Task :firebase_core:copyReleaseJniLibsProjectOnly UP-TO-DATE
176[ ] > Task :flutter_fimber:mergeReleaseJniLibFolders UP-TO-DATE
177[ ] > Task :flutter_fimber:mergeReleaseNativeLibs NO-SOURCE
178[ ] > Task :flutter_fimber:copyReleaseJniLibsProjectOnly UP-TO-DATE
179[ ] > Task :flutter_inappwebview:mergeReleaseJniLibFolders UP-TO-DATE
180[ ] > Task :flutter_inappwebview:mergeReleaseNativeLibs NO-SOURCE
181[ ] > Task :flutter_inappwebview:copyReleaseJniLibsProjectOnly UP-TO-DATE
182[ ] > Task :flutter_keyboard_visibility:mergeReleaseJniLibFolders UP-TO-DATE
183[ ] > Task :flutter_keyboard_visibility:mergeReleaseNativeLibs NO-SOURCE
184[ ] > Task :flutter_keyboard_visibility:copyReleaseJniLibsProjectOnly UP-TO-DATE
185[ ] > Task :flutter_plugin_android_lifecycle:mergeReleaseJniLibFolders UP-TO-DATE
186[ ] > Task :flutter_plugin_android_lifecycle:mergeReleaseNativeLibs NO-SOURCE
187[ ] > Task :flutter_plugin_android_lifecycle:copyReleaseJniLibsProjectOnly UP-TO-DATE
188[ ] > Task :fluttertoast:mergeReleaseJniLibFolders UP-TO-DATE
189[ ] > Task :fluttertoast:mergeReleaseNativeLibs NO-SOURCE
190[ ] > Task :fluttertoast:copyReleaseJniLibsProjectOnly UP-TO-DATE
191[ +16 ms] > Task :image_picker:mergeReleaseJniLibFolders UP-TO-DATE
192[ ] > Task :image_picker:mergeReleaseNativeLibs NO-SOURCE
193[ ] > Task :image_picker:copyReleaseJniLibsProjectOnly UP-TO-DATE
194[ ] > Task :package_info_plus:mergeReleaseJniLibFolders UP-TO-DATE
195[ ] > Task :package_info_plus:mergeReleaseNativeLibs NO-SOURCE
196[ ] > Task :package_info_plus:copyReleaseJniLibsProjectOnly UP-TO-DATE
197[ ] > Task :path_provider_android:mergeReleaseJniLibFolders UP-TO-DATE
198[ ] > Task :path_provider_android:mergeReleaseNativeLibs NO-SOURCE
199[ ] > Task :path_provider_android:copyReleaseJniLibsProjectOnly UP-TO-DATE
200[ +98 ms] > Task :permission_handler:mergeReleaseJniLibFolders UP-TO-DATE
201[ ] > Task :permission_handler:mergeReleaseNativeLibs NO-SOURCE
202[ ] > Task :permission_handler:copyReleaseJniLibsProjectOnly UP-TO-DATE
203[ ] > Task :share_plus:mergeReleaseJniLibFolders UP-TO-DATE
204[ ] > Task :share_plus:mergeReleaseNativeLibs NO-SOURCE
205[ ] > Task :share_plus:copyReleaseJniLibsProjectOnly UP-TO-DATE
206[ ] > Task :shared_preferences_android:mergeReleaseJniLibFolders UP-TO-DATE
207[ ] > Task :shared_preferences_android:mergeReleaseNativeLibs NO-SOURCE
208[ ] > Task :shared_preferences_android:copyReleaseJniLibsProjectOnly UP-TO-DATE
209[ ] > Task :url_launcher_android:mergeReleaseJniLibFolders UP-TO-DATE
210[ ] > Task :url_launcher_android:mergeReleaseNativeLibs NO-SOURCE
211[ ] > Task :url_launcher_android:copyReleaseJniLibsProjectOnly UP-TO-DATE
212[ ] > Task :webview_flutter_android:mergeReleaseJniLibFolders UP-TO-DATE
213[ ] > Task :webview_flutter_android:mergeReleaseNativeLibs NO-SOURCE
214[ +98 ms] > Task :webview_flutter_android:copyReleaseJniLibsProjectOnly UP-TO-DATE
215[ ] > Task :app:mergeReleaseNativeLibs UP-TO-DATE
216[ ] > Task :app:stripReleaseDebugSymbols UP-TO-DATE
217[+2799 ms] > Task :app:buildReleasePreBundle
218[ ] > Task :cloud_firestore:prepareReleaseArtProfile UP-TO-DATE
219[ ] > Task :file_picker:prepareReleaseArtProfile UP-TO-DATE
220[ ] > Task :firebase_auth:prepareReleaseArtProfile UP-TO-DATE
221[ ] > Task :firebase_core:prepareReleaseArtProfile UP-TO-DATE
222[ ] > Task :flutter_fimber:prepareReleaseArtProfile UP-TO-DATE
223[ ] > Task :flutter_inappwebview:prepareReleaseArtProfile UP-TO-DATE
224[ ] > Task :flutter_keyboard_visibility:prepareReleaseArtProfile UP-TO-DATE
225[ ] > Task :flutter_plugin_android_lifecycle:prepareReleaseArtProfile UP-TO-DATE
226[ ] > Task :fluttertoast:prepareReleaseArtProfile UP-TO-DATE
227[ ] > Task :image_picker:prepareReleaseArtProfile UP-TO-DATE
228[ ] > Task :package_info_plus:prepareReleaseArtProfile UP-TO-DATE
229[ ] > Task :path_provider_android:prepareReleaseArtProfile UP-TO-DATE
230[ ] > Task :permission_handler:prepareReleaseArtProfile UP-TO-DATE
231[ ] > Task :share_plus:prepareReleaseArtProfile UP-TO-DATE
232[ ] > Task :shared_preferences_android:prepareReleaseArtProfile UP-TO-DATE
233[ ] > Task :url_launcher_android:prepareReleaseArtProfile UP-TO-DATE
234[ ] > Task :webview_flutter_android:prepareReleaseArtProfile UP-TO-DATE
235[ ] > Task :app:mergeReleaseArtProfile UP-TO-DATE
236[ ] > Task :app:compileReleaseArtProfile UP-TO-DATE
237[ ] > Task :app:collectReleaseDependencies UP-TO-DATE
238[ ] > Task :app:configureReleaseDependencies UP-TO-DATE
239[ ] > Task :app:extractReleaseNativeSymbolTables UP-TO-DATE
240[ ] > Task :app:parseReleaseIntegrityConfig UP-TO-DATE
241[ ] > Task :app:writeReleaseAppMetadata UP-TO-DATE
242[ ] > Task :app:validateSigningRelease UP-TO-DATE
243[+3397 ms] > Task :app:packageReleaseBundle
244[+4398 ms] > Task :app:shrinkBundleReleaseResources
245[+5699 ms] > Task :app:signReleaseBundle
246[ ] > Task :app:produceReleaseBundleIdeListingFile
247[ ] > Task :app:createReleaseBundleListingFileRedirect
248[ ] > Task :app:bundleRelease
249[ +96 ms] Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0.
250[ ] You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.
251[ ] See https://docs.gradle.org/7.4/userguide/command_line_interface.html#sec:command_line_warnings
252[ ] BUILD SUCCESSFUL in 36s
253[ ] 375 actionable tasks: 11 executed, 364 up-to-date
254[ +397 ms] Running Gradle task 'bundleRelease'... (completed in 37.5s)
255[ +30 ms] ✓ Built build/app/outputs/bundle/release/app-release.aab (68.2MB).
256[ +5 ms] "flutter appbundle" took 39,072ms.
257[ +235 ms] ensureAnalyticsSent: 224ms
258[ +5 ms] Running shutdown hooks
259[ +1 ms] Shutdown hooks complete
260[ +3 ms] exiting with code 0
261
262
What's insane is that the flutter documentation for building and releasing an android app says absolutely nothing about including native debug symbols. That leads me to believe that for some reason, flutter should already be including them in the app bundle, but it's not. Does it have anything to do with obfuscating my code? I didn't obfuscate mine, but do I need to use the solutions described in there to pull out the native debug symbols?
Is this even supported? Should I just upload the app as-is without the feature? What am I supposed to do when I get unintelligible crash reports?
ANSWER
Answered 2022-Feb-19 at 21:44Turns out the problem is occurring, for some reason, due to my usage of gradle plugin 7.1.1. Changing classpath 'com.android.tools.build:gradle:7.1.1'
to 'classpath 'com.android.tools.build:gradle:4.1.3'` fixes my problem. The google play console recognizes the native debug symbols within the app bundle. It's unclear why, except within the app bundle, the directory BUNDLE-METADATA contains the directories:
Using 7.1.1:
1Warning
2
3This App Bundle contains native code, and youve not uploaded debug symbols. We recommend you upload a symbol file to make your crashes and ANRs easier to analyze and debug. Learn More
4android {
5 compileSdkVersion 31
6
7 ...
8
9 defaultConfig {
10 applicationId "app.(myapp)"
11 minSdkVersion 23
12 targetSdkVersion 31
13 versionCode flutterVersionCode.toInteger()
14 versionName flutterVersionName
15 }
16 ndkVersion "23.1.7779620"
17 buildTypes {
18 ...
19 release {
20 signingConfig signingConfigs.release
21 ndk {
22 debugSymbolLevel 'SYMBOL_TABLE'
23 }
24 }
25 }
26}
27
28flutter doctor
29Doctor summary (to see all details, run flutter doctor -v):
30[✓] Flutter (Channel stable, 2.10.0, on Manjaro Linux 5.13.19-2-MANJARO, locale en_US.UTF-8)
31[✓] Android toolchain - develop for Android devices (Android SDK version 31.0.0)
32[✗] Chrome - develop for the web (Cannot find Chrome executable at google-chrome)
33 ! Cannot find Chrome. Try setting CHROME_EXECUTABLE to a Chrome executable.
34[✓] Android Studio (version 2021.1)
35[!] Connected device
36 ! No devices available
37[✓] HTTP Host Availability
38
39! Doctor found issues in 2 categories.
40[ ] > Task :package_info_plus:generateReleaseBuildConfig UP-TO-DATE
41[ ] > Task :package_info_plus:parseReleaseLocalResources UP-TO-DATE
42[ ] > Task :package_info_plus:generateReleaseRFile UP-TO-DATE
43[ ] > Task :package_info_plus:javaPreCompileRelease UP-TO-DATE
44[ ] > Task :package_info_plus:compileReleaseJavaWithJavac UP-TO-DATE
45[ ] > Task :package_info_plus:mergeReleaseGeneratedProguardFiles UP-TO-DATE
46[ ] > Task :package_info_plus:exportReleaseConsumerProguardFiles UP-TO-DATE
47[ ] > Task :fluttertoast:compileReleaseAidl NO-SOURCE
48[ ] > Task :fluttertoast:generateReleaseBuildConfig UP-TO-DATE
49[ ] > Task :fluttertoast:parseReleaseLocalResources UP-TO-DATE
50[ ] > Task :fluttertoast:generateReleaseRFile UP-TO-DATE
51[ ] > Task :fluttertoast:compileReleaseKotlin UP-TO-DATE
52[ ] > Task :fluttertoast:javaPreCompileRelease UP-TO-DATE
53[ ] > Task :fluttertoast:compileReleaseJavaWithJavac UP-TO-DATE
54[ +97 ms] > Task :fluttertoast:mergeReleaseGeneratedProguardFiles UP-TO-DATE
55[ ] > Task :fluttertoast:exportReleaseConsumerProguardFiles UP-TO-DATE
56[ ] > Task :permission_handler:compileReleaseAidl NO-SOURCE
57[ ] > Task :permission_handler:generateReleaseBuildConfig UP-TO-DATE
58[ ] > Task :permission_handler:parseReleaseLocalResources UP-TO-DATE
59[ ] > Task :permission_handler:generateReleaseRFile UP-TO-DATE
60[ ] > Task :permission_handler:javaPreCompileRelease UP-TO-DATE
61[ ] > Task :permission_handler:compileReleaseJavaWithJavac UP-TO-DATE
62[ ] > Task :permission_handler:mergeReleaseGeneratedProguardFiles UP-TO-DATE
63[ ] > Task :permission_handler:exportReleaseConsumerProguardFiles UP-TO-DATE
64[ ] > Task :app:buildKotlinToolingMetadata UP-TO-DATE
65[ ] > Task :app:checkReleaseDuplicateClasses UP-TO-DATE
66[ ] > Task :app:compileReleaseAidl NO-SOURCE
67[ ] > Task :app:generateReleaseBuildConfig UP-TO-DATE
68[ ] > Task :cloud_firestore:writeReleaseAarMetadata UP-TO-DATE
69[ ] > Task :file_picker:writeReleaseAarMetadata UP-TO-DATE
70[ ] > Task :firebase_auth:writeReleaseAarMetadata UP-TO-DATE
71[ ] > Task :firebase_core:writeReleaseAarMetadata UP-TO-DATE
72[ ] > Task :flutter_fimber:writeReleaseAarMetadata UP-TO-DATE
73[ ] > Task :flutter_inappwebview:writeReleaseAarMetadata UP-TO-DATE
74[ ] > Task :flutter_keyboard_visibility:writeReleaseAarMetadata UP-TO-DATE
75[ ] > Task :flutter_plugin_android_lifecycle:writeReleaseAarMetadata UP-TO-DATE
76[ ] > Task :fluttertoast:writeReleaseAarMetadata UP-TO-DATE
77[ ] > Task :image_picker:writeReleaseAarMetadata UP-TO-DATE
78[ ] > Task :package_info_plus:writeReleaseAarMetadata UP-TO-DATE
79[ ] > Task :path_provider_android:writeReleaseAarMetadata UP-TO-DATE
80[ ] > Task :permission_handler:writeReleaseAarMetadata UP-TO-DATE
81[ ] > Task :share_plus:writeReleaseAarMetadata UP-TO-DATE
82[ ] > Task :shared_preferences_android:writeReleaseAarMetadata UP-TO-DATE
83[ ] > Task :url_launcher_android:writeReleaseAarMetadata UP-TO-DATE
84[ ] > Task :webview_flutter_android:writeReleaseAarMetadata UP-TO-DATE
85[ ] > Task :app:checkReleaseAarMetadata UP-TO-DATE
86[ +495 ms] > Task :app:copyFlutterAssetsRelease
87[ ] > Task :app:processReleaseManifestForPackage UP-TO-DATE
88[ ] > Task :app:processReleaseResources UP-TO-DATE
89[ ] > Task :cloud_firestore:bundleLibCompileToJarRelease UP-TO-DATE
90[ ] > Task :file_picker:bundleLibCompileToJarRelease UP-TO-DATE
91[ ] > Task :firebase_auth:bundleLibCompileToJarRelease UP-TO-DATE
92[ ] > Task :flutter_fimber:bundleLibCompileToJarRelease UP-TO-DATE
93[ ] > Task :flutter_inappwebview:bundleLibCompileToJarRelease UP-TO-DATE
94[ ] > Task :flutter_keyboard_visibility:bundleLibCompileToJarRelease UP-TO-DATE
95[ ] > Task :fluttertoast:bundleLibCompileToJarRelease UP-TO-DATE
96[ ] > Task :image_picker:bundleLibCompileToJarRelease UP-TO-DATE
97[ ] > Task :package_info_plus:bundleLibCompileToJarRelease UP-TO-DATE
98[ ] > Task :path_provider_android:bundleLibCompileToJarRelease UP-TO-DATE
99[ ] > Task :permission_handler:bundleLibCompileToJarRelease UP-TO-DATE
100[ ] > Task :share_plus:bundleLibCompileToJarRelease UP-TO-DATE
101[ ] > Task :shared_preferences_android:bundleLibCompileToJarRelease UP-TO-DATE
102[ ] > Task :url_launcher_android:bundleLibCompileToJarRelease UP-TO-DATE
103[ ] > Task :webview_flutter_android:bundleLibCompileToJarRelease UP-TO-DATE
104[ +96 ms] > Task :app:compileReleaseKotlin UP-TO-DATE
105[ ] > Task :app:javaPreCompileRelease UP-TO-DATE
106[ ] > Task :app:compileReleaseJavaWithJavac UP-TO-DATE
107[ ] > Task :app:extractProguardFiles UP-TO-DATE
108[ ] > Task :app:mergeReleaseGeneratedProguardFiles UP-TO-DATE
109[ ] > Task :app:processReleaseJavaRes NO-SOURCE
110[ ] > Task :cloud_firestore:processReleaseJavaRes NO-SOURCE
111[ ] > Task :cloud_firestore:bundleLibResRelease NO-SOURCE
112[ ] > Task :file_picker:processReleaseJavaRes NO-SOURCE
113[ ] > Task :file_picker:bundleLibResRelease NO-SOURCE
114[ ] > Task :firebase_auth:processReleaseJavaRes NO-SOURCE
115[ ] > Task :firebase_auth:bundleLibResRelease NO-SOURCE
116[ ] > Task :firebase_core:processReleaseJavaRes NO-SOURCE
117[ ] > Task :firebase_core:bundleLibResRelease NO-SOURCE
118[ ] > Task :flutter_fimber:processReleaseJavaRes NO-SOURCE
119[ ] > Task :flutter_fimber:bundleLibResRelease UP-TO-DATE
120[ ] > Task :flutter_inappwebview:processReleaseJavaRes NO-SOURCE
121[ ] > Task :flutter_inappwebview:bundleLibResRelease NO-SOURCE
122[ ] > Task :flutter_keyboard_visibility:processReleaseJavaRes NO-SOURCE
123[ ] > Task :flutter_keyboard_visibility:bundleLibResRelease NO-SOURCE
124[ ] > Task :flutter_plugin_android_lifecycle:processReleaseJavaRes NO-SOURCE
125[ ] > Task :flutter_plugin_android_lifecycle:bundleLibResRelease NO-SOURCE
126[ ] > Task :fluttertoast:processReleaseJavaRes NO-SOURCE
127[ ] > Task :fluttertoast:bundleLibResRelease UP-TO-DATE
128[ ] > Task :image_picker:processReleaseJavaRes NO-SOURCE
129[ ] > Task :image_picker:bundleLibResRelease NO-SOURCE
130[ ] > Task :package_info_plus:processReleaseJavaRes NO-SOURCE
131[ ] > Task :package_info_plus:bundleLibResRelease NO-SOURCE
132[ ] > Task :path_provider_android:processReleaseJavaRes NO-SOURCE
133[ ] > Task :path_provider_android:bundleLibResRelease NO-SOURCE
134[ ] > Task :permission_handler:processReleaseJavaRes NO-SOURCE
135[ ] > Task :permission_handler:bundleLibResRelease NO-SOURCE
136[ ] > Task :share_plus:processReleaseJavaRes NO-SOURCE
137[ ] > Task :share_plus:bundleLibResRelease NO-SOURCE
138[ ] > Task :shared_preferences_android:processReleaseJavaRes NO-SOURCE
139[ ] > Task :shared_preferences_android:bundleLibResRelease NO-SOURCE
140[ ] > Task :url_launcher_android:processReleaseJavaRes NO-SOURCE
141[ ] > Task :url_launcher_android:bundleLibResRelease NO-SOURCE
142[ ] > Task :webview_flutter_android:processReleaseJavaRes NO-SOURCE
143[ ] > Task :webview_flutter_android:bundleLibResRelease NO-SOURCE
144[ ] > Task :app:mergeReleaseJavaResource UP-TO-DATE
145[ ] > Task :cloud_firestore:bundleLibRuntimeToJarRelease UP-TO-DATE
146[ ] > Task :file_picker:bundleLibRuntimeToJarRelease UP-TO-DATE
147[ ] > Task :firebase_auth:bundleLibRuntimeToJarRelease UP-TO-DATE
148[ ] > Task :firebase_core:bundleLibRuntimeToJarRelease UP-TO-DATE
149[ ] > Task :flutter_fimber:bundleLibRuntimeToJarRelease UP-TO-DATE
150[ ] > Task :flutter_inappwebview:bundleLibRuntimeToJarRelease UP-TO-DATE
151[ ] > Task :flutter_keyboard_visibility:bundleLibRuntimeToJarRelease UP-TO-DATE
152[ ] > Task :flutter_plugin_android_lifecycle:bundleLibRuntimeToJarRelease UP-TO-DATE
153[ ] > Task :fluttertoast:bundleLibRuntimeToJarRelease UP-TO-DATE
154[ ] > Task :image_picker:bundleLibRuntimeToJarRelease UP-TO-DATE
155[ ] > Task :package_info_plus:bundleLibRuntimeToJarRelease UP-TO-DATE
156[ ] > Task :path_provider_android:bundleLibRuntimeToJarRelease UP-TO-DATE
157[ ] > Task :permission_handler:bundleLibRuntimeToJarRelease UP-TO-DATE
158[ ] > Task :share_plus:bundleLibRuntimeToJarRelease UP-TO-DATE
159[ ] > Task :shared_preferences_android:bundleLibRuntimeToJarRelease UP-TO-DATE
160[ ] > Task :url_launcher_android:bundleLibRuntimeToJarRelease UP-TO-DATE
161[ ] > Task :webview_flutter_android:bundleLibRuntimeToJarRelease UP-TO-DATE
162[ +172 ms] > Task :app:minifyReleaseWithR8 UP-TO-DATE
163[ ] > Task :app:mergeReleaseJniLibFolders UP-TO-DATE
164[ ] > Task :cloud_firestore:mergeReleaseJniLibFolders UP-TO-DATE
165[ ] > Task :cloud_firestore:mergeReleaseNativeLibs NO-SOURCE
166[ ] > Task :cloud_firestore:copyReleaseJniLibsProjectOnly UP-TO-DATE
167[ ] > Task :file_picker:mergeReleaseJniLibFolders UP-TO-DATE
168[ ] > Task :file_picker:mergeReleaseNativeLibs NO-SOURCE
169[ ] > Task :file_picker:copyReleaseJniLibsProjectOnly UP-TO-DATE
170[ ] > Task :firebase_auth:mergeReleaseJniLibFolders UP-TO-DATE
171[ ] > Task :firebase_auth:mergeReleaseNativeLibs NO-SOURCE
172[ ] > Task :firebase_auth:copyReleaseJniLibsProjectOnly UP-TO-DATE
173[ ] > Task :firebase_core:mergeReleaseJniLibFolders UP-TO-DATE
174[ ] > Task :firebase_core:mergeReleaseNativeLibs NO-SOURCE
175[ ] > Task :firebase_core:copyReleaseJniLibsProjectOnly UP-TO-DATE
176[ ] > Task :flutter_fimber:mergeReleaseJniLibFolders UP-TO-DATE
177[ ] > Task :flutter_fimber:mergeReleaseNativeLibs NO-SOURCE
178[ ] > Task :flutter_fimber:copyReleaseJniLibsProjectOnly UP-TO-DATE
179[ ] > Task :flutter_inappwebview:mergeReleaseJniLibFolders UP-TO-DATE
180[ ] > Task :flutter_inappwebview:mergeReleaseNativeLibs NO-SOURCE
181[ ] > Task :flutter_inappwebview:copyReleaseJniLibsProjectOnly UP-TO-DATE
182[ ] > Task :flutter_keyboard_visibility:mergeReleaseJniLibFolders UP-TO-DATE
183[ ] > Task :flutter_keyboard_visibility:mergeReleaseNativeLibs NO-SOURCE
184[ ] > Task :flutter_keyboard_visibility:copyReleaseJniLibsProjectOnly UP-TO-DATE
185[ ] > Task :flutter_plugin_android_lifecycle:mergeReleaseJniLibFolders UP-TO-DATE
186[ ] > Task :flutter_plugin_android_lifecycle:mergeReleaseNativeLibs NO-SOURCE
187[ ] > Task :flutter_plugin_android_lifecycle:copyReleaseJniLibsProjectOnly UP-TO-DATE
188[ ] > Task :fluttertoast:mergeReleaseJniLibFolders UP-TO-DATE
189[ ] > Task :fluttertoast:mergeReleaseNativeLibs NO-SOURCE
190[ ] > Task :fluttertoast:copyReleaseJniLibsProjectOnly UP-TO-DATE
191[ +16 ms] > Task :image_picker:mergeReleaseJniLibFolders UP-TO-DATE
192[ ] > Task :image_picker:mergeReleaseNativeLibs NO-SOURCE
193[ ] > Task :image_picker:copyReleaseJniLibsProjectOnly UP-TO-DATE
194[ ] > Task :package_info_plus:mergeReleaseJniLibFolders UP-TO-DATE
195[ ] > Task :package_info_plus:mergeReleaseNativeLibs NO-SOURCE
196[ ] > Task :package_info_plus:copyReleaseJniLibsProjectOnly UP-TO-DATE
197[ ] > Task :path_provider_android:mergeReleaseJniLibFolders UP-TO-DATE
198[ ] > Task :path_provider_android:mergeReleaseNativeLibs NO-SOURCE
199[ ] > Task :path_provider_android:copyReleaseJniLibsProjectOnly UP-TO-DATE
200[ +98 ms] > Task :permission_handler:mergeReleaseJniLibFolders UP-TO-DATE
201[ ] > Task :permission_handler:mergeReleaseNativeLibs NO-SOURCE
202[ ] > Task :permission_handler:copyReleaseJniLibsProjectOnly UP-TO-DATE
203[ ] > Task :share_plus:mergeReleaseJniLibFolders UP-TO-DATE
204[ ] > Task :share_plus:mergeReleaseNativeLibs NO-SOURCE
205[ ] > Task :share_plus:copyReleaseJniLibsProjectOnly UP-TO-DATE
206[ ] > Task :shared_preferences_android:mergeReleaseJniLibFolders UP-TO-DATE
207[ ] > Task :shared_preferences_android:mergeReleaseNativeLibs NO-SOURCE
208[ ] > Task :shared_preferences_android:copyReleaseJniLibsProjectOnly UP-TO-DATE
209[ ] > Task :url_launcher_android:mergeReleaseJniLibFolders UP-TO-DATE
210[ ] > Task :url_launcher_android:mergeReleaseNativeLibs NO-SOURCE
211[ ] > Task :url_launcher_android:copyReleaseJniLibsProjectOnly UP-TO-DATE
212[ ] > Task :webview_flutter_android:mergeReleaseJniLibFolders UP-TO-DATE
213[ ] > Task :webview_flutter_android:mergeReleaseNativeLibs NO-SOURCE
214[ +98 ms] > Task :webview_flutter_android:copyReleaseJniLibsProjectOnly UP-TO-DATE
215[ ] > Task :app:mergeReleaseNativeLibs UP-TO-DATE
216[ ] > Task :app:stripReleaseDebugSymbols UP-TO-DATE
217[+2799 ms] > Task :app:buildReleasePreBundle
218[ ] > Task :cloud_firestore:prepareReleaseArtProfile UP-TO-DATE
219[ ] > Task :file_picker:prepareReleaseArtProfile UP-TO-DATE
220[ ] > Task :firebase_auth:prepareReleaseArtProfile UP-TO-DATE
221[ ] > Task :firebase_core:prepareReleaseArtProfile UP-TO-DATE
222[ ] > Task :flutter_fimber:prepareReleaseArtProfile UP-TO-DATE
223[ ] > Task :flutter_inappwebview:prepareReleaseArtProfile UP-TO-DATE
224[ ] > Task :flutter_keyboard_visibility:prepareReleaseArtProfile UP-TO-DATE
225[ ] > Task :flutter_plugin_android_lifecycle:prepareReleaseArtProfile UP-TO-DATE
226[ ] > Task :fluttertoast:prepareReleaseArtProfile UP-TO-DATE
227[ ] > Task :image_picker:prepareReleaseArtProfile UP-TO-DATE
228[ ] > Task :package_info_plus:prepareReleaseArtProfile UP-TO-DATE
229[ ] > Task :path_provider_android:prepareReleaseArtProfile UP-TO-DATE
230[ ] > Task :permission_handler:prepareReleaseArtProfile UP-TO-DATE
231[ ] > Task :share_plus:prepareReleaseArtProfile UP-TO-DATE
232[ ] > Task :shared_preferences_android:prepareReleaseArtProfile UP-TO-DATE
233[ ] > Task :url_launcher_android:prepareReleaseArtProfile UP-TO-DATE
234[ ] > Task :webview_flutter_android:prepareReleaseArtProfile UP-TO-DATE
235[ ] > Task :app:mergeReleaseArtProfile UP-TO-DATE
236[ ] > Task :app:compileReleaseArtProfile UP-TO-DATE
237[ ] > Task :app:collectReleaseDependencies UP-TO-DATE
238[ ] > Task :app:configureReleaseDependencies UP-TO-DATE
239[ ] > Task :app:extractReleaseNativeSymbolTables UP-TO-DATE
240[ ] > Task :app:parseReleaseIntegrityConfig UP-TO-DATE
241[ ] > Task :app:writeReleaseAppMetadata UP-TO-DATE
242[ ] > Task :app:validateSigningRelease UP-TO-DATE
243[+3397 ms] > Task :app:packageReleaseBundle
244[+4398 ms] > Task :app:shrinkBundleReleaseResources
245[+5699 ms] > Task :app:signReleaseBundle
246[ ] > Task :app:produceReleaseBundleIdeListingFile
247[ ] > Task :app:createReleaseBundleListingFileRedirect
248[ ] > Task :app:bundleRelease
249[ +96 ms] Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0.
250[ ] You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.
251[ ] See https://docs.gradle.org/7.4/userguide/command_line_interface.html#sec:command_line_warnings
252[ ] BUILD SUCCESSFUL in 36s
253[ ] 375 actionable tasks: 11 executed, 364 up-to-date
254[ +397 ms] Running Gradle task 'bundleRelease'... (completed in 37.5s)
255[ +30 ms] ✓ Built build/app/outputs/bundle/release/app-release.aab (68.2MB).
256[ +5 ms] "flutter appbundle" took 39,072ms.
257[ +235 ms] ensureAnalyticsSent: 224ms
258[ +5 ms] Running shutdown hooks
259[ +1 ms] Shutdown hooks complete
260[ +3 ms] exiting with code 0
261
262com.android.tools.build.gradle
263com.android.tools.build.libraries
264com.android.tools.build.obfuscation
265
Using 4.1.3:
1Warning
2
3This App Bundle contains native code, and youve not uploaded debug symbols. We recommend you upload a symbol file to make your crashes and ANRs easier to analyze and debug. Learn More
4android {
5 compileSdkVersion 31
6
7 ...
8
9 defaultConfig {
10 applicationId "app.(myapp)"
11 minSdkVersion 23
12 targetSdkVersion 31
13 versionCode flutterVersionCode.toInteger()
14 versionName flutterVersionName
15 }
16 ndkVersion "23.1.7779620"
17 buildTypes {
18 ...
19 release {
20 signingConfig signingConfigs.release
21 ndk {
22 debugSymbolLevel 'SYMBOL_TABLE'
23 }
24 }
25 }
26}
27
28flutter doctor
29Doctor summary (to see all details, run flutter doctor -v):
30[✓] Flutter (Channel stable, 2.10.0, on Manjaro Linux 5.13.19-2-MANJARO, locale en_US.UTF-8)
31[✓] Android toolchain - develop for Android devices (Android SDK version 31.0.0)
32[✗] Chrome - develop for the web (Cannot find Chrome executable at google-chrome)
33 ! Cannot find Chrome. Try setting CHROME_EXECUTABLE to a Chrome executable.
34[✓] Android Studio (version 2021.1)
35[!] Connected device
36 ! No devices available
37[✓] HTTP Host Availability
38
39! Doctor found issues in 2 categories.
40[ ] > Task :package_info_plus:generateReleaseBuildConfig UP-TO-DATE
41[ ] > Task :package_info_plus:parseReleaseLocalResources UP-TO-DATE
42[ ] > Task :package_info_plus:generateReleaseRFile UP-TO-DATE
43[ ] > Task :package_info_plus:javaPreCompileRelease UP-TO-DATE
44[ ] > Task :package_info_plus:compileReleaseJavaWithJavac UP-TO-DATE
45[ ] > Task :package_info_plus:mergeReleaseGeneratedProguardFiles UP-TO-DATE
46[ ] > Task :package_info_plus:exportReleaseConsumerProguardFiles UP-TO-DATE
47[ ] > Task :fluttertoast:compileReleaseAidl NO-SOURCE
48[ ] > Task :fluttertoast:generateReleaseBuildConfig UP-TO-DATE
49[ ] > Task :fluttertoast:parseReleaseLocalResources UP-TO-DATE
50[ ] > Task :fluttertoast:generateReleaseRFile UP-TO-DATE
51[ ] > Task :fluttertoast:compileReleaseKotlin UP-TO-DATE
52[ ] > Task :fluttertoast:javaPreCompileRelease UP-TO-DATE
53[ ] > Task :fluttertoast:compileReleaseJavaWithJavac UP-TO-DATE
54[ +97 ms] > Task :fluttertoast:mergeReleaseGeneratedProguardFiles UP-TO-DATE
55[ ] > Task :fluttertoast:exportReleaseConsumerProguardFiles UP-TO-DATE
56[ ] > Task :permission_handler:compileReleaseAidl NO-SOURCE
57[ ] > Task :permission_handler:generateReleaseBuildConfig UP-TO-DATE
58[ ] > Task :permission_handler:parseReleaseLocalResources UP-TO-DATE
59[ ] > Task :permission_handler:generateReleaseRFile UP-TO-DATE
60[ ] > Task :permission_handler:javaPreCompileRelease UP-TO-DATE
61[ ] > Task :permission_handler:compileReleaseJavaWithJavac UP-TO-DATE
62[ ] > Task :permission_handler:mergeReleaseGeneratedProguardFiles UP-TO-DATE
63[ ] > Task :permission_handler:exportReleaseConsumerProguardFiles UP-TO-DATE
64[ ] > Task :app:buildKotlinToolingMetadata UP-TO-DATE
65[ ] > Task :app:checkReleaseDuplicateClasses UP-TO-DATE
66[ ] > Task :app:compileReleaseAidl NO-SOURCE
67[ ] > Task :app:generateReleaseBuildConfig UP-TO-DATE
68[ ] > Task :cloud_firestore:writeReleaseAarMetadata UP-TO-DATE
69[ ] > Task :file_picker:writeReleaseAarMetadata UP-TO-DATE
70[ ] > Task :firebase_auth:writeReleaseAarMetadata UP-TO-DATE
71[ ] > Task :firebase_core:writeReleaseAarMetadata UP-TO-DATE
72[ ] > Task :flutter_fimber:writeReleaseAarMetadata UP-TO-DATE
73[ ] > Task :flutter_inappwebview:writeReleaseAarMetadata UP-TO-DATE
74[ ] > Task :flutter_keyboard_visibility:writeReleaseAarMetadata UP-TO-DATE
75[ ] > Task :flutter_plugin_android_lifecycle:writeReleaseAarMetadata UP-TO-DATE
76[ ] > Task :fluttertoast:writeReleaseAarMetadata UP-TO-DATE
77[ ] > Task :image_picker:writeReleaseAarMetadata UP-TO-DATE
78[ ] > Task :package_info_plus:writeReleaseAarMetadata UP-TO-DATE
79[ ] > Task :path_provider_android:writeReleaseAarMetadata UP-TO-DATE
80[ ] > Task :permission_handler:writeReleaseAarMetadata UP-TO-DATE
81[ ] > Task :share_plus:writeReleaseAarMetadata UP-TO-DATE
82[ ] > Task :shared_preferences_android:writeReleaseAarMetadata UP-TO-DATE
83[ ] > Task :url_launcher_android:writeReleaseAarMetadata UP-TO-DATE
84[ ] > Task :webview_flutter_android:writeReleaseAarMetadata UP-TO-DATE
85[ ] > Task :app:checkReleaseAarMetadata UP-TO-DATE
86[ +495 ms] > Task :app:copyFlutterAssetsRelease
87[ ] > Task :app:processReleaseManifestForPackage UP-TO-DATE
88[ ] > Task :app:processReleaseResources UP-TO-DATE
89[ ] > Task :cloud_firestore:bundleLibCompileToJarRelease UP-TO-DATE
90[ ] > Task :file_picker:bundleLibCompileToJarRelease UP-TO-DATE
91[ ] > Task :firebase_auth:bundleLibCompileToJarRelease UP-TO-DATE
92[ ] > Task :flutter_fimber:bundleLibCompileToJarRelease UP-TO-DATE
93[ ] > Task :flutter_inappwebview:bundleLibCompileToJarRelease UP-TO-DATE
94[ ] > Task :flutter_keyboard_visibility:bundleLibCompileToJarRelease UP-TO-DATE
95[ ] > Task :fluttertoast:bundleLibCompileToJarRelease UP-TO-DATE
96[ ] > Task :image_picker:bundleLibCompileToJarRelease UP-TO-DATE
97[ ] > Task :package_info_plus:bundleLibCompileToJarRelease UP-TO-DATE
98[ ] > Task :path_provider_android:bundleLibCompileToJarRelease UP-TO-DATE
99[ ] > Task :permission_handler:bundleLibCompileToJarRelease UP-TO-DATE
100[ ] > Task :share_plus:bundleLibCompileToJarRelease UP-TO-DATE
101[ ] > Task :shared_preferences_android:bundleLibCompileToJarRelease UP-TO-DATE
102[ ] > Task :url_launcher_android:bundleLibCompileToJarRelease UP-TO-DATE
103[ ] > Task :webview_flutter_android:bundleLibCompileToJarRelease UP-TO-DATE
104[ +96 ms] > Task :app:compileReleaseKotlin UP-TO-DATE
105[ ] > Task :app:javaPreCompileRelease UP-TO-DATE
106[ ] > Task :app:compileReleaseJavaWithJavac UP-TO-DATE
107[ ] > Task :app:extractProguardFiles UP-TO-DATE
108[ ] > Task :app:mergeReleaseGeneratedProguardFiles UP-TO-DATE
109[ ] > Task :app:processReleaseJavaRes NO-SOURCE
110[ ] > Task :cloud_firestore:processReleaseJavaRes NO-SOURCE
111[ ] > Task :cloud_firestore:bundleLibResRelease NO-SOURCE
112[ ] > Task :file_picker:processReleaseJavaRes NO-SOURCE
113[ ] > Task :file_picker:bundleLibResRelease NO-SOURCE
114[ ] > Task :firebase_auth:processReleaseJavaRes NO-SOURCE
115[ ] > Task :firebase_auth:bundleLibResRelease NO-SOURCE
116[ ] > Task :firebase_core:processReleaseJavaRes NO-SOURCE
117[ ] > Task :firebase_core:bundleLibResRelease NO-SOURCE
118[ ] > Task :flutter_fimber:processReleaseJavaRes NO-SOURCE
119[ ] > Task :flutter_fimber:bundleLibResRelease UP-TO-DATE
120[ ] > Task :flutter_inappwebview:processReleaseJavaRes NO-SOURCE
121[ ] > Task :flutter_inappwebview:bundleLibResRelease NO-SOURCE
122[ ] > Task :flutter_keyboard_visibility:processReleaseJavaRes NO-SOURCE
123[ ] > Task :flutter_keyboard_visibility:bundleLibResRelease NO-SOURCE
124[ ] > Task :flutter_plugin_android_lifecycle:processReleaseJavaRes NO-SOURCE
125[ ] > Task :flutter_plugin_android_lifecycle:bundleLibResRelease NO-SOURCE
126[ ] > Task :fluttertoast:processReleaseJavaRes NO-SOURCE
127[ ] > Task :fluttertoast:bundleLibResRelease UP-TO-DATE
128[ ] > Task :image_picker:processReleaseJavaRes NO-SOURCE
129[ ] > Task :image_picker:bundleLibResRelease NO-SOURCE
130[ ] > Task :package_info_plus:processReleaseJavaRes NO-SOURCE
131[ ] > Task :package_info_plus:bundleLibResRelease NO-SOURCE
132[ ] > Task :path_provider_android:processReleaseJavaRes NO-SOURCE
133[ ] > Task :path_provider_android:bundleLibResRelease NO-SOURCE
134[ ] > Task :permission_handler:processReleaseJavaRes NO-SOURCE
135[ ] > Task :permission_handler:bundleLibResRelease NO-SOURCE
136[ ] > Task :share_plus:processReleaseJavaRes NO-SOURCE
137[ ] > Task :share_plus:bundleLibResRelease NO-SOURCE
138[ ] > Task :shared_preferences_android:processReleaseJavaRes NO-SOURCE
139[ ] > Task :shared_preferences_android:bundleLibResRelease NO-SOURCE
140[ ] > Task :url_launcher_android:processReleaseJavaRes NO-SOURCE
141[ ] > Task :url_launcher_android:bundleLibResRelease NO-SOURCE
142[ ] > Task :webview_flutter_android:processReleaseJavaRes NO-SOURCE
143[ ] > Task :webview_flutter_android:bundleLibResRelease NO-SOURCE
144[ ] > Task :app:mergeReleaseJavaResource UP-TO-DATE
145[ ] > Task :cloud_firestore:bundleLibRuntimeToJarRelease UP-TO-DATE
146[ ] > Task :file_picker:bundleLibRuntimeToJarRelease UP-TO-DATE
147[ ] > Task :firebase_auth:bundleLibRuntimeToJarRelease UP-TO-DATE
148[ ] > Task :firebase_core:bundleLibRuntimeToJarRelease UP-TO-DATE
149[ ] > Task :flutter_fimber:bundleLibRuntimeToJarRelease UP-TO-DATE
150[ ] > Task :flutter_inappwebview:bundleLibRuntimeToJarRelease UP-TO-DATE
151[ ] > Task :flutter_keyboard_visibility:bundleLibRuntimeToJarRelease UP-TO-DATE
152[ ] > Task :flutter_plugin_android_lifecycle:bundleLibRuntimeToJarRelease UP-TO-DATE
153[ ] > Task :fluttertoast:bundleLibRuntimeToJarRelease UP-TO-DATE
154[ ] > Task :image_picker:bundleLibRuntimeToJarRelease UP-TO-DATE
155[ ] > Task :package_info_plus:bundleLibRuntimeToJarRelease UP-TO-DATE
156[ ] > Task :path_provider_android:bundleLibRuntimeToJarRelease UP-TO-DATE
157[ ] > Task :permission_handler:bundleLibRuntimeToJarRelease UP-TO-DATE
158[ ] > Task :share_plus:bundleLibRuntimeToJarRelease UP-TO-DATE
159[ ] > Task :shared_preferences_android:bundleLibRuntimeToJarRelease UP-TO-DATE
160[ ] > Task :url_launcher_android:bundleLibRuntimeToJarRelease UP-TO-DATE
161[ ] > Task :webview_flutter_android:bundleLibRuntimeToJarRelease UP-TO-DATE
162[ +172 ms] > Task :app:minifyReleaseWithR8 UP-TO-DATE
163[ ] > Task :app:mergeReleaseJniLibFolders UP-TO-DATE
164[ ] > Task :cloud_firestore:mergeReleaseJniLibFolders UP-TO-DATE
165[ ] > Task :cloud_firestore:mergeReleaseNativeLibs NO-SOURCE
166[ ] > Task :cloud_firestore:copyReleaseJniLibsProjectOnly UP-TO-DATE
167[ ] > Task :file_picker:mergeReleaseJniLibFolders UP-TO-DATE
168[ ] > Task :file_picker:mergeReleaseNativeLibs NO-SOURCE
169[ ] > Task :file_picker:copyReleaseJniLibsProjectOnly UP-TO-DATE
170[ ] > Task :firebase_auth:mergeReleaseJniLibFolders UP-TO-DATE
171[ ] > Task :firebase_auth:mergeReleaseNativeLibs NO-SOURCE
172[ ] > Task :firebase_auth:copyReleaseJniLibsProjectOnly UP-TO-DATE
173[ ] > Task :firebase_core:mergeReleaseJniLibFolders UP-TO-DATE
174[ ] > Task :firebase_core:mergeReleaseNativeLibs NO-SOURCE
175[ ] > Task :firebase_core:copyReleaseJniLibsProjectOnly UP-TO-DATE
176[ ] > Task :flutter_fimber:mergeReleaseJniLibFolders UP-TO-DATE
177[ ] > Task :flutter_fimber:mergeReleaseNativeLibs NO-SOURCE
178[ ] > Task :flutter_fimber:copyReleaseJniLibsProjectOnly UP-TO-DATE
179[ ] > Task :flutter_inappwebview:mergeReleaseJniLibFolders UP-TO-DATE
180[ ] > Task :flutter_inappwebview:mergeReleaseNativeLibs NO-SOURCE
181[ ] > Task :flutter_inappwebview:copyReleaseJniLibsProjectOnly UP-TO-DATE
182[ ] > Task :flutter_keyboard_visibility:mergeReleaseJniLibFolders UP-TO-DATE
183[ ] > Task :flutter_keyboard_visibility:mergeReleaseNativeLibs NO-SOURCE
184[ ] > Task :flutter_keyboard_visibility:copyReleaseJniLibsProjectOnly UP-TO-DATE
185[ ] > Task :flutter_plugin_android_lifecycle:mergeReleaseJniLibFolders UP-TO-DATE
186[ ] > Task :flutter_plugin_android_lifecycle:mergeReleaseNativeLibs NO-SOURCE
187[ ] > Task :flutter_plugin_android_lifecycle:copyReleaseJniLibsProjectOnly UP-TO-DATE
188[ ] > Task :fluttertoast:mergeReleaseJniLibFolders UP-TO-DATE
189[ ] > Task :fluttertoast:mergeReleaseNativeLibs NO-SOURCE
190[ ] > Task :fluttertoast:copyReleaseJniLibsProjectOnly UP-TO-DATE
191[ +16 ms] > Task :image_picker:mergeReleaseJniLibFolders UP-TO-DATE
192[ ] > Task :image_picker:mergeReleaseNativeLibs NO-SOURCE
193[ ] > Task :image_picker:copyReleaseJniLibsProjectOnly UP-TO-DATE
194[ ] > Task :package_info_plus:mergeReleaseJniLibFolders UP-TO-DATE
195[ ] > Task :package_info_plus:mergeReleaseNativeLibs NO-SOURCE
196[ ] > Task :package_info_plus:copyReleaseJniLibsProjectOnly UP-TO-DATE
197[ ] > Task :path_provider_android:mergeReleaseJniLibFolders UP-TO-DATE
198[ ] > Task :path_provider_android:mergeReleaseNativeLibs NO-SOURCE
199[ ] > Task :path_provider_android:copyReleaseJniLibsProjectOnly UP-TO-DATE
200[ +98 ms] > Task :permission_handler:mergeReleaseJniLibFolders UP-TO-DATE
201[ ] > Task :permission_handler:mergeReleaseNativeLibs NO-SOURCE
202[ ] > Task :permission_handler:copyReleaseJniLibsProjectOnly UP-TO-DATE
203[ ] > Task :share_plus:mergeReleaseJniLibFolders UP-TO-DATE
204[ ] > Task :share_plus:mergeReleaseNativeLibs NO-SOURCE
205[ ] > Task :share_plus:copyReleaseJniLibsProjectOnly UP-TO-DATE
206[ ] > Task :shared_preferences_android:mergeReleaseJniLibFolders UP-TO-DATE
207[ ] > Task :shared_preferences_android:mergeReleaseNativeLibs NO-SOURCE
208[ ] > Task :shared_preferences_android:copyReleaseJniLibsProjectOnly UP-TO-DATE
209[ ] > Task :url_launcher_android:mergeReleaseJniLibFolders UP-TO-DATE
210[ ] > Task :url_launcher_android:mergeReleaseNativeLibs NO-SOURCE
211[ ] > Task :url_launcher_android:copyReleaseJniLibsProjectOnly UP-TO-DATE
212[ ] > Task :webview_flutter_android:mergeReleaseJniLibFolders UP-TO-DATE
213[ ] > Task :webview_flutter_android:mergeReleaseNativeLibs NO-SOURCE
214[ +98 ms] > Task :webview_flutter_android:copyReleaseJniLibsProjectOnly UP-TO-DATE
215[ ] > Task :app:mergeReleaseNativeLibs UP-TO-DATE
216[ ] > Task :app:stripReleaseDebugSymbols UP-TO-DATE
217[+2799 ms] > Task :app:buildReleasePreBundle
218[ ] > Task :cloud_firestore:prepareReleaseArtProfile UP-TO-DATE
219[ ] > Task :file_picker:prepareReleaseArtProfile UP-TO-DATE
220[ ] > Task :firebase_auth:prepareReleaseArtProfile UP-TO-DATE
221[ ] > Task :firebase_core:prepareReleaseArtProfile UP-TO-DATE
222[ ] > Task :flutter_fimber:prepareReleaseArtProfile UP-TO-DATE
223[ ] > Task :flutter_inappwebview:prepareReleaseArtProfile UP-TO-DATE
224[ ] > Task :flutter_keyboard_visibility:prepareReleaseArtProfile UP-TO-DATE
225[ ] > Task :flutter_plugin_android_lifecycle:prepareReleaseArtProfile UP-TO-DATE
226[ ] > Task :fluttertoast:prepareReleaseArtProfile UP-TO-DATE
227[ ] > Task :image_picker:prepareReleaseArtProfile UP-TO-DATE
228[ ] > Task :package_info_plus:prepareReleaseArtProfile UP-TO-DATE
229[ ] > Task :path_provider_android:prepareReleaseArtProfile UP-TO-DATE
230[ ] > Task :permission_handler:prepareReleaseArtProfile UP-TO-DATE
231[ ] > Task :share_plus:prepareReleaseArtProfile UP-TO-DATE
232[ ] > Task :shared_preferences_android:prepareReleaseArtProfile UP-TO-DATE
233[ ] > Task :url_launcher_android:prepareReleaseArtProfile UP-TO-DATE
234[ ] > Task :webview_flutter_android:prepareReleaseArtProfile UP-TO-DATE
235[ ] > Task :app:mergeReleaseArtProfile UP-TO-DATE
236[ ] > Task :app:compileReleaseArtProfile UP-TO-DATE
237[ ] > Task :app:collectReleaseDependencies UP-TO-DATE
238[ ] > Task :app:configureReleaseDependencies UP-TO-DATE
239[ ] > Task :app:extractReleaseNativeSymbolTables UP-TO-DATE
240[ ] > Task :app:parseReleaseIntegrityConfig UP-TO-DATE
241[ ] > Task :app:writeReleaseAppMetadata UP-TO-DATE
242[ ] > Task :app:validateSigningRelease UP-TO-DATE
243[+3397 ms] > Task :app:packageReleaseBundle
244[+4398 ms] > Task :app:shrinkBundleReleaseResources
245[+5699 ms] > Task :app:signReleaseBundle
246[ ] > Task :app:produceReleaseBundleIdeListingFile
247[ ] > Task :app:createReleaseBundleListingFileRedirect
248[ ] > Task :app:bundleRelease
249[ +96 ms] Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0.
250[ ] You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.
251[ ] See https://docs.gradle.org/7.4/userguide/command_line_interface.html#sec:command_line_warnings
252[ ] BUILD SUCCESSFUL in 36s
253[ ] 375 actionable tasks: 11 executed, 364 up-to-date
254[ +397 ms] Running Gradle task 'bundleRelease'... (completed in 37.5s)
255[ +30 ms] ✓ Built build/app/outputs/bundle/release/app-release.aab (68.2MB).
256[ +5 ms] "flutter appbundle" took 39,072ms.
257[ +235 ms] ensureAnalyticsSent: 224ms
258[ +5 ms] Running shutdown hooks
259[ +1 ms] Shutdown hooks complete
260[ +3 ms] exiting with code 0
261
262com.android.tools.build.gradle
263com.android.tools.build.libraries
264com.android.tools.build.obfuscation
265com.android.tools.build.debugsymbols
266com.android.tools.build.libraries
267com.android.tools.build.obfuscation
268
I've tried it with multiple versions of the android gradle plugin, and I can say that the problem occurs after android gradle plugin version 4.1.3. So my fix right now is to make android/build.gradle
have:
1Warning
2
3This App Bundle contains native code, and youve not uploaded debug symbols. We recommend you upload a symbol file to make your crashes and ANRs easier to analyze and debug. Learn More
4android {
5 compileSdkVersion 31
6
7 ...
8
9 defaultConfig {
10 applicationId "app.(myapp)"
11 minSdkVersion 23
12 targetSdkVersion 31
13 versionCode flutterVersionCode.toInteger()
14 versionName flutterVersionName
15 }
16 ndkVersion "23.1.7779620"
17 buildTypes {
18 ...
19 release {
20 signingConfig signingConfigs.release
21 ndk {
22 debugSymbolLevel 'SYMBOL_TABLE'
23 }
24 }
25 }
26}
27
28flutter doctor
29Doctor summary (to see all details, run flutter doctor -v):
30[✓] Flutter (Channel stable, 2.10.0, on Manjaro Linux 5.13.19-2-MANJARO, locale en_US.UTF-8)
31[✓] Android toolchain - develop for Android devices (Android SDK version 31.0.0)
32[✗] Chrome - develop for the web (Cannot find Chrome executable at google-chrome)
33 ! Cannot find Chrome. Try setting CHROME_EXECUTABLE to a Chrome executable.
34[✓] Android Studio (version 2021.1)
35[!] Connected device
36 ! No devices available
37[✓] HTTP Host Availability
38
39! Doctor found issues in 2 categories.
40[ ] > Task :package_info_plus:generateReleaseBuildConfig UP-TO-DATE
41[ ] > Task :package_info_plus:parseReleaseLocalResources UP-TO-DATE
42[ ] > Task :package_info_plus:generateReleaseRFile UP-TO-DATE
43[ ] > Task :package_info_plus:javaPreCompileRelease UP-TO-DATE
44[ ] > Task :package_info_plus:compileReleaseJavaWithJavac UP-TO-DATE
45[ ] > Task :package_info_plus:mergeReleaseGeneratedProguardFiles UP-TO-DATE
46[ ] > Task :package_info_plus:exportReleaseConsumerProguardFiles UP-TO-DATE
47[ ] > Task :fluttertoast:compileReleaseAidl NO-SOURCE
48[ ] > Task :fluttertoast:generateReleaseBuildConfig UP-TO-DATE
49[ ] > Task :fluttertoast:parseReleaseLocalResources UP-TO-DATE
50[ ] > Task :fluttertoast:generateReleaseRFile UP-TO-DATE
51[ ] > Task :fluttertoast:compileReleaseKotlin UP-TO-DATE
52[ ] > Task :fluttertoast:javaPreCompileRelease UP-TO-DATE
53[ ] > Task :fluttertoast:compileReleaseJavaWithJavac UP-TO-DATE
54[ +97 ms] > Task :fluttertoast:mergeReleaseGeneratedProguardFiles UP-TO-DATE
55[ ] > Task :fluttertoast:exportReleaseConsumerProguardFiles UP-TO-DATE
56[ ] > Task :permission_handler:compileReleaseAidl NO-SOURCE
57[ ] > Task :permission_handler:generateReleaseBuildConfig UP-TO-DATE
58[ ] > Task :permission_handler:parseReleaseLocalResources UP-TO-DATE
59[ ] > Task :permission_handler:generateReleaseRFile UP-TO-DATE
60[ ] > Task :permission_handler:javaPreCompileRelease UP-TO-DATE
61[ ] > Task :permission_handler:compileReleaseJavaWithJavac UP-TO-DATE
62[ ] > Task :permission_handler:mergeReleaseGeneratedProguardFiles UP-TO-DATE
63[ ] > Task :permission_handler:exportReleaseConsumerProguardFiles UP-TO-DATE
64[ ] > Task :app:buildKotlinToolingMetadata UP-TO-DATE
65[ ] > Task :app:checkReleaseDuplicateClasses UP-TO-DATE
66[ ] > Task :app:compileReleaseAidl NO-SOURCE
67[ ] > Task :app:generateReleaseBuildConfig UP-TO-DATE
68[ ] > Task :cloud_firestore:writeReleaseAarMetadata UP-TO-DATE
69[ ] > Task :file_picker:writeReleaseAarMetadata UP-TO-DATE
70[ ] > Task :firebase_auth:writeReleaseAarMetadata UP-TO-DATE
71[ ] > Task :firebase_core:writeReleaseAarMetadata UP-TO-DATE
72[ ] > Task :flutter_fimber:writeReleaseAarMetadata UP-TO-DATE
73[ ] > Task :flutter_inappwebview:writeReleaseAarMetadata UP-TO-DATE
74[ ] > Task :flutter_keyboard_visibility:writeReleaseAarMetadata UP-TO-DATE
75[ ] > Task :flutter_plugin_android_lifecycle:writeReleaseAarMetadata UP-TO-DATE
76[ ] > Task :fluttertoast:writeReleaseAarMetadata UP-TO-DATE
77[ ] > Task :image_picker:writeReleaseAarMetadata UP-TO-DATE
78[ ] > Task :package_info_plus:writeReleaseAarMetadata UP-TO-DATE
79[ ] > Task :path_provider_android:writeReleaseAarMetadata UP-TO-DATE
80[ ] > Task :permission_handler:writeReleaseAarMetadata UP-TO-DATE
81[ ] > Task :share_plus:writeReleaseAarMetadata UP-TO-DATE
82[ ] > Task :shared_preferences_android:writeReleaseAarMetadata UP-TO-DATE
83[ ] > Task :url_launcher_android:writeReleaseAarMetadata UP-TO-DATE
84[ ] > Task :webview_flutter_android:writeReleaseAarMetadata UP-TO-DATE
85[ ] > Task :app:checkReleaseAarMetadata UP-TO-DATE
86[ +495 ms] > Task :app:copyFlutterAssetsRelease
87[ ] > Task :app:processReleaseManifestForPackage UP-TO-DATE
88[ ] > Task :app:processReleaseResources UP-TO-DATE
89[ ] > Task :cloud_firestore:bundleLibCompileToJarRelease UP-TO-DATE
90[ ] > Task :file_picker:bundleLibCompileToJarRelease UP-TO-DATE
91[ ] > Task :firebase_auth:bundleLibCompileToJarRelease UP-TO-DATE
92[ ] > Task :flutter_fimber:bundleLibCompileToJarRelease UP-TO-DATE
93[ ] > Task :flutter_inappwebview:bundleLibCompileToJarRelease UP-TO-DATE
94[ ] > Task :flutter_keyboard_visibility:bundleLibCompileToJarRelease UP-TO-DATE
95[ ] > Task :fluttertoast:bundleLibCompileToJarRelease UP-TO-DATE
96[ ] > Task :image_picker:bundleLibCompileToJarRelease UP-TO-DATE
97[ ] > Task :package_info_plus:bundleLibCompileToJarRelease UP-TO-DATE
98[ ] > Task :path_provider_android:bundleLibCompileToJarRelease UP-TO-DATE
99[ ] > Task :permission_handler:bundleLibCompileToJarRelease UP-TO-DATE
100[ ] > Task :share_plus:bundleLibCompileToJarRelease UP-TO-DATE
101[ ] > Task :shared_preferences_android:bundleLibCompileToJarRelease UP-TO-DATE
102[ ] > Task :url_launcher_android:bundleLibCompileToJarRelease UP-TO-DATE
103[ ] > Task :webview_flutter_android:bundleLibCompileToJarRelease UP-TO-DATE
104[ +96 ms] > Task :app:compileReleaseKotlin UP-TO-DATE
105[ ] > Task :app:javaPreCompileRelease UP-TO-DATE
106[ ] > Task :app:compileReleaseJavaWithJavac UP-TO-DATE
107[ ] > Task :app:extractProguardFiles UP-TO-DATE
108[ ] > Task :app:mergeReleaseGeneratedProguardFiles UP-TO-DATE
109[ ] > Task :app:processReleaseJavaRes NO-SOURCE
110[ ] > Task :cloud_firestore:processReleaseJavaRes NO-SOURCE
111[ ] > Task :cloud_firestore:bundleLibResRelease NO-SOURCE
112[ ] > Task :file_picker:processReleaseJavaRes NO-SOURCE
113[ ] > Task :file_picker:bundleLibResRelease NO-SOURCE
114[ ] > Task :firebase_auth:processReleaseJavaRes NO-SOURCE
115[ ] > Task :firebase_auth:bundleLibResRelease NO-SOURCE
116[ ] > Task :firebase_core:processReleaseJavaRes NO-SOURCE
117[ ] > Task :firebase_core:bundleLibResRelease NO-SOURCE
118[ ] > Task :flutter_fimber:processReleaseJavaRes NO-SOURCE
119[ ] > Task :flutter_fimber:bundleLibResRelease UP-TO-DATE
120[ ] > Task :flutter_inappwebview:processReleaseJavaRes NO-SOURCE
121[ ] > Task :flutter_inappwebview:bundleLibResRelease NO-SOURCE
122[ ] > Task :flutter_keyboard_visibility:processReleaseJavaRes NO-SOURCE
123[ ] > Task :flutter_keyboard_visibility:bundleLibResRelease NO-SOURCE
124[ ] > Task :flutter_plugin_android_lifecycle:processReleaseJavaRes NO-SOURCE
125[ ] > Task :flutter_plugin_android_lifecycle:bundleLibResRelease NO-SOURCE
126[ ] > Task :fluttertoast:processReleaseJavaRes NO-SOURCE
127[ ] > Task :fluttertoast:bundleLibResRelease UP-TO-DATE
128[ ] > Task :image_picker:processReleaseJavaRes NO-SOURCE
129[ ] > Task :image_picker:bundleLibResRelease NO-SOURCE
130[ ] > Task :package_info_plus:processReleaseJavaRes NO-SOURCE
131[ ] > Task :package_info_plus:bundleLibResRelease NO-SOURCE
132[ ] > Task :path_provider_android:processReleaseJavaRes NO-SOURCE
133[ ] > Task :path_provider_android:bundleLibResRelease NO-SOURCE
134[ ] > Task :permission_handler:processReleaseJavaRes NO-SOURCE
135[ ] > Task :permission_handler:bundleLibResRelease NO-SOURCE
136[ ] > Task :share_plus:processReleaseJavaRes NO-SOURCE
137[ ] > Task :share_plus:bundleLibResRelease NO-SOURCE
138[ ] > Task :shared_preferences_android:processReleaseJavaRes NO-SOURCE
139[ ] > Task :shared_preferences_android:bundleLibResRelease NO-SOURCE
140[ ] > Task :url_launcher_android:processReleaseJavaRes NO-SOURCE
141[ ] > Task :url_launcher_android:bundleLibResRelease NO-SOURCE
142[ ] > Task :webview_flutter_android:processReleaseJavaRes NO-SOURCE
143[ ] > Task :webview_flutter_android:bundleLibResRelease NO-SOURCE
144[ ] > Task :app:mergeReleaseJavaResource UP-TO-DATE
145[ ] > Task :cloud_firestore:bundleLibRuntimeToJarRelease UP-TO-DATE
146[ ] > Task :file_picker:bundleLibRuntimeToJarRelease UP-TO-DATE
147[ ] > Task :firebase_auth:bundleLibRuntimeToJarRelease UP-TO-DATE
148[ ] > Task :firebase_core:bundleLibRuntimeToJarRelease UP-TO-DATE
149[ ] > Task :flutter_fimber:bundleLibRuntimeToJarRelease UP-TO-DATE
150[ ] > Task :flutter_inappwebview:bundleLibRuntimeToJarRelease UP-TO-DATE
151[ ] > Task :flutter_keyboard_visibility:bundleLibRuntimeToJarRelease UP-TO-DATE
152[ ] > Task :flutter_plugin_android_lifecycle:bundleLibRuntimeToJarRelease UP-TO-DATE
153[ ] > Task :fluttertoast:bundleLibRuntimeToJarRelease UP-TO-DATE
154[ ] > Task :image_picker:bundleLibRuntimeToJarRelease UP-TO-DATE
155[ ] > Task :package_info_plus:bundleLibRuntimeToJarRelease UP-TO-DATE
156[ ] > Task :path_provider_android:bundleLibRuntimeToJarRelease UP-TO-DATE
157[ ] > Task :permission_handler:bundleLibRuntimeToJarRelease UP-TO-DATE
158[ ] > Task :share_plus:bundleLibRuntimeToJarRelease UP-TO-DATE
159[ ] > Task :shared_preferences_android:bundleLibRuntimeToJarRelease UP-TO-DATE
160[ ] > Task :url_launcher_android:bundleLibRuntimeToJarRelease UP-TO-DATE
161[ ] > Task :webview_flutter_android:bundleLibRuntimeToJarRelease UP-TO-DATE
162[ +172 ms] > Task :app:minifyReleaseWithR8 UP-TO-DATE
163[ ] > Task :app:mergeReleaseJniLibFolders UP-TO-DATE
164[ ] > Task :cloud_firestore:mergeReleaseJniLibFolders UP-TO-DATE
165[ ] > Task :cloud_firestore:mergeReleaseNativeLibs NO-SOURCE
166[ ] > Task :cloud_firestore:copyReleaseJniLibsProjectOnly UP-TO-DATE
167[ ] > Task :file_picker:mergeReleaseJniLibFolders UP-TO-DATE
168[ ] > Task :file_picker:mergeReleaseNativeLibs NO-SOURCE
169[ ] > Task :file_picker:copyReleaseJniLibsProjectOnly UP-TO-DATE
170[ ] > Task :firebase_auth:mergeReleaseJniLibFolders UP-TO-DATE
171[ ] > Task :firebase_auth:mergeReleaseNativeLibs NO-SOURCE
172[ ] > Task :firebase_auth:copyReleaseJniLibsProjectOnly UP-TO-DATE
173[ ] > Task :firebase_core:mergeReleaseJniLibFolders UP-TO-DATE
174[ ] > Task :firebase_core:mergeReleaseNativeLibs NO-SOURCE
175[ ] > Task :firebase_core:copyReleaseJniLibsProjectOnly UP-TO-DATE
176[ ] > Task :flutter_fimber:mergeReleaseJniLibFolders UP-TO-DATE
177[ ] > Task :flutter_fimber:mergeReleaseNativeLibs NO-SOURCE
178[ ] > Task :flutter_fimber:copyReleaseJniLibsProjectOnly UP-TO-DATE
179[ ] > Task :flutter_inappwebview:mergeReleaseJniLibFolders UP-TO-DATE
180[ ] > Task :flutter_inappwebview:mergeReleaseNativeLibs NO-SOURCE
181[ ] > Task :flutter_inappwebview:copyReleaseJniLibsProjectOnly UP-TO-DATE
182[ ] > Task :flutter_keyboard_visibility:mergeReleaseJniLibFolders UP-TO-DATE
183[ ] > Task :flutter_keyboard_visibility:mergeReleaseNativeLibs NO-SOURCE
184[ ] > Task :flutter_keyboard_visibility:copyReleaseJniLibsProjectOnly UP-TO-DATE
185[ ] > Task :flutter_plugin_android_lifecycle:mergeReleaseJniLibFolders UP-TO-DATE
186[ ] > Task :flutter_plugin_android_lifecycle:mergeReleaseNativeLibs NO-SOURCE
187[ ] > Task :flutter_plugin_android_lifecycle:copyReleaseJniLibsProjectOnly UP-TO-DATE
188[ ] > Task :fluttertoast:mergeReleaseJniLibFolders UP-TO-DATE
189[ ] > Task :fluttertoast:mergeReleaseNativeLibs NO-SOURCE
190[ ] > Task :fluttertoast:copyReleaseJniLibsProjectOnly UP-TO-DATE
191[ +16 ms] > Task :image_picker:mergeReleaseJniLibFolders UP-TO-DATE
192[ ] > Task :image_picker:mergeReleaseNativeLibs NO-SOURCE
193[ ] > Task :image_picker:copyReleaseJniLibsProjectOnly UP-TO-DATE
194[ ] > Task :package_info_plus:mergeReleaseJniLibFolders UP-TO-DATE
195[ ] > Task :package_info_plus:mergeReleaseNativeLibs NO-SOURCE
196[ ] > Task :package_info_plus:copyReleaseJniLibsProjectOnly UP-TO-DATE
197[ ] > Task :path_provider_android:mergeReleaseJniLibFolders UP-TO-DATE
198[ ] > Task :path_provider_android:mergeReleaseNativeLibs NO-SOURCE
199[ ] > Task :path_provider_android:copyReleaseJniLibsProjectOnly UP-TO-DATE
200[ +98 ms] > Task :permission_handler:mergeReleaseJniLibFolders UP-TO-DATE
201[ ] > Task :permission_handler:mergeReleaseNativeLibs NO-SOURCE
202[ ] > Task :permission_handler:copyReleaseJniLibsProjectOnly UP-TO-DATE
203[ ] > Task :share_plus:mergeReleaseJniLibFolders UP-TO-DATE
204[ ] > Task :share_plus:mergeReleaseNativeLibs NO-SOURCE
205[ ] > Task :share_plus:copyReleaseJniLibsProjectOnly UP-TO-DATE
206[ ] > Task :shared_preferences_android:mergeReleaseJniLibFolders UP-TO-DATE
207[ ] > Task :shared_preferences_android:mergeReleaseNativeLibs NO-SOURCE
208[ ] > Task :shared_preferences_android:copyReleaseJniLibsProjectOnly UP-TO-DATE
209[ ] > Task :url_launcher_android:mergeReleaseJniLibFolders UP-TO-DATE
210[ ] > Task :url_launcher_android:mergeReleaseNativeLibs NO-SOURCE
211[ ] > Task :url_launcher_android:copyReleaseJniLibsProjectOnly UP-TO-DATE
212[ ] > Task :webview_flutter_android:mergeReleaseJniLibFolders UP-TO-DATE
213[ ] > Task :webview_flutter_android:mergeReleaseNativeLibs NO-SOURCE
214[ +98 ms] > Task :webview_flutter_android:copyReleaseJniLibsProjectOnly UP-TO-DATE
215[ ] > Task :app:mergeReleaseNativeLibs UP-TO-DATE
216[ ] > Task :app:stripReleaseDebugSymbols UP-TO-DATE
217[+2799 ms] > Task :app:buildReleasePreBundle
218[ ] > Task :cloud_firestore:prepareReleaseArtProfile UP-TO-DATE
219[ ] > Task :file_picker:prepareReleaseArtProfile UP-TO-DATE
220[ ] > Task :firebase_auth:prepareReleaseArtProfile UP-TO-DATE
221[ ] > Task :firebase_core:prepareReleaseArtProfile UP-TO-DATE
222[ ] > Task :flutter_fimber:prepareReleaseArtProfile UP-TO-DATE
223[ ] > Task :flutter_inappwebview:prepareReleaseArtProfile UP-TO-DATE
224[ ] > Task :flutter_keyboard_visibility:prepareReleaseArtProfile UP-TO-DATE
225[ ] > Task :flutter_plugin_android_lifecycle:prepareReleaseArtProfile UP-TO-DATE
226[ ] > Task :fluttertoast:prepareReleaseArtProfile UP-TO-DATE
227[ ] > Task :image_picker:prepareReleaseArtProfile UP-TO-DATE
228[ ] > Task :package_info_plus:prepareReleaseArtProfile UP-TO-DATE
229[ ] > Task :path_provider_android:prepareReleaseArtProfile UP-TO-DATE
230[ ] > Task :permission_handler:prepareReleaseArtProfile UP-TO-DATE
231[ ] > Task :share_plus:prepareReleaseArtProfile UP-TO-DATE
232[ ] > Task :shared_preferences_android:prepareReleaseArtProfile UP-TO-DATE
233[ ] > Task :url_launcher_android:prepareReleaseArtProfile UP-TO-DATE
234[ ] > Task :webview_flutter_android:prepareReleaseArtProfile UP-TO-DATE
235[ ] > Task :app:mergeReleaseArtProfile UP-TO-DATE
236[ ] > Task :app:compileReleaseArtProfile UP-TO-DATE
237[ ] > Task :app:collectReleaseDependencies UP-TO-DATE
238[ ] > Task :app:configureReleaseDependencies UP-TO-DATE
239[ ] > Task :app:extractReleaseNativeSymbolTables UP-TO-DATE
240[ ] > Task :app:parseReleaseIntegrityConfig UP-TO-DATE
241[ ] > Task :app:writeReleaseAppMetadata UP-TO-DATE
242[ ] > Task :app:validateSigningRelease UP-TO-DATE
243[+3397 ms] > Task :app:packageReleaseBundle
244[+4398 ms] > Task :app:shrinkBundleReleaseResources
245[+5699 ms] > Task :app:signReleaseBundle
246[ ] > Task :app:produceReleaseBundleIdeListingFile
247[ ] > Task :app:createReleaseBundleListingFileRedirect
248[ ] > Task :app:bundleRelease
249[ +96 ms] Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0.
250[ ] You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.
251[ ] See https://docs.gradle.org/7.4/userguide/command_line_interface.html#sec:command_line_warnings
252[ ] BUILD SUCCESSFUL in 36s
253[ ] 375 actionable tasks: 11 executed, 364 up-to-date
254[ +397 ms] Running Gradle task 'bundleRelease'... (completed in 37.5s)
255[ +30 ms] ✓ Built build/app/outputs/bundle/release/app-release.aab (68.2MB).
256[ +5 ms] "flutter appbundle" took 39,072ms.
257[ +235 ms] ensureAnalyticsSent: 224ms
258[ +5 ms] Running shutdown hooks
259[ +1 ms] Shutdown hooks complete
260[ +3 ms] exiting with code 0
261
262com.android.tools.build.gradle
263com.android.tools.build.libraries
264com.android.tools.build.obfuscation
265com.android.tools.build.debugsymbols
266com.android.tools.build.libraries
267com.android.tools.build.obfuscation
268buildscript {
269 ...
270 dependencies {
271 classpath 'com.android.tools.build:gradle:4.1.3'
272 ...
273 }
274}
275
The next version of the plugin, 4.2.0, omits the native debug files, despite this inclusion in app/build.gradle:
1Warning
2
3This App Bundle contains native code, and youve not uploaded debug symbols. We recommend you upload a symbol file to make your crashes and ANRs easier to analyze and debug. Learn More
4android {
5 compileSdkVersion 31
6
7 ...
8
9 defaultConfig {
10 applicationId "app.(myapp)"
11 minSdkVersion 23
12 targetSdkVersion 31
13 versionCode flutterVersionCode.toInteger()
14 versionName flutterVersionName
15 }
16 ndkVersion "23.1.7779620"
17 buildTypes {
18 ...
19 release {
20 signingConfig signingConfigs.release
21 ndk {
22 debugSymbolLevel 'SYMBOL_TABLE'
23 }
24 }
25 }
26}
27
28flutter doctor
29Doctor summary (to see all details, run flutter doctor -v):
30[✓] Flutter (Channel stable, 2.10.0, on Manjaro Linux 5.13.19-2-MANJARO, locale en_US.UTF-8)
31[✓] Android toolchain - develop for Android devices (Android SDK version 31.0.0)
32[✗] Chrome - develop for the web (Cannot find Chrome executable at google-chrome)
33 ! Cannot find Chrome. Try setting CHROME_EXECUTABLE to a Chrome executable.
34[✓] Android Studio (version 2021.1)
35[!] Connected device
36 ! No devices available
37[✓] HTTP Host Availability
38
39! Doctor found issues in 2 categories.
40[ ] > Task :package_info_plus:generateReleaseBuildConfig UP-TO-DATE
41[ ] > Task :package_info_plus:parseReleaseLocalResources UP-TO-DATE
42[ ] > Task :package_info_plus:generateReleaseRFile UP-TO-DATE
43[ ] > Task :package_info_plus:javaPreCompileRelease UP-TO-DATE
44[ ] > Task :package_info_plus:compileReleaseJavaWithJavac UP-TO-DATE
45[ ] > Task :package_info_plus:mergeReleaseGeneratedProguardFiles UP-TO-DATE
46[ ] > Task :package_info_plus:exportReleaseConsumerProguardFiles UP-TO-DATE
47[ ] > Task :fluttertoast:compileReleaseAidl NO-SOURCE
48[ ] > Task :fluttertoast:generateReleaseBuildConfig UP-TO-DATE
49[ ] > Task :fluttertoast:parseReleaseLocalResources UP-TO-DATE
50[ ] > Task :fluttertoast:generateReleaseRFile UP-TO-DATE
51[ ] > Task :fluttertoast:compileReleaseKotlin UP-TO-DATE
52[ ] > Task :fluttertoast:javaPreCompileRelease UP-TO-DATE
53[ ] > Task :fluttertoast:compileReleaseJavaWithJavac UP-TO-DATE
54[ +97 ms] > Task :fluttertoast:mergeReleaseGeneratedProguardFiles UP-TO-DATE
55[ ] > Task :fluttertoast:exportReleaseConsumerProguardFiles UP-TO-DATE
56[ ] > Task :permission_handler:compileReleaseAidl NO-SOURCE
57[ ] > Task :permission_handler:generateReleaseBuildConfig UP-TO-DATE
58[ ] > Task :permission_handler:parseReleaseLocalResources UP-TO-DATE
59[ ] > Task :permission_handler:generateReleaseRFile UP-TO-DATE
60[ ] > Task :permission_handler:javaPreCompileRelease UP-TO-DATE
61[ ] > Task :permission_handler:compileReleaseJavaWithJavac UP-TO-DATE
62[ ] > Task :permission_handler:mergeReleaseGeneratedProguardFiles UP-TO-DATE
63[ ] > Task :permission_handler:exportReleaseConsumerProguardFiles UP-TO-DATE
64[ ] > Task :app:buildKotlinToolingMetadata UP-TO-DATE
65[ ] > Task :app:checkReleaseDuplicateClasses UP-TO-DATE
66[ ] > Task :app:compileReleaseAidl NO-SOURCE
67[ ] > Task :app:generateReleaseBuildConfig UP-TO-DATE
68[ ] > Task :cloud_firestore:writeReleaseAarMetadata UP-TO-DATE
69[ ] > Task :file_picker:writeReleaseAarMetadata UP-TO-DATE
70[ ] > Task :firebase_auth:writeReleaseAarMetadata UP-TO-DATE
71[ ] > Task :firebase_core:writeReleaseAarMetadata UP-TO-DATE
72[ ] > Task :flutter_fimber:writeReleaseAarMetadata UP-TO-DATE
73[ ] > Task :flutter_inappwebview:writeReleaseAarMetadata UP-TO-DATE
74[ ] > Task :flutter_keyboard_visibility:writeReleaseAarMetadata UP-TO-DATE
75[ ] > Task :flutter_plugin_android_lifecycle:writeReleaseAarMetadata UP-TO-DATE
76[ ] > Task :fluttertoast:writeReleaseAarMetadata UP-TO-DATE
77[ ] > Task :image_picker:writeReleaseAarMetadata UP-TO-DATE
78[ ] > Task :package_info_plus:writeReleaseAarMetadata UP-TO-DATE
79[ ] > Task :path_provider_android:writeReleaseAarMetadata UP-TO-DATE
80[ ] > Task :permission_handler:writeReleaseAarMetadata UP-TO-DATE
81[ ] > Task :share_plus:writeReleaseAarMetadata UP-TO-DATE
82[ ] > Task :shared_preferences_android:writeReleaseAarMetadata UP-TO-DATE
83[ ] > Task :url_launcher_android:writeReleaseAarMetadata UP-TO-DATE
84[ ] > Task :webview_flutter_android:writeReleaseAarMetadata UP-TO-DATE
85[ ] > Task :app:checkReleaseAarMetadata UP-TO-DATE
86[ +495 ms] > Task :app:copyFlutterAssetsRelease
87[ ] > Task :app:processReleaseManifestForPackage UP-TO-DATE
88[ ] > Task :app:processReleaseResources UP-TO-DATE
89[ ] > Task :cloud_firestore:bundleLibCompileToJarRelease UP-TO-DATE
90[ ] > Task :file_picker:bundleLibCompileToJarRelease UP-TO-DATE
91[ ] > Task :firebase_auth:bundleLibCompileToJarRelease UP-TO-DATE
92[ ] > Task :flutter_fimber:bundleLibCompileToJarRelease UP-TO-DATE
93[ ] > Task :flutter_inappwebview:bundleLibCompileToJarRelease UP-TO-DATE
94[ ] > Task :flutter_keyboard_visibility:bundleLibCompileToJarRelease UP-TO-DATE
95[ ] > Task :fluttertoast:bundleLibCompileToJarRelease UP-TO-DATE
96[ ] > Task :image_picker:bundleLibCompileToJarRelease UP-TO-DATE
97[ ] > Task :package_info_plus:bundleLibCompileToJarRelease UP-TO-DATE
98[ ] > Task :path_provider_android:bundleLibCompileToJarRelease UP-TO-DATE
99[ ] > Task :permission_handler:bundleLibCompileToJarRelease UP-TO-DATE
100[ ] > Task :share_plus:bundleLibCompileToJarRelease UP-TO-DATE
101[ ] > Task :shared_preferences_android:bundleLibCompileToJarRelease UP-TO-DATE
102[ ] > Task :url_launcher_android:bundleLibCompileToJarRelease UP-TO-DATE
103[ ] > Task :webview_flutter_android:bundleLibCompileToJarRelease UP-TO-DATE
104[ +96 ms] > Task :app:compileReleaseKotlin UP-TO-DATE
105[ ] > Task :app:javaPreCompileRelease UP-TO-DATE
106[ ] > Task :app:compileReleaseJavaWithJavac UP-TO-DATE
107[ ] > Task :app:extractProguardFiles UP-TO-DATE
108[ ] > Task :app:mergeReleaseGeneratedProguardFiles UP-TO-DATE
109[ ] > Task :app:processReleaseJavaRes NO-SOURCE
110[ ] > Task :cloud_firestore:processReleaseJavaRes NO-SOURCE
111[ ] > Task :cloud_firestore:bundleLibResRelease NO-SOURCE
112[ ] > Task :file_picker:processReleaseJavaRes NO-SOURCE
113[ ] > Task :file_picker:bundleLibResRelease NO-SOURCE
114[ ] > Task :firebase_auth:processReleaseJavaRes NO-SOURCE
115[ ] > Task :firebase_auth:bundleLibResRelease NO-SOURCE
116[ ] > Task :firebase_core:processReleaseJavaRes NO-SOURCE
117[ ] > Task :firebase_core:bundleLibResRelease NO-SOURCE
118[ ] > Task :flutter_fimber:processReleaseJavaRes NO-SOURCE
119[ ] > Task :flutter_fimber:bundleLibResRelease UP-TO-DATE
120[ ] > Task :flutter_inappwebview:processReleaseJavaRes NO-SOURCE
121[ ] > Task :flutter_inappwebview:bundleLibResRelease NO-SOURCE
122[ ] > Task :flutter_keyboard_visibility:processReleaseJavaRes NO-SOURCE
123[ ] > Task :flutter_keyboard_visibility:bundleLibResRelease NO-SOURCE
124[ ] > Task :flutter_plugin_android_lifecycle:processReleaseJavaRes NO-SOURCE
125[ ] > Task :flutter_plugin_android_lifecycle:bundleLibResRelease NO-SOURCE
126[ ] > Task :fluttertoast:processReleaseJavaRes NO-SOURCE
127[ ] > Task :fluttertoast:bundleLibResRelease UP-TO-DATE
128[ ] > Task :image_picker:processReleaseJavaRes NO-SOURCE
129[ ] > Task :image_picker:bundleLibResRelease NO-SOURCE
130[ ] > Task :package_info_plus:processReleaseJavaRes NO-SOURCE
131[ ] > Task :package_info_plus:bundleLibResRelease NO-SOURCE
132[ ] > Task :path_provider_android:processReleaseJavaRes NO-SOURCE
133[ ] > Task :path_provider_android:bundleLibResRelease NO-SOURCE
134[ ] > Task :permission_handler:processReleaseJavaRes NO-SOURCE
135[ ] > Task :permission_handler:bundleLibResRelease NO-SOURCE
136[ ] > Task :share_plus:processReleaseJavaRes NO-SOURCE
137[ ] > Task :share_plus:bundleLibResRelease NO-SOURCE
138[ ] > Task :shared_preferences_android:processReleaseJavaRes NO-SOURCE
139[ ] > Task :shared_preferences_android:bundleLibResRelease NO-SOURCE
140[ ] > Task :url_launcher_android:processReleaseJavaRes NO-SOURCE
141[ ] > Task :url_launcher_android:bundleLibResRelease NO-SOURCE
142[ ] > Task :webview_flutter_android:processReleaseJavaRes NO-SOURCE
143[ ] > Task :webview_flutter_android:bundleLibResRelease NO-SOURCE
144[ ] > Task :app:mergeReleaseJavaResource UP-TO-DATE
145[ ] > Task :cloud_firestore:bundleLibRuntimeToJarRelease UP-TO-DATE
146[ ] > Task :file_picker:bundleLibRuntimeToJarRelease UP-TO-DATE
147[ ] > Task :firebase_auth:bundleLibRuntimeToJarRelease UP-TO-DATE
148[ ] > Task :firebase_core:bundleLibRuntimeToJarRelease UP-TO-DATE
149[ ] > Task :flutter_fimber:bundleLibRuntimeToJarRelease UP-TO-DATE
150[ ] > Task :flutter_inappwebview:bundleLibRuntimeToJarRelease UP-TO-DATE
151[ ] > Task :flutter_keyboard_visibility:bundleLibRuntimeToJarRelease UP-TO-DATE
152[ ] > Task :flutter_plugin_android_lifecycle:bundleLibRuntimeToJarRelease UP-TO-DATE
153[ ] > Task :fluttertoast:bundleLibRuntimeToJarRelease UP-TO-DATE
154[ ] > Task :image_picker:bundleLibRuntimeToJarRelease UP-TO-DATE
155[ ] > Task :package_info_plus:bundleLibRuntimeToJarRelease UP-TO-DATE
156[ ] > Task :path_provider_android:bundleLibRuntimeToJarRelease UP-TO-DATE
157[ ] > Task :permission_handler:bundleLibRuntimeToJarRelease UP-TO-DATE
158[ ] > Task :share_plus:bundleLibRuntimeToJarRelease UP-TO-DATE
159[ ] > Task :shared_preferences_android:bundleLibRuntimeToJarRelease UP-TO-DATE
160[ ] > Task :url_launcher_android:bundleLibRuntimeToJarRelease UP-TO-DATE
161[ ] > Task :webview_flutter_android:bundleLibRuntimeToJarRelease UP-TO-DATE
162[ +172 ms] > Task :app:minifyReleaseWithR8 UP-TO-DATE
163[ ] > Task :app:mergeReleaseJniLibFolders UP-TO-DATE
164[ ] > Task :cloud_firestore:mergeReleaseJniLibFolders UP-TO-DATE
165[ ] > Task :cloud_firestore:mergeReleaseNativeLibs NO-SOURCE
166[ ] > Task :cloud_firestore:copyReleaseJniLibsProjectOnly UP-TO-DATE
167[ ] > Task :file_picker:mergeReleaseJniLibFolders UP-TO-DATE
168[ ] > Task :file_picker:mergeReleaseNativeLibs NO-SOURCE
169[ ] > Task :file_picker:copyReleaseJniLibsProjectOnly UP-TO-DATE
170[ ] > Task :firebase_auth:mergeReleaseJniLibFolders UP-TO-DATE
171[ ] > Task :firebase_auth:mergeReleaseNativeLibs NO-SOURCE
172[ ] > Task :firebase_auth:copyReleaseJniLibsProjectOnly UP-TO-DATE
173[ ] > Task :firebase_core:mergeReleaseJniLibFolders UP-TO-DATE
174[ ] > Task :firebase_core:mergeReleaseNativeLibs NO-SOURCE
175[ ] > Task :firebase_core:copyReleaseJniLibsProjectOnly UP-TO-DATE
176[ ] > Task :flutter_fimber:mergeReleaseJniLibFolders UP-TO-DATE
177[ ] > Task :flutter_fimber:mergeReleaseNativeLibs NO-SOURCE
178[ ] > Task :flutter_fimber:copyReleaseJniLibsProjectOnly UP-TO-DATE
179[ ] > Task :flutter_inappwebview:mergeReleaseJniLibFolders UP-TO-DATE
180[ ] > Task :flutter_inappwebview:mergeReleaseNativeLibs NO-SOURCE
181[ ] > Task :flutter_inappwebview:copyReleaseJniLibsProjectOnly UP-TO-DATE
182[ ] > Task :flutter_keyboard_visibility:mergeReleaseJniLibFolders UP-TO-DATE
183[ ] > Task :flutter_keyboard_visibility:mergeReleaseNativeLibs NO-SOURCE
184[ ] > Task :flutter_keyboard_visibility:copyReleaseJniLibsProjectOnly UP-TO-DATE
185[ ] > Task :flutter_plugin_android_lifecycle:mergeReleaseJniLibFolders UP-TO-DATE
186[ ] > Task :flutter_plugin_android_lifecycle:mergeReleaseNativeLibs NO-SOURCE
187[ ] > Task :flutter_plugin_android_lifecycle:copyReleaseJniLibsProjectOnly UP-TO-DATE
188[ ] > Task :fluttertoast:mergeReleaseJniLibFolders UP-TO-DATE
189[ ] > Task :fluttertoast:mergeReleaseNativeLibs NO-SOURCE
190[ ] > Task :fluttertoast:copyReleaseJniLibsProjectOnly UP-TO-DATE
191[ +16 ms] > Task :image_picker:mergeReleaseJniLibFolders UP-TO-DATE
192[ ] > Task :image_picker:mergeReleaseNativeLibs NO-SOURCE
193[ ] > Task :image_picker:copyReleaseJniLibsProjectOnly UP-TO-DATE
194[ ] > Task :package_info_plus:mergeReleaseJniLibFolders UP-TO-DATE
195[ ] > Task :package_info_plus:mergeReleaseNativeLibs NO-SOURCE
196[ ] > Task :package_info_plus:copyReleaseJniLibsProjectOnly UP-TO-DATE
197[ ] > Task :path_provider_android:mergeReleaseJniLibFolders UP-TO-DATE
198[ ] > Task :path_provider_android:mergeReleaseNativeLibs NO-SOURCE
199[ ] > Task :path_provider_android:copyReleaseJniLibsProjectOnly UP-TO-DATE
200[ +98 ms] > Task :permission_handler:mergeReleaseJniLibFolders UP-TO-DATE
201[ ] > Task :permission_handler:mergeReleaseNativeLibs NO-SOURCE
202[ ] > Task :permission_handler:copyReleaseJniLibsProjectOnly UP-TO-DATE
203[ ] > Task :share_plus:mergeReleaseJniLibFolders UP-TO-DATE
204[ ] > Task :share_plus:mergeReleaseNativeLibs NO-SOURCE
205[ ] > Task :share_plus:copyReleaseJniLibsProjectOnly UP-TO-DATE
206[ ] > Task :shared_preferences_android:mergeReleaseJniLibFolders UP-TO-DATE
207[ ] > Task :shared_preferences_android:mergeReleaseNativeLibs NO-SOURCE
208[ ] > Task :shared_preferences_android:copyReleaseJniLibsProjectOnly UP-TO-DATE
209[ ] > Task :url_launcher_android:mergeReleaseJniLibFolders UP-TO-DATE
210[ ] > Task :url_launcher_android:mergeReleaseNativeLibs NO-SOURCE
211[ ] > Task :url_launcher_android:copyReleaseJniLibsProjectOnly UP-TO-DATE
212[ ] > Task :webview_flutter_android:mergeReleaseJniLibFolders UP-TO-DATE
213[ ] > Task :webview_flutter_android:mergeReleaseNativeLibs NO-SOURCE
214[ +98 ms] > Task :webview_flutter_android:copyReleaseJniLibsProjectOnly UP-TO-DATE
215[ ] > Task :app:mergeReleaseNativeLibs UP-TO-DATE
216[ ] > Task :app:stripReleaseDebugSymbols UP-TO-DATE
217[+2799 ms] > Task :app:buildReleasePreBundle
218[ ] > Task :cloud_firestore:prepareReleaseArtProfile UP-TO-DATE
219[ ] > Task :file_picker:prepareReleaseArtProfile UP-TO-DATE
220[ ] > Task :firebase_auth:prepareReleaseArtProfile UP-TO-DATE
221[ ] > Task :firebase_core:prepareReleaseArtProfile UP-TO-DATE
222[ ] > Task :flutter_fimber:prepareReleaseArtProfile UP-TO-DATE
223[ ] > Task :flutter_inappwebview:prepareReleaseArtProfile UP-TO-DATE
224[ ] > Task :flutter_keyboard_visibility:prepareReleaseArtProfile UP-TO-DATE
225[ ] > Task :flutter_plugin_android_lifecycle:prepareReleaseArtProfile UP-TO-DATE
226[ ] > Task :fluttertoast:prepareReleaseArtProfile UP-TO-DATE
227[ ] > Task :image_picker:prepareReleaseArtProfile UP-TO-DATE
228[ ] > Task :package_info_plus:prepareReleaseArtProfile UP-TO-DATE
229[ ] > Task :path_provider_android:prepareReleaseArtProfile UP-TO-DATE
230[ ] > Task :permission_handler:prepareReleaseArtProfile UP-TO-DATE
231[ ] > Task :share_plus:prepareReleaseArtProfile UP-TO-DATE
232[ ] > Task :shared_preferences_android:prepareReleaseArtProfile UP-TO-DATE
233[ ] > Task :url_launcher_android:prepareReleaseArtProfile UP-TO-DATE
234[ ] > Task :webview_flutter_android:prepareReleaseArtProfile UP-TO-DATE
235[ ] > Task :app:mergeReleaseArtProfile UP-TO-DATE
236[ ] > Task :app:compileReleaseArtProfile UP-TO-DATE
237[ ] > Task :app:collectReleaseDependencies UP-TO-DATE
238[ ] > Task :app:configureReleaseDependencies UP-TO-DATE
239[ ] > Task :app:extractReleaseNativeSymbolTables UP-TO-DATE
240[ ] > Task :app:parseReleaseIntegrityConfig UP-TO-DATE
241[ ] > Task :app:writeReleaseAppMetadata UP-TO-DATE
242[ ] > Task :app:validateSigningRelease UP-TO-DATE
243[+3397 ms] > Task :app:packageReleaseBundle
244[+4398 ms] > Task :app:shrinkBundleReleaseResources
245[+5699 ms] > Task :app:signReleaseBundle
246[ ] > Task :app:produceReleaseBundleIdeListingFile
247[ ] > Task :app:createReleaseBundleListingFileRedirect
248[ ] > Task :app:bundleRelease
249[ +96 ms] Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0.
250[ ] You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.
251[ ] See https://docs.gradle.org/7.4/userguide/command_line_interface.html#sec:command_line_warnings
252[ ] BUILD SUCCESSFUL in 36s
253[ ] 375 actionable tasks: 11 executed, 364 up-to-date
254[ +397 ms] Running Gradle task 'bundleRelease'... (completed in 37.5s)
255[ +30 ms] ✓ Built build/app/outputs/bundle/release/app-release.aab (68.2MB).
256[ +5 ms] "flutter appbundle" took 39,072ms.
257[ +235 ms] ensureAnalyticsSent: 224ms
258[ +5 ms] Running shutdown hooks
259[ +1 ms] Shutdown hooks complete
260[ +3 ms] exiting with code 0
261
262com.android.tools.build.gradle
263com.android.tools.build.libraries
264com.android.tools.build.obfuscation
265com.android.tools.build.debugsymbols
266com.android.tools.build.libraries
267com.android.tools.build.obfuscation
268buildscript {
269 ...
270 dependencies {
271 classpath 'com.android.tools.build:gradle:4.1.3'
272 ...
273 }
274}
275android {
276 ...
277 packagingOptions {
278 dex {
279 useLegacyPackaging true
280 }
281 jniLibs {
282 useLegacyPackaging true
283 }
284 }
285}
286
QUESTION
The function pointer is changing its own address
Asked 2022-Feb-17 at 07:53I am first time using function pointers and ran into a weird problem. I am writing a code for STM32G4xx. The main idea is to transmit and receive data through LPUART. I have implemented simple FSM to handle TX and RX. LPUART configured in DMA interrupt mode. I have typedef the function pointer and declared the three function pointer variables (ISR handles) in main.h file as follow:
1#ifndef __MAIN_H
2#define __MAIN_H
3
4#ifdef __cplusplus
5extern "C" {
6#endif
7/* USER CODE BEGIN ET */
8typedef void (*_func_clbck)(void);
9/* USER CODE END ET */
10 _func_clbck lpuart_tx_tc_isr_clback;
11//_func_clbck lpuart_rx_rne_isr_clback;
12 _func_clbck lpuart_dma_tx_tc_isr_clback;
13 _func_clbck lpuart_dma_rx_tc_isr_clback;
14
15/* USER CODE END Private defines */
16
17#ifdef __cplusplus
18}
19#endif
20
21#endif /* __MAIN_H */
22
The definition of the function pointer is in function MX_LPUART1_UART_Init()
in the main.c file.
1#ifndef __MAIN_H
2#define __MAIN_H
3
4#ifdef __cplusplus
5extern "C" {
6#endif
7/* USER CODE BEGIN ET */
8typedef void (*_func_clbck)(void);
9/* USER CODE END ET */
10 _func_clbck lpuart_tx_tc_isr_clback;
11//_func_clbck lpuart_rx_rne_isr_clback;
12 _func_clbck lpuart_dma_tx_tc_isr_clback;
13 _func_clbck lpuart_dma_rx_tc_isr_clback;
14
15/* USER CODE END Private defines */
16
17#ifdef __cplusplus
18}
19#endif
20
21#endif /* __MAIN_H */
22#include "main.h"
23int main(void)
24{
25 /* USER CODE BEGIN 1 */
26
27 /* USER CODE END 1 */
28
29 /* MCU Configuration--------------------------------------------------------*/
30
31 /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
32
33 LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_SYSCFG);
34 LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_PWR);
35
36 NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);
37
38 /* System interrupt init*/
39 /* SysTick_IRQn interrupt configuration */
40 NVIC_SetPriority(SysTick_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),1, 0));
41
42 /** Configure the internal voltage reference buffer voltage scale
43 */
44 LL_VREFBUF_SetVoltageScaling(LL_VREFBUF_VOLTAGE_SCALE1);
45 /** Enable the Internal Voltage Reference buffer
46 */
47 LL_VREFBUF_Enable();
48 /** Configure the internal voltage reference buffer high impedance mode
49 */
50 LL_VREFBUF_DisableHIZ();
51 /** Disable the internal Pull-Up in Dead Battery pins of UCPD peripheral
52 */
53 LL_PWR_DisableUCPDDeadBattery();
54
55 /* USER CODE BEGIN Init */
56
57 /* USER CODE END Init */
58
59 /* Configure the system clock */
60 SystemClock_Config();
61
62 /* USER CODE BEGIN SysInit */
63
64 /* USER CODE END SysInit */
65
66 /* Initialize all configured peripherals */
67 MX_GPIO_Init();
68 MX_DMA_Init();
69 MX_LPUART1_UART_Init();
70 MX_RTC_Init();
71 /* USER CODE BEGIN 2 */
72#ifdef LPUART_TEST
73 lpuart_init_test();
74#endif
75 /* USER CODE END 2 */
76
77 /* Infinite loop */
78 /* USER CODE BEGIN WHILE */
79 LL_GPIO_ResetOutputPin(GPIOC,LL_GPIO_PIN_6);
80 //LL_GPIO_SetOutputPin(GPIOC,LL_GPIO_PIN_6);
81 LL_mDelay(1);
82 uint8_t buf[9] ={'a','d','v',' ','l','o','w','\r','\n'};
83 //uint8_t buf[9] ={1,2,3,4,5,6,7,8,9};
84
85#ifdef LPUART_TEST
86 uint16_t len_test[19] = {0,16,17,65535, 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
87 for(uint16_t i = 0 ; i<19 ; i++){
88 set_len_rx_dma_buff(len_test[i]);
89 lpuart_rx_test();
90 }
91#endif
92static uint8_t once = 1;
93 while (1)
94 {
95 lpuart_task();
96 //delay_ms_DWT(1);
97 /*if(once){
98 once = 0;
99 lpuart_start_tx(buf, 9);
100 LL_mDelay(100);
101 }*/
102
103 if(1){
104 //lpuart_start_tx(buf, 9);
105 if(!lpuart_isTxBusy()){
106 lpuart_start_tx(buf, 9);
107 delay_ms_DWT(1);
108 if(!lpuart_isRxBusy()){
109 rxOldIndex += rxIndex;
110 if(rxOldIndex > 255){
111 rxOldIndex = 0;
112 rxIndex = 0;
113 }
114 rxIndex = RingBuffer_available(&lpuart_RX_ring_buff);
115 for(i = rxOldIndex ; i < (rxIndex+rxOldIndex) ; i++ ){
116 rxBuff[i] = RingBuffer_readMeas(&lpuart_RX_ring_buff);
117 }
118 }
119 }
120 }
121 //}
122 }
123 /* USER CODE END WHILE */
124
125 /* USER CODE BEGIN 3 */
126
127 /* USER CODE END 3 */
128}
129static void MX_LPUART1_UART_Init(void)
130{
131
132 /* USER CODE BEGIN LPUART1_Init 0 */
133
134 /* USER CODE END LPUART1_Init 0 */
135
136 LL_LPUART_InitTypeDef LPUART_InitStruct = {0};
137
138 LL_GPIO_InitTypeDef GPIO_InitStruct = {0};
139
140 /* Peripheral clock enable */
141 LL_APB1_GRP2_EnableClock(LL_APB1_GRP2_PERIPH_LPUART1);
142
143 LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOB);
144 /**LPUART1 GPIO Configuration
145 PB10 ------> LPUART1_RX
146 PB11 ------> LPUART1_TX
147 */
148 GPIO_InitStruct.Pin = LL_GPIO_PIN_10;
149 GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
150 GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
151 GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
152 GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
153 GPIO_InitStruct.Alternate = LL_GPIO_AF_8;
154 LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
155
156 GPIO_InitStruct.Pin = LL_GPIO_PIN_11;
157 GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
158 GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
159 GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
160 GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
161 GPIO_InitStruct.Alternate = LL_GPIO_AF_8;
162 LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
163
164 /* LPUART1 DMA Init */
165
166 /* LPUART1_TX Init */
167 LL_DMA_SetPeriphRequest(DMA1, LL_DMA_CHANNEL_1, LL_DMAMUX_REQ_LPUART1_TX);
168
169 LL_DMA_SetDataTransferDirection(DMA1, LL_DMA_CHANNEL_1, LL_DMA_DIRECTION_MEMORY_TO_PERIPH);
170
171 LL_DMA_SetChannelPriorityLevel(DMA1, LL_DMA_CHANNEL_1, LL_DMA_PRIORITY_HIGH);
172
173 LL_DMA_SetMode(DMA1, LL_DMA_CHANNEL_1, LL_DMA_MODE_NORMAL);
174
175 LL_DMA_SetPeriphIncMode(DMA1, LL_DMA_CHANNEL_1, LL_DMA_PERIPH_NOINCREMENT);
176
177 LL_DMA_SetMemoryIncMode(DMA1, LL_DMA_CHANNEL_1, LL_DMA_MEMORY_INCREMENT);
178
179 LL_DMA_SetPeriphSize(DMA1, LL_DMA_CHANNEL_1, LL_DMA_PDATAALIGN_BYTE);
180
181 LL_DMA_SetMemorySize(DMA1, LL_DMA_CHANNEL_1, LL_DMA_MDATAALIGN_BYTE);
182
183 /* LPUART1_RX Init */
184 LL_DMA_SetPeriphRequest(DMA1, LL_DMA_CHANNEL_2, LL_DMAMUX_REQ_LPUART1_RX);
185
186 LL_DMA_SetDataTransferDirection(DMA1, LL_DMA_CHANNEL_2, LL_DMA_DIRECTION_PERIPH_TO_MEMORY);
187
188 LL_DMA_SetChannelPriorityLevel(DMA1, LL_DMA_CHANNEL_2, LL_DMA_PRIORITY_HIGH);
189
190 LL_DMA_SetMode(DMA1, LL_DMA_CHANNEL_2, LL_DMA_MODE_CIRCULAR);
191
192 LL_DMA_SetPeriphIncMode(DMA1, LL_DMA_CHANNEL_2, LL_DMA_PERIPH_NOINCREMENT);
193
194 LL_DMA_SetMemoryIncMode(DMA1, LL_DMA_CHANNEL_2, LL_DMA_MEMORY_INCREMENT);
195
196 LL_DMA_SetPeriphSize(DMA1, LL_DMA_CHANNEL_2, LL_DMA_PDATAALIGN_BYTE);
197
198 LL_DMA_SetMemorySize(DMA1, LL_DMA_CHANNEL_2, LL_DMA_MDATAALIGN_BYTE);
199
200 /* LPUART1 interrupt Init */
201 NVIC_SetPriority(LPUART1_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),0, 0));
202 NVIC_EnableIRQ(LPUART1_IRQn);
203
204 /* USER CODE BEGIN LPUART1_Init 1 */
205
206 /* USER CODE END LPUART1_Init 1 */
207 LPUART_InitStruct.PrescalerValue = LL_LPUART_PRESCALER_DIV1;
208 LPUART_InitStruct.BaudRate = 9600;
209 LPUART_InitStruct.DataWidth = LL_LPUART_DATAWIDTH_8B;
210 LPUART_InitStruct.StopBits = LL_LPUART_STOPBITS_1;
211 LPUART_InitStruct.Parity = LL_LPUART_PARITY_NONE;
212 LPUART_InitStruct.TransferDirection = LL_LPUART_DIRECTION_TX_RX;
213 LPUART_InitStruct.HardwareFlowControl = LL_LPUART_HWCONTROL_NONE;
214 LL_LPUART_Init(LPUART1, &LPUART_InitStruct);
215 LL_LPUART_SetTXFIFOThreshold(LPUART1, LL_LPUART_FIFOTHRESHOLD_1_8);
216 LL_LPUART_SetRXFIFOThreshold(LPUART1, LL_LPUART_FIFOTHRESHOLD_1_8);
217 LL_LPUART_DisableFIFO(LPUART1);
218 LL_LPUART_SetTXRXSwap(LPUART1, LL_LPUART_TXRX_SWAPPED);
219// LL_LPUART_EnableOverrunDetect(LPUART1);
220 // LL_LPUART_EnableDMADeactOnRxErr(LPUART1);
221
222 /* USER CODE BEGIN WKUPType LPUART1 */
223
224 /* USER CODE END WKUPType LPUART1 */
225
226 LL_LPUART_Enable(LPUART1);
227
228 /* Polling LPUART1 initialisation */
229 while((!(LL_LPUART_IsActiveFlag_TEACK(LPUART1))) || (!(LL_LPUART_IsActiveFlag_REACK(LPUART1))))
230 {
231 }
232 /* USER CODE BEGIN LPUART1_Init 2 */
233
234 //LL_LPUART_EnableIT_TXE_TXFNF(LPUART1);
235 /* Enable TC interrupts for RX */
236
237
238 /* Enable HT & TC interrupts for TX */
239 // LL_DMA_EnableIT_TC(DMA1, LL_DMA_CHANNEL_1);
240
241 lpuart_tx_tc_isr_clback = LPUART_TX_TC_ISR_CALLBACK;
242 //lpuart_rx_rne_isr_clback = &LPUART_RX_RXNE_ISR_CALLBACK;
243 lpuart_dma_tx_tc_isr_clback = LPUART_DMA_TX_TC_CALLBACK;
244 lpuart_dma_rx_tc_isr_clback = LPUART_DMA_RX_TC_CALLBACK;
245
246 //LL_LPUART_EnableDirectionRx(LPUART1);
247 LL_LPUART_EnableDirectionTx(LPUART1);
248 //LL_LPUART_EnableIT_RXNE_RXFNE(LPUART1);
249
250 /* USER CODE END LPUART1_Init 2 */
251
252}
253
In main function, in while loop, I am calling the lpuart_start_tx(buf, 9);
function just after the if(!lpuart_isTxBusy())
statement. This causes change of the address of the function pointer lpuart_dma_rx_tc_isr_clback
but other two function pointers don't change its addresses and work fine. When an intrrupt raised on the reception of the data, it tried to execute lpuart_dma_rx_tc_isr_clback
which causes the hard fault because its address was modified. Note that if I call lpuart_start_tx(buf, 9);
before if(!lpuart_isTxBusy())
, then everything works fine. I don't understand what could be an issue.
I have checked the CFSR
register and every time different flag was raised. I have noticed that out of three flags, such as IBUSERR
, IACCVOIL
, and INVSTATE
, one of them was raised. I have not included the full main.c file.
LPUART FSM implementation is as follow: lpuart.h file
1#ifndef __MAIN_H
2#define __MAIN_H
3
4#ifdef __cplusplus
5extern "C" {
6#endif
7/* USER CODE BEGIN ET */
8typedef void (*_func_clbck)(void);
9/* USER CODE END ET */
10 _func_clbck lpuart_tx_tc_isr_clback;
11//_func_clbck lpuart_rx_rne_isr_clback;
12 _func_clbck lpuart_dma_tx_tc_isr_clback;
13 _func_clbck lpuart_dma_rx_tc_isr_clback;
14
15/* USER CODE END Private defines */
16
17#ifdef __cplusplus
18}
19#endif
20
21#endif /* __MAIN_H */
22#include "main.h"
23int main(void)
24{
25 /* USER CODE BEGIN 1 */
26
27 /* USER CODE END 1 */
28
29 /* MCU Configuration--------------------------------------------------------*/
30
31 /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
32
33 LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_SYSCFG);
34 LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_PWR);
35
36 NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);
37
38 /* System interrupt init*/
39 /* SysTick_IRQn interrupt configuration */
40 NVIC_SetPriority(SysTick_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),1, 0));
41
42 /** Configure the internal voltage reference buffer voltage scale
43 */
44 LL_VREFBUF_SetVoltageScaling(LL_VREFBUF_VOLTAGE_SCALE1);
45 /** Enable the Internal Voltage Reference buffer
46 */
47 LL_VREFBUF_Enable();
48 /** Configure the internal voltage reference buffer high impedance mode
49 */
50 LL_VREFBUF_DisableHIZ();
51 /** Disable the internal Pull-Up in Dead Battery pins of UCPD peripheral
52 */
53 LL_PWR_DisableUCPDDeadBattery();
54
55 /* USER CODE BEGIN Init */
56
57 /* USER CODE END Init */
58
59 /* Configure the system clock */
60 SystemClock_Config();
61
62 /* USER CODE BEGIN SysInit */
63
64 /* USER CODE END SysInit */
65
66 /* Initialize all configured peripherals */
67 MX_GPIO_Init();
68 MX_DMA_Init();
69 MX_LPUART1_UART_Init();
70 MX_RTC_Init();
71 /* USER CODE BEGIN 2 */
72#ifdef LPUART_TEST
73 lpuart_init_test();
74#endif
75 /* USER CODE END 2 */
76
77 /* Infinite loop */
78 /* USER CODE BEGIN WHILE */
79 LL_GPIO_ResetOutputPin(GPIOC,LL_GPIO_PIN_6);
80 //LL_GPIO_SetOutputPin(GPIOC,LL_GPIO_PIN_6);
81 LL_mDelay(1);
82 uint8_t buf[9] ={'a','d','v',' ','l','o','w','\r','\n'};
83 //uint8_t buf[9] ={1,2,3,4,5,6,7,8,9};
84
85#ifdef LPUART_TEST
86 uint16_t len_test[19] = {0,16,17,65535, 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
87 for(uint16_t i = 0 ; i<19 ; i++){
88 set_len_rx_dma_buff(len_test[i]);
89 lpuart_rx_test();
90 }
91#endif
92static uint8_t once = 1;
93 while (1)
94 {
95 lpuart_task();
96 //delay_ms_DWT(1);
97 /*if(once){
98 once = 0;
99 lpuart_start_tx(buf, 9);
100 LL_mDelay(100);
101 }*/
102
103 if(1){
104 //lpuart_start_tx(buf, 9);
105 if(!lpuart_isTxBusy()){
106 lpuart_start_tx(buf, 9);
107 delay_ms_DWT(1);
108 if(!lpuart_isRxBusy()){
109 rxOldIndex += rxIndex;
110 if(rxOldIndex > 255){
111 rxOldIndex = 0;
112 rxIndex = 0;
113 }
114 rxIndex = RingBuffer_available(&lpuart_RX_ring_buff);
115 for(i = rxOldIndex ; i < (rxIndex+rxOldIndex) ; i++ ){
116 rxBuff[i] = RingBuffer_readMeas(&lpuart_RX_ring_buff);
117 }
118 }
119 }
120 }
121 //}
122 }
123 /* USER CODE END WHILE */
124
125 /* USER CODE BEGIN 3 */
126
127 /* USER CODE END 3 */
128}
129static void MX_LPUART1_UART_Init(void)
130{
131
132 /* USER CODE BEGIN LPUART1_Init 0 */
133
134 /* USER CODE END LPUART1_Init 0 */
135
136 LL_LPUART_InitTypeDef LPUART_InitStruct = {0};
137
138 LL_GPIO_InitTypeDef GPIO_InitStruct = {0};
139
140 /* Peripheral clock enable */
141 LL_APB1_GRP2_EnableClock(LL_APB1_GRP2_PERIPH_LPUART1);
142
143 LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOB);
144 /**LPUART1 GPIO Configuration
145 PB10 ------> LPUART1_RX
146 PB11 ------> LPUART1_TX
147 */
148 GPIO_InitStruct.Pin = LL_GPIO_PIN_10;
149 GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
150 GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
151 GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
152 GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
153 GPIO_InitStruct.Alternate = LL_GPIO_AF_8;
154 LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
155
156 GPIO_InitStruct.Pin = LL_GPIO_PIN_11;
157 GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
158 GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
159 GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
160 GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
161 GPIO_InitStruct.Alternate = LL_GPIO_AF_8;
162 LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
163
164 /* LPUART1 DMA Init */
165
166 /* LPUART1_TX Init */
167 LL_DMA_SetPeriphRequest(DMA1, LL_DMA_CHANNEL_1, LL_DMAMUX_REQ_LPUART1_TX);
168
169 LL_DMA_SetDataTransferDirection(DMA1, LL_DMA_CHANNEL_1, LL_DMA_DIRECTION_MEMORY_TO_PERIPH);
170
171 LL_DMA_SetChannelPriorityLevel(DMA1, LL_DMA_CHANNEL_1, LL_DMA_PRIORITY_HIGH);
172
173 LL_DMA_SetMode(DMA1, LL_DMA_CHANNEL_1, LL_DMA_MODE_NORMAL);
174
175 LL_DMA_SetPeriphIncMode(DMA1, LL_DMA_CHANNEL_1, LL_DMA_PERIPH_NOINCREMENT);
176
177 LL_DMA_SetMemoryIncMode(DMA1, LL_DMA_CHANNEL_1, LL_DMA_MEMORY_INCREMENT);
178
179 LL_DMA_SetPeriphSize(DMA1, LL_DMA_CHANNEL_1, LL_DMA_PDATAALIGN_BYTE);
180
181 LL_DMA_SetMemorySize(DMA1, LL_DMA_CHANNEL_1, LL_DMA_MDATAALIGN_BYTE);
182
183 /* LPUART1_RX Init */
184 LL_DMA_SetPeriphRequest(DMA1, LL_DMA_CHANNEL_2, LL_DMAMUX_REQ_LPUART1_RX);
185
186 LL_DMA_SetDataTransferDirection(DMA1, LL_DMA_CHANNEL_2, LL_DMA_DIRECTION_PERIPH_TO_MEMORY);
187
188 LL_DMA_SetChannelPriorityLevel(DMA1, LL_DMA_CHANNEL_2, LL_DMA_PRIORITY_HIGH);
189
190 LL_DMA_SetMode(DMA1, LL_DMA_CHANNEL_2, LL_DMA_MODE_CIRCULAR);
191
192 LL_DMA_SetPeriphIncMode(DMA1, LL_DMA_CHANNEL_2, LL_DMA_PERIPH_NOINCREMENT);
193
194 LL_DMA_SetMemoryIncMode(DMA1, LL_DMA_CHANNEL_2, LL_DMA_MEMORY_INCREMENT);
195
196 LL_DMA_SetPeriphSize(DMA1, LL_DMA_CHANNEL_2, LL_DMA_PDATAALIGN_BYTE);
197
198 LL_DMA_SetMemorySize(DMA1, LL_DMA_CHANNEL_2, LL_DMA_MDATAALIGN_BYTE);
199
200 /* LPUART1 interrupt Init */
201 NVIC_SetPriority(LPUART1_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),0, 0));
202 NVIC_EnableIRQ(LPUART1_IRQn);
203
204 /* USER CODE BEGIN LPUART1_Init 1 */
205
206 /* USER CODE END LPUART1_Init 1 */
207 LPUART_InitStruct.PrescalerValue = LL_LPUART_PRESCALER_DIV1;
208 LPUART_InitStruct.BaudRate = 9600;
209 LPUART_InitStruct.DataWidth = LL_LPUART_DATAWIDTH_8B;
210 LPUART_InitStruct.StopBits = LL_LPUART_STOPBITS_1;
211 LPUART_InitStruct.Parity = LL_LPUART_PARITY_NONE;
212 LPUART_InitStruct.TransferDirection = LL_LPUART_DIRECTION_TX_RX;
213 LPUART_InitStruct.HardwareFlowControl = LL_LPUART_HWCONTROL_NONE;
214 LL_LPUART_Init(LPUART1, &LPUART_InitStruct);
215 LL_LPUART_SetTXFIFOThreshold(LPUART1, LL_LPUART_FIFOTHRESHOLD_1_8);
216 LL_LPUART_SetRXFIFOThreshold(LPUART1, LL_LPUART_FIFOTHRESHOLD_1_8);
217 LL_LPUART_DisableFIFO(LPUART1);
218 LL_LPUART_SetTXRXSwap(LPUART1, LL_LPUART_TXRX_SWAPPED);
219// LL_LPUART_EnableOverrunDetect(LPUART1);
220 // LL_LPUART_EnableDMADeactOnRxErr(LPUART1);
221
222 /* USER CODE BEGIN WKUPType LPUART1 */
223
224 /* USER CODE END WKUPType LPUART1 */
225
226 LL_LPUART_Enable(LPUART1);
227
228 /* Polling LPUART1 initialisation */
229 while((!(LL_LPUART_IsActiveFlag_TEACK(LPUART1))) || (!(LL_LPUART_IsActiveFlag_REACK(LPUART1))))
230 {
231 }
232 /* USER CODE BEGIN LPUART1_Init 2 */
233
234 //LL_LPUART_EnableIT_TXE_TXFNF(LPUART1);
235 /* Enable TC interrupts for RX */
236
237
238 /* Enable HT & TC interrupts for TX */
239 // LL_DMA_EnableIT_TC(DMA1, LL_DMA_CHANNEL_1);
240
241 lpuart_tx_tc_isr_clback = LPUART_TX_TC_ISR_CALLBACK;
242 //lpuart_rx_rne_isr_clback = &LPUART_RX_RXNE_ISR_CALLBACK;
243 lpuart_dma_tx_tc_isr_clback = LPUART_DMA_TX_TC_CALLBACK;
244 lpuart_dma_rx_tc_isr_clback = LPUART_DMA_RX_TC_CALLBACK;
245
246 //LL_LPUART_EnableDirectionRx(LPUART1);
247 LL_LPUART_EnableDirectionTx(LPUART1);
248 //LL_LPUART_EnableIT_RXNE_RXFNE(LPUART1);
249
250 /* USER CODE END LPUART1_Init 2 */
251
252}
253#ifndef INC_LPUART_H_
254#define INC_LPUART_H_
255
256#include "ring_buffer.h"
257
258#ifdef USE_FULL_ASSERT
259#include "stm32_assert.h"
260#else
261#define assert_param(expr) ((void)0U)
262#endif /* USE_FULL_ASSERT */
263
264uint8_t lpuart_start_tx(uint8_t* buff, uint16_t len );
265uint8_t LPUART_isTxFinished(void);
266void LPUART_clear_tx_finishedFlag();
267uint8_t lpuart_isRxBusy(void);
268uint8_t lpuart_isTxBusy(void);
269void lpuart_task();
270
271void LPUART_TX_TC_ISR_CALLBACK(void);
272void LPUART_DMA_TX_TC_CALLBACK(void);
273void LPUART_DMA_RX_TC_CALLBACK(void);
274
275#endif /* INC_LPUART_H_ */
276
lpuart.c
1#ifndef __MAIN_H
2#define __MAIN_H
3
4#ifdef __cplusplus
5extern "C" {
6#endif
7/* USER CODE BEGIN ET */
8typedef void (*_func_clbck)(void);
9/* USER CODE END ET */
10 _func_clbck lpuart_tx_tc_isr_clback;
11//_func_clbck lpuart_rx_rne_isr_clback;
12 _func_clbck lpuart_dma_tx_tc_isr_clback;
13 _func_clbck lpuart_dma_rx_tc_isr_clback;
14
15/* USER CODE END Private defines */
16
17#ifdef __cplusplus
18}
19#endif
20
21#endif /* __MAIN_H */
22#include "main.h"
23int main(void)
24{
25 /* USER CODE BEGIN 1 */
26
27 /* USER CODE END 1 */
28
29 /* MCU Configuration--------------------------------------------------------*/
30
31 /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
32
33 LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_SYSCFG);
34 LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_PWR);
35
36 NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);
37
38 /* System interrupt init*/
39 /* SysTick_IRQn interrupt configuration */
40 NVIC_SetPriority(SysTick_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),1, 0));
41
42 /** Configure the internal voltage reference buffer voltage scale
43 */
44 LL_VREFBUF_SetVoltageScaling(LL_VREFBUF_VOLTAGE_SCALE1);
45 /** Enable the Internal Voltage Reference buffer
46 */
47 LL_VREFBUF_Enable();
48 /** Configure the internal voltage reference buffer high impedance mode
49 */
50 LL_VREFBUF_DisableHIZ();
51 /** Disable the internal Pull-Up in Dead Battery pins of UCPD peripheral
52 */
53 LL_PWR_DisableUCPDDeadBattery();
54
55 /* USER CODE BEGIN Init */
56
57 /* USER CODE END Init */
58
59 /* Configure the system clock */
60 SystemClock_Config();
61
62 /* USER CODE BEGIN SysInit */
63
64 /* USER CODE END SysInit */
65
66 /* Initialize all configured peripherals */
67 MX_GPIO_Init();
68 MX_DMA_Init();
69 MX_LPUART1_UART_Init();
70 MX_RTC_Init();
71 /* USER CODE BEGIN 2 */
72#ifdef LPUART_TEST
73 lpuart_init_test();
74#endif
75 /* USER CODE END 2 */
76
77 /* Infinite loop */
78 /* USER CODE BEGIN WHILE */
79 LL_GPIO_ResetOutputPin(GPIOC,LL_GPIO_PIN_6);
80 //LL_GPIO_SetOutputPin(GPIOC,LL_GPIO_PIN_6);
81 LL_mDelay(1);
82 uint8_t buf[9] ={'a','d','v',' ','l','o','w','\r','\n'};
83 //uint8_t buf[9] ={1,2,3,4,5,6,7,8,9};
84
85#ifdef LPUART_TEST
86 uint16_t len_test[19] = {0,16,17,65535, 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
87 for(uint16_t i = 0 ; i<19 ; i++){
88 set_len_rx_dma_buff(len_test[i]);
89 lpuart_rx_test();
90 }
91#endif
92static uint8_t once = 1;
93 while (1)
94 {
95 lpuart_task();
96 //delay_ms_DWT(1);
97 /*if(once){
98 once = 0;
99 lpuart_start_tx(buf, 9);
100 LL_mDelay(100);
101 }*/
102
103 if(1){
104 //lpuart_start_tx(buf, 9);
105 if(!lpuart_isTxBusy()){
106 lpuart_start_tx(buf, 9);
107 delay_ms_DWT(1);
108 if(!lpuart_isRxBusy()){
109 rxOldIndex += rxIndex;
110 if(rxOldIndex > 255){
111 rxOldIndex = 0;
112 rxIndex = 0;
113 }
114 rxIndex = RingBuffer_available(&lpuart_RX_ring_buff);
115 for(i = rxOldIndex ; i < (rxIndex+rxOldIndex) ; i++ ){
116 rxBuff[i] = RingBuffer_readMeas(&lpuart_RX_ring_buff);
117 }
118 }
119 }
120 }
121 //}
122 }
123 /* USER CODE END WHILE */
124
125 /* USER CODE BEGIN 3 */
126
127 /* USER CODE END 3 */
128}
129static void MX_LPUART1_UART_Init(void)
130{
131
132 /* USER CODE BEGIN LPUART1_Init 0 */
133
134 /* USER CODE END LPUART1_Init 0 */
135
136 LL_LPUART_InitTypeDef LPUART_InitStruct = {0};
137
138 LL_GPIO_InitTypeDef GPIO_InitStruct = {0};
139
140 /* Peripheral clock enable */
141 LL_APB1_GRP2_EnableClock(LL_APB1_GRP2_PERIPH_LPUART1);
142
143 LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOB);
144 /**LPUART1 GPIO Configuration
145 PB10 ------> LPUART1_RX
146 PB11 ------> LPUART1_TX
147 */
148 GPIO_InitStruct.Pin = LL_GPIO_PIN_10;
149 GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
150 GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
151 GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
152 GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
153 GPIO_InitStruct.Alternate = LL_GPIO_AF_8;
154 LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
155
156 GPIO_InitStruct.Pin = LL_GPIO_PIN_11;
157 GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
158 GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
159 GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
160 GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
161 GPIO_InitStruct.Alternate = LL_GPIO_AF_8;
162 LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
163
164 /* LPUART1 DMA Init */
165
166 /* LPUART1_TX Init */
167 LL_DMA_SetPeriphRequest(DMA1, LL_DMA_CHANNEL_1, LL_DMAMUX_REQ_LPUART1_TX);
168
169 LL_DMA_SetDataTransferDirection(DMA1, LL_DMA_CHANNEL_1, LL_DMA_DIRECTION_MEMORY_TO_PERIPH);
170
171 LL_DMA_SetChannelPriorityLevel(DMA1, LL_DMA_CHANNEL_1, LL_DMA_PRIORITY_HIGH);
172
173 LL_DMA_SetMode(DMA1, LL_DMA_CHANNEL_1, LL_DMA_MODE_NORMAL);
174
175 LL_DMA_SetPeriphIncMode(DMA1, LL_DMA_CHANNEL_1, LL_DMA_PERIPH_NOINCREMENT);
176
177 LL_DMA_SetMemoryIncMode(DMA1, LL_DMA_CHANNEL_1, LL_DMA_MEMORY_INCREMENT);
178
179 LL_DMA_SetPeriphSize(DMA1, LL_DMA_CHANNEL_1, LL_DMA_PDATAALIGN_BYTE);
180
181 LL_DMA_SetMemorySize(DMA1, LL_DMA_CHANNEL_1, LL_DMA_MDATAALIGN_BYTE);
182
183 /* LPUART1_RX Init */
184 LL_DMA_SetPeriphRequest(DMA1, LL_DMA_CHANNEL_2, LL_DMAMUX_REQ_LPUART1_RX);
185
186 LL_DMA_SetDataTransferDirection(DMA1, LL_DMA_CHANNEL_2, LL_DMA_DIRECTION_PERIPH_TO_MEMORY);
187
188 LL_DMA_SetChannelPriorityLevel(DMA1, LL_DMA_CHANNEL_2, LL_DMA_PRIORITY_HIGH);
189
190 LL_DMA_SetMode(DMA1, LL_DMA_CHANNEL_2, LL_DMA_MODE_CIRCULAR);
191
192 LL_DMA_SetPeriphIncMode(DMA1, LL_DMA_CHANNEL_2, LL_DMA_PERIPH_NOINCREMENT);
193
194 LL_DMA_SetMemoryIncMode(DMA1, LL_DMA_CHANNEL_2, LL_DMA_MEMORY_INCREMENT);
195
196 LL_DMA_SetPeriphSize(DMA1, LL_DMA_CHANNEL_2, LL_DMA_PDATAALIGN_BYTE);
197
198 LL_DMA_SetMemorySize(DMA1, LL_DMA_CHANNEL_2, LL_DMA_MDATAALIGN_BYTE);
199
200 /* LPUART1 interrupt Init */
201 NVIC_SetPriority(LPUART1_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),0, 0));
202 NVIC_EnableIRQ(LPUART1_IRQn);
203
204 /* USER CODE BEGIN LPUART1_Init 1 */
205
206 /* USER CODE END LPUART1_Init 1 */
207 LPUART_InitStruct.PrescalerValue = LL_LPUART_PRESCALER_DIV1;
208 LPUART_InitStruct.BaudRate = 9600;
209 LPUART_InitStruct.DataWidth = LL_LPUART_DATAWIDTH_8B;
210 LPUART_InitStruct.StopBits = LL_LPUART_STOPBITS_1;
211 LPUART_InitStruct.Parity = LL_LPUART_PARITY_NONE;
212 LPUART_InitStruct.TransferDirection = LL_LPUART_DIRECTION_TX_RX;
213 LPUART_InitStruct.HardwareFlowControl = LL_LPUART_HWCONTROL_NONE;
214 LL_LPUART_Init(LPUART1, &LPUART_InitStruct);
215 LL_LPUART_SetTXFIFOThreshold(LPUART1, LL_LPUART_FIFOTHRESHOLD_1_8);
216 LL_LPUART_SetRXFIFOThreshold(LPUART1, LL_LPUART_FIFOTHRESHOLD_1_8);
217 LL_LPUART_DisableFIFO(LPUART1);
218 LL_LPUART_SetTXRXSwap(LPUART1, LL_LPUART_TXRX_SWAPPED);
219// LL_LPUART_EnableOverrunDetect(LPUART1);
220 // LL_LPUART_EnableDMADeactOnRxErr(LPUART1);
221
222 /* USER CODE BEGIN WKUPType LPUART1 */
223
224 /* USER CODE END WKUPType LPUART1 */
225
226 LL_LPUART_Enable(LPUART1);
227
228 /* Polling LPUART1 initialisation */
229 while((!(LL_LPUART_IsActiveFlag_TEACK(LPUART1))) || (!(LL_LPUART_IsActiveFlag_REACK(LPUART1))))
230 {
231 }
232 /* USER CODE BEGIN LPUART1_Init 2 */
233
234 //LL_LPUART_EnableIT_TXE_TXFNF(LPUART1);
235 /* Enable TC interrupts for RX */
236
237
238 /* Enable HT & TC interrupts for TX */
239 // LL_DMA_EnableIT_TC(DMA1, LL_DMA_CHANNEL_1);
240
241 lpuart_tx_tc_isr_clback = LPUART_TX_TC_ISR_CALLBACK;
242 //lpuart_rx_rne_isr_clback = &LPUART_RX_RXNE_ISR_CALLBACK;
243 lpuart_dma_tx_tc_isr_clback = LPUART_DMA_TX_TC_CALLBACK;
244 lpuart_dma_rx_tc_isr_clback = LPUART_DMA_RX_TC_CALLBACK;
245
246 //LL_LPUART_EnableDirectionRx(LPUART1);
247 LL_LPUART_EnableDirectionTx(LPUART1);
248 //LL_LPUART_EnableIT_RXNE_RXFNE(LPUART1);
249
250 /* USER CODE END LPUART1_Init 2 */
251
252}
253#ifndef INC_LPUART_H_
254#define INC_LPUART_H_
255
256#include "ring_buffer.h"
257
258#ifdef USE_FULL_ASSERT
259#include "stm32_assert.h"
260#else
261#define assert_param(expr) ((void)0U)
262#endif /* USE_FULL_ASSERT */
263
264uint8_t lpuart_start_tx(uint8_t* buff, uint16_t len );
265uint8_t LPUART_isTxFinished(void);
266void LPUART_clear_tx_finishedFlag();
267uint8_t lpuart_isRxBusy(void);
268uint8_t lpuart_isTxBusy(void);
269void lpuart_task();
270
271void LPUART_TX_TC_ISR_CALLBACK(void);
272void LPUART_DMA_TX_TC_CALLBACK(void);
273void LPUART_DMA_RX_TC_CALLBACK(void);
274
275#endif /* INC_LPUART_H_ */
276#include "lpuart.h"
277#include "string.h"
278#include "stm32g4xx_ll_lpuart.h"
279#include "stm32g4xx_ll_dma.h"
280
281#define SIZE_TX_BUFF 256
282#define SIZE_RX_BUFF 256
283#define SIZE_DMA_RX_BUFF 64
284
285
286static uint8_t rxBuf[SIZE_RX_BUFF];
287static uint8_t rxDMA_Buf[SIZE_DMA_RX_BUFF];
288static uint8_t txBuf[SIZE_TX_BUFF];
289RingBuffer lpuart_RX_ring_buff;
290static uint8_t* tempTxBuf;
291static uint16_t txLen = 0;
292
293
294static void setTxDataLengthDMA(uint16_t len);
295static void lpuart_transmit();
296static void lpuart_finished_tx();
297static void no_action();
298static void lpuart_rx();
299static void check_rx_dma_buff();
300
301static uint8_t ev_no_event(void);
302static uint8_t ev_txtc(void);
303static uint8_t ev_start_tx(void);
304static uint8_t ev_dmatxtc(void);
305static uint8_t ev_rx_read(void);
306static uint8_t ev_buff_full(void);
307
308
309typedef uint8_t (*t_event_func)(void);
310typedef void(*t_action_func)(void);
311typedef struct{
312 uint16_t txtc:1;
313 uint16_t tx_busy:1;
314 uint16_t dmatxtc:1;
315 uint16_t dmarxtc:1;
316 uint16_t start_tx:1;
317 uint16_t rx_read:1;
318 uint16_t buff_full:1;
319 uint16_t is_fsm_table_init:1;
320 uint16_t ext_rxBusyFlag:1;
321
322}t_event;
323
324typedef enum {INIT, READY, BUSY, COMPLETE, LPUART_ERROR}t_state;
325
326typedef struct{
327 t_state present_state;
328 t_event_func event1;
329 t_event_func event2;
330 t_action_func action1;
331 t_action_func action2;
332 t_state next_state;
333
334}t_fsm_row;
335
336typedef struct{
337 t_state current_state;
338 t_state previous_state;
339 t_fsm_row stt_row[7];
340 uint16_t number_of_rows;
341}t_fsm_table;
342
343
344t_event lpuart_event;
345
346uint8_t lpuart_isTxBusy(void){
347 return lpuart_event.tx_busy;
348}
349
350uint8_t lpuart_isRxBusy(){
351 return lpuart_event.ext_rxBusyFlag;
352}
353uint8_t ev_no_event(void){
354 return 1;
355}
356
357uint8_t ev_txtc(void){
358 return lpuart_event.txtc;
359}
360
361uint8_t ev_start_tx(void){
362 return lpuart_event.start_tx;
363}
364
365uint8_t ev_dmatxtc(void){
366 return lpuart_event.dmatxtc;
367}
368
369
370uint8_t ev_rx_read(void){
371 return lpuart_event.rx_read || lpuart_event.dmarxtc;
372}
373
374uint8_t ev_buff_full(void){
375 return lpuart_event.buff_full;
376}
377
378void no_action(){
379 return;
380}
381
382void lpuart_init(void){
383 memset(rxBuf, 0, (size_t)SIZE_RX_BUFF );
384 memset(rxDMA_Buf, 0, (size_t)SIZE_DMA_RX_BUFF );
385 memset(txBuf, 0, (size_t)SIZE_TX_BUFF );
386 RingBuffer_init(&lpuart_RX_ring_buff,rxBuf , (uint16_t)SIZE_RX_BUFF);
387
388 LL_LPUART_DisableIT_TC(LPUART1);
389 LL_LPUART_DisableIT_RXNE_RXFNE(LPUART1);
390 LL_LPUART_DisableDirectionRx(LPUART1);
391
392 LL_DMA_DisableIT_TC(DMA1, LL_DMA_CHANNEL_1); //tx
393 LL_DMA_DisableChannel(DMA1, LL_DMA_CHANNEL_1); //tx
394 LL_DMA_DisableIT_TC(DMA1, LL_DMA_CHANNEL_2); //rx
395 LL_DMA_DisableChannel(DMA1, LL_DMA_CHANNEL_2); //rx
396
397 /*TX buffer address attached to DMA channel1 */
398 LL_DMA_ConfigAddresses(DMA1, LL_DMA_CHANNEL_1,
399 (uint32_t)txBuf,
400 LL_LPUART_DMA_GetRegAddr(LPUART1, LL_LPUART_DMA_REG_DATA_TRANSMIT),
401 LL_DMA_GetDataTransferDirection(DMA1, LL_DMA_CHANNEL_1));
402 LL_DMA_SetDataLength(DMA1, LL_DMA_CHANNEL_1, SIZE_TX_BUFF);
403
404 /*RX buffer address attached to DMA channel2 */
405 LL_DMA_ConfigAddresses(DMA1, LL_DMA_CHANNEL_2,
406 LL_LPUART_DMA_GetRegAddr(LPUART1, LL_LPUART_DMA_REG_DATA_RECEIVE),
407 (uint32_t)rxDMA_Buf,
408 LL_DMA_GetDataTransferDirection(DMA1, LL_DMA_CHANNEL_2));
409 LL_DMA_SetDataLength(DMA1, LL_DMA_CHANNEL_2, SIZE_DMA_RX_BUFF);
410
411 LL_LPUART_EnableDMAReq_RX(LPUART1);
412 LL_DMA_EnableIT_TC(DMA1, LL_DMA_CHANNEL_2); //rx
413 LL_DMA_EnableIT_TE(DMA1, LL_DMA_CHANNEL_2);
414 LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_2); //rx
415
416 LL_LPUART_EnableDirectionRx(LPUART1);
417 lpuart_event.tx_busy = 0;
418}
419
420
421uint8_t lpuart_start_tx(uint8_t* buff, uint16_t len ){
422 if(!lpuart_event.tx_busy){
423 lpuart_event.tx_busy = 1;
424 if(len < SIZE_TX_BUFF){
425 lpuart_event.start_tx = 1;
426 tempTxBuf = buff;
427 txLen = len;
428 }else{
429 /* lpuart_event.start_tx = 0;
430 lpuart_event.buff_full = 1;*/
431 return 0;
432
433 }
434 return 1;
435 }else{
436 return 0;
437 }
438
439
440}
441
442void lpuart_transmit(){
443 memcpy(txBuf, tempTxBuf, txLen);
444 setTxDataLengthDMA(txLen);
445 LL_LPUART_EnableDMAReq_TX(LPUART1);
446 LL_LPUART_EnableDirectionTx(LPUART1);
447 LL_LPUART_EnableIT_TC(LPUART1);
448 LL_DMA_EnableIT_TC(DMA1, LL_DMA_CHANNEL_1);
449 LL_DMA_EnableIT_TE(DMA1, LL_DMA_CHANNEL_1);
450 LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_1);
451}
452
453
454void lpuart_finished_tx(){
455 LL_LPUART_DisableIT_TC(LPUART1);
456 LL_LPUART_DisableDirectionTx(LPUART1);
457 LL_DMA_DisableIT_TC(DMA1, LL_DMA_CHANNEL_1);
458 LL_DMA_DisableIT_TE(DMA1, LL_DMA_CHANNEL_1);
459 LL_DMA_DisableChannel(DMA1, LL_DMA_CHANNEL_1);
460 lpuart_event.txtc = 0;
461 lpuart_event.dmatxtc = 0;
462 lpuart_event.start_tx = 0;
463 lpuart_event.tx_busy = 0;
464}
465void setTxDataLengthDMA(uint16_t len){
466 LL_LPUART_DisableDirectionTx(LPUART1);
467 LL_DMA_DisableChannel(DMA1, LL_DMA_CHANNEL_1);
468 /* Clear all flags */
469 LL_DMA_ClearFlag_TC1(DMA1);
470 LL_DMA_ClearFlag_TE1(DMA1);
471 LL_DMA_SetDataLength(DMA1, LL_DMA_CHANNEL_1, len);
472}
473
474void check_rx_dma_buff(){
475 static uint16_t old_len = SIZE_DMA_RX_BUFF;
476 uint16_t current_len = LL_DMA_GetDataLength(DMA1, LL_DMA_CHANNEL_2);
477 if(old_len != current_len ){
478 if(current_len > 0){
479 lpuart_event.rx_read = 1;
480 }
481 }
482 old_len = current_len;
483}
484static uint16_t old_pos = 0;
485uint16_t pos = 0;
486void lpuart_rx(){
487 lpuart_event.ext_rxBusyFlag = 1;
488 if(lpuart_event.dmarxtc){
489 lpuart_event.dmarxtc = 0;
490 }
491 if(lpuart_event.rx_read){
492 lpuart_event.rx_read = 0;
493 }
494 pos = (uint16_t)SIZE_DMA_RX_BUFF - LL_DMA_GetDataLength(DMA1, LL_DMA_CHANNEL_2);
495 if(pos > SIZE_DMA_RX_BUFF ){
496 pos = SIZE_DMA_RX_BUFF;
497 }
498 if(pos != old_pos /* || (pos == 0 && old_pos == 0)*/){
499 if (pos > old_pos) {
500 RingBuffer_writeMeasBlock(&lpuart_RX_ring_buff,&rxDMA_Buf[old_pos],(pos - old_pos));
501 }else{
502 RingBuffer_writeMeasBlock(&lpuart_RX_ring_buff,&rxDMA_Buf[old_pos],((uint16_t)SIZE_DMA_RX_BUFF - old_pos));
503 if(pos > 0){
504 RingBuffer_writeMeasBlock(&lpuart_RX_ring_buff,&rxDMA_Buf[0],pos);
505 }
506 }
507 }
508 old_pos = pos;
509 lpuart_event.ext_rxBusyFlag = 0;
510
511}
512t_fsm_row rowInit = {INIT,ev_no_event, ev_no_event, lpuart_init, no_action, READY };
513t_fsm_row rowReady = {READY,ev_start_tx, ev_no_event, lpuart_transmit, no_action, BUSY };
514t_fsm_row rowBusy = {BUSY,ev_dmatxtc, ev_txtc, lpuart_finished_tx, no_action, READY};
515
516
517t_fsm_table lpuart_fsm_table = {INIT,INIT, {}};
518void fsm_table_init(){
519 lpuart_fsm_table.current_state = INIT;
520 lpuart_fsm_table.stt_row[0] = rowInit;
521 lpuart_fsm_table.stt_row[1] = rowReady;
522 lpuart_fsm_table.stt_row[2] = rowBusy;
523 lpuart_event.is_fsm_table_init = 1;
524 lpuart_fsm_table.number_of_rows = 3;
525}
526
527void lpuar_tx_fsm(){
528 uint8_t ev = 0;
529
530 for(uint16_t rowIndex = 0; rowIndex < lpuart_fsm_table.number_of_rows; rowIndex++){
531
532 if(lpuart_fsm_table.current_state == lpuart_fsm_table.stt_row[rowIndex].present_state){
533 ev = lpuart_fsm_table.stt_row[rowIndex].event1() && lpuart_fsm_table.stt_row[rowIndex].event2();
534 if(ev){
535 lpuart_fsm_table.stt_row[rowIndex].action1();
536 lpuart_fsm_table.stt_row[rowIndex].action2();
537 lpuart_fsm_table.current_state = lpuart_fsm_table.stt_row[rowIndex].next_state;
538 lpuart_fsm_table.previous_state = lpuart_fsm_table.stt_row[rowIndex].present_state;
539 }
540
541 }
542 }
543}
544
545void lpuar_read_task(){
546 check_rx_dma_buff();
547 if(ev_rx_read()){
548 lpuart_rx();
549 }
550
551}
552void lpuart_task(){
553
554 if(!lpuart_event.is_fsm_table_init){
555 fsm_table_init();
556 }
557 //else{
558 lpuar_tx_fsm();
559 lpuar_read_task();
560 //}
561
562}
563void LPUART_TX_TC_ISR_CALLBACK(void){
564 lpuart_event.txtc = 1;
565 LL_LPUART_ClearFlag_TC(LPUART1);
566
567}
568
569void LPUART_DMA_TX_TC_CALLBACK(void){
570 lpuart_event.dmatxtc = 1;
571 LL_DMA_ClearFlag_TC1(DMA1);
572}
573
574void LPUART_DMA_RX_TC_CALLBACK(void){
575 if(LL_DMA_IsActiveFlag_TC2(DMA1)){
576 LL_DMA_ClearFlag_TC2(DMA1);
577 lpuart_event.dmarxtc = 1;
578 lpuart_rx();
579 }
580 if(LL_DMA_IsActiveFlag_TE2(DMA1)){
581 LL_DMA_ClearFlag_TE2(DMA1);
582 }
583
584}
585
Intrrupt routine file stm32g4xx_it.c:
1#ifndef __MAIN_H
2#define __MAIN_H
3
4#ifdef __cplusplus
5extern "C" {
6#endif
7/* USER CODE BEGIN ET */
8typedef void (*_func_clbck)(void);
9/* USER CODE END ET */
10 _func_clbck lpuart_tx_tc_isr_clback;
11//_func_clbck lpuart_rx_rne_isr_clback;
12 _func_clbck lpuart_dma_tx_tc_isr_clback;
13 _func_clbck lpuart_dma_rx_tc_isr_clback;
14
15/* USER CODE END Private defines */
16
17#ifdef __cplusplus
18}
19#endif
20
21#endif /* __MAIN_H */
22#include "main.h"
23int main(void)
24{
25 /* USER CODE BEGIN 1 */
26
27 /* USER CODE END 1 */
28
29 /* MCU Configuration--------------------------------------------------------*/
30
31 /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
32
33 LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_SYSCFG);
34 LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_PWR);
35
36 NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);
37
38 /* System interrupt init*/
39 /* SysTick_IRQn interrupt configuration */
40 NVIC_SetPriority(SysTick_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),1, 0));
41
42 /** Configure the internal voltage reference buffer voltage scale
43 */
44 LL_VREFBUF_SetVoltageScaling(LL_VREFBUF_VOLTAGE_SCALE1);
45 /** Enable the Internal Voltage Reference buffer
46 */
47 LL_VREFBUF_Enable();
48 /** Configure the internal voltage reference buffer high impedance mode
49 */
50 LL_VREFBUF_DisableHIZ();
51 /** Disable the internal Pull-Up in Dead Battery pins of UCPD peripheral
52 */
53 LL_PWR_DisableUCPDDeadBattery();
54
55 /* USER CODE BEGIN Init */
56
57 /* USER CODE END Init */
58
59 /* Configure the system clock */
60 SystemClock_Config();
61
62 /* USER CODE BEGIN SysInit */
63
64 /* USER CODE END SysInit */
65
66 /* Initialize all configured peripherals */
67 MX_GPIO_Init();
68 MX_DMA_Init();
69 MX_LPUART1_UART_Init();
70 MX_RTC_Init();
71 /* USER CODE BEGIN 2 */
72#ifdef LPUART_TEST
73 lpuart_init_test();
74#endif
75 /* USER CODE END 2 */
76
77 /* Infinite loop */
78 /* USER CODE BEGIN WHILE */
79 LL_GPIO_ResetOutputPin(GPIOC,LL_GPIO_PIN_6);
80 //LL_GPIO_SetOutputPin(GPIOC,LL_GPIO_PIN_6);
81 LL_mDelay(1);
82 uint8_t buf[9] ={'a','d','v',' ','l','o','w','\r','\n'};
83 //uint8_t buf[9] ={1,2,3,4,5,6,7,8,9};
84
85#ifdef LPUART_TEST
86 uint16_t len_test[19] = {0,16,17,65535, 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
87 for(uint16_t i = 0 ; i<19 ; i++){
88 set_len_rx_dma_buff(len_test[i]);
89 lpuart_rx_test();
90 }
91#endif
92static uint8_t once = 1;
93 while (1)
94 {
95 lpuart_task();
96 //delay_ms_DWT(1);
97 /*if(once){
98 once = 0;
99 lpuart_start_tx(buf, 9);
100 LL_mDelay(100);
101 }*/
102
103 if(1){
104 //lpuart_start_tx(buf, 9);
105 if(!lpuart_isTxBusy()){
106 lpuart_start_tx(buf, 9);
107 delay_ms_DWT(1);
108 if(!lpuart_isRxBusy()){
109 rxOldIndex += rxIndex;
110 if(rxOldIndex > 255){
111 rxOldIndex = 0;
112 rxIndex = 0;
113 }
114 rxIndex = RingBuffer_available(&lpuart_RX_ring_buff);
115 for(i = rxOldIndex ; i < (rxIndex+rxOldIndex) ; i++ ){
116 rxBuff[i] = RingBuffer_readMeas(&lpuart_RX_ring_buff);
117 }
118 }
119 }
120 }
121 //}
122 }
123 /* USER CODE END WHILE */
124
125 /* USER CODE BEGIN 3 */
126
127 /* USER CODE END 3 */
128}
129static void MX_LPUART1_UART_Init(void)
130{
131
132 /* USER CODE BEGIN LPUART1_Init 0 */
133
134 /* USER CODE END LPUART1_Init 0 */
135
136 LL_LPUART_InitTypeDef LPUART_InitStruct = {0};
137
138 LL_GPIO_InitTypeDef GPIO_InitStruct = {0};
139
140 /* Peripheral clock enable */
141 LL_APB1_GRP2_EnableClock(LL_APB1_GRP2_PERIPH_LPUART1);
142
143 LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOB);
144 /**LPUART1 GPIO Configuration
145 PB10 ------> LPUART1_RX
146 PB11 ------> LPUART1_TX
147 */
148 GPIO_InitStruct.Pin = LL_GPIO_PIN_10;
149 GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
150 GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
151 GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
152 GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
153 GPIO_InitStruct.Alternate = LL_GPIO_AF_8;
154 LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
155
156 GPIO_InitStruct.Pin = LL_GPIO_PIN_11;
157 GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
158 GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
159 GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
160 GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
161 GPIO_InitStruct.Alternate = LL_GPIO_AF_8;
162 LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
163
164 /* LPUART1 DMA Init */
165
166 /* LPUART1_TX Init */
167 LL_DMA_SetPeriphRequest(DMA1, LL_DMA_CHANNEL_1, LL_DMAMUX_REQ_LPUART1_TX);
168
169 LL_DMA_SetDataTransferDirection(DMA1, LL_DMA_CHANNEL_1, LL_DMA_DIRECTION_MEMORY_TO_PERIPH);
170
171 LL_DMA_SetChannelPriorityLevel(DMA1, LL_DMA_CHANNEL_1, LL_DMA_PRIORITY_HIGH);
172
173 LL_DMA_SetMode(DMA1, LL_DMA_CHANNEL_1, LL_DMA_MODE_NORMAL);
174
175 LL_DMA_SetPeriphIncMode(DMA1, LL_DMA_CHANNEL_1, LL_DMA_PERIPH_NOINCREMENT);
176
177 LL_DMA_SetMemoryIncMode(DMA1, LL_DMA_CHANNEL_1, LL_DMA_MEMORY_INCREMENT);
178
179 LL_DMA_SetPeriphSize(DMA1, LL_DMA_CHANNEL_1, LL_DMA_PDATAALIGN_BYTE);
180
181 LL_DMA_SetMemorySize(DMA1, LL_DMA_CHANNEL_1, LL_DMA_MDATAALIGN_BYTE);
182
183 /* LPUART1_RX Init */
184 LL_DMA_SetPeriphRequest(DMA1, LL_DMA_CHANNEL_2, LL_DMAMUX_REQ_LPUART1_RX);
185
186 LL_DMA_SetDataTransferDirection(DMA1, LL_DMA_CHANNEL_2, LL_DMA_DIRECTION_PERIPH_TO_MEMORY);
187
188 LL_DMA_SetChannelPriorityLevel(DMA1, LL_DMA_CHANNEL_2, LL_DMA_PRIORITY_HIGH);
189
190 LL_DMA_SetMode(DMA1, LL_DMA_CHANNEL_2, LL_DMA_MODE_CIRCULAR);
191
192 LL_DMA_SetPeriphIncMode(DMA1, LL_DMA_CHANNEL_2, LL_DMA_PERIPH_NOINCREMENT);
193
194 LL_DMA_SetMemoryIncMode(DMA1, LL_DMA_CHANNEL_2, LL_DMA_MEMORY_INCREMENT);
195
196 LL_DMA_SetPeriphSize(DMA1, LL_DMA_CHANNEL_2, LL_DMA_PDATAALIGN_BYTE);
197
198 LL_DMA_SetMemorySize(DMA1, LL_DMA_CHANNEL_2, LL_DMA_MDATAALIGN_BYTE);
199
200 /* LPUART1 interrupt Init */
201 NVIC_SetPriority(LPUART1_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),0, 0));
202 NVIC_EnableIRQ(LPUART1_IRQn);
203
204 /* USER CODE BEGIN LPUART1_Init 1 */
205
206 /* USER CODE END LPUART1_Init 1 */
207 LPUART_InitStruct.PrescalerValue = LL_LPUART_PRESCALER_DIV1;
208 LPUART_InitStruct.BaudRate = 9600;
209 LPUART_InitStruct.DataWidth = LL_LPUART_DATAWIDTH_8B;
210 LPUART_InitStruct.StopBits = LL_LPUART_STOPBITS_1;
211 LPUART_InitStruct.Parity = LL_LPUART_PARITY_NONE;
212 LPUART_InitStruct.TransferDirection = LL_LPUART_DIRECTION_TX_RX;
213 LPUART_InitStruct.HardwareFlowControl = LL_LPUART_HWCONTROL_NONE;
214 LL_LPUART_Init(LPUART1, &LPUART_InitStruct);
215 LL_LPUART_SetTXFIFOThreshold(LPUART1, LL_LPUART_FIFOTHRESHOLD_1_8);
216 LL_LPUART_SetRXFIFOThreshold(LPUART1, LL_LPUART_FIFOTHRESHOLD_1_8);
217 LL_LPUART_DisableFIFO(LPUART1);
218 LL_LPUART_SetTXRXSwap(LPUART1, LL_LPUART_TXRX_SWAPPED);
219// LL_LPUART_EnableOverrunDetect(LPUART1);
220 // LL_LPUART_EnableDMADeactOnRxErr(LPUART1);
221
222 /* USER CODE BEGIN WKUPType LPUART1 */
223
224 /* USER CODE END WKUPType LPUART1 */
225
226 LL_LPUART_Enable(LPUART1);
227
228 /* Polling LPUART1 initialisation */
229 while((!(LL_LPUART_IsActiveFlag_TEACK(LPUART1))) || (!(LL_LPUART_IsActiveFlag_REACK(LPUART1))))
230 {
231 }
232 /* USER CODE BEGIN LPUART1_Init 2 */
233
234 //LL_LPUART_EnableIT_TXE_TXFNF(LPUART1);
235 /* Enable TC interrupts for RX */
236
237
238 /* Enable HT & TC interrupts for TX */
239 // LL_DMA_EnableIT_TC(DMA1, LL_DMA_CHANNEL_1);
240
241 lpuart_tx_tc_isr_clback = LPUART_TX_TC_ISR_CALLBACK;
242 //lpuart_rx_rne_isr_clback = &LPUART_RX_RXNE_ISR_CALLBACK;
243 lpuart_dma_tx_tc_isr_clback = LPUART_DMA_TX_TC_CALLBACK;
244 lpuart_dma_rx_tc_isr_clback = LPUART_DMA_RX_TC_CALLBACK;
245
246 //LL_LPUART_EnableDirectionRx(LPUART1);
247 LL_LPUART_EnableDirectionTx(LPUART1);
248 //LL_LPUART_EnableIT_RXNE_RXFNE(LPUART1);
249
250 /* USER CODE END LPUART1_Init 2 */
251
252}
253#ifndef INC_LPUART_H_
254#define INC_LPUART_H_
255
256#include "ring_buffer.h"
257
258#ifdef USE_FULL_ASSERT
259#include "stm32_assert.h"
260#else
261#define assert_param(expr) ((void)0U)
262#endif /* USE_FULL_ASSERT */
263
264uint8_t lpuart_start_tx(uint8_t* buff, uint16_t len );
265uint8_t LPUART_isTxFinished(void);
266void LPUART_clear_tx_finishedFlag();
267uint8_t lpuart_isRxBusy(void);
268uint8_t lpuart_isTxBusy(void);
269void lpuart_task();
270
271void LPUART_TX_TC_ISR_CALLBACK(void);
272void LPUART_DMA_TX_TC_CALLBACK(void);
273void LPUART_DMA_RX_TC_CALLBACK(void);
274
275#endif /* INC_LPUART_H_ */
276#include "lpuart.h"
277#include "string.h"
278#include "stm32g4xx_ll_lpuart.h"
279#include "stm32g4xx_ll_dma.h"
280
281#define SIZE_TX_BUFF 256
282#define SIZE_RX_BUFF 256
283#define SIZE_DMA_RX_BUFF 64
284
285
286static uint8_t rxBuf[SIZE_RX_BUFF];
287static uint8_t rxDMA_Buf[SIZE_DMA_RX_BUFF];
288static uint8_t txBuf[SIZE_TX_BUFF];
289RingBuffer lpuart_RX_ring_buff;
290static uint8_t* tempTxBuf;
291static uint16_t txLen = 0;
292
293
294static void setTxDataLengthDMA(uint16_t len);
295static void lpuart_transmit();
296static void lpuart_finished_tx();
297static void no_action();
298static void lpuart_rx();
299static void check_rx_dma_buff();
300
301static uint8_t ev_no_event(void);
302static uint8_t ev_txtc(void);
303static uint8_t ev_start_tx(void);
304static uint8_t ev_dmatxtc(void);
305static uint8_t ev_rx_read(void);
306static uint8_t ev_buff_full(void);
307
308
309typedef uint8_t (*t_event_func)(void);
310typedef void(*t_action_func)(void);
311typedef struct{
312 uint16_t txtc:1;
313 uint16_t tx_busy:1;
314 uint16_t dmatxtc:1;
315 uint16_t dmarxtc:1;
316 uint16_t start_tx:1;
317 uint16_t rx_read:1;
318 uint16_t buff_full:1;
319 uint16_t is_fsm_table_init:1;
320 uint16_t ext_rxBusyFlag:1;
321
322}t_event;
323
324typedef enum {INIT, READY, BUSY, COMPLETE, LPUART_ERROR}t_state;
325
326typedef struct{
327 t_state present_state;
328 t_event_func event1;
329 t_event_func event2;
330 t_action_func action1;
331 t_action_func action2;
332 t_state next_state;
333
334}t_fsm_row;
335
336typedef struct{
337 t_state current_state;
338 t_state previous_state;
339 t_fsm_row stt_row[7];
340 uint16_t number_of_rows;
341}t_fsm_table;
342
343
344t_event lpuart_event;
345
346uint8_t lpuart_isTxBusy(void){
347 return lpuart_event.tx_busy;
348}
349
350uint8_t lpuart_isRxBusy(){
351 return lpuart_event.ext_rxBusyFlag;
352}
353uint8_t ev_no_event(void){
354 return 1;
355}
356
357uint8_t ev_txtc(void){
358 return lpuart_event.txtc;
359}
360
361uint8_t ev_start_tx(void){
362 return lpuart_event.start_tx;
363}
364
365uint8_t ev_dmatxtc(void){
366 return lpuart_event.dmatxtc;
367}
368
369
370uint8_t ev_rx_read(void){
371 return lpuart_event.rx_read || lpuart_event.dmarxtc;
372}
373
374uint8_t ev_buff_full(void){
375 return lpuart_event.buff_full;
376}
377
378void no_action(){
379 return;
380}
381
382void lpuart_init(void){
383 memset(rxBuf, 0, (size_t)SIZE_RX_BUFF );
384 memset(rxDMA_Buf, 0, (size_t)SIZE_DMA_RX_BUFF );
385 memset(txBuf, 0, (size_t)SIZE_TX_BUFF );
386 RingBuffer_init(&lpuart_RX_ring_buff,rxBuf , (uint16_t)SIZE_RX_BUFF);
387
388 LL_LPUART_DisableIT_TC(LPUART1);
389 LL_LPUART_DisableIT_RXNE_RXFNE(LPUART1);
390 LL_LPUART_DisableDirectionRx(LPUART1);
391
392 LL_DMA_DisableIT_TC(DMA1, LL_DMA_CHANNEL_1); //tx
393 LL_DMA_DisableChannel(DMA1, LL_DMA_CHANNEL_1); //tx
394 LL_DMA_DisableIT_TC(DMA1, LL_DMA_CHANNEL_2); //rx
395 LL_DMA_DisableChannel(DMA1, LL_DMA_CHANNEL_2); //rx
396
397 /*TX buffer address attached to DMA channel1 */
398 LL_DMA_ConfigAddresses(DMA1, LL_DMA_CHANNEL_1,
399 (uint32_t)txBuf,
400 LL_LPUART_DMA_GetRegAddr(LPUART1, LL_LPUART_DMA_REG_DATA_TRANSMIT),
401 LL_DMA_GetDataTransferDirection(DMA1, LL_DMA_CHANNEL_1));
402 LL_DMA_SetDataLength(DMA1, LL_DMA_CHANNEL_1, SIZE_TX_BUFF);
403
404 /*RX buffer address attached to DMA channel2 */
405 LL_DMA_ConfigAddresses(DMA1, LL_DMA_CHANNEL_2,
406 LL_LPUART_DMA_GetRegAddr(LPUART1, LL_LPUART_DMA_REG_DATA_RECEIVE),
407 (uint32_t)rxDMA_Buf,
408 LL_DMA_GetDataTransferDirection(DMA1, LL_DMA_CHANNEL_2));
409 LL_DMA_SetDataLength(DMA1, LL_DMA_CHANNEL_2, SIZE_DMA_RX_BUFF);
410
411 LL_LPUART_EnableDMAReq_RX(LPUART1);
412 LL_DMA_EnableIT_TC(DMA1, LL_DMA_CHANNEL_2); //rx
413 LL_DMA_EnableIT_TE(DMA1, LL_DMA_CHANNEL_2);
414 LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_2); //rx
415
416 LL_LPUART_EnableDirectionRx(LPUART1);
417 lpuart_event.tx_busy = 0;
418}
419
420
421uint8_t lpuart_start_tx(uint8_t* buff, uint16_t len ){
422 if(!lpuart_event.tx_busy){
423 lpuart_event.tx_busy = 1;
424 if(len < SIZE_TX_BUFF){
425 lpuart_event.start_tx = 1;
426 tempTxBuf = buff;
427 txLen = len;
428 }else{
429 /* lpuart_event.start_tx = 0;
430 lpuart_event.buff_full = 1;*/
431 return 0;
432
433 }
434 return 1;
435 }else{
436 return 0;
437 }
438
439
440}
441
442void lpuart_transmit(){
443 memcpy(txBuf, tempTxBuf, txLen);
444 setTxDataLengthDMA(txLen);
445 LL_LPUART_EnableDMAReq_TX(LPUART1);
446 LL_LPUART_EnableDirectionTx(LPUART1);
447 LL_LPUART_EnableIT_TC(LPUART1);
448 LL_DMA_EnableIT_TC(DMA1, LL_DMA_CHANNEL_1);
449 LL_DMA_EnableIT_TE(DMA1, LL_DMA_CHANNEL_1);
450 LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_1);
451}
452
453
454void lpuart_finished_tx(){
455 LL_LPUART_DisableIT_TC(LPUART1);
456 LL_LPUART_DisableDirectionTx(LPUART1);
457 LL_DMA_DisableIT_TC(DMA1, LL_DMA_CHANNEL_1);
458 LL_DMA_DisableIT_TE(DMA1, LL_DMA_CHANNEL_1);
459 LL_DMA_DisableChannel(DMA1, LL_DMA_CHANNEL_1);
460 lpuart_event.txtc = 0;
461 lpuart_event.dmatxtc = 0;
462 lpuart_event.start_tx = 0;
463 lpuart_event.tx_busy = 0;
464}
465void setTxDataLengthDMA(uint16_t len){
466 LL_LPUART_DisableDirectionTx(LPUART1);
467 LL_DMA_DisableChannel(DMA1, LL_DMA_CHANNEL_1);
468 /* Clear all flags */
469 LL_DMA_ClearFlag_TC1(DMA1);
470 LL_DMA_ClearFlag_TE1(DMA1);
471 LL_DMA_SetDataLength(DMA1, LL_DMA_CHANNEL_1, len);
472}
473
474void check_rx_dma_buff(){
475 static uint16_t old_len = SIZE_DMA_RX_BUFF;
476 uint16_t current_len = LL_DMA_GetDataLength(DMA1, LL_DMA_CHANNEL_2);
477 if(old_len != current_len ){
478 if(current_len > 0){
479 lpuart_event.rx_read = 1;
480 }
481 }
482 old_len = current_len;
483}
484static uint16_t old_pos = 0;
485uint16_t pos = 0;
486void lpuart_rx(){
487 lpuart_event.ext_rxBusyFlag = 1;
488 if(lpuart_event.dmarxtc){
489 lpuart_event.dmarxtc = 0;
490 }
491 if(lpuart_event.rx_read){
492 lpuart_event.rx_read = 0;
493 }
494 pos = (uint16_t)SIZE_DMA_RX_BUFF - LL_DMA_GetDataLength(DMA1, LL_DMA_CHANNEL_2);
495 if(pos > SIZE_DMA_RX_BUFF ){
496 pos = SIZE_DMA_RX_BUFF;
497 }
498 if(pos != old_pos /* || (pos == 0 && old_pos == 0)*/){
499 if (pos > old_pos) {
500 RingBuffer_writeMeasBlock(&lpuart_RX_ring_buff,&rxDMA_Buf[old_pos],(pos - old_pos));
501 }else{
502 RingBuffer_writeMeasBlock(&lpuart_RX_ring_buff,&rxDMA_Buf[old_pos],((uint16_t)SIZE_DMA_RX_BUFF - old_pos));
503 if(pos > 0){
504 RingBuffer_writeMeasBlock(&lpuart_RX_ring_buff,&rxDMA_Buf[0],pos);
505 }
506 }
507 }
508 old_pos = pos;
509 lpuart_event.ext_rxBusyFlag = 0;
510
511}
512t_fsm_row rowInit = {INIT,ev_no_event, ev_no_event, lpuart_init, no_action, READY };
513t_fsm_row rowReady = {READY,ev_start_tx, ev_no_event, lpuart_transmit, no_action, BUSY };
514t_fsm_row rowBusy = {BUSY,ev_dmatxtc, ev_txtc, lpuart_finished_tx, no_action, READY};
515
516
517t_fsm_table lpuart_fsm_table = {INIT,INIT, {}};
518void fsm_table_init(){
519 lpuart_fsm_table.current_state = INIT;
520 lpuart_fsm_table.stt_row[0] = rowInit;
521 lpuart_fsm_table.stt_row[1] = rowReady;
522 lpuart_fsm_table.stt_row[2] = rowBusy;
523 lpuart_event.is_fsm_table_init = 1;
524 lpuart_fsm_table.number_of_rows = 3;
525}
526
527void lpuar_tx_fsm(){
528 uint8_t ev = 0;
529
530 for(uint16_t rowIndex = 0; rowIndex < lpuart_fsm_table.number_of_rows; rowIndex++){
531
532 if(lpuart_fsm_table.current_state == lpuart_fsm_table.stt_row[rowIndex].present_state){
533 ev = lpuart_fsm_table.stt_row[rowIndex].event1() && lpuart_fsm_table.stt_row[rowIndex].event2();
534 if(ev){
535 lpuart_fsm_table.stt_row[rowIndex].action1();
536 lpuart_fsm_table.stt_row[rowIndex].action2();
537 lpuart_fsm_table.current_state = lpuart_fsm_table.stt_row[rowIndex].next_state;
538 lpuart_fsm_table.previous_state = lpuart_fsm_table.stt_row[rowIndex].present_state;
539 }
540
541 }
542 }
543}
544
545void lpuar_read_task(){
546 check_rx_dma_buff();
547 if(ev_rx_read()){
548 lpuart_rx();
549 }
550
551}
552void lpuart_task(){
553
554 if(!lpuart_event.is_fsm_table_init){
555 fsm_table_init();
556 }
557 //else{
558 lpuar_tx_fsm();
559 lpuar_read_task();
560 //}
561
562}
563void LPUART_TX_TC_ISR_CALLBACK(void){
564 lpuart_event.txtc = 1;
565 LL_LPUART_ClearFlag_TC(LPUART1);
566
567}
568
569void LPUART_DMA_TX_TC_CALLBACK(void){
570 lpuart_event.dmatxtc = 1;
571 LL_DMA_ClearFlag_TC1(DMA1);
572}
573
574void LPUART_DMA_RX_TC_CALLBACK(void){
575 if(LL_DMA_IsActiveFlag_TC2(DMA1)){
576 LL_DMA_ClearFlag_TC2(DMA1);
577 lpuart_event.dmarxtc = 1;
578 lpuart_rx();
579 }
580 if(LL_DMA_IsActiveFlag_TE2(DMA1)){
581 LL_DMA_ClearFlag_TE2(DMA1);
582 }
583
584}
585/* Includes ------------------------------------------------------------------*/
586#include "main.h"
587#include "stm32g4xx_it.h"
588#include "lpuart.h"
589
590 extern _func_clbck lpuart_tx_tc_isr_clback;
591//_func_clbck lpuart_rx_rne_isr_clback = LPUART_RX_RXNE_ISR_CALLBACK;
592 extern _func_clbck lpuart_dma_tx_tc_isr_clback;
593 extern _func_clbck lpuart_dma_rx_tc_isr_clback;
594
595void HardFault_Handler(void)
596{
597 /* USER CODE BEGIN HardFault_IRQn 0 */
598
599 /* USER CODE END HardFault_IRQn 0 */
600 while (1)
601 {
602 /* USER CODE BEGIN W1_HardFault_IRQn 0 */
603 /* USER CODE END W1_HardFault_IRQn 0 */
604 }
605}
606
607void DMA1_Channel2_IRQHandler(void)
608{
609 /* USER CODE BEGIN DMA1_Channel2_IRQn 0 */
610 lpuart_dma_rx_tc_isr_clback();
611 //LPUART_DMA_RX_TC_CALLBACK();
612 /* USER CODE END DMA1_Channel2_IRQn 0 */
613
614 /* USER CODE BEGIN DMA1_Channel2_IRQn 1 */
615
616 /* USER CODE END DMA1_Channel2_IRQn 1 */
617}
618
Some of the code I have ommitted here. I am sure that I have not fully understood how function pointers work. Could you please give me suggestions or a solution.
I am using: language: C11 Compiler/build tools: GNU tools for STM32 (7-2018-q2-update) IDE: STM32CubeIDE
Please let me know if you require more info. Thanks in advance.
ANSWER
Answered 2022-Feb-17 at 07:53As per @Lundin's suggestion, I have put a watchpoint on lpuart_dma_rx_tc_isr_clback
function pointer variable. It exposed the out of index bug in my code. The bug is inside while loop in main.c.
1#ifndef __MAIN_H
2#define __MAIN_H
3
4#ifdef __cplusplus
5extern "C" {
6#endif
7/* USER CODE BEGIN ET */
8typedef void (*_func_clbck)(void);
9/* USER CODE END ET */
10 _func_clbck lpuart_tx_tc_isr_clback;
11//_func_clbck lpuart_rx_rne_isr_clback;
12 _func_clbck lpuart_dma_tx_tc_isr_clback;
13 _func_clbck lpuart_dma_rx_tc_isr_clback;
14
15/* USER CODE END Private defines */
16
17#ifdef __cplusplus
18}
19#endif
20
21#endif /* __MAIN_H */
22#include "main.h"
23int main(void)
24{
25 /* USER CODE BEGIN 1 */
26
27 /* USER CODE END 1 */
28
29 /* MCU Configuration--------------------------------------------------------*/
30
31 /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
32
33 LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_SYSCFG);
34 LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_PWR);
35
36 NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);
37
38 /* System interrupt init*/
39 /* SysTick_IRQn interrupt configuration */
40 NVIC_SetPriority(SysTick_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),1, 0));
41
42 /** Configure the internal voltage reference buffer voltage scale
43 */
44 LL_VREFBUF_SetVoltageScaling(LL_VREFBUF_VOLTAGE_SCALE1);
45 /** Enable the Internal Voltage Reference buffer
46 */
47 LL_VREFBUF_Enable();
48 /** Configure the internal voltage reference buffer high impedance mode
49 */
50 LL_VREFBUF_DisableHIZ();
51 /** Disable the internal Pull-Up in Dead Battery pins of UCPD peripheral
52 */
53 LL_PWR_DisableUCPDDeadBattery();
54
55 /* USER CODE BEGIN Init */
56
57 /* USER CODE END Init */
58
59 /* Configure the system clock */
60 SystemClock_Config();
61
62 /* USER CODE BEGIN SysInit */
63
64 /* USER CODE END SysInit */
65
66 /* Initialize all configured peripherals */
67 MX_GPIO_Init();
68 MX_DMA_Init();
69 MX_LPUART1_UART_Init();
70 MX_RTC_Init();
71 /* USER CODE BEGIN 2 */
72#ifdef LPUART_TEST
73 lpuart_init_test();
74#endif
75 /* USER CODE END 2 */
76
77 /* Infinite loop */
78 /* USER CODE BEGIN WHILE */
79 LL_GPIO_ResetOutputPin(GPIOC,LL_GPIO_PIN_6);
80 //LL_GPIO_SetOutputPin(GPIOC,LL_GPIO_PIN_6);
81 LL_mDelay(1);
82 uint8_t buf[9] ={'a','d','v',' ','l','o','w','\r','\n'};
83 //uint8_t buf[9] ={1,2,3,4,5,6,7,8,9};
84
85#ifdef LPUART_TEST
86 uint16_t len_test[19] = {0,16,17,65535, 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
87 for(uint16_t i = 0 ; i<19 ; i++){
88 set_len_rx_dma_buff(len_test[i]);
89 lpuart_rx_test();
90 }
91#endif
92static uint8_t once = 1;
93 while (1)
94 {
95 lpuart_task();
96 //delay_ms_DWT(1);
97 /*if(once){
98 once = 0;
99 lpuart_start_tx(buf, 9);
100 LL_mDelay(100);
101 }*/
102
103 if(1){
104 //lpuart_start_tx(buf, 9);
105 if(!lpuart_isTxBusy()){
106 lpuart_start_tx(buf, 9);
107 delay_ms_DWT(1);
108 if(!lpuart_isRxBusy()){
109 rxOldIndex += rxIndex;
110 if(rxOldIndex > 255){
111 rxOldIndex = 0;
112 rxIndex = 0;
113 }
114 rxIndex = RingBuffer_available(&lpuart_RX_ring_buff);
115 for(i = rxOldIndex ; i < (rxIndex+rxOldIndex) ; i++ ){
116 rxBuff[i] = RingBuffer_readMeas(&lpuart_RX_ring_buff);
117 }
118 }
119 }
120 }
121 //}
122 }
123 /* USER CODE END WHILE */
124
125 /* USER CODE BEGIN 3 */
126
127 /* USER CODE END 3 */
128}
129static void MX_LPUART1_UART_Init(void)
130{
131
132 /* USER CODE BEGIN LPUART1_Init 0 */
133
134 /* USER CODE END LPUART1_Init 0 */
135
136 LL_LPUART_InitTypeDef LPUART_InitStruct = {0};
137
138 LL_GPIO_InitTypeDef GPIO_InitStruct = {0};
139
140 /* Peripheral clock enable */
141 LL_APB1_GRP2_EnableClock(LL_APB1_GRP2_PERIPH_LPUART1);
142
143 LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOB);
144 /**LPUART1 GPIO Configuration
145 PB10 ------> LPUART1_RX
146 PB11 ------> LPUART1_TX
147 */
148 GPIO_InitStruct.Pin = LL_GPIO_PIN_10;
149 GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
150 GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
151 GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
152 GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
153 GPIO_InitStruct.Alternate = LL_GPIO_AF_8;
154 LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
155
156 GPIO_InitStruct.Pin = LL_GPIO_PIN_11;
157 GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
158 GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
159 GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
160 GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
161 GPIO_InitStruct.Alternate = LL_GPIO_AF_8;
162 LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
163
164 /* LPUART1 DMA Init */
165
166 /* LPUART1_TX Init */
167 LL_DMA_SetPeriphRequest(DMA1, LL_DMA_CHANNEL_1, LL_DMAMUX_REQ_LPUART1_TX);
168
169 LL_DMA_SetDataTransferDirection(DMA1, LL_DMA_CHANNEL_1, LL_DMA_DIRECTION_MEMORY_TO_PERIPH);
170
171 LL_DMA_SetChannelPriorityLevel(DMA1, LL_DMA_CHANNEL_1, LL_DMA_PRIORITY_HIGH);
172
173 LL_DMA_SetMode(DMA1, LL_DMA_CHANNEL_1, LL_DMA_MODE_NORMAL);
174
175 LL_DMA_SetPeriphIncMode(DMA1, LL_DMA_CHANNEL_1, LL_DMA_PERIPH_NOINCREMENT);
176
177 LL_DMA_SetMemoryIncMode(DMA1, LL_DMA_CHANNEL_1, LL_DMA_MEMORY_INCREMENT);
178
179 LL_DMA_SetPeriphSize(DMA1, LL_DMA_CHANNEL_1, LL_DMA_PDATAALIGN_BYTE);
180
181 LL_DMA_SetMemorySize(DMA1, LL_DMA_CHANNEL_1, LL_DMA_MDATAALIGN_BYTE);
182
183 /* LPUART1_RX Init */
184 LL_DMA_SetPeriphRequest(DMA1, LL_DMA_CHANNEL_2, LL_DMAMUX_REQ_LPUART1_RX);
185
186 LL_DMA_SetDataTransferDirection(DMA1, LL_DMA_CHANNEL_2, LL_DMA_DIRECTION_PERIPH_TO_MEMORY);
187
188 LL_DMA_SetChannelPriorityLevel(DMA1, LL_DMA_CHANNEL_2, LL_DMA_PRIORITY_HIGH);
189
190 LL_DMA_SetMode(DMA1, LL_DMA_CHANNEL_2, LL_DMA_MODE_CIRCULAR);
191
192 LL_DMA_SetPeriphIncMode(DMA1, LL_DMA_CHANNEL_2, LL_DMA_PERIPH_NOINCREMENT);
193
194 LL_DMA_SetMemoryIncMode(DMA1, LL_DMA_CHANNEL_2, LL_DMA_MEMORY_INCREMENT);
195
196 LL_DMA_SetPeriphSize(DMA1, LL_DMA_CHANNEL_2, LL_DMA_PDATAALIGN_BYTE);
197
198 LL_DMA_SetMemorySize(DMA1, LL_DMA_CHANNEL_2, LL_DMA_MDATAALIGN_BYTE);
199
200 /* LPUART1 interrupt Init */
201 NVIC_SetPriority(LPUART1_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),0, 0));
202 NVIC_EnableIRQ(LPUART1_IRQn);
203
204 /* USER CODE BEGIN LPUART1_Init 1 */
205
206 /* USER CODE END LPUART1_Init 1 */
207 LPUART_InitStruct.PrescalerValue = LL_LPUART_PRESCALER_DIV1;
208 LPUART_InitStruct.BaudRate = 9600;
209 LPUART_InitStruct.DataWidth = LL_LPUART_DATAWIDTH_8B;
210 LPUART_InitStruct.StopBits = LL_LPUART_STOPBITS_1;
211 LPUART_InitStruct.Parity = LL_LPUART_PARITY_NONE;
212 LPUART_InitStruct.TransferDirection = LL_LPUART_DIRECTION_TX_RX;
213 LPUART_InitStruct.HardwareFlowControl = LL_LPUART_HWCONTROL_NONE;
214 LL_LPUART_Init(LPUART1, &LPUART_InitStruct);
215 LL_LPUART_SetTXFIFOThreshold(LPUART1, LL_LPUART_FIFOTHRESHOLD_1_8);
216 LL_LPUART_SetRXFIFOThreshold(LPUART1, LL_LPUART_FIFOTHRESHOLD_1_8);
217 LL_LPUART_DisableFIFO(LPUART1);
218 LL_LPUART_SetTXRXSwap(LPUART1, LL_LPUART_TXRX_SWAPPED);
219// LL_LPUART_EnableOverrunDetect(LPUART1);
220 // LL_LPUART_EnableDMADeactOnRxErr(LPUART1);
221
222 /* USER CODE BEGIN WKUPType LPUART1 */
223
224 /* USER CODE END WKUPType LPUART1 */
225
226 LL_LPUART_Enable(LPUART1);
227
228 /* Polling LPUART1 initialisation */
229 while((!(LL_LPUART_IsActiveFlag_TEACK(LPUART1))) || (!(LL_LPUART_IsActiveFlag_REACK(LPUART1))))
230 {
231 }
232 /* USER CODE BEGIN LPUART1_Init 2 */
233
234 //LL_LPUART_EnableIT_TXE_TXFNF(LPUART1);
235 /* Enable TC interrupts for RX */
236
237
238 /* Enable HT & TC interrupts for TX */
239 // LL_DMA_EnableIT_TC(DMA1, LL_DMA_CHANNEL_1);
240
241 lpuart_tx_tc_isr_clback = LPUART_TX_TC_ISR_CALLBACK;
242 //lpuart_rx_rne_isr_clback = &LPUART_RX_RXNE_ISR_CALLBACK;
243 lpuart_dma_tx_tc_isr_clback = LPUART_DMA_TX_TC_CALLBACK;
244 lpuart_dma_rx_tc_isr_clback = LPUART_DMA_RX_TC_CALLBACK;
245
246 //LL_LPUART_EnableDirectionRx(LPUART1);
247 LL_LPUART_EnableDirectionTx(LPUART1);
248 //LL_LPUART_EnableIT_RXNE_RXFNE(LPUART1);
249
250 /* USER CODE END LPUART1_Init 2 */
251
252}
253#ifndef INC_LPUART_H_
254#define INC_LPUART_H_
255
256#include "ring_buffer.h"
257
258#ifdef USE_FULL_ASSERT
259#include "stm32_assert.h"
260#else
261#define assert_param(expr) ((void)0U)
262#endif /* USE_FULL_ASSERT */
263
264uint8_t lpuart_start_tx(uint8_t* buff, uint16_t len );
265uint8_t LPUART_isTxFinished(void);
266void LPUART_clear_tx_finishedFlag();
267uint8_t lpuart_isRxBusy(void);
268uint8_t lpuart_isTxBusy(void);
269void lpuart_task();
270
271void LPUART_TX_TC_ISR_CALLBACK(void);
272void LPUART_DMA_TX_TC_CALLBACK(void);
273void LPUART_DMA_RX_TC_CALLBACK(void);
274
275#endif /* INC_LPUART_H_ */
276#include "lpuart.h"
277#include "string.h"
278#include "stm32g4xx_ll_lpuart.h"
279#include "stm32g4xx_ll_dma.h"
280
281#define SIZE_TX_BUFF 256
282#define SIZE_RX_BUFF 256
283#define SIZE_DMA_RX_BUFF 64
284
285
286static uint8_t rxBuf[SIZE_RX_BUFF];
287static uint8_t rxDMA_Buf[SIZE_DMA_RX_BUFF];
288static uint8_t txBuf[SIZE_TX_BUFF];
289RingBuffer lpuart_RX_ring_buff;
290static uint8_t* tempTxBuf;
291static uint16_t txLen = 0;
292
293
294static void setTxDataLengthDMA(uint16_t len);
295static void lpuart_transmit();
296static void lpuart_finished_tx();
297static void no_action();
298static void lpuart_rx();
299static void check_rx_dma_buff();
300
301static uint8_t ev_no_event(void);
302static uint8_t ev_txtc(void);
303static uint8_t ev_start_tx(void);
304static uint8_t ev_dmatxtc(void);
305static uint8_t ev_rx_read(void);
306static uint8_t ev_buff_full(void);
307
308
309typedef uint8_t (*t_event_func)(void);
310typedef void(*t_action_func)(void);
311typedef struct{
312 uint16_t txtc:1;
313 uint16_t tx_busy:1;
314 uint16_t dmatxtc:1;
315 uint16_t dmarxtc:1;
316 uint16_t start_tx:1;
317 uint16_t rx_read:1;
318 uint16_t buff_full:1;
319 uint16_t is_fsm_table_init:1;
320 uint16_t ext_rxBusyFlag:1;
321
322}t_event;
323
324typedef enum {INIT, READY, BUSY, COMPLETE, LPUART_ERROR}t_state;
325
326typedef struct{
327 t_state present_state;
328 t_event_func event1;
329 t_event_func event2;
330 t_action_func action1;
331 t_action_func action2;
332 t_state next_state;
333
334}t_fsm_row;
335
336typedef struct{
337 t_state current_state;
338 t_state previous_state;
339 t_fsm_row stt_row[7];
340 uint16_t number_of_rows;
341}t_fsm_table;
342
343
344t_event lpuart_event;
345
346uint8_t lpuart_isTxBusy(void){
347 return lpuart_event.tx_busy;
348}
349
350uint8_t lpuart_isRxBusy(){
351 return lpuart_event.ext_rxBusyFlag;
352}
353uint8_t ev_no_event(void){
354 return 1;
355}
356
357uint8_t ev_txtc(void){
358 return lpuart_event.txtc;
359}
360
361uint8_t ev_start_tx(void){
362 return lpuart_event.start_tx;
363}
364
365uint8_t ev_dmatxtc(void){
366 return lpuart_event.dmatxtc;
367}
368
369
370uint8_t ev_rx_read(void){
371 return lpuart_event.rx_read || lpuart_event.dmarxtc;
372}
373
374uint8_t ev_buff_full(void){
375 return lpuart_event.buff_full;
376}
377
378void no_action(){
379 return;
380}
381
382void lpuart_init(void){
383 memset(rxBuf, 0, (size_t)SIZE_RX_BUFF );
384 memset(rxDMA_Buf, 0, (size_t)SIZE_DMA_RX_BUFF );
385 memset(txBuf, 0, (size_t)SIZE_TX_BUFF );
386 RingBuffer_init(&lpuart_RX_ring_buff,rxBuf , (uint16_t)SIZE_RX_BUFF);
387
388 LL_LPUART_DisableIT_TC(LPUART1);
389 LL_LPUART_DisableIT_RXNE_RXFNE(LPUART1);
390 LL_LPUART_DisableDirectionRx(LPUART1);
391
392 LL_DMA_DisableIT_TC(DMA1, LL_DMA_CHANNEL_1); //tx
393 LL_DMA_DisableChannel(DMA1, LL_DMA_CHANNEL_1); //tx
394 LL_DMA_DisableIT_TC(DMA1, LL_DMA_CHANNEL_2); //rx
395 LL_DMA_DisableChannel(DMA1, LL_DMA_CHANNEL_2); //rx
396
397 /*TX buffer address attached to DMA channel1 */
398 LL_DMA_ConfigAddresses(DMA1, LL_DMA_CHANNEL_1,
399 (uint32_t)txBuf,
400 LL_LPUART_DMA_GetRegAddr(LPUART1, LL_LPUART_DMA_REG_DATA_TRANSMIT),
401 LL_DMA_GetDataTransferDirection(DMA1, LL_DMA_CHANNEL_1));
402 LL_DMA_SetDataLength(DMA1, LL_DMA_CHANNEL_1, SIZE_TX_BUFF);
403
404 /*RX buffer address attached to DMA channel2 */
405 LL_DMA_ConfigAddresses(DMA1, LL_DMA_CHANNEL_2,
406 LL_LPUART_DMA_GetRegAddr(LPUART1, LL_LPUART_DMA_REG_DATA_RECEIVE),
407 (uint32_t)rxDMA_Buf,
408 LL_DMA_GetDataTransferDirection(DMA1, LL_DMA_CHANNEL_2));
409 LL_DMA_SetDataLength(DMA1, LL_DMA_CHANNEL_2, SIZE_DMA_RX_BUFF);
410
411 LL_LPUART_EnableDMAReq_RX(LPUART1);
412 LL_DMA_EnableIT_TC(DMA1, LL_DMA_CHANNEL_2); //rx
413 LL_DMA_EnableIT_TE(DMA1, LL_DMA_CHANNEL_2);
414 LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_2); //rx
415
416 LL_LPUART_EnableDirectionRx(LPUART1);
417 lpuart_event.tx_busy = 0;
418}
419
420
421uint8_t lpuart_start_tx(uint8_t* buff, uint16_t len ){
422 if(!lpuart_event.tx_busy){
423 lpuart_event.tx_busy = 1;
424 if(len < SIZE_TX_BUFF){
425 lpuart_event.start_tx = 1;
426 tempTxBuf = buff;
427 txLen = len;
428 }else{
429 /* lpuart_event.start_tx = 0;
430 lpuart_event.buff_full = 1;*/
431 return 0;
432
433 }
434 return 1;
435 }else{
436 return 0;
437 }
438
439
440}
441
442void lpuart_transmit(){
443 memcpy(txBuf, tempTxBuf, txLen);
444 setTxDataLengthDMA(txLen);
445 LL_LPUART_EnableDMAReq_TX(LPUART1);
446 LL_LPUART_EnableDirectionTx(LPUART1);
447 LL_LPUART_EnableIT_TC(LPUART1);
448 LL_DMA_EnableIT_TC(DMA1, LL_DMA_CHANNEL_1);
449 LL_DMA_EnableIT_TE(DMA1, LL_DMA_CHANNEL_1);
450 LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_1);
451}
452
453
454void lpuart_finished_tx(){
455 LL_LPUART_DisableIT_TC(LPUART1);
456 LL_LPUART_DisableDirectionTx(LPUART1);
457 LL_DMA_DisableIT_TC(DMA1, LL_DMA_CHANNEL_1);
458 LL_DMA_DisableIT_TE(DMA1, LL_DMA_CHANNEL_1);
459 LL_DMA_DisableChannel(DMA1, LL_DMA_CHANNEL_1);
460 lpuart_event.txtc = 0;
461 lpuart_event.dmatxtc = 0;
462 lpuart_event.start_tx = 0;
463 lpuart_event.tx_busy = 0;
464}
465void setTxDataLengthDMA(uint16_t len){
466 LL_LPUART_DisableDirectionTx(LPUART1);
467 LL_DMA_DisableChannel(DMA1, LL_DMA_CHANNEL_1);
468 /* Clear all flags */
469 LL_DMA_ClearFlag_TC1(DMA1);
470 LL_DMA_ClearFlag_TE1(DMA1);
471 LL_DMA_SetDataLength(DMA1, LL_DMA_CHANNEL_1, len);
472}
473
474void check_rx_dma_buff(){
475 static uint16_t old_len = SIZE_DMA_RX_BUFF;
476 uint16_t current_len = LL_DMA_GetDataLength(DMA1, LL_DMA_CHANNEL_2);
477 if(old_len != current_len ){
478 if(current_len > 0){
479 lpuart_event.rx_read = 1;
480 }
481 }
482 old_len = current_len;
483}
484static uint16_t old_pos = 0;
485uint16_t pos = 0;
486void lpuart_rx(){
487 lpuart_event.ext_rxBusyFlag = 1;
488 if(lpuart_event.dmarxtc){
489 lpuart_event.dmarxtc = 0;
490 }
491 if(lpuart_event.rx_read){
492 lpuart_event.rx_read = 0;
493 }
494 pos = (uint16_t)SIZE_DMA_RX_BUFF - LL_DMA_GetDataLength(DMA1, LL_DMA_CHANNEL_2);
495 if(pos > SIZE_DMA_RX_BUFF ){
496 pos = SIZE_DMA_RX_BUFF;
497 }
498 if(pos != old_pos /* || (pos == 0 && old_pos == 0)*/){
499 if (pos > old_pos) {
500 RingBuffer_writeMeasBlock(&lpuart_RX_ring_buff,&rxDMA_Buf[old_pos],(pos - old_pos));
501 }else{
502 RingBuffer_writeMeasBlock(&lpuart_RX_ring_buff,&rxDMA_Buf[old_pos],((uint16_t)SIZE_DMA_RX_BUFF - old_pos));
503 if(pos > 0){
504 RingBuffer_writeMeasBlock(&lpuart_RX_ring_buff,&rxDMA_Buf[0],pos);
505 }
506 }
507 }
508 old_pos = pos;
509 lpuart_event.ext_rxBusyFlag = 0;
510
511}
512t_fsm_row rowInit = {INIT,ev_no_event, ev_no_event, lpuart_init, no_action, READY };
513t_fsm_row rowReady = {READY,ev_start_tx, ev_no_event, lpuart_transmit, no_action, BUSY };
514t_fsm_row rowBusy = {BUSY,ev_dmatxtc, ev_txtc, lpuart_finished_tx, no_action, READY};
515
516
517t_fsm_table lpuart_fsm_table = {INIT,INIT, {}};
518void fsm_table_init(){
519 lpuart_fsm_table.current_state = INIT;
520 lpuart_fsm_table.stt_row[0] = rowInit;
521 lpuart_fsm_table.stt_row[1] = rowReady;
522 lpuart_fsm_table.stt_row[2] = rowBusy;
523 lpuart_event.is_fsm_table_init = 1;
524 lpuart_fsm_table.number_of_rows = 3;
525}
526
527void lpuar_tx_fsm(){
528 uint8_t ev = 0;
529
530 for(uint16_t rowIndex = 0; rowIndex < lpuart_fsm_table.number_of_rows; rowIndex++){
531
532 if(lpuart_fsm_table.current_state == lpuart_fsm_table.stt_row[rowIndex].present_state){
533 ev = lpuart_fsm_table.stt_row[rowIndex].event1() && lpuart_fsm_table.stt_row[rowIndex].event2();
534 if(ev){
535 lpuart_fsm_table.stt_row[rowIndex].action1();
536 lpuart_fsm_table.stt_row[rowIndex].action2();
537 lpuart_fsm_table.current_state = lpuart_fsm_table.stt_row[rowIndex].next_state;
538 lpuart_fsm_table.previous_state = lpuart_fsm_table.stt_row[rowIndex].present_state;
539 }
540
541 }
542 }
543}
544
545void lpuar_read_task(){
546 check_rx_dma_buff();
547 if(ev_rx_read()){
548 lpuart_rx();
549 }
550
551}
552void lpuart_task(){
553
554 if(!lpuart_event.is_fsm_table_init){
555 fsm_table_init();
556 }
557 //else{
558 lpuar_tx_fsm();
559 lpuar_read_task();
560 //}
561
562}
563void LPUART_TX_TC_ISR_CALLBACK(void){
564 lpuart_event.txtc = 1;
565 LL_LPUART_ClearFlag_TC(LPUART1);
566
567}
568
569void LPUART_DMA_TX_TC_CALLBACK(void){
570 lpuart_event.dmatxtc = 1;
571 LL_DMA_ClearFlag_TC1(DMA1);
572}
573
574void LPUART_DMA_RX_TC_CALLBACK(void){
575 if(LL_DMA_IsActiveFlag_TC2(DMA1)){
576 LL_DMA_ClearFlag_TC2(DMA1);
577 lpuart_event.dmarxtc = 1;
578 lpuart_rx();
579 }
580 if(LL_DMA_IsActiveFlag_TE2(DMA1)){
581 LL_DMA_ClearFlag_TE2(DMA1);
582 }
583
584}
585/* Includes ------------------------------------------------------------------*/
586#include "main.h"
587#include "stm32g4xx_it.h"
588#include "lpuart.h"
589
590 extern _func_clbck lpuart_tx_tc_isr_clback;
591//_func_clbck lpuart_rx_rne_isr_clback = LPUART_RX_RXNE_ISR_CALLBACK;
592 extern _func_clbck lpuart_dma_tx_tc_isr_clback;
593 extern _func_clbck lpuart_dma_rx_tc_isr_clback;
594
595void HardFault_Handler(void)
596{
597 /* USER CODE BEGIN HardFault_IRQn 0 */
598
599 /* USER CODE END HardFault_IRQn 0 */
600 while (1)
601 {
602 /* USER CODE BEGIN W1_HardFault_IRQn 0 */
603 /* USER CODE END W1_HardFault_IRQn 0 */
604 }
605}
606
607void DMA1_Channel2_IRQHandler(void)
608{
609 /* USER CODE BEGIN DMA1_Channel2_IRQn 0 */
610 lpuart_dma_rx_tc_isr_clback();
611 //LPUART_DMA_RX_TC_CALLBACK();
612 /* USER CODE END DMA1_Channel2_IRQn 0 */
613
614 /* USER CODE BEGIN DMA1_Channel2_IRQn 1 */
615
616 /* USER CODE END DMA1_Channel2_IRQn 1 */
617}
618 rxIndex = RingBuffer_available(&lpuart_RX_ring_buff);
619 for(i = rxOldIndex ; i < (rxIndex+rxOldIndex) ; i++ ){
620 rxBuff[i] = RingBuffer_readMeas(&lpuart_RX_ring_buff);
621 ....
622 }
623
It was also pointed out that function pointer variable shouldn't be in flash.
QUESTION
Running into an error when trying to pip install python-docx
Asked 2022-Feb-06 at 17:04I just did a fresh install of windows to clean up my computer, moved everything over to my D drive and installed Python through Windows Store (somehow it defaulted to my C drive, so I left it there because Pycharm was getting confused about its location), now I'm trying to pip install the python-docx module for the first time and I'm stuck. I have a recent version of Microsoft C++ Visual Build Tools installed. Excuse me for any irrelevant information I provided, just wishing to be thorough. Here's what's returning in command:
1.>pip install python-docx
2Collecting python-docx
3 Using cached python-docx-0.8.11.tar.gz (5.6 MB)
4 Preparing metadata (setup.py) ... done
5Collecting lxml>=2.3.2
6 Using cached lxml-4.6.3.tar.gz (3.2 MB)
7 Preparing metadata (setup.py) ... done
8Using legacy 'setup.py install' for python-docx, since package 'wheel' is not installed.
9Using legacy 'setup.py install' for lxml, since package 'wheel' is not installed.
10Installing collected packages: lxml, python-docx
11 Running setup.py install for lxml ... error
12 ERROR: Command errored out with exit status 1:
13 command: 'C:\Users\cahez\AppData\Local\Microsoft\WindowsApps\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\python.exe' -u -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\\Users\\cahez\\AppData\\Local\\Temp\\pip-install-8rz9vrlv\\lxml_69e9fa188fd042d6953641882e4b3a17\\setup.py'"'"'; __file__='"'"'C:\\Users\\cahez\\AppData\\Local\\Temp\\pip-install-8rz9vrlv\\lxml_69e9fa188fd042d6953641882e4b3a17\\setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record 'C:\Users\cahez\AppData\Local\Temp\pip-record-xpg_v_i_\install-record.txt' --single-version-externally-managed --user --prefix= --compile --install-headers 'C:\Users\cahez\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\Include\lxml'
14 cwd: C:\Users\cahez\AppData\Local\Temp\pip-install-8rz9vrlv\lxml_69e9fa188fd042d6953641882e4b3a17\
15 Complete output (76 lines):
16 Building lxml version 4.6.3.
17 Building without Cython.
18 Building against pre-built libxml2 andl libxslt libraries
19 running install
20 C:\Users\cahez\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\setuptools\command\install.py:34: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools.
21 warnings.warn(
22 running build
23 running build_py
24 creating build
25 creating build\lib.win-amd64-3.10
26 creating build\lib.win-amd64-3.10\lxml
27 copying src\lxml\builder.py -> build\lib.win-amd64-3.10\lxml
28 copying src\lxml\cssselect.py -> build\lib.win-amd64-3.10\lxml
29 copying src\lxml\doctestcompare.py -> build\lib.win-amd64-3.10\lxml
30 copying src\lxml\ElementInclude.py -> build\lib.win-amd64-3.10\lxml
31 copying src\lxml\pyclasslookup.py -> build\lib.win-amd64-3.10\lxml
32 copying src\lxml\sax.py -> build\lib.win-amd64-3.10\lxml
33 copying src\lxml\usedoctest.py -> build\lib.win-amd64-3.10\lxml
34 copying src\lxml\_elementpath.py -> build\lib.win-amd64-3.10\lxml
35 copying src\lxml\__init__.py -> build\lib.win-amd64-3.10\lxml
36 creating build\lib.win-amd64-3.10\lxml\includes
37 copying src\lxml\includes\__init__.py -> build\lib.win-amd64-3.10\lxml\includes
38 creating build\lib.win-amd64-3.10\lxml\html
39 copying src\lxml\html\builder.py -> build\lib.win-amd64-3.10\lxml\html
40 copying src\lxml\html\clean.py -> build\lib.win-amd64-3.10\lxml\html
41 copying src\lxml\html\defs.py -> build\lib.win-amd64-3.10\lxml\html
42 copying src\lxml\html\diff.py -> build\lib.win-amd64-3.10\lxml\html
43 copying src\lxml\html\ElementSoup.py -> build\lib.win-amd64-3.10\lxml\html
44 copying src\lxml\html\formfill.py -> build\lib.win-amd64-3.10\lxml\html
45 copying src\lxml\html\html5parser.py -> build\lib.win-amd64-3.10\lxml\html
46 copying src\lxml\html\soupparser.py -> build\lib.win-amd64-3.10\lxml\html
47 copying src\lxml\html\usedoctest.py -> build\lib.win-amd64-3.10\lxml\html
48 copying src\lxml\html\_diffcommand.py -> build\lib.win-amd64-3.10\lxml\html
49 copying src\lxml\html\_html5builder.py -> build\lib.win-amd64-3.10\lxml\html
50 copying src\lxml\html\_setmixin.py -> build\lib.win-amd64-3.10\lxml\html
51 copying src\lxml\html\__init__.py -> build\lib.win-amd64-3.10\lxml\html
52 creating build\lib.win-amd64-3.10\lxml\isoschematron
53 copying src\lxml\isoschematron\__init__.py -> build\lib.win-amd64-3.10\lxml\isoschematron
54 copying src\lxml\etree.h -> build\lib.win-amd64-3.10\lxml
55 copying src\lxml\etree_api.h -> build\lib.win-amd64-3.10\lxml
56 copying src\lxml\lxml.etree.h -> build\lib.win-amd64-3.10\lxml
57 copying src\lxml\lxml.etree_api.h -> build\lib.win-amd64-3.10\lxml
58 copying src\lxml\includes\c14n.pxd -> build\lib.win-amd64-3.10\lxml\includes
59 copying src\lxml\includes\config.pxd -> build\lib.win-amd64-3.10\lxml\includes
60 copying src\lxml\includes\dtdvalid.pxd -> build\lib.win-amd64-3.10\lxml\includes
61 copying src\lxml\includes\etreepublic.pxd -> build\lib.win-amd64-3.10\lxml\includes
62 copying src\lxml\includes\htmlparser.pxd -> build\lib.win-amd64-3.10\lxml\includes
63 copying src\lxml\includes\relaxng.pxd -> build\lib.win-amd64-3.10\lxml\includes
64 copying src\lxml\includes\schematron.pxd -> build\lib.win-amd64-3.10\lxml\includes
65 copying src\lxml\includes\tree.pxd -> build\lib.win-amd64-3.10\lxml\includes
66 copying src\lxml\includes\uri.pxd -> build\lib.win-amd64-3.10\lxml\includes
67 copying src\lxml\includes\xinclude.pxd -> build\lib.win-amd64-3.10\lxml\includes
68 copying src\lxml\includes\xmlerror.pxd -> build\lib.win-amd64-3.10\lxml\includes
69 copying src\lxml\includes\xmlparser.pxd -> build\lib.win-amd64-3.10\lxml\includes
70 copying src\lxml\includes\xmlschema.pxd -> build\lib.win-amd64-3.10\lxml\includes
71 copying src\lxml\includes\xpath.pxd -> build\lib.win-amd64-3.10\lxml\includes
72 copying src\lxml\includes\xslt.pxd -> build\lib.win-amd64-3.10\lxml\includes
73 copying src\lxml\includes\__init__.pxd -> build\lib.win-amd64-3.10\lxml\includes
74 copying src\lxml\includes\etree_defs.h -> build\lib.win-amd64-3.10\lxml\includes
75 copying src\lxml\includes\lxml-version.h -> build\lib.win-amd64-3.10\lxml\includes
76 creating build\lib.win-amd64-3.10\lxml\isoschematron\resources
77 creating build\lib.win-amd64-3.10\lxml\isoschematron\resources\rng
78 copying src\lxml\isoschematron\resources\rng\iso-schematron.rng -> build\lib.win-amd64-3.10\lxml\isoschematron\resources\rng
79 creating build\lib.win-amd64-3.10\lxml\isoschematron\resources\xsl
80 copying src\lxml\isoschematron\resources\xsl\RNG2Schtrn.xsl -> build\lib.win-amd64-3.10\lxml\isoschematron\resources\xsl
81 copying src\lxml\isoschematron\resources\xsl\XSD2Schtrn.xsl -> build\lib.win-amd64-3.10\lxml\isoschematron\resources\xsl
82 creating build\lib.win-amd64-3.10\lxml\isoschematron\resources\xsl\iso-schematron-xslt1
83 copying src\lxml\isoschematron\resources\xsl\iso-schematron-xslt1\iso_abstract_expand.xsl -> build\lib.win-amd64-3.10\lxml\isoschematron\resources\xsl\iso-schematron-xslt1
84 copying src\lxml\isoschematron\resources\xsl\iso-schematron-xslt1\iso_dsdl_include.xsl -> build\lib.win-amd64-3.10\lxml\isoschematron\resources\xsl\iso-schematron-xslt1
85 copying src\lxml\isoschematron\resources\xsl\iso-schematron-xslt1\iso_schematron_message.xsl -> build\lib.win-amd64-3.10\lxml\isoschematron\resources\xsl\iso-schematron-xslt1
86 copying src\lxml\isoschematron\resources\xsl\iso-schematron-xslt1\iso_schematron_skeleton_for_xslt1.xsl -> build\lib.win-amd64-3.10\lxml\isoschematron\resources\xsl\iso-schematron-xslt1
87 copying src\lxml\isoschematron\resources\xsl\iso-schematron-xslt1\iso_svrl_for_xslt1.xsl -> build\lib.win-amd64-3.10\lxml\isoschematron\resources\xsl\iso-schematron-xslt1
88 copying src\lxml\isoschematron\resources\xsl\iso-schematron-xslt1\readme.txt -> build\lib.win-amd64-3.10\lxml\isoschematron\resources\xsl\iso-schematron-xslt1
89 running build_ext
90 building 'lxml.etree' extension
91 error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/
92 ----------------------------------------
93ERROR: Command errored out with exit status 1: 'C:\Users\cahez\AppData\Local\Microsoft\WindowsApps\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\python.exe' -u -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\\Users\\cahez\\AppData\\Local\\Temp\\pip-install-8rz9vrlv\\lxml_69e9fa188fd042d6953641882e4b3a17\\setup.py'"'"'; __file__='"'"'C:\\Users\\cahez\\AppData\\Local\\Temp\\pip-install-8rz9vrlv\\lxml_69e9fa188fd042d6953641882e4b3a17\\setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record 'C:\Users\cahez\AppData\Local\Temp\pip-record-xpg_v_i_\install-record.txt' --single-version-externally-managed --user --prefix= --compile --install-headers 'C:\Users\cahez\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\Include\lxml' Check the logs for full command output.
94
ANSWER
Answered 2022-Feb-06 at 17:04One of the dependencies for python-docx
is lxml
. The latest stable version of lxml
is 4.6.3, released on March 21, 2021. On PyPI there is no lxml wheel for 3.10, yet. So it try to compile from source and for that Microsoft Visual C++ 14.0 or greater is required, as stated in the error.
However you can manually install lxml
, before install python-docx
. Download and install unofficial binary from Gohlke
Alternatively you can use pipwin to install it from Gohlke. Note there may still be problems with dependencies for lxml
.
Of course, you can also downgrade to python3.9.
EDIT: As of 14 Dec 2021 the latest lxml version 4.7.1 supports python 3.10
Community Discussions contain sources that include Stack Exchange Network
Tutorials and Learning Resources in Build Tool
Tutorials and Learning Resources are not available at this moment for Build Tool